Give it the approved script and the parts that cost nothing (screenshots, a reference
photo or none, the brand font); get about ten frames of the whole piece, one or two a
beat, in the same spec the cut will use, and the person's yes on the direction before
any talking head, final still or screen rebuild is paid for or built. The spec format
and commands are hn4a-compositor's; the camera keys come from camera() in
hn4a-compositor-in-scene-titles and its pace from hn4a-compositor-fast-ad-camera
or hn4a-compositor-calm-explainer-camera. The first look (hn4a-compositor, The
first look) is one scene in several styles; the board is the whole piece in one.
What it catches
All of these came after the paid renders on a presenter ad that had no board:
- A slides-and-bullets layout (a presenter in a window beside a kicker, headline and subhead) where the person wanted an ad.
- Printed copy that repeats what the presenter says.
- A bubble too small (220 px; 320 px was right) and a prop graphic too small and off to one side.
- A background that didn't hold up (an outpainted set with nonsensical geometry).
- A camera plan with too many moves (9 in 15 s): each frame carries its target box, so the count is visible.
Inputs
- The script, approved, and its word times estimated (
hn4a-compositor,references/first-look.md,fake_timings.py) until a voice take exists. - The real screens as screenshots, the presenter (the picked still, a reference crop or nothing: a grey silhouette stands in), the brand font and colours.
- The plan per beat: what is on screen, where the presenter is and how big, what the camera frames and how far it pushes.
Run it
Write references/storyboard.md's module into the job's scripts/ as
scripts/storyboard.py, beside titles_fx.py (hn4a-compositor-in-scene-titles) and
word_timings.py (python-read-word-timings), and the board's build script as
scripts/build_board.py (its worked example is there too). Then:
exec python scripts/fake_timings.py script.txt audio/estimated.stt.json
exec python scripts/build_board.py
exec hn4a-compositor still storyboard/board.json storyboard/f03.png --at 9.0
exec python scripts/contact_sheet.py images storyboard/sheet.png storyboard/f01.png storyboard/f02.png …
One still per beat, two where something moves (before and after a push; presenter
full frame, then in the bubble), taken one after another. Look at the sheet
(python-contact-sheet) before anyone else does.
| Helper | Draws |
|---|---|
still(id, src, box, start, end, parent=) | a screenshot or placeholder still where it will sit, in a camera group with parent |
silhouette(id, box, start, end, anim=) | a grey head and shoulders: the presenter before there is a still; anim.box moves it into the bubble |
bubble(id, box, start, end, src=, crop=) | the round bubble at its real size and corner, a face crop or a grey head |
target(id, box, text, start, end, parent=) | a dashed box where the camera will frame, labelled with the push ("push 1.5x: the new row") |
prop(id, box, text, start, end) | a graphic not made yet, as a labelled box at its real size |
label(id, text, start, end) | the beat's number and line along the bottom, so a still read alone says which beat it is |
The review
review_approve with items: the board (storyboard/board.json) first, so it plays
live, then one item per beat with its time span, its frames as files, and the VO
line, the picture and the camera plan as text, so the person can leave a note on any
beat. The ask is whether the direction is right; the brief holds the questions: an
ad or slides? the background? how big are the presenter and the bubble? how many moves?
Record the notes where you keep the job's notes, change the build script (never the
JSON), and show it again if the change is big. Nothing that costs money starts until
the person says the direction is right.
The animatic (optional, once the voice is approved): point the board's audio at
the track, re-cue from the take's own word times, and play it live or render it. Static
screenshots under the real camera over the real voice: this is where the camera's pace
shows.
Tips and traps
- Build the board in the cut's own shape: the same cues, boxes, points of interest
and camera moves, so
build_cut.pystarts frombuild_board.pyand the screens' rebuilt layers drop in where the screenshots were. - Targets go in the screen's camera group (
parent), so they move with it and the still shows the crop the camera will hold. - A set the plan needs gets one cheap still now (
guide-design-a-set): the board is where a background that doesn't hold up shows. - Labels and targets stay out of the cut: the
label,targetandproplayers are the board's alone. - On the worked board a bubble covered part of the screen's first row at the push: the kind of thing to fix in the board, not after the screens are rebuilt.
Check it
- The sheet: every beat present, nothing the voice says printed on screen, the bubble clear of what the camera frames, the end card's logo and CTA where they will be.
- The board plays live end to end without a warning (
hn4a-compositor, Check it).


