I’ve been getting a lot of questions about how I manage to create so many LoRAs, especially with multiple outfits per character, so I thought I’d just write up my full workflow in one place.
Hopefully this helps anyone who’s curious or trying to build something similar themselves!
TLDR at the end!
The single most important part of my workflow is a custom app I wrote using Streamlit. Honestly, without it, I couldn’t do even half of what I’m doing right now. The app acts as a central hub where almost everything happens: creating screencaps, managing a database, assigning images, defining prompts, starting trainings, and even preparing uploads for Civitai. If there’s one piece of advice I can give right away, it’s this: reduce friction as much as possible. Every manual step you can automate will save you hours in the long run.
The first step is creating screencaps for a full anime. I won’t explain how I do that in detail, for obvious reasons, but there’s plenty of information out there if you’re willing to research it. This part is mostly about getting a large and consistent image base to work with.
Once I have the screencaps, I use a script to split them into visually similar clusters. These clusters aren’t perfect, but they’re good enough as a starting point. After that, I manually merge clusters that belong to the same character into one large character cluster. This step still needs human judgment, and I don’t think that’s avoidable (yet).
That big character cluster then gets split again into smaller clusters. The goal here is to separate different outfits. In theory, this should be easy. In practice, this is the slowest and most annoying part of the entire workflow. If you’re struggling with outfit separation: you’re not doing anything wrong. It’s genuinely hard, and I still haven’t found a perfect solution for it.
If an outfit ends up with too few images, I make a call. If it’s just a single, uninteresting outfit, I usually drop it. If the outfit is visually distinct or important for the character, I’ll use image augmentation-ui to expand the dataset. This is a great way to make smaller outfits viable without overfitting.
Next comes tagging. I tag all images using PixAI Tagger v0.9 and then look at the tags per outfit. Seeing how often a tag actually appears makes prompt creation much easier and more consistent. This is also where I clean up bad tags and add trigger words for each outfit.
This trigger-word step is extremely important. Models get confused very easily when outfits are similar. A shirt with white thighhighs and a tank top with white thighhighs might share most of their tags, and the model will happily mix them together. By giving each outfit its own trigger word, you’re basically telling the model: “These are separate concepts. Don’t blend them.”
A good way to think about it is folders. Instead of throwing all outfit images into one giant folder, you’re giving the model multiple clearly labeled folders. When you later ask for one specific outfit, the model knows exactly where to look.
Once the base character prompt and all outfit prompts are ready, training starts. I use a direct connection from my Streamlit app to kohya_ss, which lets me queue multiple trainings and run them automatically. The number of training steps is calculated based on the number of images. This is important, because a character with 2,000 images needs very different settings than one with only 10.
Important note: since today (12/28/25) I am using kohya_ss on a wsl2 Linux subsystem to make use of triton, which is.. well lets just say the windows support is limited. Training times CAN be reduced, depending on your GPU. In my case, the 5090 is now training more than 3x faster as it did on windows. If you are building a streamlit app, don't worry. The streamlit app can seamlessly connect to the wsl2 system, which also means, that lora training queueing is still possible. Sidenote: Streamlit CAN be built directly in wsl2, but I recommend building it in windows and then applying scripts to the wsl2 system. Streamlit has too many dependencies that are either unstable or single-user maintained on linux.
After training, I generate 30 images using different prompts and outfits. I also include a few “basic” prompted outfits to show that the model isn’t locked into only the trained ones. From those 30 images, I manually select the 20 best and move them into a separate folder together with the LoRA. That’s also why some preview images might look a bit off. They’re not perfect, but they’re still the best representatives compared to the ones that got scrapped.
If a model doesn’t turn out the way I want, I retrain it. This can happen for many reasons: too little data, too many outfits, very unique clothing, or just bad luck. Thanks to automatic step calculation, I can adjust a step multiplier manually. Depending on how broken the LoRA is, I usually land somewhere between 1.3x and 1.7x steps, and I never go beyond 2x.
Finally, I queue the upload to Civitai, double-check the model and prompts, save it to the right collection, and make sure the first image is PG or PG-13. Otherwise, the model won’t count toward the creator score. No idea why that’s a thing, but it is what it is, so I work with it.
TLDR
Create screencaps for a full anime
Automatically cluster screencaps by visual similarity
Manually merge clusters into one cluster per character
Split each character cluster into smaller clusters to separate outfits
Drop unimportant outfits or augment small ones using image-augmentation-ui
Tag all images with PixAI Tagger v0.9
Clean up tags and define trigger words per outfit
Train the base character + outfit triggers via kohya_ss (steps auto-calculated by image count)
Generate test images with all outfits and some generic prompts
Manually select the best preview images
Retrain with higher step multiplier if needed (≈1.3x–1.7x, max 2x)
Upload to Civitai, ensure PG/PG-13 first image, add to collection
I’ll keep updating this post if my workflow changes or improves. This isn’t “the perfect way”, it’s just what currently works best for me.
If you’re experimenting with your own setup, take what’s useful, ignore the rest, and adapt it to your needs.
For those asking if I can share the files of my streamlit app; I can't just spill all the beans ;) streamlit is easy to understand and I've set up everything in less than 3 months without much prior knowledge, I believe in all of you, you can do it too!
And if you’ve got questions, feel free to ask!
Changelog
12/28/2025: changed my tagging setup from deepdanbooru to pixai tagger, thanks to the helpful comment <3
12/28/2025: added kohya_ss switch to wsl2/linux as a note


