brand-lock-extractor
Extract a production-ready brand-lock.md from a brand's existing assets. Point it at a website URL, a brand book PDF, screenshots, or a written description and…
Turn a creative brief into a production-grade storyboard with shot specs, timing, on-screen text, and per-shot rationale. Use when the user describes a video brief, plans a video, references shots or beats, scripts a social video, or hands over a creative concept to break into
$ npx -y skills add whystrohm/shotkit --skill storyboard-architect --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/storyboard-architectContext preview
The summary Claude sees to decide when to auto-load this skill.
Turn a creative brief into a production-grade storyboard with shot specs, timing, on-screen text, and per-shot rationale. Use when the user describes a video brief, plans a video, references shots or beats, scripts a social video, or hands over a creative concept to break into
name: storyboard-architect description: Turn a creative brief into a production-grade storyboard with shot specs, timing, on-screen text, and per-shot rationale. Use when the user describes a video brief, plans a video, references shots or beats, scripts a social video, or hands over a creative concept to break into scenes. Produces run.json, storyboard.md, shots.json, text-overlays.json, and brand-lock.snapshot.md. Pairs with visual-prompt-forge, visual-asset-critic, storyboard-html-preview.
You are turning a creative brief into a deterministic storyboard. The output is a set of files an editor, agency, or developer can act on without asking follow-up questions.
This is not a creative-writing exercise. The output is a spec.
Trigger this skill when the user:
If the user only wants prompts for an image generator (no narrative structure), use `visual-prompt-forge` directly instead.
For every storyboard run, create this exact set of files in the working output directory:
output/ ├── run.json # Run identity + every input pinned by content hash ├── storyboard.md # Human-readable, structured per shot ├── shots.json # Machine-readable, schema in templates/shots.schema.json ├── text-overlays.json # On-screen text + timing └── brand-lock.snapshot.md # Frozen copy of the brand-lock used (audit trail)
`run.json` is what makes the rest of the tree auditable later. A filename says nothing about the bytes behind it, so the snapshot sitting next to a set of frames is not proof that it is the snapshot they were built from. The hashes in `run.json` are that proof. Write it once, at the end of the run, and never edit it.
If the user asks for image prompts or HTML preview, hand off to `visual-prompt-forge` or `storyboard-html-preview`, those skills consume `shots.json` directly. Don't try to do their job here.
You need these. If any are missing, ask before drafting.
| Input | Required? | Default if absent | |---|---|---| | Brief (problem, audience, goal) | Yes | Ask | | Total duration | Yes | Ask | | Aspect ratio | Yes | Ask (16:9, 9:16, 1:1) | | Beat framework | No | Suggest based on brief | | Brand-lock file path | No | Use `brand-packs/_template.md` and flag the gap | | Voiceover style (VO present, on-screen only, captions) | No | Ask if unclear | | Target generator(s) for downstream prompts | No | Note as "to be specified" |
Follow this sequence. Don't skip steps even if the brief seems simple.
If a brand-lock file path is provided, read it first. Extract:
If no brand-lock is provided, copy `brand-packs/_template.md` into the output as `brand-lock.snapshot.md` with a note: `# UNCONFIGURED, using template defaults. Recommend providing a real brand-lock for production work.`
Read `references/beat-frameworks.md`. Pick the one that matches the brief. Common cases:
If none fit cleanly, build a custom beat structure but document why in `storyboard.md` rationale section.
Read `references/timing-rules.md` for the math. Default cadence:
Don't fight the framework. If the brief and the duration disagree, surface the disagreement before drafting.
Read `references/shot-grammar.md` for controlled vocabulary. The field names below are the schema's field names. `templates/shots.schema.json` sets `additionalProperties: false`, so a near-miss like `environment` instead of `environment_ref` is a validation failure, not a synonym.
handheld / orbit / whip / rack. All eleven are legal; the schema enum is the authority and `references/shot-grammar.md` explains when each earns its keep
more than one overlay
Note on `rack`: as a `motion` value it means the rack focus is the shot's movement; as a `depth_of_field` value it means focus shifts mid-shot. Same word, two fields, two meanings.
Every piece of on-screen text becomes an entry in `text-overlays.json`. Never bake text into the visual description. Each overlay has:
The pre-production system we use to ship hundreds of videos a month. Open-sourced.
Extract a production-ready brand-lock.md from a brand's existing assets. Point it at a website URL, a brand book PDF, screenshots, or a written description and…
Render a structured storyboard (storyboard.md, shots.json, text-overlays.json, brand-lock.snapshot.md) into a single-file HTML preview that is shareable,…
Critique a generated image against its source storyboard shot and prompt, producing revision notes. Use when the user has generated an image and wants feedback…
Generate model-specific prompts from shots.json. Outputs copy-paste-ready prompts for stills (Midjourney, Flux, Ideogram, GPT Image, Nano Banana, Seedream) and…