Review, render and ship
advanced·9 min·Markdown for agents
What this lesson teaches
Review a render against its own register, render it from code without the classic traps, and ship the loop, sting and vertical cuts that go with it.
Your film is going to the feeds. Here is the 16:9 master turned into a 9:16 phone cut two ways. Tick the overlay to see what the app's own buttons cover.
Reviews, done overnight.
Reviews,
done
overnight.
The crop (dashed box on the master) cuts the line at both sides and pushes the product off frame, and the feed's own buttons cover what is left. The re-layout is its own composition on the same timeline: line breaks written in, bigger type, nothing under the app's header, rail or caption.
The crop cuts the line in half and loses the product. The re-layout is a new composition on the same timeline. That is the last step of a film. Before it comes the review.
Review against its own register
Numbers first, taste second. A film is judged against the medians of its own register: a product-camera film next to a motion-graphics one always looks too still.
The skill reviews a film on eleven rows. Each row has an owner and a target.
| # | Check | Target |
|---|---|---|
| 1 | Register | named; cut rate inside its row |
| 2 | Hook | a readable word by ~1.3 s, first seam by ~3.6 s |
| 3 | Name | one measured mode; the low end on the first reveal |
| 4 | Words | built per word ~0.2 s apart; newest settles in ~0.3 s; holds 1.15-1.5 s |
| 5 | UI demo | prompts ~15 chars/s to read; cursor ~7 % of width; the wait stepped or cut |
| 6 | Motion | nothing decorative on UI; no spring on a camera |
| 7 | Seams and cuts | no dead cut; no crossfade dip; one current; 2-3 seam types |
| 8 | Endcard | 4.4-6.3 s with a ~2 s final hold; a URL only with a verb |
| 9 | Sound sync | every hit on its contact frame or one after (0-30 ms), never ahead |
| 10 | Level | ≤ −1 dBTP ; loudness in stated for the register |
| 11 | Source | the film's own sound, no mix bolted on after |
Write each finding as one row: what you saw, what to change, why.
A film is a function of time
When a film is built from code, as with HeyGen's , every frame must be a pure function of the time t. No Math.random(), no clock, nothing carried from the last frame. Seeded randomness is fine.
That rule buys real motion blur. The renderer samples several moments inside each frame and averages them: a 180° , four samples a frame by default, up to 24 on a whip pan. One unseeded Math.random makes those samples disagree and the blur turns to noise.
Place everything on a taken from the actual track, not from the brief. A generated track's tempo is a hope until measured: over 50 s, a 0.15 % tempo error puts the last hits about 70 ms late, past the 30 ms sync budget.
Delivery gates
Hand nothing over until every file passes.
Frame count matches
A mux with-shortestsilently drops the last frames when the audio ends early.H.264 level fits
Level ≤ 4.2 at 1080p, ≤ 5.2 at 4K. A slow preset without-levelwrites 6.0, which fails in Safari, QuickTime and on phones.Under 1 GB at 4K
CRF around 12 at a slower preset; higher quality nobody can see just doubles the file.Decodes on the hardware decoder
That is what phones use; a software decode passing proves nothing.Loudness written, −1 dBTP
For the register, chosen on purpose. −14 LUFS is an engine default, not a standard.
The formats around the film
A launch film rarely ships alone. Each companion breaks a different rule of the master.
- for the landing page: a cycle, not enter-hold-exit. The last frame flows into the first with no visible seam; frame 0 is the poster and names the product. Ship MP4/WebM; GIF only at 25 or 50 fps (GIF delays are whole hundredths, so 30 fps plays 11 % fast).
- : 3-8 s, the name plus three words at most. Assemble the mark from 2-4 pieces with one hit on contact; hold the lockup at least 1.5 s.
- Vertical and square: re-lay out, never crop. In 9:16 keep text inside top 270, right 120, bottom 420 and left 64 px of a 1080 × 1920 frame, type about 1.4× its 16:9 size, captions burned in because feeds autoplay muted. Those are the .
Who owns what
Three build tools appear next to the skill. The split is the same each time: the tool owns the build; the skill owns register, beats, type cadence and sound.
| Tool | Owns | Where the skill's measured value wins |
|---|---|---|
| HyperFrames | the build, seam eases and zoom values inside its projects, captions | register, structure, type cadence, sound |
| cinetic (Remotion) | scaffold, render, delivery, layout and sync checks | endcard 4.4-6.3 s not 2.2 s; text hold 1.15 s not 0.77 s; crossfades allowed over a shared ground |
| scenario-kinetic-film | one-page beat-cut type films, generated music and key art | loudness is a register choice; a 9:16 cut is re-laid out, never the master centred on black |
Review this render against its own register, at its native frame rate. Recount cuts by eye from a contact sheet around each seam; don't trust a detector count. Go through the 11 rows (register, hook, name, words, UI demo, motion, seams and cuts, endcard, sound sync, level, source) and write one Before | After | Why row per issue. Then check the delivery gates: frame count, H.264 level, size, hardware decode, loudness and -1 dBTP. Make the 9:16 cut as a re-layout inside the feed safe zones.
Quick check
Your automatic cut detector reports 6 cuts in a 40-second film. What should you do before comparing it to the register's cut rate?
In the skill
The nodes your agent reads when it does this work.
- Launch-video reviewReview a film at native fps against its register — recount cuts by eye, check seams and onsets on frames, then taste. Measurement traps, the 11-row film rubric, and HeyGen's numeric render checks.
launch-video/launch-video-review - Launch-video formatsThe short forms beside a launch film — a feature loop that is a cycle with no seam, a logo sting that assembles the mark and holds it, and vertical cuts that are re-laid out for the feed rather than cropped. Seam gates, GIF frame-rate arithmetic, feed safe zones and type minimums.
launch-video/launch-video-formats - A film as a function of timeA film rendered from code is a pure function of time on a beat grid. That buys real sub-frame motion blur, a shutter that never crosses a cut, a grid fitted to the music the film actually uses, and delivery gates (H.264 level, size, frame count, the hardware decoder) that a file must pass before handover.
launch-video/film-as-function-of-time - HyperFrames reconciliationWhere this graph and HyperFrames give different values for a launch film (seam eases, zoom-through, springs, crossfades, idle motion, blur, cursor, captions, clip timing, sound) and which value to use inside a HyperFrames project.
launch-video/hyperframes-reconciliation - cinetic, reconciledcinetic builds a launch film in Remotion (or HyperFrames) from one beat grid, with render, QA and Chromium forensics scripts. It owns the build. This graph keeps register, structure, type cadence and sound, and its measured values win where they disagree. cinetic's unnamed-corpus pacing numbers wait for a measurement.
launch-video/cinetic-reconciliation - scenario-kinetic-film, reconciledscenario-kinetic-film builds a beat-cut kinetic-type film as one web page, renders it with real motion blur, and generates the music, sound kit and key art through Scenario MCP. It owns the build and the paid generation loop; this graph keeps register, structure, sound placement and loudness, and its energy gates apply only inside its own register.
launch-video/scenario-kinetic-reconciliation
Connected lessons
What this lesson builds on and leads to, across every course.