Inspiration

Every week there's a new model, a new framework and a new "you're already behind" post. I wanted to make a film about that feeling: trying to keep up with a technology that is accelerating faster than any person can learn. The contest theme was speed, so I made speed the villain and the punchline, and built the whole film so that speed literally drives it.

What it is

A student writes LEARN AI. in his notebook. Notifications pile up, so he types faster, watches tutorials at 16x and builds an AI agent to learn for him. The agent prints a personalised roadmap of 847 skills, which is obsolete before he finishes his coffee. At peace for the first time, he walks to the door and whispers "Finally. I'm caught up." The walls of his bedroom fall flat. He's standing on a conveyor belt among thousands of identical students, all chasing a glowing finish line called CAUGHT UP that moves away faster than any of them can follow.

SKILL ISSUE. HUMANITY: STILL IN BETA.

How I built it

There's no hand-keyed animation and no downloaded assets. One command rebuilds the entire Blender project from code in about 30 seconds:

  • One timing core (pure Python) holds every shot and story beat. Blender, the screen-graphics generator and the audio synthesiser all read it, so picture, screens and sound can't drift out of sync.
  • A speed controller: one 0-to-1 curve \( s(f) \) per frame, with derived channels for typing, the clock, the clutter, music tempo, light pulses, camera shake, the conveyor belts and the finish line.
  • Geometry Nodes crowd: 11 lanes × 297 desk stations riding an analytic oval track, plus a field of 24 more loops for the final pull-back.
  • The character: the head and hair are signed-distance sculpts meshed with OpenVDB (using the MIT-licensed bx_sculpt from scenario-labs/skills). He's driven by an analytic two-bone IK solver that bakes ordinary bone keys, with a shape-keyed mouth projected onto the face.
  • Screens: about 1,800 frames of UI, handwriting and stadium graphics drawn with Pillow from the same beat table.
  • Sound: score and SFX synthesised with numpy, with the music tempo following the speed curve.
  • Pipeline: FFmpeg assembly, a 14-point delivery validator, and a ray-cast audit that flags anything blocking a camera.

The speed channels are deliberately different response curves of the same \( s \):

$$\text{typing} = 2 + 15\,s^{1.35}\ \tfrac{\text{taps}}{\text{s}} \qquad \text{clock} = 16\,s^{2.6}\ \tfrac{\text{min}}{\text{frame}} \qquad \text{tempo} = 84 + 96\,s^{0.9}\ \text{BPM}$$

The joke of the ending is also math. The belt moves at \( v = 0.5 + 3s \) m/s, and the finish line recedes at

$$v_{\text{gap}} = 6 + 1.4\,v \;>\; v \quad \text{for every } v \ge 0$$

so CAUGHT UP is unreachable by construction. Stress only accumulates, \( \sigma(f) = \sum_{k \le f} s(k)^{1.2} \), and it drives his eye bags, messy hair and heavier eyelids.

# speed.py (simplified): every system reads the same curve
typing_rate = 2 + 15 * s ** 1.35
gap_speed   = 6 + 1.4 * belt_speed   # always faster than the belt

Challenges

  • A 4 GB laptop GPU. EEVEE at 1080p took 6–11 s per frame, and Blender crashed once after frame 491. I switched to resumable rendering in 40-frame chunks with automatic retry.
  • Readability. The first cut was too fast: viewers didn't follow machine → roadmap → printout → obsolete. I retimed Act III so each beat holds 0.8–1.6 s, split the printer moment into two calm shots, and wrote a ray-cast audit that caught cameras sitting inside a book tower and inside his hair.
  • Physics vs. readability. Real printers print the top of the page first, so the hanging roadmap read upside down. Flipping the print along the paper made it upright for the audience.
  • The face. It took three designs. A long-nosed caricature didn't work. A round, friendly design with a button nose and big eyes did. Along the way, one tilted hairline cut shaved the back of his head (a "garrison cap"), and the fix was a hair shell that follows the skull.
  • Blender 5.2 API changes: new Geometry Nodes input paths, slotted actions, compositor node groups, and shape keys that default to 1.0.

What we learned

  • Speed works best as a system, not an effect: one curve with a different response for each thing it drives makes the whole film accelerate as one.
  • Show the film to people who have never seen it. They found every unclear moment.
  • Deterministic, seeded code makes every change reproducible: change a frame number, rebuild, and picture, screens and sound all follow.

Disclosure

The film was produced with an AI coding agent (Claude by Anthropic, in Claude Code), which wrote all the code that generates it. No generative image, video, 3D or music models were used, and no third-party 3D, texture, music or sound assets. The two short voice lines are Windows' built-in offline text-to-speech, heavily processed. Fonts: Inter (OFL) and DejaVu Sans Mono. Full details are in the repository (docs/asset_disclosures.md).

Built With

  • blender
  • bpy
  • claude
  • claude-code
  • eevee
  • ffmpeg
  • geometry-nodes
  • git
  • inverse-kinematics
  • numpy
  • openvdb
  • pillow
  • procedural-animation
  • procedural-generation
  • python
  • signed-distance-fields
  • windows-sapi
Share this project:

Updates

Submission history