PromptMake
2026-06-26·16 min read

How to Write Character Consistency Prompts for AI Image Generators

Character bible templates, locked descriptor blocks, and platform workflows for Midjourney v7 (--oref), FLUX Kontext, DALL·E Gen_ID, and SDXL — same face across scenes without drift.

image-promptsmidjourneyfluxdall-eguidetips

Turn any photo into an AI prompt — free

No sign-up required. Works with Midjourney, FLUX, DALL-E.

Try Image to Prompt →

Every AI image generator invents a new face unless you tell it not to. "A woman with red hair in Paris" produces a different woman on every click — different bone structure, eye spacing, nose, age read.

Character consistency is not one feature. It is a stack: a locked text block you never paraphrase, a reference image the model can read, and parameters that weight identity over scene novelty. Prompts alone cap out around 60–70% likeness. References push you to 85–95%. LoRA training hits 95%+ for long projects.

This guide is prompt-first — how to write the text side for Midjourney v7, FLUX Kontext, DALL·E 3, and SDXL — with reference workflows where prompts stop being enough. For Midjourney --cref v6 deep dive, see our legacy cref guide; v7 shifted to Omni Reference (--oref).

Why "same character" prompts fail

Models treat each generation as independent. Re-describing "sharp jaw, green eyes, freckles" with synonyms — "angular face, emerald eyes, light spots" — activates different token clusters. Face drift is guaranteed.

Other failure modes (HoneyChat / Prompting.systems 2026 benchmarks):

  • Seed pinning — identical seed helps within one batch, not across sessions or batch sizes
  • Prompt saturation — past ~15 face tags, extra detail gets averaged away
  • Scene words overpower identity — "dramatic cyberpunk rain neon" steals weight from face tokens
  • Style jumps — photoreal reference → anime output breaks facial geometry

Fix: separate identity block (frozen) from scene block (changes every image).

The character bible (text foundation)

Before any reference URL, write a Character Bible — 8–12 precise tokens you paste verbatim into every prompt. Order matters: identity tokens first carry the most weight (OpenAI community + FLUX character guides agree).

Template:

`

[NAME/ROLE], [age read], [gender presentation]

Face: [face shape], [eye color + shape], [nose], [lips], [skin tone]

Hair: [length, texture, color, style — exact words every time]

Build: [height read, body type]

Marks: [scars, freckles, moles — specific placement]

Default outfit (optional lock): [garment colors + key items]

`

Example — locked block (never rephrase):

Mira Okonkwo, woman early 30s. Oval face, deep brown almond eyes, straight medium nose, full lips, warm dark brown skin. Shoulder-length tight coiled black hair, side part. Athletic slim build. Small crescent scar above left eyebrow. Default: olive field jacket, white tee.

Scene block (changes per image):

standing on wet London pavement at night, neon reflections, cinematic documentary photography

Bad: alternating "coiled black hair" / "curly dark hair" / "short afro" — three different people.

Good: identical hair string in all 20 prompts.

What to lock vs what to vary

| Lock (character bible) | Vary (scene prompt) |

| Face structure, eyes, hair, skin, scars | Location, action, pose, expression |

| Optional: default outfit for series | Lighting, time of day, weather |

| Reference image URL / Gen_ID | Camera angle, composition, aspect ratio |

| Style via --sref if brand series | Props, background characters |

Rule: change one scene dimension per generation when debugging drift. If face breaks when you add "wide shot," the camera term stole weight — shorten scene text or raise reference weight.

Prompt structure (all platforms)

Formula: [IDENTITY BLOCK] + [ACTION/POSE] + [ENVIRONMENT] + [LIGHTING] + [STYLE/MEDIUM]

Identity always leads. Never bury face tokens after 30 words of scene description.

Anchor phrase when chaining generations:

The same character as before, maintaining [paste 3–4 key traits from bible]

Works in DALL·E chat and FLUX Kontext; Midjourney prefers --oref over prose repetition.

Midjourney v7: Omni Reference (--oref)

As of 2026, --cref is a v6 / Niji v6 parameter. v7 uses `--oref` (Omni Reference) — same syntax family, wider subject support (people, props, creatures), finer weight control via --ow (1–1000, default 100).

Syntax:

[scene prompt with identity block] --oref [image URL] --ow [weight] --v 7

--ow guide (CometAPI / AI Wiki / KINTO Tech 2026):

  • 25–50 — style transfer, loose resemblance
  • 100–300 — balanced; scene changes, face mostly holds
  • 400–600 — character sheets, strong identity lock (baseline for recurring cast)
  • 700–1000 — maximum fidelity; risk of stiff poses

Pro tip: high --stylize (250+) needs higher --ow (200–400) or character drifts toward MJ house aesthetic.

Step 1 — hero reference prompt:

Mira Okonkwo, woman early 30s, oval face, deep brown almond eyes, shoulder-length tight coiled black hair side part, warm dark brown skin, small crescent scar above left eyebrow, neutral expression, front-facing portrait, soft even studio light, plain grey background --ar 4:5 --style raw --v 7

Step 2 — new scene (identity block unchanged):

Mira Okonkwo, woman early 30s, oval face, deep brown almond eyes, shoulder-length tight coiled black hair, warm dark brown skin, crescent scar above left eyebrow, walking through rainy Tokyo alley, neon reflections, cinematic --oref [HERO_URL] --ow 450 --ar 2:3 --style raw --v 7

Step 3 — character sheet:

Character reference sheet, Mira Okonkwo same face throughout, 4 panels: front view, three-quarter, profile, full body standing, consistent olive field jacket, neutral studio lighting, labeled turnaround --oref [HERO_URL] --ow 500 --ar 16:9 --v 7

Reference image rules (same as cref best practices): front or three-quarter face, even lighting, no sunglasses/masks, single subject, uncluttered background.

Combine with style lock:

--oref [character] --ow 450 --sref [style_url] --sw 80

See our Midjourney 2026 guide for full parameter context.

Midjourney v6: --cref fallback

Need strict v6 --cref / --cw (0–100)? Roll back: --v 6 --cref [url] --cw 80.

  • --cw 100 — face + hair + clothing from reference
  • --cw 0 — face only; outfit follows prompt

Our dedicated --cref guide covers v6 workflows, multi-scene examples, and sref pairing.

FLUX.1 Kontext & FLUX 2 multi-reference

FLUX rewards literal prose and reference conditioning. Two 2026 tiers:

Kontext (single reference): upload hero image + prompt. Lead with preservation instruction:

Use the provided image as the exact character reference. Preserve face shape, eye color, hair style, skin tone, and body proportions. [Same identity block]. [New scene description]. Photorealistic, consistent lighting direction.

Reference strength 0.75–0.85 for new scenes; 0.65–0.75 when changing outfit heavily (Selfielab Kontext tutorial).

FLUX 2 multi-reference (2–5 images): front, three-quarter, profile refs. Apatero 2026 workflow:

  1. Front-facing ref → highest weight (1.0–1.2)
  2. Three-quarter + profile → 0.9 each
  3. Prompt names sources: character from image 1 wearing outfit from image 2, posed like image 3

Cap at 5 refs — beyond that, identity dilutes.

FLUX prompt discipline: repeat bible strings verbatim. FLUX interprets "auburn hair" and "reddish-brown hair" as different people.

Chained generation: use best output as next reference. Gen2: "Same character from previous image, now in medieval armor, forest background."

Best for: photoreal campaigns, product ambassadors, game key art. Pair with our cinematic lighting keywords for consistent light direction across scenes.

DALL·E 3: Gen_ID and conversation threading

DALL·E 3 (ChatGPT image generation) offers Gen_ID — an internal character handle after you establish a face in-concept check thread.

Workflow:

  1. Generate hero portrait with full identity block
  2. Reply: "Remember this character as [Name]. Use Gen_ID for all following images."
  3. Next: "Using the same character (Gen_ID), show her [new scene]. Maintain exact hair and facial features."
  4. Character sheet request: "Same character, 4-panel reference sheet: front, side, three-quarter, full body. Identical face and hair."

2026 limitation (TheRightGPT / user reports): Gen_ID persists within the same chat only. Close the thread → lose the character. For multi-week projects, export hero images and switch to Midjourney --oref or FLUX Kontext.

Prompt tip: DALL·E handles conversational revision — "keep the face identical, change only the background to a café" outperforms rewriting from scratch.

SDXL & open weights: prompts + references + LoRA

Self-hosted SDXL has the richest consistency toolkit. Prompt-only tier:

Identity in positive promptpaste bible + `(character_name:1.1)` weight sparingly

Negative prompt: different person, face change, inconsistent features, multiple faces

IP-Adapter Facereference image + prompt; watch for outfit/lighting bleed from ref

InstantID / PuLIDstronger face lock without full LoRA training

Character LoRA (gold standard for 20+ images): train on 15–30 varied photos (poses/lighting differ, face constant). Caption scenes, not character names ("woman in garden" not "Anna in garden"). Inference:

photo of [trigger_word], [identity traits from bible], [scene], <lora:character_v1:0.75>

LoRA strength 0.6–0.8 — higher = more likeness, lower prompt obedience. See our SDXL weights guide for (token:1.2) syntax.

When prompts plateau (~70% consistency), LoRA beats adding more face adjectives.

Character sheet prompts (copy-paste)

Generate once, use as --oref / Kontext ref forever.

Turnaround sheet:

Character model sheet, [identity block], 4 views: front, three-quarter left, profile, full body back, neutral standing pose, consistent outfit, white background, studio lighting, concept art turnaround, evenly spaced panels

Expression sheet:

Same character [identity block], expression sheet 6 faces: neutral, smile, anger, surprise, sadness, laugh, identical features throughout, head and shoulders, grid layout

Outfit variants (face locked):

[Identity block], same person throughout, 3 full-body outfits: [outfit A], [outfit B], [outfit C], runway pose, consistent face and hair, studio white background

After generation: pick clearest panel as hero --oref source.

Multi-character scenes

Hard mode. Rules:

  1. Separate reference per character — MJ: multiple --oref URLs (check current v7 multi-oref support in docs); FLUX: image 1 = char A, image 2 = char B
  2. Short identity blocks — two full bibles in one prompt fight for tokens
  3. Spatial prompt — "Character A (left, red jacket) and Character B (right, blue coat)"
  4. Generate singles first — composite in post if model merges faces

SDXL: ControlNet OpenPose + separate LoRAs per character for comics/storyboards.

Consistency checklist before you generate

  • [ ] Character bible written; no synonym drift
  • [ ] Identity block is first 40% of prompt
  • [ ] Hero reference: front/three-quarter, clean background, even light
  • [ ] Reference weight tuned (--ow 400+ MJ, 0.75+ FLUX Kontext)
  • [ ] Scene changes one major variable at a time
  • [ ] Style locked via --sref if series aesthetic matters
  • [ ] Platform match: don't use v6 --cref syntax on v7 jobs

Common mistakes

Re-describing the face every timeuse bible + reference, not creative rewriting

Weak reference photoprofile-only ref fails on front-facing prompts

Scene prompt longer than identity blocklighting paragraph drowns face tokens

Conflicting style"anime style" + photoreal reference = new face

Ignoring weight knobsdefault `--ow 100` too loose for character sheets

DALL·E cross-chatassuming Gen_ID survives new conversations

Too many refs (FLUX)8+ images average faces into generic model

PromptMake workflow

/image → upload hero portrait → Recreate or Change Style to extract a reusable identity block from an existing image.

/image → paste bible + scene → target Midjourney v7 or FLUX → iterate with Improve mode to tighten descriptor precision.

3 free /image generations per day (guest); use them to nail the hero reference before burning paid credits on Midjourney/FLUX.

Build a project folder: hero.png, character-bible.txt, scene-prompts/ — text and reference stay paired.

Platform pick (quick reference)

| Need | Best tool | Why |

| Recurring cast, any scene, persistent URL | Midjourney v7 --oref | Strongest cross-scene identity via URL |

| Photoreal brand ambassador | FLUX Kontext / FLUX 2 multi-ref | Literal face preservation |

| Rapid chat iteration, same session | DALL·E Gen_ID | Conversational "same face" edits |

| 50+ images, comics, game asset | SDXL + character LoRA | Weight-level identity encoding |

| Strict v6 cref pipeline | MJ --v 6 --cref | Legacy workflows still valid |

Frequently asked questions

Can prompts alone keep a character consistent?

For 3–5 images, a rigid bible + anchor phrases get you partway. For production, add --oref, Kontext, or LoRA.

--cref or --oref in 2026?

v7 → --oref. v6 → --cref. Mixing them returns errors or ignored params.

Best --ow for graphic novel panels?

Start 450; drop to 350 if poses feel frozen; raise to 550 if face drifts.

Does outfit stay consistent?

Only if you lock it in the bible or use --ow 600+ / --cw 100. Otherwise reference carries face, prompt carries clothes.

How many reference images for FLUX?

3–5 angles optimal. Front + three-quarter minimum.

Same character in video?

Image consistency ≠ video. Lock hero frame first; see video model guides for Gen-4 / Veo character persistence.

Related articles

Midjourney prompts 2026 — --oref, --sref, Draft Mode overview

Legacy --cref guide — v6 character reference deep dive

7 elements of visual prompts — where subject/identity fits

Cinematic lighting keywords — consistent light across scenes

DALL·E vs Midjourney vs Flux — which model needs better prompts

Reverse-engineer prompt from photo — build bible from reference

SDXL weights guide — (token:1.2) for SD character tags

Bottom line

Character consistency prompts are frozen identity blocks plus changing scene blocks — never paraphrase the face.

Write the bible once. Generate a hero reference. Attach --oref, Kontext, or Gen_ID. Tune weight until the face holds, then vary only scene, pose, and light.

Prompts set the contract; references enforce it. For long-running projects, plan the LoRA path early — text has a ceiling, weights don't.

Ready to generate your own prompts?

Free. No sign-up required. Works with all major AI models.

Related articles