Inspiration
We kept seeing the same gap in the "AI world" wave: text-to-world tools are magical but abstract: you type words and hope. Meanwhile the most natural creative act on earth is picking up a mar ker and drawing something. We wanted the shortest possible path from a scribble on a piece of p aper to a real 3D thing you can walk around inside. No modeling software, no app install, no login — just draw, point your phone, and step into it.
What it does
Sublime turns a marker drawing on paper into an explorable 3D world, entirely in your phone's br owser.
- Draw any object on a sheet of paper with a marker.
- Point your phone at it. Sublime detects the page in real time, hugs its edges with an on- screen outline, and captures a deskewed, cropped scan of your sketch.
- Watch it come to life. An AI render "develops" over your sketch, turning the flat drawing into a realistic image.
- It becomes 3D. That image is turned into a textured 3D model that stands on the physical page in AR, at paper scale, and tracks the paper as you move the phone around it. Scale it up, restyle it.
- Step inside. Describe an environment in a sentence and the table falls away — you're stan ding in a generated World Labs Marble world with your object living inside it. Tap the object an d it comes alive.
The whole thing runs in a mobile web browser. No install.
How we built it
Client (Vite + TypeScript + three.js), running on the phone:
- Paper detection in a Web Worker using OpenCV.js — RGBA→HSV segmentation, contour finding, and 4-gon fitting at ~30 detections/sec on a downscaled frame.
- Planar pose solved from scratch in JS: a DLT homography decomposed against assumed camera
intrinsics (stock OpenCV.js ships no
solvePnP), round-trip-verified to ~1e-16. - Smooth AR via a transparent WebGL layer over the camera feed, with the projection matched to the camera intrinsics so models land pixel-exact on the page. Detection only sets a target; a 60fps loop lerps/slerps toward it, so tracking stays buttery regardless of detection rate.
- Gaussian-splat worlds rendered with Spark, with the Tripo GLB comp ene.
Server (Node + Express) orchestrating three paid generative APIs:
- Google Gemini — sketch → realistic image render.
- Tripo — image → textured 3D GLB (plus retexture for restyling).
- World Labs Marble — a text prompt → a full explorable gaussian-spl
- A content-hash disk cache means re-scanning the same drawing costs zero credits — essentia l for rehearsing a live demo.
Windows-to-phone testing was done over a cloudflared tunnel so the pho
TTPS dev server directly.
Challenges we ran into
- Paper detection on a real desk. Our first detector thresholded on brightness — which compl etely failed on a light wood desk where the white paper is nearly as bri "paper" quad ballooned to the whole tabletop. The fix was to segment on paper-ness, not bright ness: a saturation mask (neutral paper vs. chromatic wood) AND a value table), which are complementary across surfaces. That one insight — it was a detection problem, not a warp problem — unblocked the entire scan step.
- No
solvePnP. Stock OpenCV.js doesn't include it, so we hand-rolled the homography solve and pose decomposition in JavaScript and validated it against synthetic - Tracking jitter. Raw per-frame detection is noisy; the target-plus-lerp/slerp render loop was what made the model feel glued to the page instead of vibrating.
- Model size vs. speed. A 15MB GLB took 8+ seconds just to download on the phone — we tuned
Tripo's
face_limitand tier to get a model visible in seconds. - The "toy from above" look. A world generated from an overhead phone shot looks like a dior ama. We added a virtual eye-level camera you place in AR to bake a prope nt around the object.
Accomplishments that we're proud of
- A complete sketch → realistic render → 3D model → explorable world pipeline that runs on a phone in the browser, with no app install.
- Real-time paper tracking with a from-scratch planar pose solver — no black-box AR SDK.
- Chaining three separate generative AI services (Gemini, Tripo, Mar that feels like one seamless piece of magic.
- The model literally stands on your physical drawing at the right s e — the moment that makes people go "wait, what."
What we learned
- Gaussian splatting and the Spark renderer — a genuinely new way to represent and stream 3D sce nes to phones.
- The World Labs Marble text-to-world API, and how to composite classic mesh geometry (Tripo GLB s) inside a splat world.
- Hard-won computer-vision intuition: the right feature to segment on matters far more than th e algorithm downstream — and the smoothing layer between raw detection a eel" actually lives.
- How to design an integration contract so a two-person team can build t pipeline side fully independently against mocks, and integrate by flipping a flag instead of wr iting glue at 4am.
What's next for Sublime
- Multiple drawings on one sheet, each becoming its own tracked mode
- In-AR camera baking to author richer, more coherent first-person worlds around any object.
- Save, re-place, and share — a library of your creations you can dr nd shareable world links.
- Tighter object/world coherence (lighting, scale, grounding) and a nati tracking.
- Multiplayer: two people drawing into the same shared world.
Built With
- ar
- cloudflare
- computer-vision
- css
- express.js
- gaussian-splatting
- google-gemini
- html
- javascript
- node.js
- opencv.js
- particle
- three.js
- tripo
- typescript
- vercel
- vite
- webgl
- world-labs-marble
Log in or sign up for Devpost to join the conversation.