Image Generation Prompt Engineering — Universal
Generic prompt-engineering skill for any modern image generation / editing model. Works model-agnostic by default; switches to model-specific guidance when the user names a model.
Strong prompts share the same anatomy across models — subject, environment, lighting, camera/lens, style, format, and (for edits) what to preserve. What differs is syntax surface: Midjourney uses --flags, GPT Image 2 likes structured JSON, Nano Banana parses natural-language addressing of reference images, SDXL leans on weighted token blocks plus negative prompts, FLUX rewards prose density, Ideogram is the strongest at typography.
When to Use This Skill
- User asks to write or improve an image prompt for any model
- User wants to edit an uploaded image (outfit swap, background change, face-preserving restyle, object addition/removal, inpainting)
- User requests identity-preserved portraits, celebrity integration, aging sequences, multi-character group shots
- User wants a bento/infographic layout, isometric diorama, exploded-view product poster, magazine cover, comic panel, storyboard grid, e-commerce main image, YouTube thumbnail
- User needs style-specific prompts: cinematic, Kodak Portra, anime, 3D chibi, pixel art, Baroque frame, ukiyo-e, Swiss design, cyberpunk, RAW iPhone, 90s point-and-shoot, 35mm direct flash
- User mentions "preserve face", "same face 100%", "change only the background", "keep pose", "multi-view", "action figure box", "exploded view"
- User wants Raycast-friendly prompts with
{argument name="..." default="..."} placeholders
- User explicitly names a model (Midjourney, MJ, SDXL, FLUX, GPT Image 2, Nano Banana, etc.)
Model Routing
Whenever the user names a model in their query, read the matching file under references/models/ for syntax surface and quirks, then layer it on top of the universal anatomy below.
| Trigger keywords (any) |
Read |
nano banana, nano-banana, gemini 2.5 flash image, gemini image, nano banana pro, 纳米香蕉 |
references/models/nano-banana.md |
gpt image 2, gpt-image-2, duct-tape, gpt image 2 prompts |
references/models/gpt-image-2.md |
gpt image 1, gpt-image-1, dall-e 3, dall·e 3, dalle 3 |
references/models/gpt-image-1.md |
midjourney, mj, --ar, --stylize, --sref, --cref, niji, --niji |
references/models/midjourney.md |
stable diffusion, sd 1.5, sdxl, sd 3, sd3, sd3.5, comfyui, automatic1111, forge |
references/models/stable-diffusion.md |
flux, flux.1, flux dev, flux schnell, flux pro, black forest labs |
references/models/flux.md |
imagen, imagen 3, imagen 4 |
references/models/imagen.md |
ideogram, ideogram 2, ideogram 3 |
references/models/ideogram.md |
recraft, recraft v3 |
references/models/recraft.md |
seedream, seedream 4, seedream 5, doubao image, jimmeng, byteimage |
references/models/seedream.md |
| no model named |
default to model-agnostic universal pattern; ask user which model |
Always start with references/models/_index.md if you need to scan all routes at once.
Two Capability Tiers (general)
| Capability |
"Standard" tier |
"Pro" tier |
| Photorealistic portraits |
✅ |
✅ (sharper skin/pores) |
| Multi-image fusion |
⚠️ 2–3 refs |
✅ 5+ refs |
| Text rendering in image |
Short labels only |
Long quotes, multi-line, CJK |
| Bento/infographic layouts |
Simple grids |
8+ modules with data fields |
| Dense crowd scenes |
Drifts past 4–5 faces |
Holds identity across many |
| Structured JSON/YAML prompts |
Partial parsing |
Reliable parsing |
| Complex conditional rules |
Weak |
Strong |
Per-model mapping of "Standard" vs "Pro" is documented in each references/models/<name>.md. Examples:
- Nano Banana = Standard; Nano Banana Pro / Nano Banana 2 = Pro
- GPT Image 1 / DALL·E 3 = Standard; GPT Image 1.5 = Standard+; GPT Image 2 = Pro
- Midjourney v6 = Standard; v7 = Pro
- SD 1.5 = Standard; SDXL / SD3 / SD3.5 = Pro
- FLUX.1 [schnell] = Standard; FLUX.1 [dev] / [pro] = Pro
- Seedream 4.0 / 4.5 = Standard; Seedream 5.0 = Pro
Rule of thumb: default to Pro tier for infographics, posters with headlines, multi-character scenes, structured JSON/YAML prompts, and CJK text. Standard tier suffices for single-subject edits and short prompts.
Universal Prompt Anatomy
Every strong prompt stacks these blocks. Order is flexible; labels are optional when context is clear.
[Subject] who/what — reference handling ("keep face 100%")
[Action/Pose] what they're doing, body orientation
[Wardrobe] clothes, accessories, materials, color
[Environment] location, props, ground, background wall
[Lighting] key/fill/rim, time-of-day, quality (hard/soft), color temp
[Camera/Lens] 85mm f/1.4, drone top-down, orthographic, eye-level
[Style ref] film stock (Kodak Portra 400), director, era (2000s), render engine
[Format] aspect ratio (1:1, 16:9, 9:16), resolution (1080x1080, 8K)
[Preserve] (edit mode) what must NOT change
[Negative] anti-artifacts: "no text", "no second object", "no warping"
Minimum viable template — generation
A {style/medium} of {subject} {action} in {environment}.
{Wardrobe + props}.
Lighting: {key + rim + mood}. Camera: {lens, angle}.
{Aspect ratio}, {resolution}. {Style ref}.
Minimum viable template — image edit
{Edit verb} the {target region} of the attached image:
{specific change}.
Preserve: face/identity, pose, outfit, background lighting — zero alteration.
Only modify: {explicit region}.
Match the original {lighting logic / color grade / perspective}.
Reference Inputs (per model)
How to address an uploaded reference image varies. Universal pattern works across most natural-language models; flag-based models need explicit syntax.
| Model family |
Phrasing |
| Nano Banana / Gemini |
"the person in the uploaded image", "same face 100% from reference" — natural language |
| GPT Image 2 |
"Based on this character", "Using this portrait", "Upload a source image" — natural language |
| Midjourney |
--cref <url> for character ref, --sref <url> for style ref, --cw 100 weight |
| Stable Diffusion / FLUX |
IP-Adapter / ControlNet at the workflow level, not in the prompt text |
| Imagen / Ideogram / Recraft |
API-level referenceImages payload; prompt text references via "the provided reference" |
For exact syntax see the matching file under references/models/.
Category Catalog
Detailed templates and examples live in references/.
references/patterns.md — universal vocabulary: lighting, camera, ratios, style tags, composition idioms, single-object rules, multi-reference fusion, negative-prompt vocabulary
references/templates.md — fill-in templates for 18+ common categories (portrait, product, poster, diorama, infographic, comic grid, exploded-view, e-commerce hero, YouTube thumbnail, character sheet, storyboard, etc.)
references/identity-preservation.md — face-lock phrases, failure modes, fixes, multi-person handling, mixed-style face preservation, aging sequences
references/structured-prompts.md — JSON / YAML / XML formats and which models parse them reliably
references/text-rendering.md — putting readable headlines, quotes, CJK in the image, per-model tier limits
references/editing-workflow.md — non-destructive editing, inpainting, multi-image fusion, before/after, character consistency across panels
references/examples.md — curated working prompts per category, attributed, with the model that produced each
references/workflows.md — Direct Generation, Content Illustration (article/video → image), and Remix/Personalization conversation patterns
references/external-corpora.md — pointers to public prompt libraries (YouMind 12k+, EvoLink ~3k, Awesome lists) when the user wants proven prompts rather than fresh composition
references/models/ — per-model quirks, syntax surface, parameters, anti-patterns
Quick Rules (model-agnostic)
- Paragraph + constraint lines beats tag soup for natural-language models (Nano Banana, GPT Image 2, FLUX, Imagen). For Midjourney and SDXL, dense comma-separated tag blocks plus flags still work.
- Specify aspect ratio explicitly —
1080x1080, 16:9, 9:16, or --ar 9:16 for Midjourney. Don't rely on defaults.
- Identity anchor every edit. "Same face 100% from reference", "keep facial features exactly consistent", "do not change the face".
- Non-destructive edits need an allow-list. Name what changes AND what is preserved — most models otherwise drift on wardrobe/pose.
- Lens + lighting = photorealism.
85mm f/1.4, Kodak Portra 400, three-point lighting, golden hour rim light, harsh on-camera flash all carry real weight on every model.
- Single-object constraints must be repeated. If you want exactly one object, write an explicit strict-single-object block (see
references/patterns.md#single-object-rule).
- Text in image = quote it exactly. Wrap exact strings in double quotes:
serif font reading "Stay Hungry, Stay Foolish". For CJK, prefer Pro-tier models.
- Use
[PLACEHOLDERS] (square brackets, uppercase) for reusable templates. Use {argument name="x" default="y"} for Raycast snippets — supported as a literal placeholder by Nano Banana, GPT Image 2, and any natural-language model.
- For bento/infographic layouts, enumerate modules (M1…M8) with content type per cell — strongly favors Pro-tier models.
- Negatives go at the end as a
NEGATIVE: list or Do NOT: bullet — except SDXL/Midjourney where negatives have dedicated syntax (--no for MJ, dedicated negative prompt input for SD).
- For natural / un-AI looks: explicitly request "natural skin texture, flyaway hairs, slight asymmetry, no glamour retouching, no beauty filter, no overly polished AI aesthetic". GPT Image 2 and Nano Banana Pro both respect these.
- For cross-image consistency (same character across N panels): describe the character once in detail, then reference back as "the same character from panel 1" — works on GPT Image 2 and Nano Banana Pro; weaker on others.
Anti-Patterns
- Tag-salad prompts on natural-language models (
portrait, 8k, masterpiece, beautiful, highly detailed) — under-perform vs structured paragraph
- Asking for "photorealistic" without lens/lighting — produces generic render
- Editing without a preservation clause — model mutates face/pose
- Multiple conflicting aspect ratios in one prompt — one wins, unpredictably
- Face-swap with only facial description (no ref image) — low fidelity
- Packing > 10 named subjects in one prompt — identity drift past ~5 on Standard tier, past ~8 on Pro
- Embedding exact text > 15 words on Standard-tier models — spelling breaks
- Mixing Midjourney
--flags into a Nano Banana / GPT Image / FLUX prompt — flags get parsed as literal text and pollute output
- "Polished AI" defaults when shooting for candid lifestyle — explicitly veto glamour retouching
- Forcing JSON on a tiny prompt —
{"subject":"red apple"} is worse than A red apple on a white table, studio lighting, 1:1.
Conversation Modes
Three distinct entry points handled in references/workflows.md:
- Direct Generation — user describes an image; you compose a prompt from anatomy + template + per-model file.
- Content Illustration — user pastes article / video script / podcast notes; you analyze theme + tone, match to a template, and move into Remix.
- Remix / Personalization — after a template is chosen, ask only the relevant personalization questions (gender, age, setting, mood, profession) and remix the template with the user's content.
If the user just wants proven, image-attested prompts rather than a freshly-composed one, point them at the searchable corpora in references/external-corpora.md (12,000+ prompts at YouMind, ~3,000 GPT Image 2 cases at EvoLink, plus Awesome-list browsable indexes).
Workflow
- Ask user — generate from scratch, edit an existing image, illustrate content, or browse proven prompts? Which model? Which tier? Aspect ratio?
- If a model is named, read
references/models/<name>.md first.
- Identify category → pick from
references/templates.md.
- If editing with a reference image: lock identity + add preservation clause first (see
references/identity-preservation.md).
- Fill subject → environment → lighting → camera → format → style.
- Add negatives only for known failure modes (not prophylactically). Use the model's native negative-prompt mechanism if it has one.
- For text in image, follow
references/text-rendering.md and downgrade to a Pro-tier model if the string is long or non-Latin.
- Output the prompt in a single fenced block; user pastes into the target model UI/API. For Midjourney, end with the flag block; for SD/FLUX, output positive + negative prompt separately.
1---2name: image-gen-prompts3description: Image Generation Prompt Engineering — Universal4---56# Image Generation Prompt Engineering — Universal78Generic prompt-engineering skill for **any** modern image generation / editing model. Works model-agnostic by default; switches to model-specific guidance when the user names a model.910Strong prompts share the same anatomy across models — subject, environment, lighting, camera/lens, style, format, and (for edits) what to preserve. What differs is **syntax surface**: Midjourney uses `--flags`, GPT Image 2 likes structured JSON, Nano Banana parses natural-language addressing of reference images, SDXL leans on weighted token blocks plus negative prompts, FLUX rewards prose density, Ideogram is the strongest at typography.1112## When to Use This Skill1314- User asks to write or improve an image prompt for any model15- User wants to edit an uploaded image (outfit swap, background change, face-preserving restyle, object addition/removal, inpainting)16- User requests identity-preserved portraits, celebrity integration, aging sequences, multi-character group shots17- User wants a bento/infographic layout, isometric diorama, exploded-view product poster, magazine cover, comic panel, storyboard grid, e-commerce main image, YouTube thumbnail18- User needs style-specific prompts: cinematic, Kodak Portra, anime, 3D chibi, pixel art, Baroque frame, ukiyo-e, Swiss design, cyberpunk, RAW iPhone, 90s point-and-shoot, 35mm direct flash19- User mentions "preserve face", "same face 100%", "change only the background", "keep pose", "multi-view", "action figure box", "exploded view"20- User wants Raycast-friendly prompts with `{argument name="..." default="..."}` placeholders21- User explicitly names a model (Midjourney, MJ, SDXL, FLUX, GPT Image 2, Nano Banana, etc.)2223## Model Routing2425Whenever the user names a model in their query, **read the matching file** under `references/models/` for syntax surface and quirks, then layer it on top of the universal anatomy below.2627| Trigger keywords (any) | Read |28|---|---|29| `nano banana`, `nano-banana`, `gemini 2.5 flash image`, `gemini image`, `nano banana pro`, `纳米香蕉` | `references/models/nano-banana.md` |30| `gpt image 2`, `gpt-image-2`, `duct-tape`, `gpt image 2 prompts` | `references/models/gpt-image-2.md` |31| `gpt image 1`, `gpt-image-1`, `dall-e 3`, `dall·e 3`, `dalle 3` | `references/models/gpt-image-1.md` |32| `midjourney`, `mj`, `--ar`, `--stylize`, `--sref`, `--cref`, `niji`, `--niji` | `references/models/midjourney.md` |33| `stable diffusion`, `sd 1.5`, `sdxl`, `sd 3`, `sd3`, `sd3.5`, `comfyui`, `automatic1111`, `forge` | `references/models/stable-diffusion.md` |34| `flux`, `flux.1`, `flux dev`, `flux schnell`, `flux pro`, `black forest labs` | `references/models/flux.md` |35| `imagen`, `imagen 3`, `imagen 4` | `references/models/imagen.md` |36| `ideogram`, `ideogram 2`, `ideogram 3` | `references/models/ideogram.md` |37| `recraft`, `recraft v3` | `references/models/recraft.md` |38| `seedream`, `seedream 4`, `seedream 5`, `doubao image`, `jimmeng`, `byteimage` | `references/models/seedream.md` |39| no model named | default to model-agnostic universal pattern; ask user which model |4041Always start with `references/models/_index.md` if you need to scan all routes at once.4243## Two Capability Tiers (general)4445| Capability | "Standard" tier | "Pro" tier |46|---|---|---|47| Photorealistic portraits | ✅ | ✅ (sharper skin/pores) |48| Multi-image fusion | ⚠️ 2–3 refs | ✅ 5+ refs |49| Text rendering in image | Short labels only | Long quotes, multi-line, CJK |50| Bento/infographic layouts | Simple grids | 8+ modules with data fields |51| Dense crowd scenes | Drifts past 4–5 faces | Holds identity across many |52| Structured JSON/YAML prompts | Partial parsing | Reliable parsing |53| Complex conditional rules | Weak | Strong |5455Per-model mapping of "Standard" vs "Pro" is documented in each `references/models/<name>.md`. Examples:56- Nano Banana = Standard; Nano Banana Pro / Nano Banana 2 = Pro57- GPT Image 1 / DALL·E 3 = Standard; GPT Image 1.5 = Standard+; GPT Image 2 = Pro58- Midjourney v6 = Standard; v7 = Pro59- SD 1.5 = Standard; SDXL / SD3 / SD3.5 = Pro60- FLUX.1 [schnell] = Standard; FLUX.1 [dev] / [pro] = Pro61- Seedream 4.0 / 4.5 = Standard; Seedream 5.0 = Pro6263**Rule of thumb:** default to Pro tier for infographics, posters with headlines, multi-character scenes, structured JSON/YAML prompts, and CJK text. Standard tier suffices for single-subject edits and short prompts.6465## Universal Prompt Anatomy6667Every strong prompt stacks these blocks. Order is flexible; labels are optional when context is clear.6869```70[Subject] who/what — reference handling ("keep face 100%")71[Action/Pose] what they're doing, body orientation72[Wardrobe] clothes, accessories, materials, color73[Environment] location, props, ground, background wall74[Lighting] key/fill/rim, time-of-day, quality (hard/soft), color temp75[Camera/Lens] 85mm f/1.4, drone top-down, orthographic, eye-level76[Style ref] film stock (Kodak Portra 400), director, era (2000s), render engine77[Format] aspect ratio (1:1, 16:9, 9:16), resolution (1080x1080, 8K)78[Preserve] (edit mode) what must NOT change79[Negative] anti-artifacts: "no text", "no second object", "no warping"80```8182### Minimum viable template — generation8384```85A {style/medium} of {subject} {action} in {environment}.86{Wardrobe + props}.87Lighting: {key + rim + mood}. Camera: {lens, angle}.88{Aspect ratio}, {resolution}. {Style ref}.89```9091### Minimum viable template — image edit9293```94{Edit verb} the {target region} of the attached image:95{specific change}.96Preserve: face/identity, pose, outfit, background lighting — zero alteration.97Only modify: {explicit region}.98Match the original {lighting logic / color grade / perspective}.99```100101## Reference Inputs (per model)102103How to address an uploaded reference image varies. Universal pattern works across most natural-language models; flag-based models need explicit syntax.104105| Model family | Phrasing |106|---|---|107| Nano Banana / Gemini | "the person in the uploaded image", "same face 100% from reference" — natural language |108| GPT Image 2 | "Based on this character", "Using this portrait", "Upload a source image" — natural language |109| Midjourney | `--cref <url>` for character ref, `--sref <url>` for style ref, `--cw 100` weight |110| Stable Diffusion / FLUX | IP-Adapter / ControlNet at the workflow level, not in the prompt text |111| Imagen / Ideogram / Recraft | API-level `referenceImages` payload; prompt text references via "the provided reference" |112113For exact syntax see the matching file under `references/models/`.114115## Category Catalog116117Detailed templates and examples live in `references/`.118119- `references/patterns.md` — universal vocabulary: lighting, camera, ratios, style tags, composition idioms, single-object rules, multi-reference fusion, negative-prompt vocabulary120- `references/templates.md` — fill-in templates for 18+ common categories (portrait, product, poster, diorama, infographic, comic grid, exploded-view, e-commerce hero, YouTube thumbnail, character sheet, storyboard, etc.)121- `references/identity-preservation.md` — face-lock phrases, failure modes, fixes, multi-person handling, mixed-style face preservation, aging sequences122- `references/structured-prompts.md` — JSON / YAML / XML formats and which models parse them reliably123- `references/text-rendering.md` — putting readable headlines, quotes, CJK in the image, per-model tier limits124- `references/editing-workflow.md` — non-destructive editing, inpainting, multi-image fusion, before/after, character consistency across panels125- `references/examples.md` — curated working prompts per category, attributed, with the model that produced each126- `references/workflows.md` — Direct Generation, Content Illustration (article/video → image), and Remix/Personalization conversation patterns127- `references/external-corpora.md` — pointers to public prompt libraries (YouMind 12k+, EvoLink ~3k, Awesome lists) when the user wants proven prompts rather than fresh composition128- `references/models/` — per-model quirks, syntax surface, parameters, anti-patterns129130## Quick Rules (model-agnostic)1311321. **Paragraph + constraint lines beats tag soup** for natural-language models (Nano Banana, GPT Image 2, FLUX, Imagen). For Midjourney and SDXL, dense comma-separated tag blocks plus flags still work.1332. **Specify aspect ratio explicitly** — `1080x1080`, `16:9`, `9:16`, or `--ar 9:16` for Midjourney. Don't rely on defaults.1343. **Identity anchor every edit.** "Same face 100% from reference", "keep facial features exactly consistent", "do not change the face".1354. **Non-destructive edits need an allow-list.** Name what changes AND what is preserved — most models otherwise drift on wardrobe/pose.1365. **Lens + lighting = photorealism.** `85mm f/1.4`, `Kodak Portra 400`, `three-point lighting`, `golden hour rim light`, `harsh on-camera flash` all carry real weight on every model.1376. **Single-object constraints must be repeated.** If you want exactly one object, write an explicit strict-single-object block (see `references/patterns.md#single-object-rule`).1387. **Text in image = quote it exactly.** Wrap exact strings in double quotes: `serif font reading "Stay Hungry, Stay Foolish"`. For CJK, prefer Pro-tier models.1398. **Use `[PLACEHOLDERS]`** (square brackets, uppercase) for reusable templates. Use `{argument name="x" default="y"}` for Raycast snippets — supported as a literal placeholder by Nano Banana, GPT Image 2, and any natural-language model.1409. **For bento/infographic layouts**, enumerate modules (M1…M8) with content type per cell — strongly favors Pro-tier models.14110. **Negatives go at the end** as a `NEGATIVE:` list or `Do NOT:` bullet — except SDXL/Midjourney where negatives have dedicated syntax (`--no` for MJ, dedicated negative prompt input for SD).14211. **For natural / un-AI looks**: explicitly request "natural skin texture, flyaway hairs, slight asymmetry, no glamour retouching, no beauty filter, no overly polished AI aesthetic". GPT Image 2 and Nano Banana Pro both respect these.14312. **For cross-image consistency** (same character across N panels): describe the character once in detail, then reference back as "the same character from panel 1" — works on GPT Image 2 and Nano Banana Pro; weaker on others.144145## Anti-Patterns146147- Tag-salad prompts on natural-language models (`portrait, 8k, masterpiece, beautiful, highly detailed`) — under-perform vs structured paragraph148- Asking for "photorealistic" without lens/lighting — produces generic render149- Editing without a preservation clause — model mutates face/pose150- Multiple conflicting aspect ratios in one prompt — one wins, unpredictably151- Face-swap with only facial description (no ref image) — low fidelity152- Packing > 10 named subjects in one prompt — identity drift past ~5 on Standard tier, past ~8 on Pro153- Embedding exact text > 15 words on Standard-tier models — spelling breaks154- Mixing Midjourney `--flags` into a Nano Banana / GPT Image / FLUX prompt — flags get parsed as literal text and pollute output155- "Polished AI" defaults when shooting for candid lifestyle — explicitly veto glamour retouching156- Forcing JSON on a tiny prompt — `{"subject":"red apple"}` is worse than `A red apple on a white table, studio lighting, 1:1.`157158## Conversation Modes159160Three distinct entry points handled in `references/workflows.md`:161162- **Direct Generation** — user describes an image; you compose a prompt from anatomy + template + per-model file.163- **Content Illustration** — user pastes article / video script / podcast notes; you analyze theme + tone, match to a template, and move into Remix.164- **Remix / Personalization** — after a template is chosen, ask only the relevant personalization questions (gender, age, setting, mood, profession) and remix the template with the user's content.165166If the user just wants **proven, image-attested prompts** rather than a freshly-composed one, point them at the searchable corpora in `references/external-corpora.md` (12,000+ prompts at YouMind, ~3,000 GPT Image 2 cases at EvoLink, plus Awesome-list browsable indexes).167168## Workflow1691701. Ask user — generate from scratch, edit an existing image, illustrate content, or browse proven prompts? Which model? Which tier? Aspect ratio?1712. If a model is named, read `references/models/<name>.md` first.1723. Identify category → pick from `references/templates.md`.1734. If editing with a reference image: lock identity + add preservation clause first (see `references/identity-preservation.md`).1745. Fill subject → environment → lighting → camera → format → style.1756. Add negatives only for known failure modes (not prophylactically). Use the model's native negative-prompt mechanism if it has one.1767. For text in image, follow `references/text-rendering.md` and downgrade to a Pro-tier model if the string is long or non-Latin.1778. Output the prompt in a single fenced block; user pastes into the target model UI/API. For Midjourney, end with the flag block; for SD/FLUX, output positive + negative prompt separately.