← projects

Project case study

How we made the Injester launch film

shipped

A 90-second launch film in about 20 hours. AI for the people, code for every word, one beat grid for picture and sound.

film · 2026 · live ↗
Claude CodeFigJamRunwaySunoPlaywrightffmpeg

We made Injester’s launch film in about 20 hours, from a voice note to the web versions going up. Four masters: a 1:30 and a 0:30, each in 16:9 and 9:16.

The tools mattered less than the method, which I picked up at an AI artists workshop in SF.

The method

  1. Story first. A script before any pictures.
  2. One character, done properly. Character sheet and world bible before any generation.
  3. One board. Everything in a single FigJam file.
  4. AI for people, code for words. Generated video for people, hands and light. Every word, number and logo in code.
  5. One grid. Picture and music on the same 96 bpm beats.
  6. Watch it like a stranger. Thirty rounds of notes.

The story

Maya makes one backpack in a small Oakland studio. A commuter’s strap snaps. He asks his AI assistant for a replacement, and Maya’s bag, the right answer, never shows up. The agent can’t confirm two facts her page never states plainly. Injester reads her store, she approves two updates, and the same request runs again. This time she’s in the answer.

Three drafts competed for the script, scored by a creative director, a target merchant and a Hacker News skeptic. Then a truth pass: every line on screen checked against what the product actually does. The film never claims more than Injester delivers.

Page one of the screenplay Page one of the screenplay, in Fountain format.

Style frames came before anything was final: dark and quiet, one gold point of light for the shopping agent, Injester blue for the brand.

The first style frames The first style frames. The shop name, the copy and the numbers all changed later.

Maya and her world

Maya got a full character sheet: who she is, what she makes, what she wants, and the details that never change (mustard bandana, tortoiseshell glasses, a pencil in her hair knot). Every generated image starts from that sheet and a reference turnaround, which keeps her the same person across seven shots.

Maya's reference sheet Maya’s reference turnaround: front, three-quarter and profile.

Maya's seven first frames Seven first frames, one sheet.

The bag got the same treatment. Generated bags drift (a pocket appears, the color shifts), so every frame was checked against the reference.

The hero bag against two versions that drifted The hero bag, next to two versions that drifted.

The bible set the rules of the world: three moods (warm morning, the agent’s cold void, night), trains always moving left to right, seven colors with one job each. And one rule with no exceptions: no generated shot contains readable text.

The production bible

The whole film lived on one FigJam board I could read from my phone.

The four acts The four acts.

Who this is about The cast: Maya, the commuter, the agent’s spark, the Ribbon J and the bag.

How it looks and moves Seven colors with one job each, plus type and motion rules.

The 1:30 storyboard and timeline The 1:30 storyboard, built from real frames, with the timeline underneath.

The shots

Each live shot started as a still, generated from the character sheet with the same look line on every prompt: 35mm film look, natural skin texture, shallow depth of field, no text, no logos. Runway’s Seedance animated each still as a cheap 480p draft, so we could judge the motion before paying for resolution. Keepers were upscaled to roughly 4K.

The seven shots that shipped The seven live shots.

Two fixes taught the most. The strap shot started as a wide of a man climbing stairs while his bag slid off, and it looked exactly like what it was. A tight close-up of the webbing fraying and snapping worked. When the model scuffed his coat as the strap whipped, I didn’t fix the coat. I ended the shot mid-whip.

The strap shot, before and after The wide that looked generated, and the close-up that shipped.

Vertical was the other. Cropping a wide shot to 9:16 cut Maya down to an arm. Runway’s Aleph extended those shots above and below the frame instead, so she stays whole.

9:16: the crop that cut Maya off, and the extended shot The crop that cut Maya down to an arm, and the extended shot.

Total: 33 Runway generations, about 1,950 credits.

The graphics

Everything that isn’t Maya’s footage is code. The film is a single web page where every scene is a function of time. A script steps it forward one frame at a time and records it. Any note becomes a one-line change and a re-render, and a frame-by-frame diff proves nothing else moved.

The logo reveal got three versions, side by side. The pick: injester lands, the j’s hook becomes the Ribbon J, and the jester hat pops on the next beat.

The three reveal options Three reveal options, side by side.

The reveal The pick: the j’s hook becomes the Ribbon J.

The numbers scene took three designs. Every figure was traced to its source, and three tempting numbers didn’t survive the trip. What’s left is one bar and two numbers: $21B bought through AI in 2026 (eMarketer, US) and up to $5T in consumer goods orchestrated by AI agents by 2030 (McKinsey, global).

Earlier stats designs Earlier designs. Both were replaced once the figures were checked at the source.

The final numbers scene One bar, two sourced numbers.

Last fix: long messages ran out of the chat box. It now grows upward, like iMessage.

The chat box after the fix The chat box after the fix, in 16:9 and 9:16.

The music

The score is a custom Suno track: a sly swing tune with a Harmon-muted trumpet. I briefed it like a film composer’s spotting notes, tied to the act times, then generated takes and picked one.

Then the sync. We mapped the song’s beats (96.48 bpm, first downbeat at 2.0 s) and its sections bar by bar, then fitted it to the edit in whole bars only: one continuous take, stretched less than 1%. Picture and music share the grid, so every cut lands on the beat.

TimePictureMusic
0:00Maya’s studio, the strap snaps at 0:13.75Intro, then the muted trumpet
0:45The logo revealThe song turns: piano and vibes
1:05”Same request. Now Maya’s in the answer.”The open trumpet comes in
1:30End cardFinal hit, exactly on the frame

The song's sections against bar lines The song’s sections against its bar lines: the turn at bar 19, the breakdown and the open trumpet.

The brief asked for two dramatic silences. On the first real listen, both sounded like bugs. The music now plays straight through.

The first 52 seconds of music, before and after removing the gaps The first 52 seconds of music, before (amber) and after (blue) removing the two gaps.

Thirty rounds of notes

Most notes were one line: “looks too AI”, “awkward cutout in the music”, “just zoom out to capture Maya completely”, “the words go off the text box”. Each came back as a short preview of just the changed section, usually within half an hour. For taste calls, I got two or three real options side by side and picked one.

The finished 1:30, frame by frame The finished 1:30, frame by frame.

What I’d tell anyone making one

  • Watch it like a stranger. None of the real problems showed up in a spec. All of them showed up on a fresh watch.
  • Make it re-renderable. When every graphic is code and every cut is a line in a list, a late note is a five-minute fix.
  • One grid from day one. Put picture and sound on the same beats before the first cut.
  • Check every number. A launch film is the worst place to be wrong in public.
  • Ask generated video for simple things. A tighter shot beats a better prompt.
  • Build options, then pick. Choosing between real versions beats arguing about one.

Thanks to James Yin for the workshop that started it.