Skip to main content
Before anyone shoots or animates anything, a director wants to see the story move with a voice over it. An animatic is exactly that, and it is mostly stills: this pipeline writes the board, draws every shot in one style by handing shot 1 to the image model as a reference for the rest, gives generated motion only to the shots you choose, and lets ffmpeg push slowly into the others. Three shots with one in motion cost 31 cents.

Build it in your project

Paste this line into your agent (Claude Code, Codex, Cursor, OpenCode, Cline). It sets up your key, then builds the pipeline in your project:

The code

One file per language. Both read RUNCRATE_API_KEY from the environment; nothing secret is in the code.

What the proof run cost

The Python file with VIDEO_SHOTS=1 on “A lighthouse keeper finds a small robot washed up on the shore after a storm”. The result is 15.7 s long. Measured on 2026-10-23 against api.runcrate.ai; costs are what the account was billed, read from each response’s X-LLM-Cost header or usage.cost. The TypeScript file on the same idea: $0.3083 in 205 s (one frame took 66 s on that run).

Scale it

  • VIDEO_SHOTS is the cost dial: each generated shot adds $0.294 at 480p; at 720p the same 4 s is $0.63.
  • Longer boards: ask for more shots; frames and narration stay at cents a shot.
  • Many ideas at once: each board is independent; run them in parallel or as a job group.

Gotchas found in the proof run

  • Passing shot 1 as a reference image (images: [shot_1]) to FLUX.2 klein kept the keeper and the palette across shots; without it each shot drew a different character.
  • Seedance 2.0 Fast defaults to 720p and to generating audio. Send resolution: "480p" and generate_audio: false for a silent draft at the lowest variant.
  • One frame request took 66 s on one run and 2 s on the next. Give the image client a timeout (180 s here) rather than the SDK’s default.