Docs/Skills and code/skill video-beat-storyboard
.claude/skills/video-beat-storyboard/SKILL.md
Stage 2 of the video beat pipeline (run on HAIKU). For one prepared beat of the Moser Baer video, write a compact storyboard plan (one scene per sentence or clause), compile it with compose-beat.js into the beat sheet and ledger, fetch…
name: video-beat-storyboard
description: Stage 2 of the video beat pipeline (run on HAIKU). For one prepared beat of the Moser Baer video, write a compact storyboard plan (one scene per sentence or clause), compile it with compose-beat.js into the beat sheet and ledger, fetch assets, and get the lint to zero hard gates. A fixed recipe with a short reading list; do not explore. Use via the video-beats-orchestrate skill or the video-beat-storyboard agent.
Storyboard one beat (Haiku, fixed recipe)
Model rule. Run on Haiku: Agent(subagent_type: "video-beat-storyboard", model: "haiku", prompt: "Storyboard beat B7"). The work is constrained so that a small model does it well: you write a short plan, a tool does the bookkeeping, and the lint checks you. Do not explore the repo. Read only what is listed. Budget: about 15 tool calls.
One beat B# (named in your prompt). Prerequisite files (made by video-beat-prepare): research/the-fall-of-moser-baer/video/brief-B#.md and timing/words-B#.json. If missing, stop and report.
Read (only these)
research/the-fall-of-moser-baer/video/brief-B#.md: the voice sentence by sentence (S1, S2 ...), the numerals it speaks, the graphic note, the plan section for this beat, candidate fact rows..claude/skills/video-visual-production/references/plan-format.md: the plan format, the sentence-to-scene table, one example per scene type. This is your whole manual. Do not read the catalogue, the runbook or the other beats' sheets.- If a sentence cites a source you need to verify: the fact-ledger row (
grep -n "keyword" research/the-fall-of-moser-baer/script/SCRIPT-v7.md), not the whole file.
Honesty card (the rules; the lint enforces most)
- Draw only facts whose status is
V,V-1source,derivedoranalysis(in the brief, the script's[V]isV; a single-source[V]isV-1source). A row marked[CHECK]or[V-search]is never drawn: use a plainslamand say so in the report. Mahesh Sharma is such a row: never name him, never cite his row; a faceless worker or "the union's president" is fine. - Never invent a number, a name, a face, a logo, a quote or a picture. No news video, no logos, no article photographs, no stock, no AI pictures of real places.
- Every number the voice says is shown in its scene; every number shown is said. If the voice says it in Hinglish words, use
say. - A source line on every data or evidence scene. A single-source figure uses status
dotted; something searched for and not found uses the ghost form. - Quotes only with wording you have read on the page or that a
[V]ledger row gives. - Person: name card or label where they first arrive.
Recipe (follow in order)
- Read the brief. For each sentence S#, decide the scene with the table in plan-format.md. Prefer the scene the "plan section" in the brief names. Rules: 3 to 8 s per scene; 12 to 22 scenes for a 100 s beat; no more than 3
slamin a row and no more than 40%slam; use at least 5 different scene types; keep hard windows (many numbers) simple, one number per picture; reuse the same look for the same idea. - Write
research/the-fall-of-moser-baer/video/plan-B#.json(Write tool, one go):factsfirst (copy claim, source, url from the brief's rows),assetsif needed, thenscenes. Cues are"@word"markers, never word indexes. Put each number's cue on the word that says it. Put a text cue on an early word so it can be held (text needs 1.2 s, 0.35 s per word). - Compose:
node .claude/skills/video-visual-production/scripts/compose-beat.js --beat B#. It prints errors in plain words (sentence not covered, a word it cannot find with the list of the scene's words, a missing cue). Fix the plan, never the beat sheet, and run again. At most 4 rounds; if still failing, stop and report the exact message. - Assets (only if the plan has
assets):node .claude/skills/video-visual-production/scripts/assets.js --sheet research/the-fall-of-moser-baer/video/beat-sheet-B#.json. A failed capture falls back to typeset (allowed; report it). Then compose again if you changed the plan. - Lint is run by compose. It must say
Hard gates failing: 0. Common fixes (all in the plan):T1text held too briefly: cue it on an earlier word or shorten it;H8a spoken number not shown or a shown number not spoken: add or remove it, or usesay;H2a data scene with no fact: addfacts;STRUCTa missing cue name: add it. Warnings: fix the cheap ones, leave the rest. - Look at two scenes (the data scene and the doc or photo scene, if any):
node .claude/skills/video-visual-production/scripts/preview-scene.js --sheet research/the-fall-of-moser-baer/video/beat-sheet-B#.json --scene B#.NN, then open the PNG. If text is cut off or overlaps, shorten the text in the plan, compose again. - Stop. Do not build the video (the builder does). Do not edit any code or skill.
If the beat needs a picture the library cannot draw
Use the nearest scene or slam, and write one line in research/the-fall-of-moser-baer/video/needs-B#.md: scene id, what was wanted, what you used. Do not try to build it.
Report (final message, under 15 lines)
Beat; scenes and types used; the lint line (Hard gates failing: N. Warnings: M); assets (fetched, typeset fallbacks); waivers; facts you could not draw (CHECK or V-search) and what you drew instead; needs-B#.md lines; cue words that sit on estimated times (the lint lists them); the files written. Plain facts only.
Rules (all parallel roles)
- Touch only your beat's files (
plan-B#.json,beat-sheet-B#.json,ledger-B#.json,needs-B#.md, assets of your own beat). Never edit code, skills,tools.md,CLAUDE.md, memory or another beat. Never commit, push or deploy. Do not runbuild-beat.js. - Stop after two failed attempts at the same problem and report it.
Show the raw text
---
name: video-beat-storyboard
description: Stage 2 of the video beat pipeline (run on HAIKU). For one prepared beat of the Moser Baer video, write a compact storyboard plan (one scene per sentence or clause), compile it with compose-beat.js into the beat sheet and ledger, fetch assets, and get the lint to zero hard gates. A fixed recipe with a short reading list; do not explore. Use via the video-beats-orchestrate skill or the video-beat-storyboard agent.
---
# Storyboard one beat (Haiku, fixed recipe)
**Model rule.** Run on **Haiku**: `Agent(subagent_type: "video-beat-storyboard", model: "haiku", prompt: "Storyboard beat B7")`. The work is constrained so that a small model does it well: you write a short plan, a tool does the bookkeeping, and the lint checks you. **Do not explore the repo.** Read only what is listed. Budget: about 15 tool calls.
One beat `B#` (named in your prompt). Prerequisite files (made by `video-beat-prepare`): `research/the-fall-of-moser-baer/video/brief-B#.md` and `timing/words-B#.json`. If missing, stop and report.
## Read (only these)
1. `research/the-fall-of-moser-baer/video/brief-B#.md`: the voice sentence by sentence (S1, S2 ...), the numerals it speaks, the graphic note, the plan section for this beat, candidate fact rows.
2. `.claude/skills/video-visual-production/references/plan-format.md`: the plan format, the sentence-to-scene table, one example per scene type. **This is your whole manual.** Do not read the catalogue, the runbook or the other beats' sheets.
3. If a sentence cites a source you need to verify: the fact-ledger row (`grep -n "keyword" research/the-fall-of-moser-baer/script/SCRIPT-v7.md`), not the whole file.
## Honesty card (the rules; the lint enforces most)
- Draw only facts whose status is `V`, `V-1source`, `derived` or `analysis` (in the brief, the script's `[V]` is `V`; a single-source `[V]` is `V-1source`). A row marked `[CHECK]` or `[V-search]` is **never** drawn: use a plain `slam` and say so in the report. Mahesh Sharma is such a row: never name him, never cite his row; a faceless worker or "the union's president" is fine.
- Never invent a number, a name, a face, a logo, a quote or a picture. No news video, no logos, no article photographs, no stock, no AI pictures of real places.
- Every number the voice says is shown in its scene; every number shown is said. If the voice says it in Hinglish words, use `say`.
- A source line on every data or evidence scene. A single-source figure uses status `dotted`; something searched for and not found uses the ghost form.
- Quotes only with wording you have read on the page or that a `[V]` ledger row gives.
- Person: name card or label where they first arrive.
## Recipe (follow in order)
1. **Read the brief.** For each sentence S#, decide the scene with the table in plan-format.md. Prefer the scene the "plan section" in the brief names. Rules: 3 to 8 s per scene; 12 to 22 scenes for a 100 s beat; no more than 3 `slam` in a row and no more than 40% `slam`; use at least 5 different scene types; keep hard windows (many numbers) simple, one number per picture; reuse the same look for the same idea.
2. **Write `research/the-fall-of-moser-baer/video/plan-B#.json`** (Write tool, one go): `facts` first (copy claim, source, url from the brief's rows), `assets` if needed, then `scenes`. Cues are `"@word"` markers, never word indexes. Put each number's cue on the word that says it. Put a text cue on an early word so it can be held (text needs 1.2 s, 0.35 s per word).
3. **Compose:** `node .claude/skills/video-visual-production/scripts/compose-beat.js --beat B#`. It prints errors in plain words (sentence not covered, a word it cannot find with the list of the scene's words, a missing cue). **Fix the plan, never the beat sheet**, and run again. At most 4 rounds; if still failing, stop and report the exact message.
4. **Assets** (only if the plan has `assets`): `node .claude/skills/video-visual-production/scripts/assets.js --sheet research/the-fall-of-moser-baer/video/beat-sheet-B#.json`. A failed capture falls back to typeset (allowed; report it). Then compose again if you changed the plan.
5. **Lint** is run by compose. It must say `Hard gates failing: 0`. Common fixes (all in the plan): `T1` text held too briefly: cue it on an earlier word or shorten it; `H8` a spoken number not shown or a shown number not spoken: add or remove it, or use `say`; `H2` a data scene with no fact: add `facts`; `STRUCT` a missing cue name: add it. Warnings: fix the cheap ones, leave the rest.
6. **Look at two scenes** (the data scene and the doc or photo scene, if any): `node .claude/skills/video-visual-production/scripts/preview-scene.js --sheet research/the-fall-of-moser-baer/video/beat-sheet-B#.json --scene B#.NN`, then open the PNG. If text is cut off or overlaps, shorten the text in the plan, compose again.
7. **Stop.** Do not build the video (the builder does). Do not edit any code or skill.
## If the beat needs a picture the library cannot draw
Use the nearest scene or `slam`, and write one line in `research/the-fall-of-moser-baer/video/needs-B#.md`: scene id, what was wanted, what you used. Do not try to build it.
## Report (final message, under 15 lines)
Beat; scenes and types used; the lint line (`Hard gates failing: N. Warnings: M`); assets (fetched, typeset fallbacks); waivers; facts you could not draw (CHECK or V-search) and what you drew instead; needs-B#.md lines; cue words that sit on estimated times (the lint lists them); the files written. Plain facts only.
## Rules (all parallel roles)
- Touch only your beat's files (`plan-B#.json`, `beat-sheet-B#.json`, `ledger-B#.json`, `needs-B#.md`, assets of your own beat). Never edit code, skills, `tools.md`, `CLAUDE.md`, memory or another beat. Never commit, push or deploy. Do not run `build-beat.js`.
- Stop after two failed attempts at the same problem and report it.
Shown as it is in the repository at build time (2026-11-03); the home directory appears as <home>. If this page and the file differ, the file is right. Back to the catalogue.