Skip to content
Content
Skill

/visual-prompt-forge

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

From plugin
shotkit
235 skills

Claude Code

$ npx -y skills add whystrohm/shotkit --skill visual-prompt-forge --agent claude-code

SKILL.md

visual-prompt-forge.SKILL.md
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.

Visual Prompt Forge

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.

When to use

Trigger when the user:

  • Hands over a `shots.json` (or any structured shot list) and asks for prompts
  • Asks for "image prompts," "Midjourney prompts," "video prompts," "generation prompts" for a storyboard or its shots
  • Names target generators for a storyboard's prompts (Midjourney, Flux, Ideogram, GPT Image, Nano Banana, Seedream, Kling, Veo, Seedance, Hailuo)
  • Wants the same shot adapted to multiple generators

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.

Where the tools and packs are

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`.

What you produce

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.

The five-layer prompt anatomy

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.

Workflow

Step 1. Read inputs

You need:

  • `shots.json` (required), the structured shot list
  • `brand-lock.snapshot.md` (required), referenced from shots.json
  • Target generators (required), ask if not specified

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.

Step 2. Pick the adapters

For each target generator, read the matching adapter file:

  • `adapters/midjourney.md`
  • `adapters/flux.md`
  • `adapters/ideogram.md`
  • `adapters/gpt-image.md`
  • `adapters/nano-banana.md`
  • `adapters/seedream.md`
  • `adapters/kling.md` (motion video, default)
  • `adapters/veo.md` (motion video, dialogue/lipsync + native audio)
  • `adapters/seedance.md` (motion video, multi-shot sequences)
  • `adapters/hailuo.md` (motion video, budget iteration)

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

Read more
@whystrohm
Ships withshotkit

From a brief to an on-brand storyboard, with prompts for every generator and every frame checked.

Stars on GitHub

Momentum

stars in total
23
Star history of whystrohm/shotkit on GitHub, a chart by star-history.com

Other skills on shotkit.

brand-lock-extractor

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,…

@whystrohm@whystrohmInstall Skill
storyboard-architect

storyboard-architect

Turn a video brief into a storyboard and shot list with shot specs, timing, on-screen text and per-shot rationale. Use when the…

@whystrohm@whystrohmInstall Skill
storyboard-html-preview

storyboard-html-previe…

Render a shotkit storyboard (shots.json, text-overlays.json, brand-lock.snapshot.md) into one self-contained HTML preview that a…

@whystrohm@whystrohmInstall Skill
visual-asset-critic

visual-asset-critic

Critique a generated image against its source storyboard shot and prompt, producing revision notes. Use when the user has…

@whystrohm@whystrohmInstall Skill

More skills from other plugins.

prompt-lookup

prompt-lookup

Activates when the user asks about AI prompts, needs prompt templates, wants to search for prompts, or mentions prompts.chat. Use…

@gh-f@gh-fInstall Skill
ppt-master

ppt-master

AI-driven presentation workflow for generating editable PPTX decks and slides, reconstructing page visuals, creating reusable…

@hugohe3@hugohe3Install Skill
morph-ppt

morph-ppt

Use this skill when the user wants a .pptx with smooth cross-slide animation — PowerPoint Morph transitions, Keynote-style…

officecli12d33k
@iofficeai@iofficeaiInstall Skill

Questions about visual-prompt-forge.

Which coding agents can use visual-prompt-forge?
visual-prompt-forge installs in Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf with the skills CLI, using each agent's flag shown on this page. Flowy's auto-invocation, which fires a skill when your prompt matches, runs in Claude Code only.