# Guide: Prompting

> How to write prompts that the models follow.

Trust labels: `[vendor]` official model-author doc, `[measured]` measured on
DeepInfra by the webtoon project (2026-09), `[community]`, `[inference]`.

## Structure (all image models)

1. **Order is weight.** Subject + action, then style/medium, then setting,
   lighting, camera/technical. FLUX prioritises earlier words `[vendor: BFL]`.
   A composition instruction placed after 400 characters of style text was
   ignored; moved to the front it took effect `[measured]`.
2. **Prose, not keyword lists.** `[vendor: BFL, Google, Qwen]`. The bad
   example from BFL: `woman, portrait, beautiful, blonde, studio, 8k`.
3. **Always one lighting sentence.** "It has the single greatest impact on
   image quality" `[vendor: BFL]`.
4. **Name the medium** ("flat vector illustration", "gouache", "cel
   animation"). Medium moves the image more than mood `[measured]`. Naming
   2-3 specific colours beats a vibe; the line description is the strongest
   style lever `[measured]`.
5. **Be concrete.** Materials, colours with a modifier, counts as words.
   Enumerate, never summarise `[vendor: Qwen rewriter]`.
6. **State the use** ("app icon", "landing hero") to set polish `[vendor: OpenAI]`.
7. **No quality boosters** ("8k", "masterpiece", "award-winning") `[vendor: Qwen]`;
   generic negative dumps degrade distilled models `[community]`.
8. **Aspect ratio and size are parameters**, never prose `[vendor: Qwen]`.
9. **Length.** 30-80 words for most work; 10-30 for concepts; 80+ for complex
   scenes on FLUX.2 (its encoder is a 24B VLM) `[vendor: BFL]`. Schnell's
   encoder takes ~256 tokens: keep to 40-75 words `[community]`. Qwen-Image
   likes 400-500 word observer-style descriptions `[vendor]`.
10. **Every word in a stock description ends up in every image.** A prop in a
    location string appeared in most renders `[measured]`. Keep constant
    strings to what is always visible.

## Per-family differences

| Family | Length | Negative prompt | Notes |
|---|---|---|---|
| FLUX-1-schnell | 40-75 words | none; phrase positively | guidance 0, 1-4 steps, no upsampling: the prompt must carry the detail `[vendor]` |
| FLUX-2 dev/klein/pro/max | 30-80, up to several hundred | none | JSON prompts, hex colours tied to objects, real camera/film names work `[vendor]`; multi-reference as "image 1 / image 2" |
| Gemini image (nano-banana 2 / pro) | conversational, purpose stated | none; "semantic negatives" | start with a strong verb; last input image sets the ratio; native route on DeepInfra takes ONE reference `[measured]` |
| Qwen-Image / -Max | long, descriptive | field exists; leave `" "` | append ", Ultra HD, 4K, cinematic composition." `[vendor]`; `prompt_extend` defaults on `[vendor: DeepInfra schema]` |
| Qwen-Image-Edit | imperative | field exists | `<image1>` role tags `[vendor]` |
| Seedream 5 | prose | none | `optimize_prompt_mode` rewrites for you; `background: transparent` supported |
| Wan T2I | prose | field exists | `prompt_extend` defaults on |

## Positive substitutions (never write "no X" on FLUX, Gemini, Qwen) `[vendor: BFL]`

| Instead of | Write |
|---|---|
| no people | empty, deserted, solitary |
| no text / no watermark | clean surfaces, unmarked, text-free, pristine |
| no logos | unbranded, plain, logo-free surface |
| no blur | sharp focus, crisp details, tack-sharp |
| no CGI look | photorealistic, authentic |
| no clouds | clear blue sky, cloudless |
| no background | isolated on a plain solid white background |
| no hat | bare head |

Negative phrasing "can actually make models focus MORE on unwanted elements"
`[vendor: BFL]`. On routes with no negative field vincevangen folds `--negative`
into the prompt as "Avoid: …"; that helps on Gemini-family models and is
neutral-to-harmful on FLUX `[inference]`, so prefer positive phrasing there.

## Hex colours `[vendor: BFL]`

Tie a hex to an object: "walls in #C4725A", "gradient from #02eb3c to
#edfa3c". Never "use red somewhere". Only use hex when the brief gives it;
otherwise a modifier + colour name ("deep navy") `[vendor: Qwen]`.

## Typography `[vendor: BFL, Google]`

- Quote the exact string; spell unusual words letter by letter.
- Name the font class (serif, sans-serif, script, display, monospace), weight,
  colour, size hierarchy, placement ("upper third", "bottom right corner").
- Front-load: `A sign reading "FRESH BREAD" in a bakery window` beats the reverse.
- Lay out multi-line text line by line. Keep to 1-3 short strings.
- Generate art text-free and letter in post whenever the copy may change:
  rewriting a line must never cost a render `[measured: working practice]`.
  vincevangen's post step is `text_overlay` / `vvgen_add_text` (bundled OFL fonts, free).
- 2026-10-09, one seed each, "LAUNCH" on an icon: FLUX-2-dev wrote "LAUCH"; klein-4b and pro
  spelled it right `[measured]`. Model-painted words are a draw, so check them.
- The text-free instruction still fails sometimes; gate with OCR or by eye.

## JSON prompts (FLUX.2) `[vendor: BFL]`

`{"scene": …, "subjects": [{"description": …, "position": …, "color": …}], "style": …, "lighting": …}`
works for multi-subject layouts where each subject needs a position.

## The enhancer's rules (what `--enhance` does)

Adapted from the Qwen-Image-2.1 T2I rewriter and OpenAI's augmentation policy:
split the brief into fixed (copied verbatim) and open (invented tastefully);
add nothing unrequested (no extra characters, props, brands, slogans);
normalise an already-specific brief instead of expanding it; opening sentence
with medium noun; walk the frame; one lighting sentence; closing "The overall
composition…"; honour a word budget per model family; output JSON with
`prompt`, `aspect_ratio`, `avoid` (positive). Ratio defaults: 3:2 horizontal,
2:3 vertical, 1:1 for a single centred emblem, 16:9 cinematic/slide, 9:16 phone.
