OcxlyDev · Deep Dive

Character consistency in generative AI: keeping a face on model, from first draft to print

A diffusion model will happily draw your hero a hundred times — and give you a hundred slightly different people. Making one character stay recognisable across scenes, and sharp enough to print, is its own craft.

OcxlyDev Published 15 September 2026 ~11 min read Sources linked throughout
Character consistency in a nutshell: one 'identity anchor' portrait on the left, the same stylised character rendered across many different scenes in the middle, and the final image enlarged by a magnifier into a crisp, print-ready page — one character, every scene, sharpened for print.

Digital publishing runs on repeatable visual assets: the same protagonist across a chapter's illustrations, a mascot on every landing page, an author's likeness in a series of covers. Generative image models are astonishingly good at making a beautiful picture and surprisingly bad at making the same character twice. This piece walks through the two problems you actually have to solve — keeping a character consistent, and getting the result to print resolution — and the techniques, from prompt tricks to fine-tuning to super-resolution, that solve them.

01Why a model forgets a face

A text-to-image diffusion model does not store your character anywhere. Each generation starts from fresh random noise and denoises it toward whatever the prompt describes. "A young woman with red hair and green eyes" describes an entire space of plausible people, and the random seed picks one point in it. Change the seed and you get a different valid answer to the same prompt — a different face that still fits the words.

That is the whole problem in one sentence: the prompt constrains the category, not the individual. Human identity lives in dozens of fine, correlated details — the exact distance between the eyes, the shape of the jaw, a particular nose — that no reasonable text description pins down. Consistency techniques are all, at bottom, ways of feeding the model that identity as something stronger than words: a fixed seed, a reference image, or a learned token that means this specific person.

Two problems, not one. "Consistent visual assets for publishing" is really two jobs. First, identity: the same character, recognisable across poses, scenes, and styles. Second, resolution: an image large and clean enough to sit on a printed page or a retina display. They are solved by completely different tools, and this piece takes them in that order.

02Prompt-level consistency: seeds, sheets, and reference images

The cheapest techniques need no training at all. The first is seed locking: reuse the same random seed with the same prompt and you reproduce the same image; change only a few words (the pose, the background) and much of the identity carries over, because the seed anchors the starting noise. It is fragile — large prompt changes drift the face — but it is free and instant.

The second is a detailed character sheet: instead of "a young woman," you write a dense, reusable block of specifics — age, exact hair and eye colour, face shape, distinctive marks, wardrobe — and paste it into every prompt. More constraint means less room for the seed to wander. It never achieves true identity lock, but for a stylised or minor character it is often enough.

The most reliable no-training option is a reference image. Modern tools let you hand the model a picture of the character and ask it to keep that likeness. Midjourney built this into its workflow — the --cref (character reference) parameter in version 6, succeeded by the more general Omni Reference in version 7, with a weight control to dial how strongly the reference is enforced.7 Google's Gemini 2.5 Flash Image (nicknamed "Nano Banana") takes it further, preserving facial structure and character identity across conversational, multi-turn edits so a subject stays recognisable from scene to scene as you describe changes in plain language.8 These are the practical default for most publishing work today — but their makers are candid that fine details (freckles, a logo, a precise hairstyle) may not match perfectly, so a review-and-rerun loop is still part of the job.7

The consistency problem: on the left, one text prompt with no identity anchor produces four different faces — the same category, different individuals; on the right, the same prompt plus a seed and a reference image produces four images of the same individual, consistent across scenes.
Words fix the category, not the individual: the same prompt gives different faces (left). A seed or a reference image anchors one person across scenes (right).
The prompt tells the model what kind of person to draw. Consistency is about telling it which person — and words alone can't.

03Teaching the model a character: inversion, DreamBooth, LoRA

When you need the same character across dozens of images and many styles, it is worth teaching the model who they are. Three techniques sit on a spectrum from lightest to heaviest.

Textual Inversion is the lightest. You freeze the whole model and learn a single new "word" — a text embedding — from a handful of reference images, so that this new pseudo-token comes to mean your specific subject.1 Nothing about the model's weights changes; you have just taught it a new name. It is tiny to store and share, but its capacity is limited, so identity fidelity can be hit-or-miss.

DreamBooth goes to the other extreme: it fine-tunes the model's actual weights on your subject, binding it to a rare token so the model learns to render that individual in new poses and contexts.2 Fidelity is high, but it is heavy to train and store, and on only a few images it tends to overfit — memorising the training shots and losing flexibility.

The workhorse in between is LoRA (Low-Rank Adaptation). Rather than updating all the weights, LoRA freezes the base model and trains a small pair of low-rank matrices that adjust the attention layers — a fraction of the parameters, a small file, most of the fidelity.3 A character LoRA (often trained DreamBooth-style) is the standard way serious creators ship a reusable, portable identity: a few megabytes you can load onto a base model whenever that character is needed, and combine with style LoRAs for a house look.

The personalisation spectrum from lightest to heaviest: Textual Inversion learns a single new token on a frozen model (tiny file); LoRA trains a small pair of low-rank matrices attached to a frozen base model (small file, the workhorse); DreamBooth fine-tunes a large part of the model's weights for maximum fidelity (large file, can overfit) — file sizes grow from kilobytes to gigabytes.
From a learned word to a retrained model: Textual Inversion → LoRA → DreamBooth. Heavier means higher fidelity, larger files, and more overfitting risk.
Rule of thumb. Reference-image prompting for a one-off or a quick series; a LoRA when the same character has to appear many times across a project and you want a portable, shareable identity file; full DreamBooth only when you need maximum fidelity and can afford the training and the overfitting risk.

04Zero-shot identity: adapters that skip the training

Training a LoRA takes time and images. A newer family of methods gets identity from a single reference photo with no per-character training at all — you supply the face at generation time and the model conditions on it directly.

IP-Adapter made this general: a lightweight adapter with a decoupled cross-attention mechanism that lets an image act as a prompt alongside the text, so "this face, doing this" becomes a single instruction.4 PhotoMaker specialised it for people, encoding one or more ID photos into a stacked identity embedding that preserves the person while still obeying the text prompt.5 InstantID pushed fidelity higher again: from a single facial image it builds a robust ID embedding and adds an IdentityNet for spatial control, all as a plug-and-play module needing no fine-tuning at inference and working with off-the-shelf diffusion models.6

For a publisher, the trade is clear. Zero-shot adapters are fast and need no training pipeline, which is ideal for turning a real author's likeness or a single concept sketch into a scene. A trained LoRA still tends to win on the hardest consistency — a fully invented character rendered across many wildly different shots — because it has learned that identity in depth rather than inferring it from one photo.

Zero-shot identity adapters: a single reference photo feeds an identity adapter — IP-Adapter (image as a prompt), PhotoMaker (stacked ID embedding), or InstantID (ID embedding plus IdentityNet) — which conditions a diffusion model to generate new scenes of the same person at inference time, with no per-character fine-tuning.
One photo, no training: an identity adapter (IP-Adapter, PhotoMaker, InstantID) conditions the diffusion model so the same person appears across new scenes.

05The resolution gap: why publishing needs upscaling

Solve identity and you still have a size problem. Most text-to-image models generate natively at around one to two megapixels — roughly 1024×1024 pixels for a model like SDXL. That looks crisp on screen and is nowhere near enough for print.

Print is measured in pixels per inch, and the working standard for quality printing is 300 PPI. Do the arithmetic: a 1024-pixel image at 300 PPI is about 3.4 inches wide — smaller than a postcard. A 6×9-inch book page needs roughly 1800×2700 pixels; a full-bleed cover with margins, more still. The native generation is short by a factor of two to four in each dimension. Simply stretching it (bicubic scaling) invents no new detail — it just makes the softness bigger. To go from a screen-sized generation to a printable asset without it turning to mush, you need super-resolution: upscaling that adds plausible detail rather than merely interpolating.

The math that bites. Pixels ÷ PPI = inches. At the 300-PPI print standard, a 1024-pixel generation prints sharp only up to ~3.4 inches. Everything larger — a page, a cover, a poster — needs the pixel count multiplied first, and multiplying pixels well is a generative problem in its own right.

06How super-resolution learned to invent detail

Early upscaling was pure interpolation — bicubic and friends — which cannot add information that was never captured. The leap came from learning what real detail looks like and hallucinating it back in. SRGAN (2017) was the first framework to produce photo-realistic detail at large upscaling factors, using a generative adversarial setup: a generator proposes a high-resolution image while a discriminator learns to tell its output from genuine high-res photos, pushing the generator toward realistic texture rather than the blurry average that pixel-error losses produce.9

ESRGAN (2018) sharpened this substantially, introducing Residual-in-Residual Dense Blocks, removing the batch-normalisation layers that were creating artifacts, and improving the perceptual and adversarial losses to yield more realistic, better-detailed textures.10 But both were trained on cleanly downsampled images, so they struggled on real-world inputs full of compression, noise, and blur — exactly the state an AI generation or a web image tends to arrive in.

Real-ESRGAN (2021) closed that gap. By training on a rich, synthetic model of real-world degradation — the JPEG artifacts, noise, and blur images actually accumulate — it became far more robust on messy inputs, which is why it remains a popular, fast default for general-purpose upscaling.11 For AI-illustrated publishing, a Real-ESRGAN pass is often the quickest way to double or quadruple resolution while cleaning up generation noise.

From screen to print: a 1024-pixel generation — about 3.4 inches at 300 PPI, too small to print — is passed up a super-resolution ladder of SRGAN, ESRGAN, Real-ESRGAN, then the diffusion-based SUPIR, each step adding detail, ending in a 300-PPI print-ready page. Below, a fidelity-versus-invention dial with a warning to keep it low on faces, because higher invention can alter facial features.
Upscaling that adds real detail: SRGAN → ESRGAN → Real-ESRGAN → SUPIR takes a screen-sized generation to 300-PPI print. Keep the fidelity dial low on faces — invention can change the character.

07Diffusion upscalers and the faithfulness dial

The current frontier uses the same diffusion priors that generate images to restore them. SUPIR (Scaling-UP Image Restoration, 2024) builds on a large SDXL-based generative prior, trained on twenty million high-resolution images with descriptive captions, and even lets you steer the restoration with a text prompt.12 The result can synthesise strikingly convincing skin, hair, and fabric detail at high magnification — well beyond what a GAN upscaler recovers.

That power comes with a dial you must set consciously: fidelity versus invention. A diffusion upscaler is, by nature, generating detail that was not in the input. Turn it up and it will confidently invent texture — sometimes beautiful, sometimes wrong, and on faces sometimes subtly not your character any more, which quietly undoes all the consistency work upstream. This is why upscaling is the last step, done gently on faces, and why creators pair it with dedicated face-restoration models (such as GFPGAN or CodeFormer) and tiled or region-based upscaling that treats the face with more restraint than the background.

A GAN upscaler cleans and sharpens what is there. A diffusion upscaler invents what could be there. For a consistent character, you want the first instinct on the face and the second only where it can't hurt.

08A pipeline for a publishing project

Putting it together, a repeatable workflow for consistent, print-ready assets looks like this:

  1. Define the character once. Generate a clean, front-facing "hero" portrait you are happy with, plus a short character sheet of fixed traits. This is your ground truth.
  2. Lock identity. For a small job, feed that portrait as a reference image (Omni Reference, Gemini, or an IP-Adapter/InstantID pipeline). For a large one, train a character LoRA from a handful of consistent shots so the identity is portable and reusable.
  3. Generate the assets — the poses, scenes, and compositions the project needs — reusing the locked identity and reviewing for drift, re-rolling the ones that stray.
  4. Upscale to print size. Run a super-resolution pass (Real-ESRGAN for speed and cleanup, or a diffusion upscaler like SUPIR for maximum detail) to reach the pixel count your page or cover needs at 300 PPI.
  5. Restore and finish. Apply gentle face restoration, check that the upscale did not alter identity, then colour-correct and lay out.

The order matters: identity first, resolution last. Upscaling before you have a consistent character just gives you a very sharp picture of the wrong face.

09Where OcxlyDev lands

There is no single button for this yet, and anyone selling one is overstating it. The honest state of the art is a pipeline: reference prompting or a LoRA to hold identity, a super-resolution stage to reach print resolution, and a human in the loop reviewing for the drift that every method still produces. The tools are improving fast — native-consistency models like Gemini 2.5 Flash Image are collapsing steps that used to need training — but the discipline is the same.

Our take for publishing work: invest in one strong identity anchor per character (a LoRA for anything recurring, a good reference image for one-offs), keep upscaling as a deliberate final pass with the fidelity dial low on faces, and never skip the review. Consistency is not a model feature you switch on; it is a process you run — and the projects that respect that are the ones whose characters actually look like themselves from page one to the end.

About this piece. An OcxlyDev deep dive at the intersection of generative AI and digital publishing. For adjacent reading, see our pieces on multimodal models and publishing trends. This field moves quickly — specific model names, parameters, and native resolutions change month to month — so treat the tools named here as a September 2026 snapshot and follow the linked primary sources for the current state.

References

  1. Gal et al. (2022) — "An Image is Worth One Word" (Textual Inversion): learning a new text embedding for a specific concept with a frozen model
  2. Ruiz et al. (2022) — "DreamBooth": fine-tuning a diffusion model to bind a subject to a token for subject-driven generation
  3. Hu et al. (2021) — "LoRA: Low-Rank Adaptation": parameter-efficient fine-tuning via small trainable low-rank matrices
  4. Ye et al. (2023) — "IP-Adapter": decoupled cross-attention that lets an image act as a prompt alongside text
  5. Li et al. (2023) — "PhotoMaker": customising realistic human photos via a stacked ID embedding
  6. Wang et al. (2024) — "InstantID": zero-shot identity-preserving generation from a single facial image, with an IdentityNet for spatial control
  7. Midjourney — documentation: Character Reference (--cref) and its successor Omni Reference, with weight controls for how strongly a reference is enforced
  8. Google Developers Blog (2025) — "Introducing Gemini 2.5 Flash Image": character consistency and identity preservation across conversational multi-turn edits
  9. Ledig et al. (2017) — "SRGAN": the first GAN framework to produce photo-realistic detail at large super-resolution factors
  10. Wang et al. (2018) — "ESRGAN": Residual-in-Residual Dense Blocks and improved losses for sharper, artifact-free upscaling
  11. Wang et al. (2021) — "Real-ESRGAN": training on synthetic real-world degradation for robust upscaling of noisy, compressed images
  12. Yu et al. (2024) — "SUPIR (Scaling-UP Image Restoration)": an SDXL-based generative prior for photo-realistic, text-steerable restoration and upscaling