video-editor · diff
v0.5.0 to v0.6.0
8 added, 6 removed. Audit A to A.
---
name: video-editor
description: Make a product launch film by default, or a focused demo when requested, from an app, package, feature, or website. Show the real product UI and motion, then render and mix the film.
license: MIT
metadata:
- version: "0.5.0"
+ version: "0.6.0"
---
# Video editor
One skill owns the film from product discovery to final MP4. A request such as “make a product launch video” is enough to start: inspect the product and choose the story. The bundled Remotion scaffold and local sound editor are packaged assets to copy or run as needed; their source does not need to be loaded into model context. They share the `edit.json` cut map. Keep working projects, renders, music, and mix recipes outside this skill. The scaffold is a placeholder, not product evidence.
- 1. **Discover and choose:** Inspect the product's docs, source, live UI, and available assets. Read [story](references/story.md). Default to a launch film with the strongest distinct visual features. Choose a focused demo when the user asks for a demo or names one feature without asking for a launch; an explicit launch request wins. A whole website can be the subject of either mode. Record the selected and omitted features with reasons.
- 2. **Classify and stage:** Read [fidelity](references/fidelity.md) and [staging](references/staging.md). Mark each visible element as primary product UI or accessory context. Reuse or record the real primary UI and its actual motion by default. Do not invent a replacement component or animation because the source is difficult to render. The user must explicitly request abstraction before primary UI can be redesigned.
- 3. **Direct:** Read [scenes](references/scenes.md). Plan one composition per shot and set cuts in `src/edit.json`. For a package or capability film, favor isolated product components and causal transitions over a persistent fake app page. Vary composition and scale; the product itself must visibly change. Use title cards only when they earn their reading time. Read [text](references/text.md) when the film has on-screen words.
- 4. **Render and review:** Read [render](references/render.md). Run [scripts/scaffold.mjs](scripts/scaffold.mjs) from the installed skill to create a standalone project from [assets/launch](assets/launch). Inspect stills and the silent assembled `out/film.mp4`. Compare featured UI states and motion against the running product or source captures, then watch at playback speed to check whether an unfamiliar viewer can name the features and see their results. Technical QC cannot answer either question. Revise weak or inaccurate scenes before sound work. A changed cut or picture requires a fresh sound review.
- 5. **Sound and export:** Read [soundtrack methodology](../../shared/METHODOLOGY.md). In the packaged [editor](assets/editor), run `npm ci`, then `npm start -- --video /absolute/film.mp4 --edit /absolute/edit.json --cues /absolute/cues.json`. The cue sheet is optional; without one, add effects in the editor. Choose music that supports the edit and sound cues tied to actual entrances, gestures, impacts, and results. Save the mix, export, and watch the encoded MP4 through the last frame. Counted cues or a passing export do not establish creative quality.
+ 0. **Preflight:** run [scripts/preflight.mjs](scripts/preflight.mjs). Fix blockers; apply the printed workarounds (a local Chrome for Remotion, self-hosted fonts) before scaffolding.
+ 1. **Discover and choose:** Inspect the product's docs, source, live UI, and available assets. Read [story](references/story.md). Default to a launch film. Inventory *every* capability and mark each hero, montage, or omit; with no further brief, cover the default beats in story.md (hook, first contact, core loop, 3-4 heroes, a breadth montage, the differentiator, a call to action) in 20-30 s. Choose a focused demo when the user asks for a demo or names one feature without asking for a launch; an explicit launch request wins. A whole website can be the subject of either mode.
+ 2. **Classify and stage:** Read [fidelity](references/fidelity.md) and [staging](references/staging.md). Mark each visible element as primary product UI or accessory context. Reuse or record the real primary UI and its actual motion by default; for interactive UI, record the running product with `capture/record.mjs`, one take per surface. Do not invent a replacement component or animation because the source is difficult to render. The user must explicitly request abstraction before primary UI can be redesigned. If the product misbehaves on camera, film a truthful path and report the bug.
+ 3. **Direct:** Read [scenes](references/scenes.md). Plan one composition per shot and set cuts in `src/edit.json`. **Every cut must change the picture**: a different surface, a visibly different state, or a declared two-tier `punch`; a reframe of the same surface is a camera move inside one shot, never a cut. Declare `surface` on each product scene, and build camera shots with `footageScene()` so the zoom on screen is checked against the tiers. Keep it snappy: short approaches, 12-20 frame result holds, 30-60 frame clips. Transitions come out of the product (a theme flood, a gesture-direction wipe) as handoffs, two or three per film. Show breadth with a beat-cut montage (`montage.mjs`), and once the music exists snap every cut to it (`beats.mjs`). Read [text](references/text.md) when the film has on-screen words.
+ 4. **Render and review:** Read [render](references/render.md). Run [scripts/scaffold.mjs](scripts/scaffold.mjs) from the installed skill to create a standalone project from [assets/launch](assets/launch) and [assets/capture](assets/capture). `node qc.mjs` checks framing and aligns the frames either side of every cut to catch same-picture cuts. Inspect the in/out stills of every cut side by side and the silent assembled `out/film.mp4`. Compare featured UI states and motion against the running product or source captures, then watch at playback speed to check whether an unfamiliar viewer can name the features and see their results. Technical QC cannot answer either question. Revise weak or inaccurate scenes before sound work. A changed cut or picture requires a fresh sound review.
+ 5. **Sound and export:** Read [soundtrack methodology](../../shared/METHODOLOGY.md). In the packaged [editor](assets/editor), run `npm ci`. Without a supplied song, generate the bed with `node bed.mjs --film <s> --drop <first reveal s>`. Choose the sounds with [sound design](../../shared/SOUND-DESIGN.md) (the product's own sounds first; one sound per role; design missing ones with `sfx.mjs`, whooshes as long as their motion), write a cue sheet with a `role` per cue from the recorder's press frames and the picture's results, then either run `node render-mix.mjs` (headless: recipe, per-cue level report, -14 LUFS master) or open the visual editor with `npm start -- --video /absolute/film.mp4 --edit /absolute/edit.json --cues /absolute/cues.json`. Fix any cue the level report flags as buried, then run `node listen.mjs` on the final file and look at its annotated spectrogram. Watch the encoded MP4 through the last frame. Counted cues or a passing export do not establish creative quality.
+ 6. **Log the dogfood:** add what worked and what did not to [the dogfood log](../../dogfood/), and fold any repeatable fix back into this skill.
The visual editor adjusts music and sound cues; picture cuts live in the Remotion project. `edit.json` uses `{ "cuts": [{ "scene": "name", "in": 0, "out": 60 }] }` at 30 fps, and the bundled sound editor reads it directly. A cue sheet uses scene-local frame numbers; see the [soundtrack methodology](../../shared/METHODOLOGY.md). Keep the film and song with the saved JSON recipe because it references their timing. Node 22.12+, FFmpeg, and FFprobe are required for the full workflow.