Image Generation
Convert a fuzzy image request into prompt specs precise enough that any competent
image model — and specifically fal-ai/nano-banana-pro on FAL.ai, the one model
this repo's automation uses — renders what the user actually pictured. The prompt
spec is the deliverable; generated files are the bonus when the automation is
configured. Prime rule: never generate from a vague prompt. A weak prompt
costs a generation credit and teaches you nothing; a sharp spec is reusable
forever.
When to use / when not to
Use for general-purpose images: hero images, illustrations, thumbnails,
infographics, textures, concept art, any one-off visual. Hand off instead when
the request is really:
- Product shots for commerce/marketing →
skills/creative/product-photography
- Platform-sized social content →
skills/creative/social-graphics
- Logos, icons, patterns, brand marks →
skills/creative/brand-asset
- No visual direction exists yet and consistency matters → run
skills/creative/creative-strategist first and consume its style block
- A whole multi-asset campaign →
skills/creative/orchestrator routes it
Intake
Ask in one batch, only what's missing:
- Subject — what exactly is in the image? (object, scene, people, text?)
- Use — where does it go? (this decides aspect ratio and resolution)
- Style anchor — existing style guide / creative-strategist style block,
reference images, or 3 adjectives for the mood?
- Automation — is
FAL_API_KEY set so you can generate, or deliver specs only?
Infer, don't ask: aspect ratio from the stated destination (thumbnail → 16:9,
story → 9:16, feed → 1:1 or 4:5); resolution from stakes (2K default,
4K hero/print, 1K drafts). Don't stall: if subject and use are clear,
state your assumptions for the rest and proceed.
Workflow
Check for a style block. If the user has run
skills/creative/creative-strategist, reuse its style block verbatim in every
prompt. If not, and this is a one-off, derive a minimal one (style + palette +
mood) from context and label it an assumption.
Draft the prompt with the 5-part formula. Every prompt contains, in order:
subject (the main thing, specific: "a luxury leather watch with gold
accents", never "a watch") → descriptive detail (materials, colors, text
to render) → style ("professional product photography", "flat modern
illustration", "photorealistic") → technical treatment (lighting,
composition, focus, "4K, highly detailed") → mood ("warm and inviting").
Add negative constraints as plain prohibitions ("no text overlay", "no
watermark", "no busy background").
Decide variant strategy. If it's a throwaway draft → 1 image at 1K. If
it's a keeper asset → propose 3–4 genuinely distinct prompt specs (different
composition or style angle, not synonym swaps), generate 1 of each or
num_images 3–4 of the winner, and have the user pick. Never present one
option for a hero asset.
Generate or deliver. If FAL_API_KEY (or FAL_KEY) is set:
python docs/creative_cli.py custom \
--category "<category>" --name "<asset-name>" \
--prompt "<full prompt>" \
--aspect-ratio 16:9 --resolution 2K --num-images 3
Use --web-search only when the image must reflect current real-world data
(e.g. "2026 trends infographic"). If no key is set, deliver the prompt-spec
blocks and the exact command the user can run later — do not fake results or
claim images were generated.
Review and iterate. Compare output to the spec's mood/style/negative
constraints. Fix misses by editing the prompt (more specific subject, explicit
lighting, stronger prohibitions) — there are no other model knobs. One
iteration round maximum before checking in with the user.
Read references/automation.md before writing any generation command — it has
the full, verified parameter set, CLI flags, Python helpers, and output layout.
Required output format
Deliver one block per asset (this exact structure, whether or not you generate):
## Prompt Spec — [asset name]
- **Use / destination:** [where it will live]
- **Subject:** [the main thing, concretely]
- **Style:** [artistic treatment]
- **Composition:** [framing — centered / rule of thirds / negative space / overhead]
- **Lighting:** [studio / natural golden hour / dramatic rim / high-key]
- **Mood:** [2–3 adjectives]
- **Aspect ratio:** [one of 21:9 16:9 3:2 4:3 5:4 1:1 4:5 3:4 2:3 9:16] · **Resolution:** [1K/2K/4K] · **Format:** [png/jpeg/webp]
- **Negative constraints:** [what must NOT appear]
- **Prompt (final, paste-ready):**
> [single flowing prompt assembled from the fields above]
- **Variants:** [n] — [what varies between them]
- **File naming:** assets/<category>/<asset-name>/<asset_name>_<n>_<timestamp>.png (automation default)
- **Generate with:** `python docs/creative_cli.py custom --category ... --name ... --prompt "..." --aspect-ratio ... --resolution ... --num-images n`
If images were generated, append the saved paths under Results and say which
variant you recommend and why (one line).
Quality bar
Before delivering, verify every spec:
Hard don'ts: never claim an image was generated when it wasn't; never put brand
color hex codes in quotes and hope — name the colors in words too ("deep navy
#004E89"); never render paragraphs of text inside an image.
Integration
skills/creative/creative-strategist → feeds this skill its style block
(paste into every prompt's style/mood/lighting fields).
skills/creative/product-photography, skills/creative/social-graphics,
skills/creative/brand-asset → specialized front-ends that produce their own
prompt specs and use the same automation; route there when the request fits.
skills/creative/product-video and skills/creative/remotion-script-writer →
consume generated stills as source frames / assets.
references/automation.md — full FAL.ai client, CLI, and Python-helper
reference. Read it whenever you're about to run a generation command.
1---2name: image-generation3description: Turns any request for an AI-generated image into precise, generation-ready prompt specs and — when the FAL.ai automation is configured — the generated files themselves, using the single model fal-ai/nano-banana-pro. Use whenever the user asks to 'generate an image', 'make a picture of X', 'create a thumbnail / hero image / illustration / infographic', 'write me a prompt for this image', or any visual that isn't specifically product photography, a social-platform graphic, or a brand mark (hand those to the sibling skills). Produces one prompt-spec block per asset (subject, style, composition, lighting, mood, aspect ratio, negative constraints) plus file-naming and variant conventions, and runs docs/creative_cli.py to generate when a FAL_API_KEY is available.4---5
6# Image Generation
7
8Convert a fuzzy image request into prompt specs precise enough that any competent
9image model — and specifically `fal-ai/nano-banana-pro` on FAL.ai, the one model
10this repo's automation uses — renders what the user actually pictured. The prompt
11spec is the deliverable; generated files are the bonus when the automation is
12configured. **Prime rule: never generate from a vague prompt.** A weak prompt
13costs a generation credit and teaches you nothing; a sharp spec is reusable
14forever.
15
16## When to use / when not to
17
18Use for general-purpose images: hero images, illustrations, thumbnails,
19infographics, textures, concept art, any one-off visual. Hand off instead when
20the request is really:
21
22- **Product shots for commerce/marketing** → `skills/creative/product-photography`
23- **Platform-sized social content** → `skills/creative/social-graphics`
24- **Logos, icons, patterns, brand marks** → `skills/creative/brand-asset`
25- **No visual direction exists yet and consistency matters** → run
26 `skills/creative/creative-strategist` first and consume its style block
27- **A whole multi-asset campaign** → `skills/creative/orchestrator` routes it
28
29## Intake
30
31Ask in one batch, only what's missing:
32
331. **Subject** — what exactly is in the image? (object, scene, people, text?)
342. **Use** — where does it go? (this decides aspect ratio and resolution)
353. **Style anchor** — existing style guide / creative-strategist style block,
36 reference images, or 3 adjectives for the mood?
374. **Automation** — is `FAL_API_KEY` set so you can generate, or deliver specs only?
38
39Infer, don't ask: aspect ratio from the stated destination (thumbnail → `16:9`,
40story → `9:16`, feed → `1:1` or `4:5`); resolution from stakes (`2K` default,
41`4K` hero/print, `1K` drafts). **Don't stall:** if subject and use are clear,
42state your assumptions for the rest and proceed.
43
44## Workflow
45
461. **Check for a style block.** If the user has run
47 `skills/creative/creative-strategist`, reuse its style block verbatim in every
48 prompt. If not, and this is a one-off, derive a minimal one (style + palette +
49 mood) from context and label it an assumption.
502. **Draft the prompt with the 5-part formula.** Every prompt contains, in order:
51 **subject** (the main thing, specific: "a luxury leather watch with gold
52 accents", never "a watch") → **descriptive detail** (materials, colors, text
53 to render) → **style** ("professional product photography", "flat modern
54 illustration", "photorealistic") → **technical treatment** (lighting,
55 composition, focus, "4K, highly detailed") → **mood** ("warm and inviting").
56 Add negative constraints as plain prohibitions ("no text overlay", "no
57 watermark", "no busy background").
583. **Decide variant strategy.** If it's a throwaway draft → 1 image at `1K`. If
59 it's a keeper asset → propose 3–4 genuinely distinct prompt specs (different
60 composition or style angle, not synonym swaps), generate 1 of each or
61 `num_images` 3–4 of the winner, and have the user pick. Never present one
62 option for a hero asset.
634. **Generate or deliver.** If `FAL_API_KEY` (or `FAL_KEY`) is set:
64
65 ```bash
66 python docs/creative_cli.py custom \
67 --category "<category>" --name "<asset-name>" \
68 --prompt "<full prompt>" \
69 --aspect-ratio 16:9 --resolution 2K --num-images 3
70 ```
71
72 Use `--web-search` only when the image must reflect current real-world data
73 (e.g. "2026 trends infographic"). If no key is set, deliver the prompt-spec
74 blocks and the exact command the user can run later — do not fake results or
75 claim images were generated.
765. **Review and iterate.** Compare output to the spec's mood/style/negative
77 constraints. Fix misses by editing the prompt (more specific subject, explicit
78 lighting, stronger prohibitions) — there are no other model knobs. One
79 iteration round maximum before checking in with the user.
80
81Read `references/automation.md` before writing any generation command — it has
82the full, verified parameter set, CLI flags, Python helpers, and output layout.
83
84## Required output format
85
86Deliver one block per asset (this exact structure, whether or not you generate):
87
88```
89## Prompt Spec — [asset name]
90- **Use / destination:** [where it will live]
91- **Subject:** [the main thing, concretely]
92- **Style:** [artistic treatment]
93- **Composition:** [framing — centered / rule of thirds / negative space / overhead]
94- **Lighting:** [studio / natural golden hour / dramatic rim / high-key]
95- **Mood:** [2–3 adjectives]
96- **Aspect ratio:** [one of 21:9 16:9 3:2 4:3 5:4 1:1 4:5 3:4 2:3 9:16] · **Resolution:** [1K/2K/4K] · **Format:** [png/jpeg/webp]
97- **Negative constraints:** [what must NOT appear]
98- **Prompt (final, paste-ready):**
99 > [single flowing prompt assembled from the fields above]
100- **Variants:** [n] — [what varies between them]
101- **File naming:** assets/<category>/<asset-name>/<asset_name>_<n>_<timestamp>.png (automation default)
102- **Generate with:** `python docs/creative_cli.py custom --category ... --name ... --prompt "..." --aspect-ratio ... --resolution ... --num-images n`
103```
104
105If images were generated, append the saved paths under **Results** and say which
106variant you recommend and why (one line).
107
108## Quality bar
109
110Before delivering, verify every spec:
111
112- [ ] Subject is concrete enough that two strangers would picture the same image
113- [ ] Style, lighting, composition, and mood are each explicitly stated — none left to model default
114- [ ] Aspect ratio matches the stated destination (no `1:1` "because default")
115- [ ] Negative constraints listed (at minimum: no watermark; state text policy explicitly — models mangle long text)
116- [ ] No invented parameters — only the ones in `references/automation.md`; the model is always `fal-ai/nano-banana-pro`
117- [ ] Keeper assets got 3+ distinct variants, not one take
118- [ ] If automation wasn't run, the deliverable says so and includes runnable commands
119
120Hard don'ts: never claim an image was generated when it wasn't; never put brand
121color hex codes in quotes and hope — name the colors in words too ("deep navy
122#004E89"); never render paragraphs of text inside an image.
123
124## Integration
125
126- `skills/creative/creative-strategist` → feeds this skill its **style block**
127 (paste into every prompt's style/mood/lighting fields).
128- `skills/creative/product-photography`, `skills/creative/social-graphics`,
129 `skills/creative/brand-asset` → specialized front-ends that produce their own
130 prompt specs and use the same automation; route there when the request fits.
131- `skills/creative/product-video` and `skills/creative/remotion-script-writer` →
132 consume generated stills as source frames / assets.
133- `references/automation.md` — full FAL.ai client, CLI, and Python-helper
134 reference. Read it whenever you're about to run a generation command.