The person brings footage they already have (a webcam video, a talking head, a short
they posted, a rough cut of best takes), their brand kit if they have one, and how far
to go. You deliver the same footage with captions and motion graphics in their brand,
rendered at the footage's own size and rate. Everything is local and free; the first
build takes about an hour, rebuilds a few minutes. Keep the brand direction and rules
in refs/brand.md; record the intensity and picks with the job's notes.
Steps
- A cut to build on. Raw retakes go through
guide-cut-best-takesfirst (its gate included); a finished short is used as it is. Every later step reads this cut's frames. - Brand direction and assets (
guide-capture-a-brand): use the supplied kit and brief, or propose a direction from the footage. Its personality, tone and intended audience inform the graphics as well as its fonts and colours. Resolve missing choices that affect the look; show that look at step 6. - Ask the intensity, and record it:
- Captions: captions and one or two titles on the key words.
- Standard: plus titles behind the person, graphics for the words, sound.
- Go wild: every move below, the hand and face moves and a punch-in or shake on every hit.
- Word times of the cut (
whisper-cli-transcribe-with-word-times, read withpython-read-word-timings), names checked by ear. - Track the person (
python-track-face-and-hands) when anything sits behind them or reacts to them:track.json, the person cutout, the hands-only cutout and the end freeze frame (a 1.4 s hold). - The first look (
guide-add-titles-and-motion-graphics, Process 1): the opening seconds in two looks from the kit, the caption style included (guide-caption-a-video; karaoke in the brand's caption face by default). Gate: the look. - Build the spec from one build script (
hn4a-compositor, build script):- the camera that punches in and shakes over footage, with its layer order
(
hn4a-compositor,references/spec-format.md): footage, titles behind, the person cutout, graphics in front, the hands cutout; captions outside the camera; - titles as PNGs in the headline font, drawn big so
fit: fillcan squash and stretch them (hn4a-compositor-hand-interactive-titles); text layers only for captions and counters; - in-scene effects (
hn4a-compositor-in-scene-titles), the face and hand moves (hn4a-compositor-hand-interactive-titles), type lying on a desk or wall in a plane group (hn4a-compositor-perspective-planes); - the graphics menu below for the words.
- the camera that punches in and shakes over footage, with its layer order
(
- Sound (
python-synth-sfx-for-motion-graphics; realistic sounds throughguide-add-sound-effects): the build script writes the cue list, one sound per kind of graphic, mixed at 0.6 under the voice; brand sounds replace synthesized ones. - Check (
python-check-title-occlusion): every title behind the person at most 0.2 hidden; then stills at every effect on one sheet (python-contact-sheet) for edge clipping, whole words hidden and every brand rule. Gate: the live spec (hn4a-compositor, Live spec, then render). - Render and deliver per the core skill: frame count, a contact sheet, a listen
(or the person's), loudness (
ffmpeg-normalize-loudness; −14 LUFS for a short).
The graphics menu
Moves that worked, for the words being said:
- Opening: one big word over the speaker, then the first phrase stacked on one side of the head and the next on the other; both fly out sideways before the hero word, which the hands squash to the floor.
- Graphics for the words: a bar chart that grows (
anim.box), a progress bar with a stepped % counter, marquee bulbs blinking around the frame, comic starburst sound words, confetti cannons in the brand colours, a spinner that resolves to a check, a title sliced in half with clip-path polygons, a stamp, a take counter that ends on ∞, a real duration squashed into the real cut's length. - An "any style" line: each caption word in its own style, an emoji-able word replaced by its symbol.
- A brand character riding a palm or hopping onto a title, by its own rules: its art as transparent PNGs in the brand colours, with mirrored copies for direction.
Choices this workflow makes
- The intensity is asked, not assumed. The same footage can want captions and one title, or everything.
- All composited, all local. Nothing generated; the footage's own pixels and sound.
- Titles live in the footage's camera, so punch-ins and shakes move type and person together, and the cutout keeps the person in front.
- A re-cut rebuilds from the top: re-cut, re-transcribe, re-track, re-make the cutouts and end frames, rebuild, then the sound and the occlusion check. Notes on the graphics re-cue in the build script, never by hand in the JSON.
Dead ends
- Type placed by eye behind the head: a still looked fine while the head moved into
the word a second later. Measure every frame (
python-check-title-occlusion). - Wide words near the frame edge in an overscanned camera: a punch-in pushed them off. Keep their centres 400 px or more from the edges.
- A whoosh on every graphic: one sound repeated grates within 20 s; one sound per kind of graphic.
- Textured display fonts plus outlines plus offset strokes: busy; one bold face, one flat colour, one hard offset shadow in an accent.
Worked example
A founder's webcam explainer about a product's free features, recorded as a run of retakes and cut to its best takes first. Brand kit: a heavy italic display face, an acid green with a deep blue offset shadow, a mascot with rules for how it may appear. Intensity: go wild.
| Part | What went on it | Note |
|---|---|---|
| Opening | the first phrase stacked either side of the head, then the hero word squashed flat by both hands | the squash flattened at once while the hands rested low; it starts at the top of the push now |
| Middle | karaoke captions with the active word in the green, the key words as big titles either side of the head, the mascot popping from a palm | titles that wouldn't fit beside the head went above the eyes |
| End | the freeze frame held 1.4 s under the last title |
Every sound synthesized; nothing paid. First build about an hour, each rebuild a few minutes.


