Every text-to-image model gives you a slightly different person on every generation. For indie authors illustrating a chapter, game devs needing the same NPC across portraits and combat poses, comic artists who can’t redraw, and brand teams running a mascot across 20 banners, that drift is the single biggest reason a set of assets reads as “AI-generated” instead of “designed.” The fix is not a magic prompt. It is a canonical reference image plus a frozen structural description, applied with discipline across whichever reference feature your tool ships.
The 2026 toolset finally makes this practical. Midjourney V8.1 (released April 30, 2026) replaced the old --cref with the much stronger Omni Reference (--oref). Google’s Nano Banana Pro (the Gemini 3 Pro Image model) can hold the resemblance of up to 5 people and 14 objects in one composition. ChatGPT’s GPT Image 1.5 preserves facial likeness across edits. This guide turns “same character, different scenes” into a repeatable process that uses those features instead of fighting them.
TL;DR
- Build a character bible: one clean canonical reference image plus a 5-7 trait list you copy verbatim into every prompt.
- Feed the reference image as input wherever the tool allows it. The image carries far more identity signal than any prose.
- Per scene, change only background, lighting, and pose. The trait block stays byte-for-byte identical.
- When the face drifts, raise the reference weight: Midjourney
--ow 400-600, Stable Diffusion IP-Adapter 0.8-1.0, or re-attach the reference in ChatGPT and Nano Banana. - For 20+ images of one character, train a Stable Diffusion / Flux LoRA on 15-50 approved outputs. After that you no longer need to attach a reference each time.
Who this is for
Indie authors illustrating chapters or covers, game devs needing one NPC across a portrait sheet and combat poses, comic and webtoon artists, marketing teams running a recurring mascot, and educators producing cohort visuals. The rule of thumb: if a character appears once, skip all of this. If it appears five or more times and has to read as the same person, the discipline below pays for itself by the third image.
Two cases where this is the wrong approach: real-person likeness (use a real photoshoot; reproducing a specific living person with AI raises consent and rights problems), and pure photoreal humans, where tiny differences in skin texture or bone structure instantly read as a different person and no current public model holds it across many variations. Stylized and “painterly photoreal” looks are far more forgiving and what this workflow is built for.
The 2026 tools that hold a character (and how)
Pick one primary tool and stay in it for a given character. Mixing models mid-series guarantees drift, because Midjourney’s “Mira” and Stable Diffusion’s “Mira” are different latent people.
| Tool (June 2026) | Reference feature | Strength control | Best for | Notes |
|---|---|---|---|---|
| Midjourney V8.1 | Omni Reference (--oref + image URL) | --ow 0-1000, default 100 | Fast iteration, illustration, stylized | --cref is deprecated on V7+; use --oref. From $10/mo Basic |
| Nano Banana Pro (Gemini 3 Pro Image) | Multi-image input, locks identity vs. style separately | Re-attach refs; supports up to 5 people | Storyboards, mascots, identity locked while restyling | 2K/4K; in Gemini app on Google AI Pro $19.99/mo |
| ChatGPT (GPT Image 1.5) | Attach canonical as image input | Re-attach + explicit reminder | Conversational edits, quick scene swaps | Preserves facial likeness across edits; 2K. Plus $20/mo |
| Stable Diffusion / Flux + IP-Adapter | IP-Adapter reference node (ComfyUI) | Weight 0.0-1.0 | Local, free, full control | Good per-image match, drifts over long series |
| Stable Diffusion / Flux + LoRA | Trained model file | LoRA strength 0.6-1.0 | 20+ images, production roster | Train on 15-50 images, 1000-3000 steps; strongest long-run consistency |
The honest caveat that applies to all of them: none guarantees pixel-identical faces across fully independent generations. Reference features get you to “clearly the same person,” and a trained LoRA gets you closest. Treat anything photoreal as the hard case.
Before you start
- Decide the style first. Stylized illustration and anime tolerate small variations; a painterly-photoreal look is the most demanding style this workflow can hold reliably; pure photoreal is the case to avoid.
- Pick one toolchain from the table and test it on your actual character before committing a whole series to it.
- Reserve a folder. Use
/character-bible/[character-name]/withcanonical.png,traits.md,prompt-template.md, and anoutputs/subfolder. - Block 1-2 hours just for the canonical image. It is the single most important asset; rushing it poisons everything downstream.
Step by step
- Generate the canonical portrait. Front-facing, neutral background, even lighting, mid-shot. Generate 12-20 variations and pick the strongest single image. This is the only point where you are searching for the character; everything after is matching to it.
- Write the trait list. 5-7 specific, visible traits: hair color plus length plus texture, eye color, skin tone, distinguishing marks (scar, freckles, tattoo placement), signature outfit or accessory, and build. Avoid abstract traits like “kind eyes,” which the model re-interprets every time.
- Feed the reference image as input. Midjourney V8.1: append
--oref [public image URL] --ow 400. Nano Banana Pro: attach the canonical and tell it to keep the person, change the scene. ChatGPT GPT Image 1.5: attach the canonical. Stable Diffusion / Flux: load the canonical into an IP-Adapter node at weight 0.8. The image outweighs any text. - For text-only steps, paste the trait list verbatim. Do not rephrase. “Auburn shoulder-length wavy hair” stays exactly “auburn shoulder-length wavy hair” in every prompt. Small rephrasings compound into a different person by image five.
- Per scene, change only background, lighting, and pose. Keep
prompt-template.mdwith placeholders for[scene]and[pose]only; the trait block never moves and never changes. - When the AI drifts, raise reference weight. Midjourney: bump
--owfrom 100 toward 400-600. Stable Diffusion: raise IP-Adapter weight to 0.8-1.0. ChatGPT / Nano Banana: re-attach the canonical and explicitly say “same person, same face.” Lower the weight only when you intentionally want a restyle (for example--ow 25for a photo-to-anime conversion). - Grow the character bible. Reference image plus canonical traits plus 3-5 already-approved scene outputs become future references. Once you have 15-50 approved outputs, train a LoRA so future generations hold without attaching a reference every time.
Trait list example
Name: Mira
Hair: auburn, shoulder-length, wavy, side-parted left
Eyes: green, almond-shaped
Skin: warm olive
Marks: small scar above right eyebrow
Outfit: charcoal canvas jacket with brass buttons,
knee-high boots, leather satchel slung right shoulder
Build: medium height, athletic
Paste this block at the top of every scene prompt and append a one-line action plus setting. In Midjourney the full line becomes [trait block] [action] in [setting], [pose], [lighting] --oref [URL] --ow 400.
First-run exercise
- Generate the canonical portrait. Spend the full 1-2 hours.
- Generate three scene images using the reference plus the frozen trait list.
- Screen-tile all four images (canonical plus three scenes) at thumbnail size and squint. If any one reads as a different person, the trait list is too vague or the reference weight too low.
- Adjust the one variable that fixes it (usually reference weight) and re-run the three scenes.
Quality check
- At thumbnail size, side by side: is it the same person?
- Are the distinguishing marks present? A missing scar or freckle pattern is the easiest tell.
- Did the outfit drift in unspecified directions? Did “charcoal jacket” quietly become “dark blue” by image eight?
- Did the character age or change body type across the series? Subtle aging is a common, sneaky drift.
Common mistakes
- Rephrasing the description each scene. “Red hair” then “ginger” then “auburn” produces a different person by image five.
- Adding new traits mid-series (“she has a pendant now”). Stick to the canonical, or version-bump the bible explicitly.
- Not saving the canonical. You lose the only objective anchor and every drift compounds.
- Chasing photoreal real-person consistency. Choose stylized characters where the eye forgives small differences.
- Mixing models in one character set. Midjourney Mira and Stable Diffusion Mira will not match. Pick one tool.
- Using
--crefon Midjourney V7 or V8. It is deprecated and ignored; use--orefwith--ow. - Letting prompt order drift. Always put the trait block first; moving it later in the prompt cuts its influence.
Advanced tips
- Restyle without losing identity. Nano Banana Pro can hold the face while you swap art style or clothing; in Midjourney, drop
--owtoward 25-50 for a stylistic change and back to 400+ to re-tighten the face. - Generate a series in one session. For comics and story sequences, batch all panels for one character in a single conversation so a chat-based model stays warmed up to it.
- Train a LoRA once you have 15-50 approved outputs. Budget 1000-3000 training steps; the resulting file holds consistency across poses and scenes without an attached reference.
- For video (Sora, Veo), nail a strong canonical key frame first, then drive motion with image-to-video. Pure text-to-video character consistency is still the weakest link.
FAQ
- What is the best tool for character consistency in 2026?: For fast illustration, Midjourney V8.1 with
--orefand--ow 400. For storyboards and mascots where you restyle but keep the face, Nano Banana Pro (Gemini 3 Pro Image), which holds up to 5 people per scene. For conversational scene swaps, ChatGPT GPT Image 1.5. For maximum long-run control, a trained Stable Diffusion or Flux LoRA. Test on your specific character; results vary by style. - Why is
--crefnot working in Midjourney anymore?:--crefis deprecated on V7 and V8. V8.1 uses Omni Reference: append--oref [image URL] --ow [0-1000]instead. The default--owis 100; 400-600 gives a close facial match. - Why does the face still drift even with a reference attached?: The reference weight is likely too low, or the reference image itself was inconsistent (multiple angles in one image confuses the model). Use a single clean front-facing canonical and raise the weight.
- How many traits is too many?: Above 8-10 specific traits, models start dropping some at random. Keep only the most visible and distinguishing.
- Can I do photoreal human consistency?: Not reliably with current public models. A painterly-photoreal look holds; pure photoreal does not survive enough variations to ship a long series.
- What if I need the character in 100 images?: Train a LoRA after the first 15-50 approved outputs (1000-3000 steps). Future generations cost a fraction of the effort and stay far more consistent.