Skip to main content

Checks and clean-up for videos

These tools come with the AI Dev Kit and run on your computer. Your AI agent uses them while it makes a video in a project; you can run them yourself from the kit's tools/design-capture folder with node studio-cli.mjs …. Nothing is uploaded.

ToolWhat it answersCommandAgent tool
Project notesWhat was planned, decided and left to do?notes "<project>"project_notes
Timeline at a glanceDo the words, the cuts and the subtitles line up?timeline <scene.json>scene_timeline
Video checkIs the finished video right: every line heard, no black, loud enough, no clipping?cut-check <video> (runs after every render)video_check
Voice check and best takeDoes this voice line say the script, without odd pauses? Which take is best?voice-check, best-takevoice_best_take
Clean up recorded speechCan the false starts, ums and long pauses go?cleanup <clip>footage_cleanup
Connect your agentsCan my agent use all of this?connect—

Project notes​

Every project keeps a notes.md beside its scene: Plan, Decided and Still to do. Videos are often made over several sessions (yours and your agent's, sometimes more than one agent), and the notes are how they agree: which hook was approved, which take was chosen and why, which music, what was rendered.

File › Project notes in the Studio
  • In the Studio: File › Project notes… (with a project open). It saves as you type. What your agent adds appears while the notes are open.
  • For agents: read the notes before working on a project, and add a dated line when something is decided or done: notes "Reel 1 - Live Editor" --add "Hook approved: take 3" --section Decided. Agents are told to write only facts, never that something was published unless you said so.

A timeline at a glance​

One picture of a stretch of the video: a strip of frames, the sound wave (voice in blue, music in grey), every spoken word at its time, and every text layer on screen as a bar. Pauses inside a phrase are marked in red.

A timeline: frames, the sound wave with two red pauses, the spoken words and the subtitles

The example above is a first take of a hook: the voice stops for 0.93 s between "builder" and "Pro", which sounds machine-made. The words all matched the script, so only the timing shows it.

node studio-cli.mjs timeline "E:/Documents/Kinetic Scenes/Reel 1/scene.json" --from 0 --to 12
  • --from, --to: the stretch, in seconds (default: the whole scene). --frames: how many frames in the strip (3–16). --out: where to save the PNG.
  • Pauses are measured in the sound itself (the speech recogniser stretches a word over the silence after it, so word times hide pauses), and judged against the subtitle on screen: a pause after a comma or full stop in the subtitle is natural; one in the middle of a phrase is marked.
  • Use it wherever there is a voice-over: to see a subtitle that leaves before its words are said, a line that starts on the cut, or a long stretch with no narration.

The video check after a render​

When a video is rendered through the kit (the agent's scene_render, or render on the command line), the finished file is checked before it is handed over, and problems come back to fix:

  • Every voice line is heard, at about its time. A wrong file path once dropped every line of an explainer silently; the check reports it as "0 of 11 voice lines heard" and names each one.
  • No unintended black: a stretch of black picture after the start usually means a layer failed to load.
  • Loudness about -14 LUFS, the level for social video (outside -20 to -10 is reported).
  • No clipping: a true peak above -1 dBTP may distort on phones.
node studio-cli.mjs cut-check renders/reel-2.mp4 --scene scene.json
Cut check: PROBLEMS (1 cut(s), -16.0 LUFS, 5/5 voice lines heard)
- The sound peaks at -0.9 dBTP and may distort on phones: keep it under -1 (lower the loudest clip).

Clicks at cuts are prevented rather than measured. The renderer fades every sound clip in and out by at least 12 ms, so a clip cut mid-sound cannot click. (Measuring clicks in the finished sound mistook drum hits and "s" sounds for clicks.)

The voice check and the best take​

voice-check compares a voice line with its script: words that came out differently, and pauses inside a phrase (longer than 0.4 s where the script has no punctuation). best-take ranks several takes of the same line by it, so you keep the first that passes.

node studio-cli.mjs best-take --text "And you don't need a pro plan for it." take1.wav take2.wav take3.wav
1. PASS take2.wav
2. 3 problem(s) take1.wav
- heard "problem" where the script has "pro" …

Lessons that came from these checks, now part of how agents write narration:

  • A question needs a word that announces it ("Still paying for…?", not "Paying for…?"), or the voice reads it as a statement.
  • Long chains of nouns ("a Pro page builder plan") make the voice break before the last one: shorten them.
  • Write the spoken text in lower case ("pro", not "Pro"); the subtitle keeps the capitals.
  • When the same break comes back take after take, reword the line rather than retrying.

Clean up recorded speech​

For a talking head or a recorded voice-over: cleanup finds, from the words and their times,

  • false starts, a phrase broken off and said again ("build your own… build your own header"): the last one stays;
  • fillers (um, uh, er, hmm) when the recogniser writes them;
  • long pauses, over 0.6 s, shortened to 0.25 s,

and renders the clip with those parts cut out, each cut faded so it cannot click. An edit list (.edl.json) beside the result shows every cut.

node studio-cli.mjs cleanup talk.mp4
talk-clean.mp4: 9.88 s → 6.88 s (3.00 s cut, 2 cut(s))
- 0.03-1.52 s: false start: "Build your own header,"
- 4.80-6.31 s: pause of 1.76 s shortened to 0.25 s

Options: --max-pause (default 0.6 s), --keep-pause (0.25 s), --no-fillers, --out. Look at the result before using it: a repeated phrase that was meant ("very, very good") is kept for common words, but not for every case.

Connect your agents​

The first time the AI Dev Kit starts, it asks whether to connect the AI agents it finds on your computer (Claude Code, Cursor, Codex). Yes registers all of these tools with each, and adds the Kinetic Scenes skill to Claude Code; the answer is remembered. To see what it would change, or to do it later:

node studio-cli.mjs connect # shows the plan
node studio-cli.mjs connect --yes # applies it (running it again changes nothing)

It adds kinetic-scenes to Claude Code (claude mcp add --scope user), to Cursor (~/.cursor/mcp.json, keeping what is there) and to Codex (~/.codex/config.toml). See AI agents and projects for working with an agent.