promptschat
Gives Claude Code access to the prompts.chat library, letting you search, retrieve and improve AI prompt templates, and find and install Agent Skills from its registry.
Turns a video brief into a storyboard and shot list, extracts a brand-lock file from a brand's existing assets, writes model-specific image and video prompts for each shot, and critiques generated images against their shots. Built for video and visual production teams.
Claude Code
$ npx -y skills add whystrohm/shotkit --agent claude-code
Codex
$ npx skills add whystrohm/shotkit -a codex
Cursor
$ npx skills add whystrohm/shotkit -a cursor
Gemini CLI
$ npx skills add whystrohm/shotkit -a gemini-cli
GitHub Copilot
$ npx skills add whystrohm/shotkit -a github-copilot
OpenCode
$ npx skills add whystrohm/shotkit -a opencode
Windsurf
$ npx skills add whystrohm/shotkit -a windsurf


From a brief to an on-brand storyboard, with prompts for every generator and every frame checked.
Five Claude Skills that turn a creative brief into a production-grade storyboard with model-specific image prompts, on-screen text specs, an HTML preview, and a versioned audit trail, plus a brand-lock extractor that onboards a brand from its existing assets. Built by WhyStrohm. Apache 2.0.
git clone https://github.com/whystrohm/shotkit.git
cd shotkit && ./install.sh
That installs all five skills into ~/.claude/skills/. Restart your Claude Code session and they're live.
The loop is one real Shotkit run: the brief, the brand lock, shots.json, the storyboard, and
the generated frames with the critic's verdict on each. Two shots came back REVISE; you can watch
their re-rolled frames replace them and land ACCEPT. A silent MP4 of the same loop is at
docs/images/demo.mp4. The install film on
whystrohm.com shows the same pipeline, from one sentence to every asset.
You describe a video. The kit produces a complete pre-production package:
output/
├── run.json # Run id + every input pinned by content hash
├── storyboard.md # Human-readable, shot-by-shot
├── shots.json # Schema-validated, machine-readable
├── text-overlays.json # On-screen text + timing
├── brand-lock.snapshot.md # Frozen brand state at generation time
├── prompts/round-1/ # Per-generator prompts, copy-paste ready
│ ├── midjourney.txt
│ ├── flux.txt
│ ├── ideogram.txt
│ ├── gpt-image.txt
│ ├── nano-banana.txt
│ ├── seedream.txt
│ ├── kling.txt # Motion video (default)
│ ├── veo.txt # Motion: dialogue/lipsync + native audio
│ ├── seedance.txt # Motion: multi-shot sequences
│ └── hailuo.txt # Motion: budget iteration
├── frames/round-1/ # Your generated frames
├── critiques/round-1/ # One verdict per shot, hashing what it reviewed
└── preview.html # Single file. Shareable. Printable. Brand-aware.
Files. Not panels. Not a SaaS dashboard. Files an editor, agency, or developer can act on without asking follow-up questions.
Everything is addressed by round and shot, so no two writes land on the same path. Two people can work one project without overwriting each other's verdicts, and round 2 never destroys the prompt that produced round 1's frames.
| Skill | What it does |
|---|---|
brand-lock-extractor | Brand assets (URL / PDF / screenshots) → validate-ready brand-lock.md |
storyboard-architect | Brief → structured storyboard (storyboard.md + shots.json) |
visual-prompt-forge | Shot data → model-specific prompts for 10 generators (6 stills, 4 motion) |
visual-asset-critic | Generated image + intent → markdown critique + machine-readable critique.json |
storyboard-html-preview | Storyboard files → single-file shareable HTML |
They work alone. They work better together, the critic writes a machine-readable verdict the prompt-forge can act on, so generate → critique → revise → re-critique runs as a closed loop. See docs/the-qa-loop.md. They work in Claude Code, Claude.ai, and the Claude API.
Every storyboard tool on the market is a SaaS app with a UI you log into. You upload a brief, you get illustrated panels, you export. The output never leaves the platform.
That's not how serious teams work. Serious teams want:
shotkit is the pre-production method WhyStrohm uses on its own work. We're publishing the methodology because the methodology isn't the moat. The operator is.
Read more in docs/why-this-exists.md.
The category isn't empty. It's full of tools that solve the wrong half.
validate_provenance.py recomputes the hashes. A frame regenerated after its review fails that check instead of passing quietly on a stale ACCEPT.Drop this into a Claude Code session with the skills installed:
"30-second founder explainer for WhyStrohm. We help founder-led brands build content infrastructure instead of running content like a hobby. Pain-reframe-promise. Use
brand-packs/whystrohm.mdas the brand lock. Aspect 9:16."
Claude produces the full output/ set. Open output/preview.html in any browser. Print it. Share it. Hand it to an editor.
A complete worked example lives at skills/storyboard-architect/examples/30s-pain-proof-promise/. Clone the repo and open preview.html in that folder to see what the deliverable looks like.
The complete loop, idea to revised image:
storyboard-architect produces run.json, storyboard.md, shots.json, text-overlays.json, brand-lock.snapshot.md.visual-prompt-forge writes a prompt file per generator under output/prompts/round-1/.tools/copy-prompt.py pipes one shot's prompt to the clipboard. Paste into the generator UI.output/frames/round-1/shot_NN.png.visual-asset-critic scores the frame against the shot spec and brand-lock, writing critiques/round-1/shot_NN.critique.json with the hash of the frame, the prompt, and the brand-lock it judged.tools/validate_provenance.py re-checks every hash and reports which shots are still open.visual-prompt-forge revision mode re-emits prompts for only those shots into round-2/. On REJECT, it stops and asks: a REJECT means no fix path exists.--require-accept exits 0. It exits 0 only when every shot in
shots.json has a critique and every latest verdict is ACCEPT.python ~/.claude/shotkit-tools/validate_provenance.py output/ --require-accept || echo "work remains"
# from a repo clone: python tools/validate_provenance.py output/ --require-accept
Files at every step. See docs/the-qa-loop.md for the full loop and
skills/visual-asset-critic/examples/worked-run/
for a worked two-round example: every file and hash in place, with stand-in frames.
Four ideas. None negotiable.
1. Five-layer prompt anatomy. Every image prompt is composed from locked layers: Brand Lock, Series Lock, Shot Spec, Text Layer, Generator Adapter. Change a brand color once. Every prompt updates. See docs/the-five-layer-prompt.md.
2. Versioned brand state, pinned by hash. Every run snapshots the brand-lock it was built against and records its SHA-256 in run.json. Brand changes later? The snapshot stays frozen, and if someone overwrites it, the hash mismatch says so. A filename alone never proved anything, which is the whole reason the hashes are there. See docs/audit-trail-pattern.md.
3. Text never gets baked into images. On-screen copy is a separate layer with its own timing, font, and animation spec. Always composited after generation. AI text rendering is not production-ready in 2026; treat text as a separate compositing pass.
4. Per-shot rationale. Every shot has a rationale field. Why this beat. Why this duration. Why this framing. Why this on-screen text. Decisions are logged so they can be challenged.
A brand pack is a single Markdown file that locks palette, typography, voice, and visual rules for a project. Three live in this repo:
brand-packs/_template.md. Empty starter.brand-packs/whystrohm.md. Flagship example, the real WhyStrohm brand: dark ground, one accent, Archivo and IBM Plex Mono.brand-packs/examples/saas-clean.md. Neutral B2B SaaS reference.Roll your own from the template. Or generate one from a site, a brand book or screenshots with the brand-lock-extractor skill in this repo.
See brand-packs/README.md for the full pattern.
shotkit produces specs and prompts, not rendered images or videos. The boundary is deliberate:
If you want the version where this is wired into a video render pipeline and publishing across multiple brands: whystrohm.com. The methodology is open. The operator is paid.
See docs/connecting-to-generators.md for how teams typically wire it up themselves, and docs/connecting-to-video-pipelines.md for how shots.json maps to programmatic video frameworks.
shotkit is one stage in a longer content infrastructure pipeline:
visual-asset-critic reviews each generated frame against its shot spectext-overlays.jsonshotkit owns step 2. Steps 3 through 7 are file boundaries, not API integrations. Each downstream tool reads files. Nothing is coupled beyond the schema.
For wiring it up yourself, see docs/connecting-to-generators.md and docs/connecting-to-video-pipelines.md. For the operated version, whystrohm.com.
shotkit is part of a broader WhyStrohm open-source ecosystem of brand-infrastructure tools:
Gives Claude Code access to the prompts.chat library, letting you search, retrieve and improve AI prompt templates, and find and install Agent Skills from its registry.
A Claude Code skill for generating editable PPTX presentations and slides from a workflow, with reusable brand, style, layout, and deck workspaces, native charts, speaker notes, and template filling.
Gives AI agents control over Word, Excel and PowerPoint files, with skills for building .docx reports, academic papers, Excel dashboards and Morph-style animated slides.
A skill that builds animation-rich HTML presentations from scratch or converts PowerPoint files to web slides. Useful for anyone turning a deck into a web presentation.
Turns a video brief into a storyboard and shot list, extracts a brand-lock file from a brand's existing assets, writes model-specific image and video prompts for each shot, and critiques generated images against their shots. Built for video and visual production teams. Install it with the command on its page. It includes brand-lock-extractor, storyboard-architect, storyboard-html-preview. Its skills do not fire on their own yet. Free and open source.
Is this plugin yours?
Claim it with GitHubSubmit a pluginPromote it