4 tables · figures as of 2026-10

4.5 LoRA Training: The Complete Workshop

You have a dataset from 4.4 and a reference plate. Now you teach the the face.

The mechanics are less mystical than the field makes them sound, and the failure modes are predictable. This chapter covers the base choice, the trainer choice, every parameter that matters, , the cost, and — the part that separates a usable from a wasted weekend — how to choose which to keep.

[AS OF 2026-10] Parameter values below are starting points from practitioner reports, not validated defaults. Treat them as the beginning of a sweep, and treat the method — sample during training, score against held-out images, keep more than one checkpoint — as the part that actually generalizes. [UNTESTED]

Choosing the base

The base decides the license, the hardware requirement, the adapter ecosystem, and the fidelity ceiling, in that order of consequence.

Base Likeness VRAM Ecosystem License posture
Z-Image Reported best likeness among the small models [UNVERIFIED] 12 GB class Younger Permissive
FLUX 2 Klein 4B Good, fastest to train of the FLUX class 16–24 GB Growing Permissive
FLUX 2 Klein 9B Better fidelity, heavier 24 GB class Growing Permissive
Qwen-Image Strong, good text rendering 24 GB class Moderate Permissive
SDXL Lower ceiling, unmatched ecosystem 8–12 GB Largest Permissive
FLUX.1 dev High fidelity 24 GB class Large Non-commercial base — check 11.4 before you train

Three rules for the choice:

Stay inside the family from 3.1. A LoRA trained on one family does not load in another. If you have been producing with a FLUX-class base, train on a FLUX-class base.

Check the license before the run, not after. A LoRA trained on a non-commercial base inherits the restriction. Retraining is cheap; discovering the restriction after you have built a business on the artifact is not.

Prefer the small permissive models unless you have a reason. Z-Image, Klein, and SDXL train faster, need less VRAM, and have licenses that do not constrain what you can sell. The fidelity gap is smaller than the marketing suggests.

Choosing the trainer

All four options emit a .safetensors adapter. The differences are ergonomics.

Trainer Interface Choose it when
AI-Toolkit YAML config Default. FLUX-class and modern bases, reproducible configs, sensible presets
FluxGym Minimal GUI You want the absolute shortest path to a first FLUX LoRA
OneTrainer Structured GUI You want broad model support with more guidance than Kohya's UI
Kohya_ss Dense GUI You are following a specific tutorial written for it, or need an obscure option

The reason to default to a configuration-file trainer rather than a GUI is reproducibility. Your training run is an artifact of your business: the config file is the record of how the identity was made, and it is what lets you retrain the same face in eight months after a base model update. A GUI session leaves no such record unless you write it down, and you will not.

Chapter 3.4 covered installation. If you have not installed anything, run your first LoRA on a hosted trainer instead — roughly $2 at the base price for a run. [AS OF 2026-10] Doing one hosted run first is the cheapest way to learn what the parameters do before you debug a local environment.

The configuration, parameter by parameter

The names differ between trainers. The concepts do not.

Parameter What it does Starting point What to watch
Rank / dim How much capacity the adapter has 16–32 for a face Higher is not better; over-capacity overfits
Alpha Scaling of the adapter's effect Equal to rank, or half of it Governs how hard the LoRA pushes
Learning rate Step size ~1e-4 for the main network; ~1e-5 if training the encoder Too high: artifacts. Too low: no effect
Steps or epochs How long it trains Budget from repeats, not by feel More steps past convergence buys rigidity
Batch size Images per step As high as VRAM allows Affects effective learning rate
Resolution Training resolution The base's native training resolution Must match the dataset's preparation
Repeats Passes over each dataset image 5–10 Multiplies total steps
Save every N Checkpoint frequency Every 250–500 steps The most important setting in the table
Sample every N In-training preview images Same cadence as saves With a fixed prompt set, your QA data
Train text encoder Whether the prompt encoder is updated Usually off On is slower and can hurt prompt following

Four of those deserve more than a table row.

Rank and alpha are capacity, not quality. A face is a narrow concept. High rank gives the adapter enough room to memorize your dataset's lighting and background along with the face — the technical version of the clothing trap from 4.4. Start in the middle of the range and stay there.

The learning rate is where a run is usually lost. Too high and you get artifacts, color shifts, and a face that looks like it has been sculpted from wax. Too low and the adapter barely changes anything, which people misdiagnose as a broken pipeline. Change this parameter one value at a time across runs, not two.

Repeats multiply your . Total steps is roughly repeats × images × epochs ÷ size. Know this before you pick a number, or you will train for six hours believing you were training for two.

Train the text encoder only for a reason. It is slower, it consumes more VRAM, and its usual effect on a face is to degrade how well the model follows unrelated prompt instructions. [UNVERIFIED] The exception is a concept that needs a new token to mean something the encoder has no representation for — a style, a rare artifact, a brand mark. A human face does not need that.

Captioning: the rule that matters

Captioning strategy for identity LoRAs divides the field, and the reason is that people caption for different goals without saying so.

The rule that resolves it:

Caption what you want to be able to change. Leave uncaptioned what is part of the person.

If you want to be able to change the outfit, name the outfit in the caption. If you want to change the background, name the background. If you want the face to be constant — and you do — do not describe the face at all.

A caption set for a persona therefore looks like a trigger token plus the variables:

ohwx_woman, red jacket, outdoor street, overcast light, smiling
ohwx_woman, black turtleneck, studio backdrop, softbox, neutral expression
ohwx_woman, denim shirt, kitchen interior, window light, laughing

And deliberately not:

ohwx_woman, oval face, brown eyes, sharp jaw, straight nose

The second style is what a naive auto-captioner produces. It is not wrong in the abstract — it describes the image accurately. It is wrong for this purpose, because it teaches the model that the words "brown eyes" are the explanation of the face. Then those words become a lever: change them, and the face changes, independently of the trigger. That is drift, reintroduced through the captions.

Trigger token. A rare string the model has no prior for, so it binds entirely to your concept. The convention is a nonsense token that does not appear in natural language. Use the same token every time you retrain this persona, because it is the interface between your prompts and the artifact.

Manual or automatic? Automatic captioners are fast and produce the verbose style above. If you use one, strip the facial descriptions afterward. For a dataset of 25 images, writing captions by hand takes twenty minutes and gives you full control over the one rule that matters. Do it by hand.

Time and money

Item Value
Training run length 2–7 h [UNVERIFIED]
Local cost Electricity, negligible at this scale
Rented GPU ~$0.50–2.00/h → roughly $2–14 per run
Hosted trainer, base price ~$2 [AS OF 2026-10]
Dataset preparation An afternoon, once
Retraining cadence Quarterly, or when the base changes

Compare that to the alternative in 4.3, where the same two hours a week become an annual figure. A training run plus an afternoon is under ten hours. The economics of the training are not close once your volume justifies it.

Choosing which checkpoint to keep

This is the section that saves the run, and the mistake it prevents is universal: keeping the last checkpoint.

Training loss is a weak signal for this task. It tells you the model is fitting the dataset, which is not the same as holding an identity. A run that has been going too long shows low loss and a rigid face — the persona can no longer smile differently, or turn, or be lit differently, without the likeness collapsing or the image developing a plastic quality.

The method:

  1. Save every 250 to 500 steps. Configure this before the run. It costs disk and nothing else.
  2. Sample with a fixed prompt set at the same cadence. Same three or four prompts every time, covering a frontal frame, a 3/4 frame, and one scene change.
  3. After the run, score the checkpoints using the held-out images from 4.4 and the protocol in 4.6 — not on the training set.
  4. Keep at least three checkpoints: the one that scored best, the one immediately before it, and the last one. Disk is cheap; a rerun is not.
  5. Record the chosen step count in the iteration register alongside the dataset version and parameters.

The pattern to expect as steps increase: the likeness improves, then plateaus, then the flexibility degrades while the likeness holds or even improves. The best checkpoint is usually near the end of the plateau — not the first frame that looks like your persona, and not the last one the trainer produced.

The trap: a LoRA belongs to its base

An adapter is a set of weights that modifies specific layers of a specific model. Change the base and the modification either fails to load or produces something unintended.

What this means in practice:

  • Record the base model's exact file and hash with the LoRA. "FLUX" is not an identifier; a specific checkpoint file is.
  • The LoRA works best at the base's native training resolution and precision. A quantized base combined with a LoRA trained at full precision is a measurable mismatch. [UNVERIFIED]
  • Within a family, sub-variants are not interchangeable. A distilled and a full-quality variant of the same family do not share the layers a LoRA touches.
  • Update the base deliberately, and expect to retrain. Chapter 12.4 treats a base rotation as a project with a retraining step, not a configuration change.
  • Keep the old base file. If you have to reproduce an asset from six months ago, the base plus the LoRA plus the settings is the recipe, and the base is the ingredient people forget to archive.

Where this goes wrong

Training on a non-commercial base and discovering it after launch. Check the license first.

Captioning the face. You have built a lever that changes the identity, and you will pull it by accident.

Leaving the learning rate high because the images "look sharper." They look over-processed.

Training the text encoder by default. Slower, more VRAM, worse prompt following, no benefit for a face.

Keeping only the final checkpoint. The last step of a run is rarely the best version of the identity, and it is often the most rigid one.

Scoring checkpoints on the training images. You will select the most memorized one.

Not archiving the base model. The recipe becomes unexecutable.

Expecting a LoRA to fix inconsistent lighting or wardrobe. It cannot; those are 5.4's problem.

The gate

  1. Which base, and what is its license?
  2. Where is your training configuration saved, and can you rerun it exactly?
  3. Are captions free of facial descriptions and full of variable descriptions?
  4. Is save-every-N configured, with at least three checkpoints retained?
  5. Which step count won, and what did it score on the held-out set?
  6. Is the base model file archived, with its hash recorded?

What you leave with

A base choice made on license and hardware rather than benchmark, a trainer defaulted to a reproducible config file, every parameter that matters with a starting value and the failure it causes, the captioning rule that prevents identity from leaking into your prompt vocabulary, a two-to-fourteen-dollar cost model, and a checkpoint selection method that measures identity on images the model has never seen.