Script to video
The person brings a written script (a screenplay, a shot list, a draft with quotes and
stage directions), the characters (sheets or descriptions), the brand guide and any
voice guidance. You deliver the finished cut: every character speaking their lines in
their cast voices in designed sets, titles on, in the layout agreed in
AGENTS.md (core skill). The work is adapting the script, composing the shots
with their dialogue, and making the cuts; which video model renders a shot is a
per-shot choice (guide-choose-a-video-model).
Each stage feeds the next and is gated on the person's review: script, voices, sets, stills, video runs, titles, cut. The track comes first; the pictures are cut to it.
Steps
- Script to
script.json(guide-make-a-script-from-source,llm-convert-written-script): scenes, shots under the script's own labels, every line checked word for word. For a series, carry the earlier episode's labels, looks and voices forward. Say who each character is when it isn't obvious (a deepfake against the real person). Gate: the person reads the scene and shot breakdown. When the script calls for titles or graphics, show the opening's title look next, before any voice or picture: two or three looks over the brand colour or a reference image, on word times estimated from the script, live on a review page (guide-add-titles-and-motion-graphics, step 1). Gate: the title look, which step 7 builds in. - Cast the voices (
guide-cast-a-voice), one per new speaking character. Gate: a voice per character. - Perform the track (
guide-voice-a-script,elevenlabs-text-to-dialogue): each scene in one take, so turns play off each other. Transcribe every take (elevenlabs-speech-to-text). Add silence wherever the picture needs action time (an exit, a transition) now, before any video. Normalize loudness once the track is assembled. No gate: the voices were picked in step 2, so a take that passes the transcript check goes straight on. - Design the sets (
guide-design-a-set): the geography written down, the main image (nano-banana-design-empty-set, 2 takes) with a flat swatch image and the hue in words for brand colour, then one angle per camera the script needs (nano-banana-set-from-new-angle). Gate: one review row per angle, the main image beside it. - Stage the stills (
nano-banana-stage-cast-in-set,guide-edit-a-frame-before-animating): single views from the sheets (python-split-character-sheet); crop the plate to the framing before staging anything tighter than the plate; screen pictures last. For more stills of the same framing, edit the picked still (nano-banana-targeted-fix) rather than staging again. Map each still to its script shot by content. Gate: a still per shot. - Compose the shots with dialogue (
guide-lipsync-videocovers synced speaking video: routes, audio windows, directing, checking sync). Cut each shot's window of the track at a pause (python-read-word-timings); a silent shot gets a length instead and goes toguide-animate-a-shot. Keep every shot to about 15 s or less; split a longer window at a pause into sub-shots (18a,18b).- The model: any model that renders synced audio with characters speaking can do
it (
guide-choose-a-video-model). The decision that matters: to keep the voices cast and performed in steps 2 and 3, use a model that takes audio references, and give it the stills and the cast's pictures plus the shot's window of the track:h3-max-lipsync-a-stillfor a really simple shot (one speaker, a still),seedance-2-5-dialogue(Seedance 2.5 with an audio reference) orh3-max-dialogue(H3 Max with an audio reference). - Cast only the people physically in frame, pin speakers by position at every line, describe screens as a fixed state, say "nobody on screen talks" for voiceover, time-cue the action to the transcript, say "locked" camera unless the action moves it, and keep one seed for the job.
- Start every shot of a run at once and check each clip as it lands (
taskswithuntil: "any"): it opened on its still (python-measure-layout-drift, under 0.95 is a miss). Gate: a review page per run, unmuted, one choice per shot across runs. Change one thing per shot, render only the changed shots into the next run, and keep earlier runs' clips for the rest.
- The model: any model that renders synced audio with characters speaking can do
it (
- Titles (
guide-add-titles-and-motion-graphics): composited over the footage with the hn4a compositor, never baked into a still or a render. Shots fromffmpeg-scene-cutson the cut with a low threshold (dissolves score 0.02–0.06), words from a transcript of the cut. Overlays go inhn4a-compositor-motion-graphics; type in the set (behind people, glitches, typing, reflections) inhn4a-compositor-in-scene-titleswithbirefnet-mattecutouts snapped to the cut times. Gate: the spec playing live on a review page, stills at each effect beside it; the person says yes to the caption and title design before the render. Then the render. - Cut and deliver (
guide-prepare-renders-for-delivery). Assemble the picks in shot order, each clip with its own audio for its window (the video models re-voice the line, and the mouth follows their version), held on its last frame if short, or running to 0.25 s after its own last word if its line runs long. The picked windows must tile the track. A silent shot keeps its own sound effects. Then the round's deliverables (core skill).
Choices this recipe makes
- Every speaking shot on a model that takes audio references, so the cast voices hold from the track to the cut. The model itself is chosen per shot.
- Shots of about 15 s or less; a longer window is split at a pause.
- Text-to-dialogue per scene rather than line-by-line TTS, so the turns play off each other.
- Sets before stills, and every still staged in an approved set angle, so the geography holds across shots.
- Keep each clip's own audio in the cut; never lay the track under re-voiced clips.
- Titles composited over the footage, never in the stills or the renders.
Dead ends
- A hex code alone for brand colour: NB Pro rendered emerald or pure green.
- "Push in to a medium shot" on a wide plate: ignored 5 times. Crop the plate first.
- Staging a close-up again for each later beat: the desk, background and once the person drifted. Editing the picked still held on 5 of 6 takes.
- A reference for someone only on a screen: the video model morphed the presenter into Lena, whose sheet was attached for her TV thumbnail.
- Removing a screen character's reference without stating the screen's state: the screen woke up with an invented man on it.
- Laying the track under re-voiced clips: drifted up to 0.44 s mid-shot, and a 2.2 s window in a 4 s-minimum clip started 0.5 s late with an invented pause.
Worked example
The Globex quiz-show spot (on-screen title "QUIZ TIME!") covered script, set, stills, scenes and titles; the Globex training drama, Episode 1 adds the numbers for composing a scene's shots with dialogue.
- Script: 6 scenes, 22 shots (labels like "5b" and "6–10" kept), 100 lines, cast carried from Episode 1 plus the real Ravi; clean on the first try. Estimated at 267 s; the eleven_v4 track came out at 227 s.
- Set: a game-show set in Globex Lime. With the hex and words only, the lights came out at a median hue of 143° and 83° against the brand's 75°; a swatch image plus "a YELLOW-green, never emerald" brought them to 66–80°. Six angles held design and title spelling. A reverse angle flipped the host podium until crops of the podium and desk went in as references with the way each faces stated (1 of 3 takes right). Reject takes that duplicate "QUIZ TIME!" on another wall.
- Stills: a medium shot of the host came right on the first take from a cropped plate; the LED wall showed a still of Episode 1's deepfake call (2 of 2 clean); an empty audience plate filled well with "a mixed studio audience reacting together".
- Scenes: mostly animated with H3 Max.
- Titles: 81 layers over the finished cut: type behind people, glitches, typing. Place type so a head covers part of a letter, never a whole word.
- Episode 1 scenes: 15 shots, sub-shots included, each rendered from its still and the cast's pictures with its window of the track as the audio reference; the scene took seven runs, with one pick per shot across them.


