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,…
Write model-specific image and video prompts for the shots in a storyboard or shot list (shots.json). Outputs copy-paste-ready prompts for stills (Midjourney, Flux, Ideogram, GPT Image, Nano Banana, Seedream) and motion video (Kling, Veo, Seedance, Hailuo), and a revision mode
Claude Code
$ npx -y skills add whystrohm/shotkit --skill visual-prompt-forge --agent claude-code
Codex
$ npx skills add whystrohm/shotkit --skill visual-prompt-forge -a codex -y
Cursor
$ npx skills add whystrohm/shotkit --skill visual-prompt-forge -a cursor -y
Gemini CLI
$ npx skills add whystrohm/shotkit --skill visual-prompt-forge -a gemini-cli -y
GitHub Copilot
$ npx skills add whystrohm/shotkit --skill visual-prompt-forge -a github-copilot -y
OpenCode
$ npx skills add whystrohm/shotkit --skill visual-prompt-forge -a opencode -y
Windsurf
$ npx skills add whystrohm/shotkit --skill visual-prompt-forge -a windsurf -y
name: visual-prompt-forge description: Write model-specific image and video prompts for the shots in a storyboard or shot list (shots.json). Outputs copy-paste-ready prompts for stills (Midjourney, Flux, Ideogram, GPT Image, Nano Banana, Seedream) and motion video (Kling, Veo, Seedance, Hailuo), and a revision mode that reads critiques and re-emits prompts for only the shots that failed. Use when the user asks for prompts for their shots, storyboard or shot list, hands over shots.json, or asks to apply a critique to failed shots. Naming a generator is not enough on its own; the request has to be for prompts for storyboard shots. Composes with storyboard-architect upstream and visual-asset-critic downstream.
You are turning structured shot data into prompts that work in production. Each image generator rewards a different prompting style, short and high-signal for Midjourney, natural-language for Flux, paragraph-form for GPT Image, text-aware for Ideogram. A prompt that crushes in one will produce slop in another.
This skill adapts. Same shot, different syntax.
Trigger when the user:
Naming a generator is not enough on its own. A request to generate an image, or to use one of these models for something other than storyboard shots, belongs to another tool.
If the user wants to build a storyboard from scratch (no shots.json yet), use `storyboard-architect` first, then chain into this skill.
After `./install.sh`, the validators and helpers are in `~/.claude/shotkit-tools/` and the brand packs are in `~/.claude/shotkit-brand-packs/`. A `--project` install puts both under `./.claude/` instead. From a repo clone they are `tools/` and `brand-packs/`. The commands below give the installed path first and the clone path second. The tools need `pip install pyyaml jsonschema`.
For a given `shots.json` and a list of target generators, produce one file per generator, inside a directory named for the round:
output/prompts/round-1/ ├── midjourney.txt # If targeted ├── flux.txt ├── ideogram.txt ├── gpt-image.txt ├── nano-banana.txt ├── seedream.txt ├── kling.txt # Motion-aware video, default ├── veo.txt # Motion, dialogue/lipsync + native audio ├── seedance.txt # Motion, multi-shot sequences └── hailuo.txt # Motion, budget iteration
Round 1 is the first pass. Revision mode writes `output/prompts/round-2/`, and so on. The round in the path keeps every round's prompts on disk, so the prompt that produced a frame is always there to check against it.
Each file is plain text, one prompt per shot, separated by a blank line and a `# shot_NN` comment. Designed for copy-paste workflows, drop into the generator's UI or pipe into an API.
Every prompt is composed from these layers. Read `references/prompt-anatomy.md` for the full theory. Quick version:
1. **Brand Lock**, palette, type, mood, "never" list (constant across project) 2. **Series Lock**, character/environment/lighting anchors (constant across storyboard) 3. **Shot Spec**, framing, angle, motion, subject (per shot) 4. **Text Layer**, **never in the prompt**, composited separately 5. **Generator Adapter**, model-specific syntax wrapper
The first four come from `shots.json` and the brand-lock. The fifth is what this skill applies.
You need:
Validate before composing:
python ~/.claude/shotkit-tools/validate_shots.py output/ # from a repo clone: # python tools/validate_shots.py output/
If the brand-lock is missing or `shots.json` does not validate, stop and tell the user. Don't try to forge prompts from incomplete data.
If the tools are not on hand (a Claude.ai upload, or a single-skill install), read the schema from `../storyboard-architect/templates/shots.schema.json` and check by hand. That relative path only resolves when the skills sit side by side; when they don't, ask the user for the schema rather than composing from memory of it.
For each target generator, read the matching adapter file:
Each adapter file documents the prompting style, parameter syntax, and known pitfalls for that generator. You **must** read the adapter before writing prompts for it. Don't guess from training data, image-gen syntax has churned multiple times.
**`adapters/_capabilities.json` is the single source of truth for per-generator limits** (`max_prompt_words`, `supports_text_render`, `supports_motion`, `aspect_param`, and so on). Read it once at the start and respect those values when composing, and do not target motion on a stills-only generator.
`max_prompt_words` is a ceiling. The range in an adapter `.md` is the recommended target and always sits inside that ceiling, so a `.md` saying "40 to 70 words" under a ceiling of 120 is guidance, not a conflict. Where a fact in a `.md` and a fact in the JSON genuinely disagre
From a brief to an on-brand storyboard, with prompts for every generator and every frame checked.
Extract a production-ready brand-lock.md from a brand's existing assets. Point it at a website URL, a brand book PDF,…
Turn a video brief into a storyboard and shot list with shot specs, timing, on-screen text and per-shot rationale. Use when the…
Render a shotkit storyboard (shots.json, text-overlays.json, brand-lock.snapshot.md) into one self-contained HTML preview that a…
Critique a generated image against its source storyboard shot and prompt, producing revision notes. Use when the user has…
Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…
AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…
Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…
Create stunning, animation-rich HTML presentations from scratch or by converting PowerPoint files. Use when the user wants to…