In short

  • Only go back to training when the proportions of the face change. Texture and hair changes come from your inference settings.
  • Use twenty to forty images that differ from each other. Variety across sessions and lighting matters more than the number of images.
  • Caption everything that varies, except the face. Whatever you leave out of the caption gets tied to the token.
  • If lowering the LoRA weight to 0.7 fixes the look, you trained too long. Use an earlier checkpoint.
  • If the face is lost in full-body shots, the face is too small in the image. Add a face detail pass. Do not train longer.
On this page
  1. Consistency is three problems wearing one name
  2. Hosted tools or your own LoRA: which to start with
  3. How to build a LoRA training dataset
  4. Training a Flux LoRA: the settings that matter
  5. The ComfyUI workflow that stops face drift
  6. Trained LoRA or reference tools like Soul ID
  7. Which model for which consistency job
  8. The ten-minute check that catches drift early
  9. Numbers in this guide to check yourself
  10. Questions people ask

Consistency is three problems wearing one name

An image can look exactly like your persona and still feel like a different person from yesterday’s post. Most people then assume the training failed and go straight back to the trainer. Often that is the wrong fix. Before you retrain anything, find out which of three layers broke.

  • Structure is the shape of the face: skull width, jaw angle, eye spacing, nose bridge, the distance from lip to chin. A LoRALoRA A LoRA is a small file trained on images of one subject. It teaches a general image model to reproduce that specific face or style. Open the glossary learns this and can hold it. If the proportions change between images, you have a training problem.

  • Surface is skin texture, pore density, colour temperature, how shiny the highlights are, and how the upscaler renders hair. Two images with the same face shape and a different surface look like two different people shot on two different cameras. Your LoRA has almost nothing to do with this. It comes from the sampler, the scheduler, the step count, the guidance value, the upscale model and the denoise of the detail pass.

  • Signature is everything outside the face that people use to recognise someone in a small thumbnail. That means hair length and parting, a mole, ear shape, body proportions, and the few lighting and lens words you repeat in every prompt. At the size of a phone feed, signature does more for recognition than structure.

So check in a fixed order. Open two images that feel like different people and ask three questions. Are the proportions different (structure)? Is the skin and texture different (surface)? Did the hair or the framing change (signature)? You only go back to training if the answer to the first question is yes.

The consistency loop. A drift check decides where you go back to. Only structural drift needs new training. You fix surface drift in the settings and signature drift in the prompt.
  1. Datasetcasting sheet, not album
  2. TrainFlux LoRA
  3. Sample setfixed seeds and prompts
  4. Drift checkside by side, epoch by epoch
Two images feel like different people. What changed?
  • StructureBone geometry. The one layer a LoRA learns: back to the dataset, then retrain.
  • SurfaceSampler, scheduler, steps, guidance, upscaler, detail-pass denoise. Fix them as constants. You do not need a training run for this.
  • SignatureThe recognisable non-facial details and the lighting words. Pin them in the prompt.

Schematicthe shape, not measured data

Hosted tools or your own LoRA: which to start with

There are two ways to keep a face the same. They cost very different things. Most people in this niche only talk about the harder one.

  • Hosted models (reference-conditioned). You upload reference images and the model uses them every time it generates. Higgsfield and WaveSpeed both work this way, with the current model families: Seedance, Wan, MiniMax, Seedream, Nano Banana, FluxFlux Flux is a family of image-generation models from Black Forest Labs. It is widely used for photorealistic characters because it holds faces better than earlier open models. Open the glossary. ChatGPT works the same way: ChatGPT AI influencer photos shows which reference images to upload and how to keep the face. Seedance is the exception for faces: Seedance consistent character explains why it refuses realistic faces in references. It takes minutes, where training takes hours. You need no GPU and no install. It is also the only route that works well for video today. Which models hold a face once it moves covers what each costs. To copy movement from a real video and keep her face, Kling motion control shows how to bind a face element. You are renting someone else’s pipeline. What that costs per image is on what generation costs.

  • A LoRA you train and own. The weights are on your own disk. You need hours of setup, a rig or rented compute, and you have to learn a lot. In return you can move the face between workflows, you pay nothing per image, and nobody can take it away when a product changes its terms.

Start hosted. First find out whether you can build an audience. Keeping a face steady with your own LoRA is a separate skill, and you can learn it later. Almost everyone who quits does so long before a LoRA would have mattered.

If you start on Higgsfield, do not plan to train that later LoRA on its images. Its terms forbid training any model on its outputs:

Last updated 26 July 2026. Section 5.2(iv): you may not “use the Service, any Outputs, or any data derived therefrom to train, fine-tune, distill, or otherwise transfer knowledge to any machine-learning model, neural network, or artificial intelligence system, whether or not such system competes with the Service, except: (a) models that you create, train, or fine-tune using the Service with your own Inputs (not Outputs of Company’s AI models); or (b) as expressly authorized in writing by Company”. Section 5.1(iii) says the same for products “that compete with the Service”.

Higgsfield — Terms of Use Agreement (opens in a new tab)checked

So a LoRA dataset made of her Higgsfield images is not allowed without Higgsfield’s written permission. Build the images for a future LoRA with a tool whose terms allow it.

Move to a trained LoRA only when one of these is true:

  • The hosted tool keeps pulling the face towards its own standard face, and your character starts to look generic.
  • You generate so many images that the per-image price is the biggest cost in your budget.
  • You need a specific angle, expression or condition that the hosted tool does badly, and no prompt fixes it.
  • You want the character to still exist if the product you built her in goes away.

The rest of this guide covers both routes. The dataset and diagnosis sections apply to both. A bad set of reference images breaks a hosted tool just as badly as it breaks a trained LoRA.

How to build a LoRA training dataset

The dataset matters more than all the training settings together. For a face LoRA on Flux, use twenty to forty images that differ from each other. More than that usually just adds repeats. Repeats do harm, because the model learns that whatever repeats is part of the identity. What each trainer vendor publishes as a number, and why they disagree, is in how many images to train a character LoRA.

Check your own set against this list before you train:

Does your set cover all five areas?

These things ruin a set:

  • Near-duplicates. Burst frames a third of a second apart look different to you. For training they count as the same image.
  • A repeated accessory. If the same hoop earrings are in thirty images, the LoRA puts hoop earrings on your persona in a swimming pool. The same goes for a necklace, a specific top or a watch.
  • Another face in the frame. Even blurred, even in a mirror, even at the edge. Crop it out or drop the image.
  • Low-resolution sources that were upscaled. If you train on 512px crops upscaled to 1024, the LoRA learns the upscaler’s artefacts as skin texture.
  • A set generated from one seedSeed A seed is the number that sets the random starting point of a generation. The same prompt with the same seed produces the same image. Open the glossary by the base model. This one is easy to miss. If you made your reference images as fifty variations of one seed, you train on the model’s own average face. The LoRA then sharpens that average face and does not lock in one identity.

On Flux you write captions in normal sentences, not as a list of tags. Give the person a rare token. Then describe everything that varies: pose, clothing, background, light, camera distance. Do not describe the face. Anything you describe in the caption, you can still change later in the prompt. What you leave out of the caption gets tied to the token. This explains most of the “my LoRA always generates the same shirt” complaints you will read.

What did not work

A 60-image dataset from a single shoot

Every frame came from one generated session: same key light from camera-left, same grey backdrop, same small gold hoops, same top in eleven of them. It looked like a professional reference sheet.

The LoRA from this set was unusable outdoors. A prompt for direct midday sun still gave the soft light from camera-left. A prompt for a beach still gave the earrings. The face itself was accurate, and that made it worse. Every image clearly showed the persona, but every image also looked like the same twenty minutes in the same studio.

Rebuilding with 26 images across four fabricated sessions, four light setups and three camera distances fixed it. The dataset shrank by more than half and the LoRA became much more flexible. Variety mattered far more than the number of images.

My face drifts after epoch 20. Is it the dataset or the training settings? Ask it in #technical-inquiries. Someone there has usually had the same problem.

Open the DiscordWhat is inside the server

Training a Flux LoRA: the settings that matter

Everything from here to the diagnosis section is about the second route. If you use hosted models, skip to the ten-minute check. The same things go wrong there, even though the settings are different.

Pick one trainer and stay with it. The common choices for Flux LoRAs are kohya’s sd-scripts, ostris’s ai-toolkit and SimpleTuner. You cannot copy settings from one trainer to another. The same learning rate behaves differently in each one, because the optimiser defaults, the loss weighting and the blocks each trainer touches are different. Copying a number from a Reddit comment written for a different trainer is the most common reason a run produces a useless, blurry LoRA.

Before you build anything commercial on Flux, check the licence of the model you train on:

FLUX.1 dev weights are published under a non-commercial licence. Output may be used “for any purpose (including for commercial purposes)”, but using the model itself for revenue-generating activity is outside the non-commercial licence and requires a separate licence from Black Forest Labs. The schnell variant is Apache-2.0. Check the current terms on the licence page yourself before monetising anything trained on dev — this is exactly the kind of term that gets revised, and “someone said it was fine” is not a defence.

Black Forest Labs — FLUX [dev] Non-Commercial License v2.0 (opens in a new tab)checked

These settings change the result, the most important first:

  1. Total steps relative to dataset size. Total optimiser steps are roughly images times repeats times epochs, divided by batch size. There is no correct number. It depends on your image count, your learning rate and how distinctive the face is. Find your number by sampling. Do not copy one. Save a checkpoint every epoch.

  2. Learning rate. People usually quote a rate around 1e-4 with an 8-bit AdamW optimiser as the starting point for Flux LoRAs. Check the default in the example config that ships with your trainer. Do not trust a forum post. The defaults have changed between releases, and only the config in the repository you installed is reliable. If you halve the rate and roughly double the steps, you get a gentler LoRA that works better together with other conditioning.

  3. Rank. Rank 16 is enough for a human face. Rank 32 gives some more detail and a clearly higher chance of overfitting. Above 64 for a single face, you mostly waste parameters and ship a bigger file.

  4. Resolution and bucketing. Train at the resolution you generate at. If you make 1024px images and train at 512, the model has to guess detail it never saw.

  5. Text encoders. Leave T5 and CLIP frozen for a face LoRA. Training them changes much more than people expect. The model follows prompts worse long before the likeness gets better.

The most useful result of a training run is a comparison grid, even more than the final safetensors file. The grid shows the same six prompts with the same fixed seed, rendered from every saved checkpoint. Without it you are guessing which checkpoint is best.

What did not work

Training to 40 epochs because 20 looked soft

At epoch 20 the likeness was about 85% there and slightly generic, so it seemed obvious to keep going. At epoch 40 the face was exact and everything else had broken.

Contrast went up. Skin got that waxy, over-sharpened look. The grey backdrop from the training set started to appear behind prompts that asked for a kitchen. Prompt terms that worked at epoch 12 (“wide shot”, “looking away”) were ignored.

The weight test showed it. At LoRA strength 0.7 the epoch-40 model behaved almost exactly like the epoch-20 model at strength 1.0. If lowering the weight fixes the output, you trained the LoRA too strong and now have to water it down. The checkpoint that shipped was epoch 18. The softness that was left came from the detail pass and had nothing to do with training. The next section covers it.

The ComfyUI workflow that stops face drift

The structure matters more than the exact nodes, because node packs are renamed and forked all the time. There are four stages, in this order:

  • Base generation. Your checkpoint, your LoRA at strength 0.85 to 1.0, at your working resolution. Nothing special here.

  • Face detection and detail pass. A detector node finds the face. The face is cropped, rendered again at a much higher effective resolution with the same LoRA, and then put back into the image. In practice the denoise for that pass is around 0.35 to 0.45. Go higher and the pass invents a new face that no longer fits the body. Go lower and it only smooths. This one stage removes most of the driftDrift Drift is the slow change in a character’s face over time, until images made weeks apart no longer look like the same person. Open the glossary that comes from camera distance. So when a LoRA fails in full-body shots, “train longer” is almost never the answer.

  • Upscale last. If you upscale before the detail pass, you spend compute on a face the detail pass is about to replace.

  • Fixed inference settings across the whole account. Sampler, scheduler, step count, guidance and upscale model become constants. Write them down. This is the surface layer from the first section. You fix it with one decision, without a training run.

Two habits that save you time later:

  • Keep one workflow JSON per persona under version control. Put the workflow name and version into the output filename. When an image from three weeks ago looks wrong, you need to know which graph made it.
  • Do not add a step at the end that strips metadata or makes a “clean export”. Generators embed provenanceProvenance Provenance is the recorded history of how a piece of media was made and changed. Open the glossary markers, and platforms read them to label your posts. See Don’t strip your watermarks and the EU compliance guide.

What did not work

Stacking a face swap on top of the trained LoRA

The idea seemed sound: the LoRA gets the structure roughly right, and a face swap locks it exactly. In practice the swap node re-rendered every face through its own restoration model, and that model pulls strongly towards its own standard face.

The faces matched each other, but they were wrong. Across 200 images the persona drifted maybe 8% towards the swap model’s idealised face: narrower nose, smoother jaw, that restored-photo skin. Nobody looking at a single image would notice. Anyone who compared a January post to a March post noticed at once, and the account’s older content stopped looking like the same person.

The swap also flattened the skin texture into one even surface. That is the surface-layer problem from the first section again. Removing the swap and putting the effort into the detail pass gave a face that was slightly less “perfect” per image and far more stable across the set.

Trained LoRA or reference tools like Soul ID

There are two families of tools. Each does a different job.

  • Trained identity. A LoRA you own, with the weights on your own disk. It takes hours of setup. It costs nothing per image, you can move it between workflows, and you can retrain or fine-tune it later. Use this for your persona’s main face.

  • Reference-conditioned identity. Adapters in the IP-Adapter FaceID and PuLID family, and hosted products built on the same idea. Higgsfield’s Soul ID is the best-known example in this niche. You upload reference images and the model uses them every time it generates. It takes minutes instead of hours and needs no GPU rig. It also works for video, where LoRA pipelines are much harder.

All reference-conditioned tools have the same downside: they pull the face towards their own standard face. Faces come out slightly more symmetrical, slightly more conventionally attractive, and slightly more like everyone else’s output from the same tool. In a single campaign nobody sees it. For a face that has to stay the same person for a year, the small changes add up.

Most stable accounts split the work like this. The LoRA makes the main face. A reference-conditioned tool handles the cases the LoRA does badly. Then every image goes through the same detail pass and the same upscaler, so the surface matches wherever the image came from.

If you are looking at Soul ID or a similar hosted product, check four things on the vendor’s own page on the day you decide. Do not rely on a review.

  • how many reference images it takes, and whether it keeps them
  • whether you can export anything you could still use if the product disappeared
  • what the commercial-use terms say
  • whether outputs carry provenance metadata, and whether the terms forbid removing it (you want to keep it, so you need to know it is there)

Pricing and limits in this category change every month. Any number in a guide may be out of date by the time you read it.

Which model for which consistency job

Choose the method by the job, then the model. For stills, start with reference images and move to a LoRA when the face has to be yours for years. For video, use reference images or a saved element when you describe the scene in words. Use motion control when the movement has to be real.

There are four methods. Each holds something different, and each fails in its own way:

  • Reference images. You upload a few images of her, and the model looks at them every time it generates. You need no training. The face holds roughly and drifts towards the tool’s standard face.
  • A LoRA. Weights trained on her face. It holds the face shape best, and you own it. You need a dataset, a training run and a model that can load it.
  • A saved element. A named set of reference images that a platform stores for you. Every clip uses the same set, so clip ten starts from the same information as clip one.
  • Motion control. A video of a real person drives her movement. It copies the movement, not the face. The face still comes from your image and, in Kling, from a face element you bind.

Pick the job you have right now:

Six consistency jobs and the method that fits each. Stills start with reference images or a LoRA. Video adds saved elements and motion control.
What do you need to keep the same?
  • Reference imagesUpload three to five strong images to a hosted tool. No training. Expect a slight pull towards the tool's standard face.
  • Your own LoRATrain once and pay nothing per image. The face is yours, and you can take it to any workflow.
  • Reference-to-videoGive the video model several images of her, up to nine in MiniMax H3. Include side views if she turns her head.
  • A saved elementStore her reference set once, as a Higgsfield Element or a Kling element, and use it for every clip.
  • Motion controlFilm the movement yourself and let Kling 3.0 copy it onto her. Bind a face element and keep the orientation on match video.
  • Another model for her faceSeedance blocks realistic faces in its references. Use it for shots without her face, and a model that takes your references for the rest.

Schematicthe shape, not measured data

Stills: the images every video model starts from

The earlier sections give the rule for stills: start with a hosted tool and move to a LoRA when one of the four signs appears. One more reason to get the stills right comes from video. Every video method above starts from your stills. A start frame, a reference set, a saved element and a motion control image are all stills of her.

So a weak still set shows up in every clip. If your LoRA makes twenty clean, varied images of her, every video model gets a better reference set than from ten lucky outputs of a hosted tool. Build the set with the five areas from the dataset checklist: angles, expressions, light, distance and background.

Video: what each method holds and where it breaks

MethodWhat it holdsWhere it breaks
Start frame (image-to-video)Her face in the first frameTowards the end of the clip, and when she turns her head
Reference-to-videoHer face from several images, in any scene you describeAt angles you did not upload, and on models that refuse realistic faces
Saved elementThe same reference set in every clipIt is only as good as the images in it
Motion controlA real movement, with her face from a bound elementFast moves, cuts, two people in the take, or the wrong orientation setting
LoRA in videoThe face shape you trainedOnly a few video models and hosts load one

Reference-to-video gives you the most room. You describe any scene, and the model checks it against several images of her:

Reference limits: “Images: ≤ 9; width/height in [256, 5760]”, “Videos: ≤ 3 clips; per-clip duration [2, 15] s; total duration ≤ 15 s”, “Mixed input is capped at 12 files in total.”

MiniMax API docs — Video generation guide (opens in a new tab)checked

A saved element fixes a different problem. A reference you attach to one generation helps only that one generation. Higgsfield says so for Seedance:

“@character references hold a face consistent within a single generation. For the same character across multiple separate generations, save it as an Element”.

Higgsfield Help — How do I use Seedance (opens in a new tab)checked

Motion control has its own limit. Kling’s element holds only the face, and only in one orientation mode:

“The Motion Control Element Library only uses facial information for reference. It does not include clothing, hairstyle, makeup, or props.” “Element Binding is supported only when the character’s orientation matches the video orientation.”

Kling Quickstart — Motion Control user guide (opens in a new tab)checked

So her hair and outfit come from your image and your prompt. Keep both the same across clips, the same way you pin the signature layer in stills.

A LoRA in video is the most direct way to carry a trained face into motion. Few video models load one, and the hosts that do charge their own price per clip. Which models hold a face once it moves lists the ones that take a LoRA, and what generation costs has the current prices.

When a model refuses her face

Some video models check your references for realistic faces and refuse them. For a photorealistic persona, that can end a plan before the first clip.

“Dreamina Seedance 2.5 and Dreamina Seedance 2.0 series models do not support directly uploading reference images or videos that contain real human faces.”

BytePlus ModelArk — Create a video generation task (opens in a new tab)checked

BytePlus names no exception for a face you generated in another tool. Test this before you build a pipeline on any model. Send one short clip with her front close-up through the host you plan to use. If it is refused, give her face shots to a model that takes your references, and keep the strict model for shots without her face.

A setup that covers most accounts

  1. Make the stills with a hosted reference tool or your LoRA.
  2. Pick five of them as her reference set: front, both three-quarter views, one full body, one in different light.
  3. Save the set as an element wherever the platform allows it, so every clip uses the same images.
  4. Use reference-to-video for scenes you describe, and motion control for movements you film.
  5. Check the first and last frame of every clip against your master still, and run the monthly grid below on the stills.

Video models change often. Your reference set and your checks carry over to the next one.

The ten-minute check that catches drift early

Build a fixed grid of twelve prompts: frontal portrait, three-quarter, profile, full body, indoor, outdoor, hard light, soft light, smiling, neutral, and two of whatever your account posts most. Fix the seeds. Save the grid as your baseline.

Run it again every month, and after every change to the checkpoint, the LoRA, the sampler, the upscaler or any node pack. Put the new grid next to the baseline. You almost never see drift from one image to the next. You see it clearly when you put images from different months side by side. Your audience sees your images across months. You normally do not compare them that way, so the grid does it for you.

Numbers in this guide to check yourself

Model versions, trainer defaults and node names change faster than any written guide. Before you rely on a value from this guide, check:

  • The example config that ships with your trainer, for the current default learning rate, rank and optimiser, in the version you installed.
  • The Flux licence terms on Black Forest Labs’ own page, for anything commercial.
  • The current node names in your ComfyUIComfyUI ComfyUI is a node-based interface for building image-generation pipelines. Each step is a box that is wired to the next. Open the glossary custom node packs. Detector and detailer nodes get renamed across major versions.
  • The vendor page of any hosted identity tool, for limits, export and provenance behaviour.

Some numbers in this guide are ranges on purpose. A wrong exact number costs you more time than a range.

There is more in Character consistency. For the labelling side of a photorealistic persona, read Instagram’s AI-generated profile label.

Sources for this article

The platform rules, laws and numbers above come from these documents. The date says when we last opened each one and checked it.

  1. Higgsfield — Terms of Use Agreementchecked
  2. Black Forest Labs — FLUX [dev] Non-Commercial License v2.0checked
  3. MiniMax API docs — Video generation guidechecked
  4. Higgsfield Help — How do I use Seedancechecked
  5. Kling Quickstart — Motion Control user guidechecked
  6. BytePlus ModelArk — Create a video generation taskchecked

Questions people ask

How many images does a Flux face LoRA need?

Twenty to forty images that are clearly different from each other. Forty frames from one shoot teach the LoRA the lighting and the earrings. Twenty images from four sessions, with four light setups and several camera distances, teach it the face.

Why does my LoRA lose the face in full-body shots?

The face is too small in the image. At 1024px a full-body frame gives the face only about 80 to 150 pixels of height. More training does not help. Add a face-detection detail pass that crops the face and renders it again at high resolution.

Is Higgsfield Soul ID a replacement for training a LoRA?

No. It does a different job. Tools that work from reference images give you a usable face in minutes, and you need no training rig. But they pull the face towards their own standard face, and you never hold the weights. A trained LoRA takes longer to make, but you can move it anywhere and it is yours. Most stable accounts use a LoRA for the main face and a hosted tool only where the LoRA does badly.

What does an overtrained LoRA look like?

Contrast goes up. Skin looks waxy or like plastic. Backgrounds from the training set show up when you did not ask for them. The model stops following prompt words it followed at earlier checkpoints. A good test: lower the LoRA weight to 0.7. If that fixes the look, you trained too long and an earlier checkpoint is better.

Can I mix a face swap with a trained LoRA?

You can, but the face usually gets less consistent. A swap node renders the face again through its own restoration model. That model has its own standard face, so every image moves a few per cent towards it. One image on its own looks fine. A January post next to a March post does not.

Which AI model is best for consistent characters?

Pick by the job first. For stills, start with a hosted reference tool and train your own LoRA once you need many images or want to own the face. For video, use reference-to-video or a saved element when you describe the scene, and motion control such as Kling 3.0 when you want to copy a real movement.

How often should I re-check consistency?

Run a fixed prompt grid with fixed seeds once a month. Run it again after any change to the checkpoint, LoRA, sampler, upscaler or node pack. You can only see drift if you kept a baseline to compare with.

GusOperator, AI OFM City

Three years of running several AI personas on Fanvue and social media.

I checked this article on . How articles are made and checked

Questions? Ask in #technical-inquiries on our Discord. People who run AI influencers answer there. 5,856+ members.

Back to the top