Tech18 min read

Four characters in one Anima LoRA: makeup toggle survival and 6/6 one-shot rate

IkesanContents

I merged a fourth character (Kurara, a gal type) into my three-character merged LoRA (Kei, Kana, Koharu). Her makeup on/off toggle was already verified in a solo LoRA; the question was whether what baked cleanly solo survives the merge — above all, whether the bare-faced toggle survives when every multi-character training image shows her with makeup on.

Test environment

ItemDetails
Base modelAnima-Base v1.0
Training toolAnimaLoraToolkit (torch2.8.0+cu128 / ubuntu24.04)
Training GPURunPod RTX 5090 (volume 170GB)
Training configrank256 / alpha256 / lr2e-5 / batch1 / accum4 / ep150 / save_every=1 / flip false (carried over from trio v2)
Data518 images → 896 files after weighted duplication (see below)
Generation checkComfyUI, Turbo 8-step, cfg 1.0

Dataset (final, 518 images)

SubsetCountContents / how it was made
Three-character proven set292The trio v2 set, unchanged
Kurara solo9161 makeup + 30 bare-faced. Same design as her solo v3, tilted shots already replaced
Extra solos35Kei 12, Kana 12, Koharu 11. Full-body reinforcement so Kurara’s 91 doesn’t outnumber them; busts were already baked, so none needed
Lineup composites333 pairs ×6 + 3 trios ×4 + all four ×3. Composited directly without Codex (clean cutouts → normalized to measured height ratios → feet aligned)
Contact poses673 pairs ×14 + 3 trios ×6 + all four ×7. Codex-generated

Captions follow the format proven on the three-character data: tags first, then a position phrase, then an outfit phrase. The identity anchors inside the position phrase are short and fixed (kurara=rose-brown hair+earrings+makeup / keichan=blonde+blue ribbon / kanachan=side ponytail+ahoge / koharu=short dark hair+red eyes). Kurara’s anchor always includes earrings/makeup, matching the additive design of the makeup toggle — every multi-character Kurara wears makeup.

What went wrong while building the data, and the fixes

1. AI-generated multi-character material inflates body proportions (measured +0.5 to 1 head)

Normalizing Codex (gpt-image) pair/trio outputs to the reference height and measuring on a 1/8 grid: Kana 5.5 → 6.5-7 heads tall, Kurara 6.4 → 7.3, Kei 6.2 → 7, Koharu 5.7 → 6.4.
Only the four-person layouts were safe (each body is drawn smaller to fit the row, which suppresses the leg-lengthening). My guess is that the reference Kurara is designed tall and slender, so in two-person layouts the partner gets stretched to harmonize with her.

The fix is a proportion constraint in the prompt, but a one-directional constraint over-corrected. With only “compact, 5.5-6 heads tall, heads LARGE” they shrank too far and went chibi. The final form pins both directions: “match the reference EXACTLY — neither taller/leggier NOR shorter/more chibi”.
There were side effects too. Bodies rendering small was solved with a framing instruction (fill most of the canvas height), and bust shots cropping off the head with “heads fully inside the frame with margin”.

2. Measure height differences from past accepted data

The Kana → Koharu gap came out too shallow in the composites (ratio 0.937, taken from a three-person standing image). Measuring the nude standing pair used as the height reference gave Koharu/Kana = 0.9212.
Final ratios with Kei as 1.0: Kurara = Kei = 1.0 / Kana = 0.951 / Koharu = 0.876. Every lineup composite is built by downscaling with these ratios only (no upscaling, LANCZOS). Mechanical compositing is more accurate and faster than asking an AI to draw someone “half a head shorter” in words. That settled the split: lineups by compositing, contact poses by Codex.

3. Height instructions for pairs/trios only hold when spelled out concretely

With just “half a head shorter”, some outputs shrank too much. What worked were prompts that state which part of one head lines up with which part of the other: “her eyes are at the level of their mouths”, “the top of her head is at their chin level, NOT lower”.

Exposure design (final)

AnimaLoraToolkit only has a global repeats setting (no per-subset repeats), so I built the weighting by physically duplicating files.

SubsetImagesCopiesEffective exposure
Solo (except bare-faced)318×2636
Kurara bare-faced30×390
Multi170×1170
Total518→ 896 files896/ep
  • Effective multi ratio 19.0% (adjusted to stay within the 23.8% proven in trio v2)
  • Kurara makeup : bare-faced exposure = 2.5:1 (with 100 multi images all in makeup, the raw ratio skews to 5.4:1; tripling the bare-faced images pulls it back to roughly the 2:1 of her solo v3. If this collapses, the toggle doesn’t survive)
  • steps/ep = 224, 33,600 steps over 150 epochs (about 23 hours on a healthy pod)

Epoch sampling strategy (final)

Multi-character output can’t bake before the solos do, so epoch judgment is designed around solos. Whether unprompted multi-person output stays at the right head count is down to Anima itself and the prompt; the job of my multi material is “no mixing when specified, height gaps and position words that hold”. For that reason, raw multi-person generations were left out of epoch judgment.

Each epoch gets one sample, rotating through six: (1) Kurara makeup bust (2) Kurara makeoff bust ((1)↔(2) form a toggle pair across adjacent epochs) (3) Kei (4) Kana (5) Koharu (6) the Kurara × Kana pair (the closest hues, my canary for color mixing).
The real trio/four-person judgment happens after training: narrow down to 3-5 candidate epochs on solos, then run a 14-image battery per checkpoint (6 pairs + 4 trios + 1 four-person + 3 toggles), 3 seeds each.
Multi-person images are generated wide (trio 1216×832 / four 1344×768). Cramming four people into a square adds resolution-driven distortion on top of any real mixing, and you can no longer tell which problem belongs to the LoRA.

Predictions before training

The four solo identities should bake without trouble (data and design are an extension of what’s proven). Kurara’s toggle should survive thanks to the ×3 bare-faced correction, though maybe weaker than solo; if it dies, rebuild with ×4.
Pairs shouldn’t mix with a fully specified prompt (trigger + position phrase + identity anchor + outfit phrase); the dangerous pair is Kurara × Kana (rose-brown × brown). Four at once will mix unprompted (expected behavior), so the question is how far full specification plus wide resolution separates them. Proportions are fixed on the data side; if outputs still come out leggy, the old AI-generated pairs from the three-character era are the prime suspect.

Training results

The pod (RTX 5090, $0.71/h) passed my smoke-test gate (0.30) at 0.38 it/s and ran the real job at 0.42-0.43 it/s (2.33 s/step) — a faster draw than the healthy trio v2 pod (2.45 s/step). Planned 224 steps/ep × 150 epochs, stopped at ep120 (reasons below), about 21.5 hours of actual runtime.

Early on it looked like “fast convergence”, but that seems to be a misread caused by the larger epochs: at 224 steps/ep, 1.45× trio’s, ep15 here equals about ep22 of trio-scale training. Converted to steps, the curve is nearly the same. The capacity difference of rank256 (Kurara’s solo was rank32) is real, though: her makeup toggle (earrings on/off) had already separated in the trainer’s built-in samples by ep14. A completely different ramp-up from solo v3, where the real judgment started at ep80+.

Built-in training samples from ep13-17, one full rotation (Kurara makeup/makeoff, Kei, Kana, Koharu). Identity locks in early, but outfits are still base-model defaults (Kei and Koharu in swimsuits) — the clothing statistics arrive later

ep80/90/100: solos and the toggle plateau, and unclothed prompts start producing nudes

I compared ep80/90/100 under local production conditions (ComfyUI, Anima-Base, LoRA strength 1.0, solo = Turbo 8-step/cfg 1.0, multi = non-Turbo 25-step/cfg 4.0, seed 42 fixed). The four solo identities and Kurara’s toggle were already settled at ep80 and didn’t change through ep100.

Same-seed comparison of ep80/90/100 (Kurara makeup/makeoff, Kei, Kana, Koharu, two pairs). Solos and the toggle stay stable across all three

The toggle shows up exactly as it did solo: in the earrings.

Zoomed comparison of Kurara's makeup bust (earrings, lipstick) vs makeoff bust (no earrings, bare face). Switches on the same seed at both ep80 and ep90

In the trio era, local inference had a conflict where Kana crushed Kei into dark hair; this time it simply didn’t happen with anchor + position-phrase prompts. No weight counterweights ((kanachan:0.8) and the like) needed either.

One change did depend on the epoch. Multi-person prompts with no outfit specified start producing nudes from around ep90. The training data contains nude standing pairs used to bake in the height reference, and the eval prompt “two girls standing side by side facing the viewer” matched those captions exactly. A safe tag didn’t prevent it. Adding an outfit phrase brought back full clothing on the same epoch and seed. Since every multi caption in the training data ends with an outfit phrase, this is the model following its data distribution, not overfitting. The operating rule: multi-person prompts always carry an outfit phrase.

The ep100 full judgment: trios, four-person, poses, close contact

Judged with fully specified prompts (trigger + position phrase + identity anchor + outfit phrase) at wide resolutions (trio 1216x832 / four 1344x768). All three trios and the four-person lineup held across seeds 42/1234/9999: zero color mixing, correct head count, height staircase preserved (Kurara = Kei > Kana by half a head > Koharu).

The three ep100 trios. Placement follows the position phrases, no color mixing, and the three-step height gap between Kana and Koharu shows

The ep100 four-person lineup (fully specified, 1344x768). Specified order, two equal-height + half-head + shortest, proportions match the reference art

All four trained pose words (holding hands in a row, jumping with arms up, shoulder hug, peace signs) worked, and compositions absent from the training data (sitting on the floor, walking, pointing at the sky) came out intact too. The pose vocabulary belongs to the Anima base; my multi data only has to secure character separation, height gaps, and position words — the division of labor the design intended. Close contact was tested with the same prompt as the trio post, “hugging each other tightly, cheek to cheek, close together”: faces touching, no face fusion.

ep100 four-person poses and close contact. From left: hands, jump, hug, peace, cheek-to-cheek. Everyone stays themselves even mid-jump

makeoff doesn’t work in multi-person contexts

Specifying makeoff on Kurara in a multi-person prompt doesn’t remove her makeup, and the earrings don’t disappear either — they morph into a different design and stay. All 100 multi-character training images show Kurara in makeup, so “2girls + makeoff” is a combination that appears in zero training images. Even pushing to (makeoff:1.6) didn’t flip it. The trio-era “Kana dominance” could be pushed through with prompt weights, but that was a conflict between triggers; this is a conflict with the training distribution itself, a different beast.

makeoff strength comparison in a pair context (none/1.3/1.6/makeup specified). Earrings and makeup persist at every strength

Tag contamination onto Kei standing next to her: zero. Fixing it in data would mean mixing bare-faced Kurara into the multi set, but growing the multi set is the flip side of the “multiple people appear without being asked” risk, so I passed this time.

Position phrases aren’t layout control, they prevent design bleed

Dropping the position phrases (far left / second from the left…) from a four-person prompt with an untrained pose (pointing at the sky), Kana’s side ponytail and scrunchie bled onto Koharu. The same prompt without position phrases survived on a trained composition (the close hug), so this is an edge case that only appears at “no position phrases × untrained pose”. Adding the position phrases back brought the bleed to zero on the same seed.

Four-person pointing without position phrases. Koharu on the far right (should be short dark hair) has Kana's side ponytail

The same prompt regenerated with position phrases. Koharu is back to short dark hair, all four are themselves

Why everyone’s eyes get embellished in close-contact busts

In close-contact busts, all four characters get visibly fancier eyes than in solo full-body shots (more highlights, drawn-in lashes, blush). I suspected Kurara’s makeup was spreading, but a three-person hug without Kurara looked exactly the same, which killed that theory.

Three-person hug without Kurara (left) vs the right three of the four-person hug (right). The eye treatment is identical — not Kurara's doing

I think two layers stack up. (1) Solos dominate the exposure (×2 weighting, 636/ep), so the LoRA imprints hard there; multi-person busts have thin coverage, and the Anima base’s native style (anime = big sparkly eyes, especially since this one leans moe) shows through. (2) On top of that, the eye-embellishing style of Codex (gpt-image), which produced the multi material, adds in the same direction. Solo busts = Gemini-made simple eyes, close-contact multi = Codex-made. The generation tool’s style gets baked in per composition context.

The same effect also runs the other way. The four characters come from mixed origins (Kana = old Gemini with a slightly bigger head, Kei = Gemini style-matched + QIE with a smaller face, Koharu = Gemini + Codex, Kurara = almost all Codex), and their measured proportions differ by about a full head — yet in multi-person output the height differences hold while the stylization evens out into one coherent picture. The base’s style is smoothing out the per-character stylization gaps. Even if I unify the multi material’s art style for v2, matching the eye treatment alone is enough; full proportion unification isn’t needed (Anima absorbs it).

Solo separation starts to crumble at ep110

At ep110, Kei’s design elements (crown braid + blue ribbon) bled into Kurara’s solo bust. ep80/90/100 are clean on the same seed, so stacking epochs let the multi-data co-occurrence (Kei is always standing next to her) start leaking into solo contexts.

Kurara's bust at ep80/90/100/110 (top = makeup, bottom = makeoff). The braid and blue ribbon appear at ep110

Changing seeds shows the ep110 bleed is probabilistic, seed-dependent (s42 bleeds, s1234 clean). The degradation mode isn’t “always broken” but “bleeds at a low rate”.

ep100 vs ep110 on seeds 42/1234. ep100 is clean on both, ep110 bleeds on s42

Last time, with the trio, I misread prompt-driven fusion as “mixing = undertrained” and ran to ep150. This time the judgment prompts were established, so I could call it early from the outputs and stopped training at ep120. The pick policy: from the ep100-to-under-110 range, take the highest epoch that passes every probe with zero bleed.

Picking the epoch on the bleed-vs-proportion trade-off

I went through ep95-110 with the most bleed-sensitive probe (Kurara solo bust, multiple seeds) plus the toggle, pairs, and the four-person lineup. The braid bleed doesn’t start at some point — it exists at low probability across the whole range, as a probabilistic phenomenon.

epKurara bust bleed rateFour-person proportionsNotes
951/4too leggy
1001/8 (lowest in range)middle, acceptablepicked
1021/4
1053/4
1083/4tightestribbon also invades makeoff
1101/2signs of face overfitting

Scalp zoom of ep102 s1234. Braid weave at the hairline; ep100 on the same seed is smooth

Meanwhile, proportions and poses tighten as epochs go on. The ep95 four-person shot leans leggy; ep108 is the most compact. The two move in opposite directions — separation is best at shallow epochs, proportions at deep ones — and the crossing point was ep100.

Four-person lineup at ep95/100/108. 95 is leggy, 108 tightest, 100 in between

Stopping at ep120 and picking from the range cut both training time and cost by about 30% versus last time.

I picked ep100 (anima-4char-v1_epoch100).

  1. Multi-person prompts require an outfit phrase and position phrases (no outfit = nudes appear; no positions = the design-bleed edge case)
  2. Kurara’s makeoff doesn’t work with multiple people in frame (a combination absent from the training data)
  3. Kurara’s solo bust bleeds Kei’s braid at a low rate (1/8). If it shows, reroll the seed
  4. Close-contact busts embellish everyone’s eyes (Anima base style × Codex material stacking). If it bothers you, pull back to fuller-body framing

Scene-image lessons from making the hero image

The hero at the top (four girls laughing in a classroom at sunset) came out of ep100, but not in one shot; a few rules for multi-person scene images firmed up along the way.

Position phrases along one row came out flat. Writing them as depth instead of left-right (close foreground / middle distance / far background) produced a three-layer composition.

Giving an asymmetric accessory to a character seen from behind broke down. Putting Kana in the near foreground over-the-shoulder (from behind) drew her side ponytail tied on the wrong side. A tie that reads as “right” from the front must read as “left” from behind — the model doesn’t solve that flip. Swapping the role to Koharu, whose hair is symmetric, fixed it.

In scene compositions, the generic “school uniforms” shuffled the uniform parts (Kei got a necktie instead of her ribbon, Kurara’s earrings bled onto Koharu). Lineups were fine with the generic word, but scenes needed per-character outfit phrases to pin everyone down.

Cuts with broken hands were faster to reframe out (hands not visible) than to fix.

A Turbo (8-step/cfg 1) hires second pass melted the linework into watercolor. Anima handles large canvases natively, so generating at 2016x1152 in one pass was the right call — it also solved the face pixel-starvation at the same time.

One-shot rate (ep100, 6 random seeds)

The usual one-shot rate: with a fully specified prompt (position phrases + anchors + outfit phrase), how many generations meet all conditions (four people, no color mixing, correct order, height gaps, no face fusion) with zero retakes.

CompositionOne-shot rate
Four-person lineup (fully specified, 1344x768)6/6
Four-person cheek-to-cheek (1344x768)6/6

One-shot rate sheet. Top row = four-person lineup, 6 seeds; bottom = four-person close contact, 6 seeds. All 12 images passed

For the six close-contact images I zoomed into each head one by one, since at thumbnail size you miss braid and earring bleed. Kurara’s earrings were on Kurara only, Kana’s ahoge and scrunchie on Kana only — every detail on its rightful owner. The trio needed weight counterweights ((kanachan:0.8)) against local-inference conflicts; going to four characters and reaching 6/6 on plain prompts, I put down to the established prompt design (position phrases + anchors + outfit phrase) and the multi captions written in the same format (ending with position and outfit phrases).

Predictions vs results

The four solo identities went as predicted, all locked by ep80. I expected Kurara’s toggle to “survive but weaken”; with the ×3 bare-faced correction it separated from ep14 and remained fully intact at ep100. What I hadn’t predicted was the constraint that it doesn’t work in multi-person contexts.
The Kurara × Kana color mixing I was bracing for never appeared. What appeared instead was the low-rate bleed of Kei’s design into Kurara’s solo shots — co-occurrence leaking from the multi data in the opposite direction. Four-person prompts mixed when unspecified, as predicted, but full specification carried them to 6/6 one-shot. Proportions were solved on the data side, and the imprint kept tightening with epochs (95 leggy → 108 compact).

518 images, rank256, about 21.5 hours, $16. Because the data, training config, and judgment prompts carried over from the three-character era, most of the time went not into the training itself but into deciding where to stop and sorting spec from defect.

By the way, about the hero image: the faces look slightly softer to me than they did with three characters.
On how many characters Anima can put in one image — I once saw a post claiming ten, but that almost certainly wasn’t a one-shot; it would have taken repeated rolls, and surely not with a LoRA like this one on top. I have no intention of pouring enough LoRA work into a ten-character model, but I do want a look at five, so if I find the time I’ll try five as a last step. My guess is that four or five is the ceiling for keeping everyone’s design intact in a single frame.