Launch Video
REQUIRED BACKGROUND: marketing-studio skill. Work in C:/Projects/animations.
Produces: out/<brand>/film/film-vN-scored.mp4 — a bespoke 20-40s film with music,
narration and SFX cues, plus out/<brand>/launch.mp4 (the scored lock that postkit,
mission-control and review-in-magnetic expect).
A film is not done without audio, and audio means a voice explaining the product.
Step 8 is not optional and node scripts/check-audio.mjs <brand> must exit 0 before
the word "done". Two postflop cuts shipped silent on 2026-09-01; that is the reason
this line exists.
Route
Default: a BESPOKE composition at studio/src/films/<brand>/ (PLAYBOOK "Bespoke
films"; postflop is the worked example). Every product shot is rebuilt native UI
that animates (grids resolving, figures counting, a cursor that clicks), never a
screenshot panel or a screen recording. The LaunchVideo template is the fallback
only when the user asks for the five-act house style explicitly.
Recipe
- Direction, before any storyboarding or building: write three one-page directions
with
docs/templates/DIRECTION.md, kill two with its kill questions, and record the
survivor + its signature move in out/<brand>/marketing/direction.md. Skip only if
that file already exists for this version.
- Shot spec: write
out/<brand>/marketing/film-spec.md from the direction (copy
postflop's shape: non-negotiables from the brand voice, motion rules judge-motion
scans for, the composition contract, and a timeline table of 6-10 shots with the
beat each one performs and every numeral traceable to brief.json proofPoints).
Narration is planned HERE, per shot, at ~2.6 words/second minus a 150ms breath
between lines; a 28s film carries about 60 spoken words, not 150.
- Build:
studio/src/films/<brand>/ — timeline.ts (SHOTS, TOTAL, OVERLAP), a ui/
kit of the product's rebuilt pieces, one shots/ShotNN.tsx per timeline row,
Film.tsx sequencing them with overlap handovers, registered in Root.tsx and
scripts/smoke.mjs. Each shot proves itself: render its frame range at
--scale=0.5, tile a contact sheet with ffmpeg, Read it, fix, re-render.
- Gates on the studio:
npx tsc --noEmit -p . in studio/, node scripts/judge-motion.mjs <brand>, node scripts/smoke.mjs.
- Director loop on the whole film: render
out/<brand>/film/film-vN-preview.mp4 at
half scale, contact-sheet it (fps=2), extract the LAST frame of every shot (must be
static) and the frames around each cut (must overlap, no pop), write your own defect
list, fix, re-render as the NEXT version. Never overwrite a version.
- Full-res render of the version whose sheets passed:
npx remotion render <Brand>Film out/<brand>/film/film-vN.mp4. Read two full-res frames.
- Audio copy:
scripts/build-<brand>-film-audio.mjs (copy source of truth: narration
lines with their start second, SFX cues on the landing frames, music prompt) ->
props/<brand>-film-audio.json. Written for the ear; every figure from the brief.
- Score:
node scripts/score-film.mjs <brand> out/<brand>/film/film-vN.mp4. It refuses
overlapping lines (trim copy in the builder, never the picture) and masters to
TARGET_I, verifying the DELIVERED file. Then node scripts/verify-cue.mjs on one
narration window and one bed-only window: the voice must sit clearly above the bed.
- Lock: copy the scored file to
out/<brand>/launch.mp4; run
node scripts/check-audio.mjs <brand> (exit 0 required) and node scripts/judge-palette.mjs <brand> <scored.mp4>. Deliver per marketing-studio: the user watches the SCORED cut.
1---2name: launch-video3description: Create a full product launch video with UI, branding, narration, and music.4---56# Launch Video78**REQUIRED BACKGROUND:** marketing-studio skill. Work in `C:/Projects/animations`.910Produces: `out/<brand>/film/film-vN-scored.mp4` — a bespoke 20-40s film with music,11narration and SFX cues, plus `out/<brand>/launch.mp4` (the scored lock that postkit,12mission-control and review-in-magnetic expect).1314**A film is not done without audio, and audio means a voice explaining the product.**15Step 8 is not optional and `node scripts/check-audio.mjs <brand>` must exit 0 before16the word "done". Two postflop cuts shipped silent on 2026-09-01; that is the reason17this line exists.1819## Route2021Default: a BESPOKE composition at `studio/src/films/<brand>/` (PLAYBOOK "Bespoke22films"; postflop is the worked example). Every product shot is rebuilt native UI23that animates (grids resolving, figures counting, a cursor that clicks), never a24screenshot panel or a screen recording. The LaunchVideo template is the fallback25only when the user asks for the five-act house style explicitly.2627## Recipe28291. Direction, before any storyboarding or building: write three one-page directions30 with `docs/templates/DIRECTION.md`, kill two with its kill questions, and record the31 survivor + its signature move in `out/<brand>/marketing/direction.md`. Skip only if32 that file already exists for this version.332. Shot spec: write `out/<brand>/marketing/film-spec.md` from the direction (copy34 postflop's shape: non-negotiables from the brand voice, motion rules judge-motion35 scans for, the composition contract, and a timeline table of 6-10 shots with the36 beat each one performs and every numeral traceable to brief.json proofPoints).37 Narration is planned HERE, per shot, at ~2.6 words/second minus a 150ms breath38 between lines; a 28s film carries about 60 spoken words, not 150.393. Build: `studio/src/films/<brand>/` — timeline.ts (SHOTS, TOTAL, OVERLAP), a ui/40 kit of the product's rebuilt pieces, one shots/ShotNN.tsx per timeline row,41 Film.tsx sequencing them with overlap handovers, registered in Root.tsx and42 scripts/smoke.mjs. Each shot proves itself: render its frame range at43 `--scale=0.5`, tile a contact sheet with ffmpeg, Read it, fix, re-render.444. Gates on the studio: `npx tsc --noEmit -p .` in studio/, `node scripts/judge-motion.mjs45 <brand>`, `node scripts/smoke.mjs`.465. Director loop on the whole film: render `out/<brand>/film/film-vN-preview.mp4` at47 half scale, contact-sheet it (fps=2), extract the LAST frame of every shot (must be48 static) and the frames around each cut (must overlap, no pop), write your own defect49 list, fix, re-render as the NEXT version. Never overwrite a version.506. Full-res render of the version whose sheets passed: `npx remotion render <Brand>Film51 out/<brand>/film/film-vN.mp4`. Read two full-res frames.527. Audio copy: `scripts/build-<brand>-film-audio.mjs` (copy source of truth: narration53 lines with their start second, SFX cues on the landing frames, music prompt) ->54 `props/<brand>-film-audio.json`. Written for the ear; every figure from the brief.558. Score: `node scripts/score-film.mjs <brand> out/<brand>/film/film-vN.mp4`. It refuses56 overlapping lines (trim copy in the builder, never the picture) and masters to57 TARGET_I, verifying the DELIVERED file. Then `node scripts/verify-cue.mjs` on one58 narration window and one bed-only window: the voice must sit clearly above the bed.599. Lock: copy the scored file to `out/<brand>/launch.mp4`; run60 `node scripts/check-audio.mjs <brand>` (exit 0 required) and `node scripts/judge-palette.mjs61 <brand> <scored.mp4>`. Deliver per marketing-studio: the user watches the SCORED cut.