broll-picklisted
Install: claude install-skill jperrello/C0BALT_CUT
# broll-pick
Selects B-roll cutaways for one short. Claude reads the clip transcript +
`chunks.json` (from chunk-captions) + the source `ingest.json`, picks the 3-5
strongest visualizable nouns/topics (NOUN/VERB/EMOTION/PIVOT), and spawns
multiple short cutaway windows per topic — each intercut with the speaker, each
preferring distinct footage. Windows are expressed as whole chunk-index ranges
so no cut lands mid-word.
Per window: keyless YouTube discovery via the mcptube-bundled `yt-dlp`
(`ytsearchN:<query>` — `mcptube discover` is NOT used, it requires an LLM API
key the stack doesn't have), then `mcptube add` the candidate, sample 3 frames
via `mcptube frame`, and show Claude the frame grid (`claude -p` vision) to pick
the best on-subject shot or reject. On reject, the query is rewritten once
(literal↔metaphorical) and retried; a second miss drops the window — no fallback
footage. Chosen segments download via `yt-dlp --download-sections` into
`work/<id>/broll/broll_NN.mp4`.
## Invoke
```
.claude/skills/broll-pick/broll-pick.sh <clip_transcript.json> <chunks.json> <ingest.json> <out_broll_plan.json>
```
- `clip_transcript`: per-clip transcript with `words[]` (clip-local times)
- `chunks`: chunk-captions output (`chunks[]` with `t0/t1/text`)
- `ingest`: `work/<id>/ingest.json` (title + source url)
- `out`: path for `broll_plan.json`; b-roll clips land in `<ingest_dir>/broll/`
## Env
- `BROLL_VISION_CAP` (default 10) — max Claude vision calls per clip.
- `BROLL_PICK=0