IMPORTANT NOTE:
This guide contains my current technique which works good, but I am currently in the process of doing more research and getting more experienced in the intricacies of LoRA training, my goal is to improve upon my tagging strategy and training parameters so that my models can be more flexible, high resolution and be more buzz efficient, I am still in the workshopping phase of refining my parameters but once I start getting results and notice significant improvement then I will update the appropriate parts of this guide to fit my new process.
Even though I’ve made a lot of models now, I’m still fairly new to this and had to mostly wing it when I started — but the results turned out great, so I kept refining the same process. This is a full breakdown of exactly how I create LoRAs using CivitAI, SDXL, and my own tagging structure.
Step 1: Dataset Collection, Image Prep, and Folder Setup
I flip through manga/manhwa pages on my phone and take screenshots of the character I’m targeting.
I transfer the images to my PC using OneDrive. Since I’m on iPhone, they transfer as
.heic
format, which CivitAI does not handle well.I convert the images to
.jpg
using IrfanView (64-bit). JPGs upload much faster to CivitAI, and the auto tagger works better and faster with them than PNGs or HEICs.I crop the images using PixelPruner (from GitHub), which lets me crop images rapidly. This tool converts them into PNGs, so I re-convert them into JPGs again after cropping.
Optional but recommended folder workflow for multiple models:
I create these 4 folders and each one contains subfolders with the character's name:
Precrop
Precrop + JPG
Postcrop
Postcrop + JPG
Dataset size targets:
I usually aim for 80–110 images for the best balance of quality and buzz efficiency.
45–50 images is the minimum I aim for when the character has very little content.
30–35 is my hard minimum — the model might still work but will often be less accurate or flexible.
Over 110–190 images shows minimal improvement, so not usually worth the extra effort.
It is better to have a data set of 60 photos where all are good instead of a data set of 100 where 60 are good but 40 are bad.
Extra Tips and Notes
1. Dataset Variety – Expressions & Poses
Try to include images of the character showing as many different facial expressions and body poses as possible. This is crucial for making the model flexible and able to generate natural, emotionally accurate outputs that reflect the source material.
For example, when I made v1 of my white-haired Sayaka Ibu LoRA, I had good body shots but very few facial expressions. The result was a model that looked fine but had stiff, repetitive expressions and lacked personality. Learn from that — variety matters.
2. Image Size & Aspect Ratio
From what I’ve observed, image size and aspect ratio do not affect model quality when training. The resolution is more important, if your data set has a lot of good images that are low res, you can use an upscaler (I batch upscale through comfyui) to sharpen the images. You don’t need to worry if your dataset contains a mix of vertical, horizontal, square, or large images. It’s more important that the character is clearly visible and well-framed.
3. Cropping Workflow Note
I used to crop all my images manually on my phone before transferring them to PC. This worked but became too time-consuming — especially when working on multiple LoRAs with datasets of 100+ images.
I now crop on PC using PixelPruner, which is way faster. You don’t need perfect cropping precision — just make sure the character is the clear main subject in each image. Slight differences in how tightly you crop won’t affect the model’s output much.
4. PixelPruner Tip
If you’re using PixelPruner, you don’t need to use the dropdown menu to adjust the crop size.
Just use your mouse scroll wheel to smoothly increase or decrease the cropping area. This makes batch cropping much faster and more precise.
Step 2: Cropping Style
I prefer doing full-body crops when possible.
I also include some crops focused on the character’s face to help the model learn facial structure and features.
For signature outfits: As long as a decent portion of the dataset includes them, the model will learn it well — no need to be hyperspecific in prompts. Just guide the LoRA clearly and it will understand.
The main goal is to have a decent amount of both headshots to learn facial features, hairstyle and expressions. It is also good to have a good amount of full body shots to learn the characters anatomy (height, breast size, hip size, butt size), this is important for nsfw models to ensure the character looks as accurate to the source material as possible when generating nsfw scenes.
Step 3: Uploading to CivitAI Trainer
I upload the final JPGs into the SDXL trainer on CivitAI.
Step 4: Auto Tagging Settings
When running the Auto Tag step:
Max Tags: 30
Min Threshold: 0.4
Blacklist Tags: Use the standard quality filter blacklist (e.g. bad quality, deformed, mutation, blurry, etc.)
Prepend Tag:
Include only the character’s permanent physical traits: name, hair colour, eye colour, hairstyle, body type.
If the dataset contains both colour and monochrome images, do not include any colour terms in the prepend — it can confuse how the model interprets monochrome inputs.
This section is for important features that you want the model to remember while training.
Append Tag:
Use “manga” or “manhwa” depending on the source material.
This allows the tag to be easily swapped in or out of the positive prompt depending on whether manga panel styling is wanted.
Do not include “monochrome” here unless the model is intended to be monochrome-only.
This section is for very minor details that will be pushed to the back of the tags (DO NOT PUT IMPORTANT CHARACTER DETAILS IN THE APPEND)
Trigger Words (Auto Tag Box):
I only enter the character’s full name here.
All other traits and outfit tags are added after training, once I’ve tested and refined them.
Example Auto Tagging Setup:
Trigger Words:
kyouka uzen
Blacklist:
bad quality, worst quality, mutation, deformed, blurry
Prepend:
kyouka uzen, long straight hair, side bangs, sharp eyes, large breasts, wide hips
Append:
manga
Handling Flagged Images in Auto-Tagging (Inappropriate Tag Warnings)
Sometimes during the auto-tagging phase, you’ll encounter a warning saying some images were flagged for inappropriate tags. This is very common and nothing to worry about.
Why This Happens
The CivitAI auto-tagger often misinterprets visual context and adds inappropriate tags such as:
incest
siblings
rape
urine
loli
shota
This is especially common with ambiguous manga panels or characters wearing suggestive clothing like “babydoll”, which can trigger the filter even if the image isn’t actually explicit.
On average, expect 3–5 flagged images per 100 in a typical dataset.
How to Fix It
When flagged tags are detected, a warning will appear in the bottom right corner after you try to move forward from the tagging screen.
Scroll back up and look on the left side just below the Trigger Words box.
A checkbox will appear labeled something like “Show inappropriate tags” — tick this to filter and display only the flagged images.
Go through each of those images and manually remove the inappropriate tags. You won’t be told exactly which tags caused the warning, but the message usually gives hints (e.g., “incest” or “loli”).
To remove a tag, simply click on it — it will instantly disappear from the list.
Important UI Quirk
If you're not on Page 1 of the auto-tagging view, the filter won’t display flagged images properly.
Just go to Page 1 first, then tick the inappropriate tag filter to ensure all flagged images show up.
Step 5: Sample Prompt Images for Training Page
These don’t affect training quality, but they help show the process while training.
If your model includes both colour and monochrome data, I suggest:
2 monochrome prompts
1 colour prompt
This balances what the user sees in the preview thumbnails.
Step 6: Model Type Selection
After auto-tagging and before starting training, I select sdxl illustrious
as the base model.
Step 7: Training Parameters (SDXL)
To be honest, even now I have no idea what half of these settings even do. I just did a bunch of research before training my first Lora and this is what I put together.
These are the parameters I always use on CivitAI:
Epochs: 30
Num Repeats: Adjust this so the greyed-out step count is between 4000–5500
Train Batch Size: 1
Resolution: Leave default
Enable Bucket: On
Shuffle Tags: On
Keep Tokens: 1
Clip Skip: 2
Flip Augmentation: Leave default UNLESS if your characters has a symmetrical design
Unet LR: 0.00003
Text Encoder LR: 0.00003
LR Scehduler: Leave default
LR Scheduler Cycles: Leave default
Min SNR Gamma: Leave default
Network Dim: 32*
Network Alpha: 32*
Noise Offset: Leave default
Optimiser: AdamW8bit
High Priority: Off — it doesn’t really make a difference.
I like higher step counts because I feel they learn the character better.
But going over 9000+ steps hasn’t shown much benefit and just wastes buzz.
I usually hit 4000–5500, which costs about 1.8k buzz and takes ~4 hours to train.
IMPORTANT NOTE:
I am currently evaluating and going over how I can potentially polish these parameters as there is a possibility that equal quality can be made with fewer epochs, steps and an overall cheaper buzz cost, will update once I have proper findings.
*Recently I have been assessing my models and noticed that when not using hi-res fix the faces can be a bit fuzzy. I think that I might try a different network Dim/Alpha balance of 64/32 to see if that will improve it, if i get better results i will update this section.
Step 8: After Training – Prompt Testing and Tag Building
Go to the training section and select the finished model, click on the latest epoch and press continue, you will also get an option to download the file if you intend to generate locally.
Once training finishes:
I start trial-and-error testing to refine the prompt tags.
I create clean trigger word sets for monochrome and colour versions.
I add outfit tags separately, only if the character has more than one major look.
When generating:
Include “monochrome” in the positive prompt for black-and-white generations.
Include “full colour” in the positive prompt for coloured generations.
Add “monochrome” to the negative prompt when generating colour images to avoid hybrid artefacts.
Tag Building Tips
1. Trigger Group Size Depends on the Character
The size and complexity of your trigger groups will naturally vary depending on how detailed the character is. Characters with distinctive features like piercings, tattoos, hair ornaments, accessories, or unique facial traits may require longer trigger groups to ensure these traits are consistently generated.
2. Outfit Tags Also Vary in Detail
Outfits with multiple components, such as belts, gloves, stockings, layered designs, or signature accessories, may need multiple tags to be reproduced accurately. You can keep things simple, but if you care about fidelity to the source material, a more descriptive tag usually helps guide the output better.
3. When to Keep It Short vs. When to Add Detail
If an outfit or feature is shown in a large portion of your dataset, sometimes a shorter tag group still works fine because the model learns it well. But I personally prefer to be a bit more detailed — there’s rarely any downside.
Just don’t go overboard. While excessively bloated prompts could theoretically hurt generation results, I’ve never personally run into that issue. As long as you’re being logical and descriptive rather than spamming adjectives, you’re fine.
4. Descriptive Tags Help Prevent Mistakes
Even if the model has “learned” how something looks, it might still occasionally get details wrong. Being descriptive in your trigger tags and generation prompts helps the model follow clear guidelines, reducing the chances of missing or incorrect visual elements.
5. Outfit Dominance and Feature Bleed
Something I’ve also found is that if a character wears a specific outfit for the overwhelming majority of the dataset, this can sometimes bleed into other generations, especially if the new outfit shares similar shapes or colors.
For example, in some of my Chained Soldier models, when I tried to generate a character in a different black bodysuit, the model would mistakenly blend in elements from their signature outfit instead.
A good fix for this is to either:
Reduce the LoRA strength, or
Place the signature outfit tags into the negative prompt when generating the alternative look.
This helps the model avoid pulling in traits that are too strongly reinforced in training.
Step 9: Final Trigger Word Setup (Example using Kyouka Uzen)
Here’s how I structure the final trigger word sections when uploading the finished model:
Character Only:
kyouka uzen
Monochrome Trigger:
kyouka uzen, long straight hair, side bangs, sharp eyes, large breasts, wide hips, manga, monochrome
Colour Trigger:
kyouka uzen, long straight white hair, side bangs, sharp red eyes, large breasts, wide hips, manga, full colour
Outfit Tag (Monochrome):
black long sleeve military uniform with trim and buttons, epaulets on the shoulders, white gloves, belt with a buckle, hair accessory shaped like horned fins on both sides of her head, black thigh high boots with buckle
Outfit Tag (Colour):
black long sleeve military uniform with red trim and gold buttons, gold epaulets on the shoulders, white gloves, brown belt with gold buckle, hair accessory shaped like blue horned fins on both sides of her head, black thigh high boots with red trim and gold buckle
Step 10: Cover Photos and Posting
Once I’ve found the best prompt combinations and everything looks consistent, I generate a few clean showcase images to use as the model’s cover photos. These are usually accurate, well-composed single-character shots that represent the model at its best.
Checkpoint Used for Generation
I generate all my images using Wai NSFW Illustrious v14.0.
It was the first main checkpoint I used so I stuck with it since it always gives me great results in terms of style, proportions, and consistency.
When generating with my own Loras I usually use strength 1 and don’t really have any issue, I have checked and they work normally at other strengths too
Final notes:
I definitely would not say that I am a pro at this, so my methods might be sub optimal or inefficient, however this method has yet to fail me so far.
In the future I would like to learn how to also train Loras locally, if I figure this out, i will update this guide with a separate section for local training.
Please like, share or tip if you found this helpful
Please do not hesitate to comment or send me a private chat if you have any questions or need something explained 👍