Today’s frontier models can do some pretty incredible things with animation. My first real dose of it was the axial-flux motor. I prompted Fable’s Mythos to make a The Way Things Work version of Mercedes-Benz’s new large-scale-production motor.
If you would rather skip straight to the machinery, the interactive Cinematic Canvas demos are here.
You can play with the demonstration here, and the source is on GitHub. I also shared it on Hacker News.
The Time Machine
Later, with some subscription quota tokens to burn, I got it in my head that Contextify needed an animation. The documentation page boldly offers to bring your AI coding history Back to the Future. Naturally, Doc Brown’s DeLorean Time Machine would take off from those words.
The prompt was not simply to make it fly. I wanted it to go “into the page, but in an arc.” The camera would sit roughly 45 degrees up and to the side. That turned into a little flight lab with controls for ignition, hover, pitch, wobble, placement, flames and bloom.
You can open the Time Machine flight lab directly.

The first motion had a nasty nose-up jerk. I eventually took the pitch cap from 28 degrees down to 7.5. Then I built a debug view that plotted yaw, pitch, roll, horizontal speed and altitude from the same motion engine that drew the car. It is hard to argue with a graph of your tiny time machine having a seizure.

Well, once I had delivered that, I had the bug. I wondered how complicated I could get in making web-based semi-3D animations of films. This tapped into my long-held belief that beloved intellectual property will eventually become fully immersive and interactive. See also my more recent comment on generative AI as an existential threat to Star Wars. Many people would not use the word threat. Perhaps liberation?
Cinematic Canvas Workbench
I came up with the name “Cinematic Canvas Workbench.” According to the project’s AGENTS.md, it “turns written sequences and visual references into deterministic, inspectable 3D-on-canvas scenes.”
I am not sure how I got to it, but the first scene that seemed complicated enough was the gauntlet from Mel Gibson’s Apocalypto.
I spent enough quota on it that I had to turn down a colleague’s request to run a pull request through my spiced-up /thermo-nuclear-code-review. Priorities.
I cannot defend the filmmaker’s choices about cultural representation or historical grounding. That problem was on my mind while I worked. A Portuguese-language FRRRKguys essay covered body modification in the film. The Frock Flicks piece covered the production’s mix of archaeological research and invention. Both helped me separate researched details from movie invention. They do not make the film historically neutral.
The movie is extremely intense and has some incredible action sequences, not least the gauntlet the captives are forced to run. I do not think discussing the setup spoils the film, but the material below shows how that sequence ends. If you have not seen it, consider watching it first.
You can open the interactive Captive Gauntlet output directly.
Build the Whole Ugly Version First
The workbench plan was deliberately proxy-first.
The rough order was:
- Lock the scene boundary, evidence and named beats.
- Build a deterministic authoring harness where every frame can be reached by scrubbing.
- Block the entire composition with simple geometry.
- Tune composition, paths, gait, ballistics, impacts, crowds and camera in diagnostic views that all use the same scene state.
- Connect the beats into one uninterrupted low-resolution animatic.
- Refine movement and physics, then replace proxies with reusable low-detail 3D models.
- Add effects and polish only after the whole sequence reads.
Directing the Model
That plan sounds more technically grounded than my role really was. My role was closer to creative director. I described the full sequence, asked for research on clothing and injuries, said the captives should begin held in restraints, and set the endpoint at the maize. When the intake questions became tedious, I told the model to infer the remaining choices and bring me a complete low-resolution animatic.
Much of the useful prompting looked like notes on dailies. I would watch a pass, take screenshots, and point at the thing that broke the illusion. One note said:
The “head” circle is not properly hidden by hair when facing away, except sometimes.
Another said:
When a runner “dies” it lays on the ground but has a “beaver tail,” which perhaps is its body cylinder not getting rotated?
Those were imprecise diagnoses, but useful direction. The model traced the first problem to camera-dependent drawing order. It traced the second to a short, fat piece of prone hair geometry. My job was to keep asking whether it looked cool, whether the action read, and whether it felt authentic to the film.
This was not one model in one chat. Fable’s Mythos made the motor demonstration. For the DeLorean, I used Claude Code with Fable 5. Claude Opus 4.8 drove the Gauntlet’s final visual pass. Review included Fable 5 and ChatGPT High, while Codex handled some implementation and verification.


This first recording is the early proxy pass I sent to a friend. It proved that the release and crossfire could read in a wide static view, but it only covered part of the sequence.
As the beats became more physical, I had to sidetrack and add camera-motion behavior to the workbench. The feature needed to take one camera view, accept another for the next beat, and interpolate between them. Manual overrides would remain possible. That became an eight-keyframe camera move, one for each named story beat from B0 through B7. A shortest-direction yaw rule kept the camera from occasionally spinning the long way around.
The same scene function, or sampler, drives playback, reverse scrubbing, the camera, the diagnostic overlays and the proof images. There is no separate hand-drawn trail or camera trick covering up different scene math.

What “3D” Means Here
For the Gauntlet, the 3D is real but modest. JavaScript stores each joint, projectile and camera position as x, y and z coordinates. A small perspective function rotates those points into the camera’s view and projects them onto the page. The browser’s 2D canvas drawing API then draws circles, rounded line segments, polylines and ground polygons. CSS styles the controls and page around the canvas; it does not render the scene.
The renderer sorts those simple parts from farthest to nearest and paints them in that order. This is the old painter’s algorithm, which explains the head-and-hair bug: at some camera pitches, their average depths swapped and the head was painted on top. Linked head and hair now share a depth anchor with an explicit near/far relationship.
The projection math is established. Building this small renderer directly on a 2D canvas is the bespoke part. A larger web 3D project would often reach for something like Three.js, with a scene graph, perspective camera and WebGL renderer. The custom route here keeps the output dependency-free, inspectable and exportable as one HTML file. It also means the workbench must solve drawing order, camera fit and primitive geometry itself.

The scene is unfinished. A full proxy animatic is there, including the movement, projectiles, wound, reversal, camera beats and maize exit. Model refinement and final effects remain undone.
Still, it is a surprisingly recognizable rendition of the sequence for a web-friendly 3D thingy made out of simple shapes. More importantly, it is inspectable. At any scrubbed time, the workbench can say where a runner is and how far they have traveled. It can show which projectile passed them, what the camera is doing and which story beat is active.
I am not sure, but I think the same structure could be flipped around and made into a game. That is the part that keeps pulling me back to the larger idea. Once a film scene is represented as characters, movement, space and beats, it stops being a flat strip of pixels. Watching it may be only one of the things you can do with it.
The goal is to open-source Cinematic Canvas Workbench. That has not happened yet. If you would be interested in using it or contributing to it, email me at the address on my Hacker News profile.
I first wrote a shorter version of this in a Hacker News comment.