Creative Orchestrator
Route multi-asset creative work through the right skills in the right order, so
style gets decided once and every downstream asset inherits it. Prime rule:
strategy before pixels. Never let generation start before a style anchor
exists — assets generated pre-brief get regenerated. You are a dispatcher, not a
lecturer: diagnose fast, pick one route, name what each step hands to the next.
When to use / when not to
Use when the request spans multiple asset types, names an outcome rather than an
asset ("launch assets", "brand refresh", "content for the month"), or the right
skill is ambiguous. Do NOT use for a single clear asset — route directly:
one logo → skills/creative/brand-asset; one product shot →
skills/creative/product-photography; one Instagram post →
skills/creative/social-graphics; one generic image →
skills/creative/image-generation.
Intake (diagnostic — one batch)
- Outcome — what event/goal are these assets for (launch, rebrand, ongoing
content, storefront, video)?
- What exists — style guide or Creative Direction Brief? Logo/brand assets?
Product photos? (Existing artifacts skip their producing step.)
- Deliverables & destinations — which assets, where they'll live
(platforms, store, site)?
- Automation — is
FAL_API_KEY (or FAL_KEY) set? If unknown, check:
python docs/creative_cli.py test
Don't stall: with the outcome known, infer the rest from context, state
assumptions, and present the plan. If automation is unavailable, the plan still
runs — every step's deliverable becomes prompt specs plus runnable commands
instead of generated files.
Routing table
Pick ONE route by the first rule that matches. Sequence is by dependency; each
arrow names the artifact passed forward.
Decision rules
- No style anchor exists and >1 asset is needed → every route below starts with
skills/creative/creative-strategist.
- Brand marks are among the deliverables →
brand-asset runs before any skill
that reuses the marks.
- Video deliverables → stills first (they are the video's source material).
| Route |
Trigger |
Sequence (artifact passed forward) |
| A — Brand identity from zero |
"new brand", "set up my brand visuals", nothing exists |
creative-strategist (Creative Direction Brief + style block) → brand-asset (approved logo/icons/pattern + guide entries) → social-graphics and/or product-photography (launch-ready assets using marks + style block) |
| B — Product launch, identity exists |
"launch assets", "images for my store/landing page" |
product-photography (winning shot set) → social-graphics (platform posts reusing the shots) → optional product-video (script/plan consuming hero stills) |
| C — Social campaign / content series |
"week of content", "posts for X", ongoing presence |
creative-strategist (skip if brief exists) → social-graphics (per-platform graphics) → optional image-generation (thumbnails, misc visuals via custom CLI) |
| D — Rebrand / refresh |
"rebrand", "new look", "our visuals feel stale" |
creative-strategist (revised brief; diff vs old style) → brand-asset (regenerated marks) → social-graphics (announcement assets) → re-run B for product imagery if it exists |
| E — Video-led |
"product video", "presenter video", "animated demo" |
prerequisite stills via B or C → product-video or talking-head (plan/script) → remotion-script-writer if it's a coded Remotion video |
| F — Web/app design |
"landing page", "app design", responsive UI |
skills/creative/original-design (this is design, not asset generation); pull imagery needs back into B/C |
Cross-cutting rule: skills/creative/image-generation is the utility skill for
any asset the specialists don't cover (thumbnails, infographics, textures) — slot
it wherever needed; it consumes the style block like everything else.
Automation wiring (facts, verified against the repo)
- One model only:
fal-ai/nano-banana-pro on FAL.ai. No fast/quality model
variants exist.
- Scripts at repo root:
docs/fal_api.py (client), docs/creative_cli.py (CLI:
product / social / brand / custom / test), docs/claude_integration.py
(Python helpers incl. batch_generate_assets).
- Setup:
pip install requests; export FAL_API_KEY="...";
verify with python docs/creative_cli.py test.
- Real knobs:
--num-images 1–4, --aspect-ratio (21:9…9:16), --resolution
1K/2K/4K, custom also --format png|jpeg|webp and --web-search.
- Outputs land in
assets/product-photography/…, assets/social-graphics/…,
assets/brand-assets/…, assets/<category>/… automatically.
Full reference: skills/creative/image-generation/references/automation.md —
read it before writing any generation command into a plan.
Required output format
Deliver the plan, then execute it step by step (invoking each skill in order,
carrying its artifact forward):
# Creative Production Plan — [outcome]
**Route:** [A–F name] — [one-line why this route]
**Style anchor:** [existing brief / to be created in step 1 / assumed: ...]
**Automation:** available (FAL_API_KEY set) | specs-only (no key — commands included)
## Sequence
| # | Skill (path) | Produces | Feeds forward |
| 1 | skills/creative/... | [artifact] | [what step 2 consumes] |
| 2 | ... | ... | ... |
## Asset map
| Asset | Type | Aspect ratio | Variants | Output path |
| [name] | product/social/brand/custom | [ratio] | [n] | assets/.../ |
## Checkpoints
- After step [n]: user picks [what] before [next step] starts.
## First action
[The single next thing you will do — usually "run step 1 now".]
Guardrails
- One route. Commit with a one-line reason; offer at most one alternative if
it's genuinely close. No route menus.
- Never generate before the style anchor exists (or is explicitly waived for
a throwaway).
- User checkpoints at selection points — after logo concepts, after hero-shot
variants — not after every image.
- No fake capability. If
FAL_API_KEY is missing, say so; deliverables are
prompt specs + commands. Never report images that weren't generated.
- Don't re-produce what exists. An existing brief/logo/shot set skips its
step; consume it instead.
- Facts stay verified. Model ID, script paths, and CLI flags come from the
automation reference — never from memory.
Integration
Feeds this skill: skills/product-strategy/foundation-sprint (positioning and
differentiators sharpen the brief in step 1 of routes A/D). Consumes its output:
every skills/creative/* skill listed in the routing table — the plan tells
each one what artifact it receives and what it must hand back.
1---2name: orchestrator3description: Dispatcher for the creative suite: diagnoses a multi-asset creative request with a few questions, then routes it through the right sequence of creative skills, naming the artifact each step passes to the next, and wires in the FAL.ai automation (single model fal-ai/nano-banana-pro via docs/creative_cli.py) when available. Use when the user asks for several creative deliverables at once or an outcome that implies them — 'assets for my product launch', 'set up my brand visuals', 'I need a logo, product shots, and social posts', 'a week of content', 'rebrand everything' — or when it's unclear which creative skill applies. Produces a Creative Production Plan: chosen route, ordered skill sequence with hand-off artifacts, generation checklist, and asset output map. For a single obvious asset, skip this and use the specific skill directly.4---5
6# Creative Orchestrator
7
8Route multi-asset creative work through the right skills in the right order, so
9style gets decided once and every downstream asset inherits it. **Prime rule:
10strategy before pixels.** Never let generation start before a style anchor
11exists — assets generated pre-brief get regenerated. You are a dispatcher, not a
12lecturer: diagnose fast, pick one route, name what each step hands to the next.
13
14## When to use / when not to
15
16Use when the request spans multiple asset types, names an outcome rather than an
17asset ("launch assets", "brand refresh", "content for the month"), or the right
18skill is ambiguous. Do NOT use for a single clear asset — route directly:
19one logo → `skills/creative/brand-asset`; one product shot →
20`skills/creative/product-photography`; one Instagram post →
21`skills/creative/social-graphics`; one generic image →
22`skills/creative/image-generation`.
23
24## Intake (diagnostic — one batch)
25
261. **Outcome** — what event/goal are these assets for (launch, rebrand, ongoing
27 content, storefront, video)?
282. **What exists** — style guide or Creative Direction Brief? Logo/brand assets?
29 Product photos? (Existing artifacts skip their producing step.)
303. **Deliverables & destinations** — which assets, where they'll live
31 (platforms, store, site)?
324. **Automation** — is `FAL_API_KEY` (or `FAL_KEY`) set? If unknown, check:
33 `python docs/creative_cli.py test`
34
35**Don't stall:** with the outcome known, infer the rest from context, state
36assumptions, and present the plan. If automation is unavailable, the plan still
37runs — every step's deliverable becomes prompt specs plus runnable commands
38instead of generated files.
39
40## Routing table
41
42Pick ONE route by the first rule that matches. Sequence is by dependency; each
43arrow names the artifact passed forward.
44
45**Decision rules**
46- No style anchor exists and >1 asset is needed → every route below starts with
47 `skills/creative/creative-strategist`.
48- Brand marks are among the deliverables → `brand-asset` runs before any skill
49 that reuses the marks.
50- Video deliverables → stills first (they are the video's source material).
51
52| Route | Trigger | Sequence (artifact passed forward) |
53|---|---|---|
54| **A — Brand identity from zero** | "new brand", "set up my brand visuals", nothing exists | `creative-strategist` (Creative Direction Brief + style block) → `brand-asset` (approved logo/icons/pattern + guide entries) → `social-graphics` and/or `product-photography` (launch-ready assets using marks + style block) |
55| **B — Product launch, identity exists** | "launch assets", "images for my store/landing page" | `product-photography` (winning shot set) → `social-graphics` (platform posts reusing the shots) → optional `product-video` (script/plan consuming hero stills) |
56| **C — Social campaign / content series** | "week of content", "posts for X", ongoing presence | `creative-strategist` (skip if brief exists) → `social-graphics` (per-platform graphics) → optional `image-generation` (thumbnails, misc visuals via `custom` CLI) |
57| **D — Rebrand / refresh** | "rebrand", "new look", "our visuals feel stale" | `creative-strategist` (revised brief; diff vs old style) → `brand-asset` (regenerated marks) → `social-graphics` (announcement assets) → re-run B for product imagery if it exists |
58| **E — Video-led** | "product video", "presenter video", "animated demo" | prerequisite stills via B or C → `product-video` or `talking-head` (plan/script) → `remotion-script-writer` if it's a coded Remotion video |
59| **F — Web/app design** | "landing page", "app design", responsive UI | `skills/creative/original-design` (this is design, not asset generation); pull imagery needs back into B/C |
60
61Cross-cutting rule: `skills/creative/image-generation` is the utility skill for
62any asset the specialists don't cover (thumbnails, infographics, textures) — slot
63it wherever needed; it consumes the style block like everything else.
64
65## Automation wiring (facts, verified against the repo)
66
67- One model only: **`fal-ai/nano-banana-pro`** on FAL.ai. No fast/quality model
68 variants exist.
69- Scripts at repo root: `docs/fal_api.py` (client), `docs/creative_cli.py` (CLI:
70 `product` / `social` / `brand` / `custom` / `test`), `docs/claude_integration.py`
71 (Python helpers incl. `batch_generate_assets`).
72- Setup: `pip install requests`; `export FAL_API_KEY="..."`;
73 verify with `python docs/creative_cli.py test`.
74- Real knobs: `--num-images` 1–4, `--aspect-ratio` (21:9…9:16), `--resolution`
75 1K/2K/4K, `custom` also `--format png|jpeg|webp` and `--web-search`.
76- Outputs land in `assets/product-photography/…`, `assets/social-graphics/…`,
77 `assets/brand-assets/…`, `assets/<category>/…` automatically.
78
79Full reference: `skills/creative/image-generation/references/automation.md` —
80read it before writing any generation command into a plan.
81
82## Required output format
83
84Deliver the plan, then execute it step by step (invoking each skill in order,
85carrying its artifact forward):
86
87```
88# Creative Production Plan — [outcome]
89
90**Route:** [A–F name] — [one-line why this route]
91**Style anchor:** [existing brief / to be created in step 1 / assumed: ...]
92**Automation:** available (FAL_API_KEY set) | specs-only (no key — commands included)
93
94## Sequence
95| # | Skill (path) | Produces | Feeds forward |
96| 1 | skills/creative/... | [artifact] | [what step 2 consumes] |
97| 2 | ... | ... | ... |
98
99## Asset map
100| Asset | Type | Aspect ratio | Variants | Output path |
101| [name] | product/social/brand/custom | [ratio] | [n] | assets/.../ |
102
103## Checkpoints
104- After step [n]: user picks [what] before [next step] starts.
105
106## First action
107[The single next thing you will do — usually "run step 1 now".]
108```
109
110## Guardrails
111
112- **One route.** Commit with a one-line reason; offer at most one alternative if
113 it's genuinely close. No route menus.
114- **Never generate before the style anchor exists** (or is explicitly waived for
115 a throwaway).
116- **User checkpoints at selection points** — after logo concepts, after hero-shot
117 variants — not after every image.
118- **No fake capability.** If `FAL_API_KEY` is missing, say so; deliverables are
119 prompt specs + commands. Never report images that weren't generated.
120- **Don't re-produce what exists.** An existing brief/logo/shot set skips its
121 step; consume it instead.
122- **Facts stay verified.** Model ID, script paths, and CLI flags come from the
123 automation reference — never from memory.
124
125## Integration
126
127Feeds this skill: `skills/product-strategy/foundation-sprint` (positioning and
128differentiators sharpen the brief in step 1 of routes A/D). Consumes its output:
129every `skills/creative/*` skill listed in the routing table — the plan tells
130each one what artifact it receives and what it must hand back.