How to Train a Consistent NSFW Character LoRA (2026)

14 min read

To train a consistent NSFW character LoRA, build a 15 to 40 image set of one fictional character with constant identity but varied poses and scenes, pick a unique trigger word, caption everything except the identity so it absorbs into the trigger, train at dim 24 around 2,000 steps, then test poses. Keep all subjects adult, fictional, and AI-generated.

A character LoRA is the most popular and most demanding kind to train, because the bar is unforgiving: the face and body have to stay recognizably the same across every pose, scene, and lighting setup you throw at it. This guide is the focused, character-specific playbook. It assumes you already understand the general pipeline and zooms in on the decisions that make or break likeness: dataset for a single character, trigger word choice, the exact captioning strategy, settings tuned for identity, testing, and fixing the dreaded identity bleed.

What makes a character LoRA hard

Everything comes down to one tension. You want the identity to be rock-solid (same face, same body) while everything else stays flexible (any pose, any scene). If you train too narrowly, the LoRA only reproduces the exact images you fed it. If you train too loosely, the identity drifts and the character stops looking like itself. The whole craft is holding identity constant while keeping flexibility high.

The good news: the techniques are specific and repeatable. Nail the dataset and the captioning and you are most of the way there, and the remaining settings work is a matter of small, deliberate adjustments rather than guesswork. Treat this as a craft you improve at with each character you train.

One identity node binding to many pose frames consistently, abstract concept

Dataset for a single character

The dataset rule for a character is simple to state: same identity, everything else different.

  • Count: 15 to 40 images. Lean toward 20 to 30 for a good balance.
  • Identity constant: the same face structure, same body type, same defining features in every single image. This is non-negotiable. One off-model image pollutes the average.
  • Vary everything else: pose, camera angle, distance (close-up, mid, full-body), expression, lighting, background, and outfit. The more variety in these, the more the model learns they are incidental.
  • Framing mix: roughly 40 percent face-forward portraits, 40 percent waist-up and three-quarter, 20 percent full-body. This teaches both the face and the body.

Because the subject must be fictional and consistent, synthetic data is the ideal source. Generate your character from a strong base checkpoint, hand-pick the outputs where the identity holds, then expand those into a varied set. You own every image, no real person is involved, and you control the consistency directly. Browse the best NSFW checkpoints for a base that renders your target look, and follow the dataset guide for the full quality bar. You can rough out candidate looks fast in our free NSFW AI image generator before committing.

Choosing the trigger word

The trigger word is the handle you will use to summon the character forever, so choose it well.

  • Unique token. Use something the base model has not learned as a real word. aria_v1char or nsfw_aria_x beats aria, which already carries associations the model will fight you on.
  • Short and memorable. You will type it constantly.
  • One per character. Never two triggers for one identity.
  • Avoid real names of real people. Both for ethics and because real names pull in the model’s existing notion of that person.

Whatever you pick, it goes first in every caption. That leading position gives it the most weight and is what binds the identity to the token.

Captioning a character: the key move

This is the single most important technique, and it is counterintuitive, so read it twice.

Describe everything EXCEPT the constant identity. Let the identity absorb into the trigger.

The logic: anything you tag becomes a separate, controllable attribute the model can change or drop. Anything you leave untagged has nowhere to attach except the trigger word. So you deliberately omit the permanent identity features, forcing them to bind to the trigger.

For a character whose identity is a specific face, green eyes, and a signature hairstyle:

  • Do NOT tag: the eye color, the hairstyle, the face shape, any permanent body feature. These should absorb into the trigger.
  • DO tag: pose, expression, camera angle, outfit (since it changes), background, lighting, and any NSFW action.

An example caption file for a Pony or Illustrious character:

# img_007.txt  (booru style for Pony/Illustrious)
aria_v1char, score_9, score_8_up, 1girl, solo, sitting, looking at viewer, indoors, window light, nude, detailed background
# note: eye color and hairstyle deliberately NOT tagged so they bind to aria_v1char

If you tagged green eyes in every file, the model would treat green eyes as optional and might drop them when you do not prompt for them. By omitting it, the green eyes become part of who aria_v1char is. This is exactly the absorption principle from the captioning guide, applied with character precision.

One caution: be consistent. If half your captions accidentally tag the hairstyle and half do not, absorption gets muddled and the identity becomes unreliable. Audit every caption file for stray identity tags before training.

Settings tuned for character likeness

Character LoRAs favor settings that lock identity without overcooking. Start here and adjust.

Setting Character value Why
Network dim 24 Enough capacity for a face, not so much it overfits.
Network alpha 12 Half of dim, the safe convention.
Unet LR 1e-4 Standard; learns the visual identity.
Text encoder LR 5e-5 Lower, so the trigger binds without dominating.
Scheduler cosine Settles gently, reduces tail overfitting.
Optimizer AdamW8bit Stable, memory efficient.
Total steps ~2,000 Sweet spot for a character.
Resolution 1024,1024 Match SDXL/Pony base.
Clip skip 2 For Pony/Illustrious.

The text encoder learning rate matters more for characters than anything else here. Too high and the trigger word starts overriding the whole prompt, dragging the character into every generation and bleeding into other subjects. Keeping it at roughly half the unet rate is the guardrail. For the full reasoning behind each value, see the training settings guide, and set them in Kohya SS.

Save a checkpoint every 2 epochs. Character likeness has a narrow sweet spot, and having multiple epochs to compare is how you find it.

Testing across poses and scenes

A character LoRA is only good if the identity survives variety. Test it deliberately.

Generate a matrix: the same character across several poses, several camera angles, and several scenes, all at a fixed seed per cell so you are comparing fairly. Include the trigger word and always the safety baseline negatives.

# Test prompt (vary the middle, keep trigger + safety constant)
score_9, score_8_up, aria_v1char, 1girl, solo, standing, full body, outdoors, golden hour, <lora:aria_v1char_v1:0.8>

# Negative prompt
child, minor, underage, loli, shota, low quality, blurry, deformed, extra fingers, bad anatomy, watermark

Run the same prompt structure swapping standing, full body, outdoors for sitting, close-up, indoors, then lying, from above, bedroom, and so on. Sweep LoRA weights 0.6, 0.8, 1.0 and compare epochs. You are looking for the combination where the face stays consistent across every pose without the outputs looking stiff or identical. The prompt examples post has more structures to test against.

Fixing identity bleed

Identity bleed is when your character leaks into images it should not, or other subjects start looking like your character. It is the most common character-LoRA problem. Causes and fixes:

  • Text encoder trained too hard. Lower the text encoder LR (try 3e-5) and retrain. This is the most frequent culprit.
  • Trigger word too generic. If your trigger collides with real tokens, the effect spreads. Use a more unique token and retrain.
  • Overtrained. Use an earlier epoch or lower the inference weight to 0.6 to 0.7.
  • No regularization. Add a small set of regularization images of the same class (generic, not your character) to preserve the model’s general prior. The Kohya guide covers the reg folder.
  • Identity over-tagged. Paradoxically, if you DID tag identity features, the model may apply them too aggressively. Re-prune captions.

The opposite problem, an identity that is too weak (the character barely shows up), is fixed by raising repeats or the unet LR slightly, or training a couple more epochs. If the face is inconsistent across outputs, the root cause is almost always an inconsistent dataset; fix the data first.

A trigger word feeding a row of matching character frames, glowing on dark

Bootstrapping a character from scratch

If you do not yet have a consistent character, you have to create one before you can train it, and this chicken-and-egg problem trips up beginners. The reliable workflow is to lock a seed and prompt that produces a face you like, then generate many variations from that anchor while changing only pose and scene. Pick the outputs where the face stays closest to the anchor, and use those as your seed dataset.

For tighter consistency during bootstrapping, some trainers do a quick low-effort first LoRA on just 8 to 10 anchor images, use it to generate a larger, more consistent set, then retrain a proper LoRA on that improved set. This two-pass approach costs an extra hour but dramatically tightens identity, because the second dataset is far more on-model than hand-picked raw generations. It is the same idea as iterating on any model: each pass cleans up the inputs to the next.

Whichever route you take, the anchor face must be a fictional, adult, AI-generated identity you own. Bootstrapping does not change the consent rules; it just changes how you build the dataset.

Face consistency versus body consistency

These two are not automatically linked, and many character LoRAs nail the face while the body drifts. The fix is dataset coverage. If most of your images are face-forward portraits, the model learns the face well and the body poorly, so full-body generations come out generic or inconsistent. Make sure roughly a fifth of your set is full-body, and that those full-body shots show the same body type, proportions, and any defining marks every time.

If the body still drifts after training, it usually means the body features were either under-represented in the dataset or accidentally tagged in captions. Add more consistent full-body images and confirm you did not tag permanent body traits you wanted absorbed. Treating face and body as two things to verify separately during testing catches this early.

Reusing your character across scenes

The payoff of a good character LoRA is reuse. Once the identity is locked, you can drop the trigger word into any scene prompt and the character appears consistently. Combine it with style LoRAs, pose controls from ControlNet workflows, and varied environments, and the same character holds across all of them. Keep the LoRA weight around 0.7 to 0.85 when stacking with other LoRAs so the identity stays strong without overpowering the rest of the prompt.

Document the trigger word and your recommended weight alongside the file. A character LoRA without its trigger is unusable, and future you will not remember it. Treat that note as part of the deliverable, the same way you would version any reusable asset.

A quick character-LoRA checklist

  • [ ] 15 to 40 images, identity constant, everything else varied
  • [ ] Synthetic or fully consented, adult, fictional subject only
  • [ ] Unique trigger word, first in every caption
  • [ ] Identity features NOT tagged (absorbed into trigger)
  • [ ] Pose, outfit, scene, lighting all tagged
  • [ ] Dim 24, alpha 12, unet 1e-4, text encoder 5e-5, ~2,000 steps
  • [ ] Saved multiple epochs to compare
  • [ ] Tested across poses, angles, and scenes
  • [ ] Checked for and fixed identity bleed
A consistency meter locking a face and body across frames, neon nodes

Combining your character with style and pose control

A finished character LoRA composes well with other tools, and that is where it earns its keep. Stack it under a style LoRA to render your character in a specific art look, keeping the character weight around 0.75 to 0.85 so the identity holds while the style applies. Pair it with pose conditioning to put the exact same character into precise poses you specify rather than relying on prompt luck. The ComfyUI guide and Forge setup guide both cover loading multiple LoRAs and pose tools together. When you stack, lower the weight of whichever LoRA is dominating, and test combinations the same way you tested the character alone, with a fixed seed and the safety negatives in place.

The practical upshot is a reusable, controllable asset: one trigger word that reliably summons a known identity, which you can then drop into any scene, style, or pose. That reusability is the entire reason to train a character LoRA instead of fishing for consistency through prompts each time.

Safety and consent

Character LoRAs carry the highest consent risk because they reproduce a specific identity. The subject must be adult, fictional, and AI-generated or fully owned and consented. Never train a character LoRA on a real, identifiable person without their explicit, documented consent, and never on minors or minor-appearing subjects. The US TAKE IT DOWN Act makes non-consensual intimate imagery of real people a serious legal matter, and a character LoRA can generate exactly that on demand. This is not legal advice; the only responsible path is synthetic or fully consented fictional characters.

Get the identity binding right and you have a reusable character you can place in any scene. Refine your dataset with the dataset guide, lock your captions with the captioning guide, and dial settings with the settings guide. Then load your finished character and bring it to life in our free generator.

Frequently asked questions

How many images do I need for a consistent character LoRA?

Between 15 and 40, with 20 to 30 being a good balance. The identity must be perfectly consistent across every image while pose, angle, expression, lighting, background, and outfit vary as much as possible. One off-model image pollutes the learned identity, so curate strictly. Quality and consistency matter far more than raw count for a character.

Why should I not tag my character’s eye color or hairstyle?

Anything you tag becomes a separate attribute the model can change or drop. Anything you leave untagged binds to the trigger word instead. By deliberately omitting permanent identity features like eye color and hairstyle, you force them to absorb into the trigger, so the character reliably carries those features across any pose or scene without you prompting for them each time.

What trigger word should I use for a character?

A short, unique token the base model has not learned as a real word, such as aria_v1char rather than aria. Use exactly one trigger per character, place it first in every caption, and avoid real people’s names, both for ethics and because real names pull in the model’s existing notion of that person. The unique token is what cleanly binds the identity.

What is identity bleed and how do I fix it?

Identity bleed is when your character leaks into images it should not, or other subjects start resembling it. The most common cause is training the text encoder too hard, so lower its learning rate to around 3e-5 and retrain. Other fixes include using a more unique trigger, an earlier epoch, a lower inference weight, or adding regularization images to preserve the model’s general prior.

What settings give the best character likeness?

Start with network dim 24, alpha 12, unet learning rate 1e-4, text encoder learning rate 5e-5, cosine scheduler, AdamW8bit optimizer, and around 2,000 total steps at 1024 resolution. The text encoder rate is the critical dial: keep it near half the unet rate so the trigger binds the identity without dominating the whole prompt. Save multiple epochs to find the sweet spot.

How do I test that my character LoRA is consistent?

Generate a matrix of the same character across several poses, camera angles, and scenes, using a fixed seed per cell so comparisons are fair, with the trigger word and safety negatives constant. Sweep LoRA weights from 0.6 to 1.0 and compare saved epochs. You want the face to stay recognizable across every variation without the outputs looking stiff or identical.

Can I train a character LoRA of a real person?

Only with that adult person’s explicit, documented consent, or if the likeness is entirely fictional and AI-generated. Never train on a real identifiable person without consent, and never on minors or minor-appearing subjects. Non-consensual intimate imagery of real people is a serious legal matter under laws like the TAKE IT DOWN Act. The responsible path is synthetic, fictional characters you own outright.

My character looks different in every image. What went wrong?

Inconsistent outputs almost always trace back to an inconsistent dataset rather than settings. If even a few training images were off-model, the LoRA learns a blended, unstable identity. Re-curate so every image shows the exact same face and body, remove any that drift, and retrain. Fix the data before touching learning rates, because no setting can rescue a muddled identity dataset.