Toudou Kirin is a supporting character from the series Gakusen Toshi Asterisk (The Asterisk War). This LoRA is mostly trained on her anime appearance, which aired in 2015-2016.
I used an experimental method to tag and train this LoRA, aiming for maximum flexibility. It should be very easy to change every aspect about her: hair, clothing, style/colors, body, etc. I have included a technical section at the end for those who are interested.
Usage
There is no activation word. The main tags are 1girl, purple eyes, purple hair, long hair, hair between eyes, two side up, sidelocks, large breasts
Outfits
Not all outfit tags are necessary. Mix and match to obtain the desired effect.
School uniform
school uniform, blazer, button badge, black bowtie, black skirt, pleated skirt, hip armor, black pantyhose, white boots
Note: The button badge (school emblem) is a lost cause. The SEA sweatshop animators did a bad job, and I'm too lazy to manually fix all >250 instances in the dataset. 😥 Inpainting with close-up, button badge
and around 0.7 denoise can fix it slightly.
Accessories
This is the bag she uses to transport her katana.
weapon bag, over shoulder, strap, holding strap
When viewed from behind, add: tassel, button badge
School uniform, without blazer
black vest, strapless vest, collared shirt, short sleeves, white shirt, black bowtie, black skirt, pleated skirt, hip armor, black pantyhose, white boots
School uniform, cold weather
aqua poncho, white shirt, long sleeves, black bowtie, black skirt, pleated skirt, hip armor, black pantyhose, white boots
Note: Her white shirt sleeves can sometimes be colored aqua if too much is showing.
Exercise/training outfit
pink jersey, short sleeves, collarbone, button badge, pencil skirt, hip armor, black leggings, white socks, sneakers
Underwear
underwear only, pink bra, bow bra, cleavage, pink panties, bow panties
underwear only, blue bra, bow bra, cleavage, blue panties, bow panties
Naked towel
nude cover, holding towel, hair down, wet hair
Note: Do not use two side up
because her hair is down.
Swimsuit
white bikini, white sports bra, button badge, cleavage
Disguise
black hat, rabbit hat, blue shirt, dress shirt, blue necktie, blue skirt, frilled skirt, white pantyhose, black boots, knee boots
Note: Do not use two side up
when she is wearing her hat because her hat covers it up.
Formal dress
black dress, strapless dress, collarbone, cleavage, lace choker, wrist scrunchie, hair scrunchie, strappy heels
Note: There were no detailed shots of her shoes in the anime, but it looks like she wears black strappy heels.
Locations
Arena/training room
arena, audience
Swordplay
I strongly suggest reading the Danbooru wiki on the relevant tags. The logic is not intuitive.
Katana on hip in sheath, hands not touching it:
katana, sheath, sheathed
Left hand grasping sheath, right hand about to grasp hilt, blade is not visible, popular quickdraw stance:
katana, holding sword, sheath, sheathed, ready to draw, iaidou
Left hand grasping sheath, right hand grasping hilt, blade is visible, partially unsheathed:
katana, holding sword, sheath, unsheathing
Left hand grasping empty sheath, right hand holding katana, fully unsheathed, empty sheath is visible:
katana, holding sword, sheath, unsheathed, holding sheath
Both hands holding katana, fully unsheathed, sheath is not visible:
katana, holding sword, two-handed
Note: holding sheath
is specifically for holding an empty sheath. If the katana is sheathed use holding sword
instead, even if her hand is not on the hilt.
Other useful combat-related tags:
fighting stance
battle, clash, sparks
slashing, attack trail, smear frame
speed lines, motion blur
dust cloud, debris
Nerd shit
Here I summarize each step of the process I used to create this LoRA.
I rewatched the anime with mpv and took many PNG screenshots, pausing and framestepping where necessary. I selected the useful images and with Krita I cropped, rotated, and duplicated/mirrored them. For the manga I chose the highest quality sources I could find then cropped and segmented a few good shots of her on a white background. For the official art I checked Danbooru and the promotional site for the anime.
Dataset:
955 anime screenshots
7 manga segments
6 pieces of official art
This is overkill, but I pushed forward just to see what would happen.
I used TagGUI with SmilingWolf/wd-eva02-large-tagger-v3 to autotag, fixed all the mistakes it made, then added all the tags it missed. This took a long time and made me question the utility of autotaggers. It's better to tag it yourself, assuming you can read the Danbooru wiki. The tagging strategy I used is "keep only the tags you want to learn (delete all unwanted tags)" which gave the most flexibility in my tests.
I used the following chaiNNer-org pipelines to cleanup the dataset:
Anime: upscale (2x_AnimeJaNai_HD_V3_Compact) → resize to side (2048, shorter side, upscale only, lanczos) → stretch contrast (keep colors, percentile 0.01) → upscale (2x_AniScale2_ESRGAN_i16_110K) → resize to side (4096, shorter size, downscale only, lanczos) → save (lossless webp)
Manga: upscale (1x_wtp_descreenton_compact) → change color model (rgb to gray) → resize to side (1024, shorter side, upscale only, lanczos) → stretch contrast (keep colors, percentile 0.01) → upscale (4x-DWTP-ds-esrgan-5) → resize to side (4096, shorter side, downscale only, lanczos) → change color model (rgb to gray) → save (lossless webp)
The reason I keep these high resolution intermediates is so I can redraw or inpaint if necessary. Lossless WebP is smaller than PNG, which saves some space. To generate the final training images I use a custom Python script and GraphicsMagick to downscale and crop the dataset into the closest SDXL buckets because I don't trust OneTrainer to do this correctly. An example: gm convert upscale/anime/mpv-shot0833.webp -resize 832x1216^ -gravity center -crop 832x1216+0+0 -define webp:lossless=true ../v1/anime/mpv-shot0833.webp
I used OneTrainer to train the LoRA. Here are my settings:
LoRA: rank 24, alpha 24, dropout probability 0.4
Data types: TF32 training, FP32 fallback, FP32 LoRA weight, FP32 base model weight, no overrides, FP16 output
Concepts: disable image augmentation, enable tag shuffling
Epochs 20, batch size 4, gradient checkpointing, (4760 steps total)
Optimizer: Prodigy (beta2=0.99, slice=1, defaults)
LR scheduler: constant
Text encoder: only train TE1 (CLIP_L), not TE2 (CLIP_G), dropout probability 0.2, stop training at epoch 10
Timestep: logit normal distribution, shift 3.15
Loss weight function: debiased estimation loss
VRAM usage is 25-30 GB. Training time is 5-7 hours depending on the base checkpoint.
Rank 16 (possibly lower) seems appropriate for a character with only one outfit, but for a character with several outfits a higher rank was required. Alpha as a hyperparameter is a mistake and should always be equal to rank. Never use BF16 precision because it sacrifices too much quality: it uses 7 bits for the significand compared to 10 bits for TF32/FP16. The relatively high dropout probability is what I think improves quality the most, but it works best with a large dataset and a long training time. To prevent overtraining the text encoder I stop it halfway. Everything else is experimental. Source: it came to me in a dream.