Doodlecast — AI Video Engine
Procedural worlds plus a matchstick-figure film pipeline, aiming at end-to-end generation from script to 20-minute long-form video.
- Role
- Architect
- Year
- 2026
- Stack
- TypeScriptThree.jsCanvasRapier3DLLMTTS
The hard part of AI-generated long-form video is that looking right and being right are two different things — a single beautiful frame says nothing about whether a twenty-minute film keeps character proportions, lighting, and lip-sync consistent with the dialogue all the way through. Scrubbing frame by frame by hand still works for a minute of footage; at feature length it becomes an impossible amount of manual labor, and the eye is bad at catching subtle proportion drift, clipping, or mistimed lip-sync anyway. Doodlecast's approach is to generate a film as a real run inside a procedural world, not as frames drawn and stitched one at a time.
The engine's core is a procedural big world: scenes are organized with spatial hashing, holding 100k+ objects in a single scene without dropping frames. Camera, stage, character, TTS dialogue, and captions each live on their own track, aligned by keyframes into a real shot-by-shot timeline rather than a script paired with a concept image. Generation runs on two legs: a 2D pass renders matchstick-figure sketches to validate pacing quickly, and a 3D pass uses Rapier3D-driven physics for texture-quality shots. An LLM handles the script and shot list, TTS handles narration and dialogue, and the two are duration-matched and written straight back into the timeline. A twenty-minute film renders in shot-based fragments, each encoded independently and then stitched together, so a crash mid-render costs one fragment instead of a full restart.
Frame-level QA is its own stage in the pipeline: after each frame is generated, code checks for zeroed data, layout overruns, and distorted character proportions before anyone eyeballs the cut. Across a 42,000-frame internal test set, this stage auto-catches 96.7% of bad frames. Single-scene object capacity, indexed by spatial hashing, holds at 128,000 while staying steady at 60fps in the editor. A 20-minute film splits into 96 shot-based fragments, so a failed fragment only needs a partial re-render. The ratio of script read-through time to end-to-end generation time holds around 1:4.3.
The pipeline's stance is to push how good it looks as far as possible into something code can verify — QA and fragmented rendering are foundational to the engine, not an inspection bolted on after the cut is done. The current limits are just as clear: twenty minutes is a target, not a reliable daily output, and the 3D branch's physical realism is still being tuned.
Highlights
- Procedural big-world engine (spatial hashing, 100k+ objects)
- Code-level frame verification: data-zero / layout / character auto-checks
- 2D / 3D dual track, LLM scripting + TTS narration

