Docs/Skills and code/skill video-beat-storyboard

.claude/skills/video-beat-storyboard/SKILL.md

Markdown49 lines5.8 KBSkill: video-beat-storyboard

What the file says about itself

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…

Skill header (frontmatter)

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)

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)

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.