# Review, render and ship

> 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.

Module: Launch films · Level: advanced · 9 min · https://school.agents.org.in/media/film/review-and-ship

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.

*[Interactive demo: A centre crop against a re-layout, inside the feed's safe zones.]*

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.

> **Measure honestly.** Review at the film's native frame rate (The frame rate a video was made at, like 24, 30 or 60 frames a second. Review at that rate; converting adds fake duplicate frames). Resampling a 24 fps film to 30 inserts duplicate frames that fake short moves. And recount cuts by eye on a contact sheet (A grid of still frames taken at small steps through a video, so you can see exactly what happens around a cut): the automatic cut detector agreed with a frame reading in only 9 of 29 Skale films and 5 of 18 acclaimed ones.

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 true peak (The highest point the audio wave really reaches, including between samples. Keep it at or below −1 dBTP so it never clips on playback); loudness in LUFS (Loudness Units relative to Full Scale: how loud a whole piece of audio sounds to a person. Closer to zero is louder; −14 is loud, −30 is quiet) 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 HyperFrames (HeyGen's open tool for making videos from HTML: you write the film as a web page and it renders it frame by frame), 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° shutter (Real motion blur made by sampling several moments inside each frame and averaging them, like a camera's shutter staying open), 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.

*(Never let the shutter cross a hard cut. Slide it back so it ends on the cut, or the fastest frame renders sharp and stutters.)*

**Place everything on a beat grid (The music's beats as a timeline you place everything on, measured from the actual track so cuts and hits land on the beat)** 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.

  **Step: Frame count matches.** A mux with <code>-shortest</code> silently drops the last frames when the audio ends early.

  **Step: H.264 level fits.** Level ≤ 4.2 at 1080p, ≤ 5.2 at 4K. A slow preset without <code>-level</code> writes 6.0, which fails in Safari, QuickTime and on phones.

  **Step: Under 1 GB at 4K.** CRF around 12 at a slower preset; higher quality nobody can see just doubles the file.

  **Step: Decodes on the hardware decoder.** That is what phones use; a software decode passing proves nothing.

  **Step: 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.

- **Feature loop (A short looping video for a landing page that runs as a seamless cycle, with no visible start or end)** 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).
- **Logo sting (A 3 to 8 second clip that assembles the logo and holds it, played at the start or end of other videos):** 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 safe zones (The part of a video frame that the app's own buttons, captions and headers will not cover, where text and key action must stay).

## 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 |

**Inside a HyperFrames project, its seam values win; everywhere, the skill's measured beats and sound win.**

**Review a launch-film render (paste into your agent):**

```text
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.
```

**Check yourself:** 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?

- [ ] Trust it, detectors are exact
- [x] Recount by eye on a contact sheet at native frame rate
- [ ] Resample the film to 30 fps and run it again
- [ ] Average it with the register median

*Why:* The detector matched a frame reading in only 9 of 29 and 5 of 18 films; it misses dark, white-on-white and scale cuts and fires on fills. Resampling adds fake frames.

## In the skill

- https://school.agents.org.in/skill/launch-video/launch-video-review.md
- https://school.agents.org.in/skill/launch-video/launch-video-formats.md
- https://school.agents.org.in/skill/launch-video/film-as-function-of-time.md
- https://school.agents.org.in/skill/launch-video/hyperframes-reconciliation.md
- https://school.agents.org.in/skill/launch-video/cinetic-reconciliation.md
- https://school.agents.org.in/skill/launch-video/scenario-kinetic-reconciliation.md
