From image-production
Scaffold a multi-touchpoint image workflow inside the registered image workspace — a structured pipeline with explicit human review gates and optional cloud-AI generation/edit steps (Fal nano-banana via MCP). Use when the user says "new image workflow", "scaffold a workflow", "set up an image pipeline", "iterative image project", or describes a job that needs multiple rounds of generation → review → revision → export.
npx claudepluginhub danielrosehill/claude-code-plugins --plugin image-productionThis skill is limited to using the following tools:
Scaffold a structured, multi-stage image workflow inside the user's registered image workspace. Unlike `new-project` (a flat source/working/exports layout), a workflow expects **iteration**: generation, human review, revision, and export are explicit stages, each with their own folder and manifest entry.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Share bugs, ideas, or general feedback.
Scaffold a structured, multi-stage image workflow inside the user's registered image workspace. Unlike new-project (a flat source/working/exports layout), a workflow expects iteration: generation, human review, revision, and export are explicit stages, each with their own folder and manifest entry.
Cloud AI (Fal nano-banana via the nano-tech-diagrams MCP) is wired in as an optional driver for the generation and revision stages.
new-project — single batch of images, photo-editing style, no iteration loop.new-workflow — generative or hybrid work with multiple touchpoints: brief → references → generate → review → revise → export. Use when the user expects to come back to the project across several sessions and wants a stable structure to resume into.CONFIG="${CLAUDE_USER_DATA:-${XDG_DATA_HOME:-$HOME/.local/share}/claude-plugins}/image-production/workspace.json"
test -f "$CONFIG" || { echo "No workspace registered — run workspace-setup first."; exit 1; }
WS=$(jq -r .path "$CONFIG")
Ask (or infer if obvious):
fal-nano-banana (via mcp__jungle-shared__nano-tech-diagrams__*). none if the user is bringing their own images.PROJ="$WS/<slug>"
test -e "$PROJ" && { echo "Already exists: $PROJ"; exit 1; }
mkdir -p "$PROJ"/{01-brief,02-references,03-generation,04-review,05-revision,06-export,_manifest}
mkdir -p "$PROJ"/05-revision/round-{1..N} # N = expected rounds
| Stage | Purpose | Touchpoint? |
|---|---|---|
01-brief/ | brief.md — goal, audience, constraints, do/don't list | ✓ user |
02-references/ | Mood board, reference images, prompt fragments | ✓ user |
03-generation/ | First-pass generations (Fal output lives here) | ai |
04-review/ | Selected candidates from 03-generation/ + review notes | ✓ user |
05-revision/ | Per-round subfolders with revised generations + notes | ai + user |
06-export/ | Final deliverables — sized, formatted, metadata-scrubbed | ai |
_manifest/ | workflow.json — pipeline state; prompts.md — running prompt log | ai |
$PROJ/_manifest/workflow.json:
{
"slug": "<slug>",
"created": "<ISO date>",
"brief": "<one-line summary>",
"driver": "fal-nano-banana | none",
"stages": [
{"id": "01-brief", "status": "pending", "type": "human"},
{"id": "02-references", "status": "pending", "type": "human"},
{"id": "03-generation", "status": "pending", "type": "ai"},
{"id": "04-review", "status": "pending", "type": "human"},
{"id": "05-revision", "status": "pending", "type": "ai+human", "rounds": N, "current_round": 0},
{"id": "06-export", "status": "pending", "type": "ai"}
],
"final": {"aspect_ratio": "<...>", "resolution": "1K", "format": "png"}
}
01-brief/brief.md — markdown template with sections: Goal, Audience, Deliverables, Constraints, Do, Don't, Reference Links._manifest/prompts.md — append-only log; one heading per generation call with the prompt, model params, and resulting filenames.README.md at project root — slug, brief, driver, ISO date, stage checklist (mirrors workflow.json), and a "Resume here" pointer to the first non-done stage.If the workspace itself is a git repo (check git -C "$WS" rev-parse --git-dir), the new workflow is automatically tracked — no separate init. Otherwise, ask whether to git init the project folder.
Report:
01-brief)01-brief/brief.md and fill in)Subsequent sessions resume by reading _manifest/workflow.json and continuing from the first stage with status != "done".
When the active stage is ai-typed and the driver is fal-nano-banana:
ai-graphics skill for prompt style).mcp__jungle-shared__nano-tech-diagrams__text_to_image with resolution: "1K" and the configured aspect ratio. For revision rounds that build on a prior image, use mcp__jungle-shared__nano-tech-diagrams__image_to_image and pass the selected candidate.fal.media URL into the stage folder:
curl -sSL -o "$PROJ/03-generation/$(date +%s)-<slug>.png" "<fal URL>"
_manifest/prompts.md: stage, round, prompt, params, output filename.awaiting-review in workflow.json and surface the candidates to the user.At each human stage, stop and prompt the user. Do not auto-advance. Show:
notes.md in the stage folder)After the user records the decision, mark the stage done and advance.
When all revision rounds are done:
05-revision/round-N/ folder.optimize-jpeg / convert-to-webp / scrub-metadata skills as appropriate).06-export/ with stable filenames (<slug>-<variant>.<ext>).done.03-generation/ or 05-revision/round-*/ — always timestamp-prefix.workflow.json and note it in prompts.md.