Tried a custom character LoRA on WAI-Anima for multi-character generation on Mac — it works, with caveats
Contents
I tested a custom kanachan LoRA on WAI-Anima v1.0 on an M1 Max 64GB machine through my genserver (a homegrown ComfyUI / mflux wrapper) to see how it behaves in multi-character compositions. The motivation was a r/StableDiffusion thread, Charecter in anima checkpoint can make like …, where people reported that the Anima family handles 2–3 characters reasonably well from natural-language prompts without Regional Prompter. I wanted to verify whether my own kanachan LoRA can stay separated from other characters, and what bleeds first into the neighbor as LoRA weight increases. The setup: same seed, same prompt, sweep LoRA weight.
Here are the main observations up front (LoRA weight > 1.0 generally collapses the model anyway, so I focus on ≤ 1.0).
- In a 2girls layout, the kanachan identifier (side ponytail + blue ribbon + ahoge) does not show up at weight 0.4–0.6; it only fills out at 0.8
- When characters are anonymous (
left_character/right_character), the scrunchie color drifts from the training blue toward yellow → orange → pink as weight rises past 0.8 - Adding
"name": "Kanachan"to the JSON brings the identifier in already at weight 0.6, and the blue scrunchie holds across 0.6→1.0. The name token acting as a key that unlocks the LoRA’s color details was the most surprising finding - In a 3girls layout, something more interesting happens. At weight 0.8 the kanachan side ponytail (with blue scrunchie) moves from Kanachan herself to Lily’s slot. The side ponytail disappears from Kanachan and lands on Lily, replacing Lily’s specified half-up braid. The ahoge stays with Kanachan, so only the side ponytail migrates — an asymmetric bleed
- The naive hypothesis “Lily’s
blue ribbonkeyword is attracting the LoRA’s blue color” was rejected: switching Lily’s spec togreen ribbonreproduced the same bleed - LoRA weight
1.2collapses the image in all variants (raw / named / 3girls). That is the general “LoRA cranked too high” failure mode, not anything specific to kanachan, so I treat it as a side reference
For practical use, 2girls works safely at weight 0.8 with names; 3girls or more sits around 0.6 as the operating line.
Why test multi-character on Anima
Summary of the Reddit thread observations:
- Anima checkpoints can separate 2–3 characters fairly well from natural-language prompts like
Left girl: / Right girl:, without Regional Prompter - Per-character attribute separation (hair color, outfit, position, pose) is stronger than Illustrious / Pony
- Giving characters names (e.g.
Alice: blonde hair, blue eyes / Reina: black hair, glasses) stabilizes them - Structured JSON prompts also work surprisingly well; the Anima/Qwen family seems to handle natural-language-style structure
- However, if a LoRA’s training captions bake in many attribute tags (
blue eyes,orange hair), those attributes can bleed onto other characters in a multi-character image (concept bleed)
The last point is what I wanted to verify: is my custom kanachan LoRA learning “character identity” cleanly, or is it embedding specific hair color / outfit / eye color attributes that then leak onto the neighbor?
Test environment
| Item | Value |
|---|---|
| Machine | MacBook Pro M1 Max 64GB |
| Image generation | WAI-Anima v1.0 (waiANIMA_v10.safetensors) |
| Text Encoder | qwen_3_06b_base.safetensors |
| VAE | qwen_image_vae.safetensors |
| Speed LoRA | Anima Turbo LoRA v0.1 (8 steps, CFG 1.0) |
| Character LoRA | kanachan-waianima-rework-v4_epoch150.safetensors (custom) |
| sampler / scheduler | er_sde / simple |
| Resolution | 888×768 |
| Translation pipeline | llm-jp:4-8b-fixed translates JP / JSON descriptions into English prompts |
All calls go through genserver (my FastAPI ComfyUI wrapper). LoRA weight, seed, resolution, prompt are saved as JSON sidecars per image, so weight sweeps stay reproducible.
How my genserver looks now
I wrote about genserver before, but it’s been rebuilt since. Just the parts relevant to this sweep:
- FastAPI single process + single job queue: listens on
localhost:8000. POST/api/jobsqueues a job; an internal async worker processes them one at a time, serially. The reason for not running parallel is a past kernel-panic-level incident on the M1 Max 64GB when multiple inferences collided - ComfyUI auto-launched as a subprocess:
localhost:8188; if not alive, genserver spawns it on startup./interruptcan cancel a job mid-flight - 3 backends:
- ComfyUI Anima workflow (WAI-Anima + Anima Turbo LoRA + character LoRA)
- ComfyUI SDXL workflow (WAI-Illustrious + older kanachan LoRA)
- mflux (FLUX.2 Klein 4B / 9B + NSFW LoRA)
- Ollama-driven Japanese-to-English prompt translation, with cascade fallback
llm-jp:4-8b-fixed → gemma3:12b → qwen3.6:35b. Refusals (“Sorry, I can’t…”, “申し訳…”) or Japanese-back outputs are auto-switched to the next model - JSON sidecar per image with the same name, recording model / seed / width / height / steps / cfg / use_lora / lora_strength / use_speed_lora / skip_translate / prompt_en / elapsed_s etc.
skip_translateoption: when ON, the prompt is passed straight to ComfyUI. The weight sweep uses this to send the same exact English prompt across all 5 runs without Ollama re-rolling each time
The actual sweep was queued with curl, skip_translate=true, raw JSON sent through. Only LoRA weight varies:
JSON_FORM='{
"scene": "two girls standing side by side, simple background",
"left_character": {
"identity": "kanachan",
"lora_trigger": "[kanachan trigger]",
"position": "left",
"appearance": "kanachan original hairstyle, outfit, eye color"
},
"right_character": {
"identity": "different original girl",
"position": "right",
"appearance": "short black hair, red eyes, navy school uniform"
},
"rule": "keep the two characters visually distinct, do not mix hairstyles, outfits, or eye colors"
}'
for W in 0.4 0.6 0.8 1.0 1.2; do
curl -s -X POST http://localhost:8000/api/jobs \
-F "model=anima" -F "text_ja=$JSON_FORM" -F "skip_translate=true" \
-F "seed=1293127692" -F "width=888" -F "height=768" \
-F "steps=8" -F "cfg_scale=1.0" \
-F "use_lora=true" -F "lora_strength=$W" \
-F "use_speed_lora=true" -F "count=1"
done
5 jobs queued, ~30 s each. Anima’s text encoder (Qwen 3.0 0.6B base) seems to read raw JSON as natural language well enough; character separation still comes out (covered below).
The kanachan LoRA’s source image
Before the experiments, here’s what the LoRA was trained against. This is one of the training images, the outfit I usually use on this blog (= what the LoRA considers kanachan’s “default look”):

- Brown medium-length hair (shoulder to collarbone) + a side ponytail with a blue ribbon
- A large ahoge
- Brown eyes
- White shirt + red necktie + navy pleated skirt + black tights + loafers
Keeping this in mind as the “if this leaks, the LoRA is overfit / if this survives, separation works” baseline makes the sweep images easier to read.
Test 1: text-form vs JSON-form prompts (first attempt)
I first tried the two prompt formats that the Reddit thread discussed. Both were fed into the same genserver form: one in the text style, one as JSON. kanachan LoRA weight 1.0, 888×768, Anima Turbo (8 steps, CFG 1.0). One shot each, shown below.
At this point I was running with skip_translate left at its default (false), so the input text was not going straight to ComfyUI — instead Ollama (llm-jp:4-8b-fixed) was rewriting it into clean English, and that rewritten string was the actual prompt. I only noticed this later. For now read it as “two shots straight from Codex’s suggested formats” and the Ollama wrinkle will come up after.
Text-form
2girls, simple background
Left girl: kanachan, [kanachan LoRA trigger], kanachan outfit/features, standing on the left
Right girl: original girl, black hair, red eyes, school uniform, standing on the right
The two girls have clearly different faces, hairstyles, hair colors, eye colors, and outfits.
No shared clothing. No shared hairstyle. No shared eye color.
seed: 1960405906

This one needs careful reading. Left Kanachan: brown semi-long hair + a small side tie (white scrunchie) + large ahoge + amber-brown eyes. The base outfit is actually a navy sailor uniform — on top of which there’s a beige cardigan, then a dark brown zip-up parka, plus a red scarf, navy pleated skirt, black tactical gloves, double holsters, thigh straps, black knee pads, black thigh-high socks, and brown work boots. Heavy gear. Right: straight long hair + small ahoge + charcoal-gray hair + dark brown eyes + navy sailor uniform + red scarf + navy pleated skirt + navy high socks + brown loafers.
The background is a split panel (light blue left / light pink right), in a character-card style. Nothing in the prompt asks for it; Anima just put it there when arranging two characters side by side.
Important: both characters are wearing the navy sailor uniform. The school uniform keyword was read for both, and the “signature outfit / characteristic features” wording (from Ollama’s expansion, more on that below) layered the extra military gear on top of kanachan only.
JSON-form
{
"scene": "two girls standing side by side, simple background",
"left_character": {
"identity": "kanachan",
"lora_trigger": "[kanachan trigger]",
"position": "left",
"appearance": "kanachan's original hairstyle, outfit, eye color"
},
"right_character": {
"identity": "different original girl",
"position": "right",
"appearance": "short black hair, red eyes, navy school uniform"
},
"rule": "keep the two characters visually distinct, do not mix hairstyles, outfits, or eye colors"
}
seed: 1293127692

Full body, white background. Left Kanachan: semi-long + large ahoge + blunt bangs + light brown hair + amber-brown eyes + white cardigan + white shirt + dark brown / gray plaid pleated skirt + red ribbon tie + navy high socks + brown loafers. No side ponytail. Right: semi-long + ahoge + blunt bangs + dark gray (near-black) hair + red eyes + navy sailor uniform + white scarf + navy pleats + navy high socks + brown loafers.
Worth noting: the right character’s eye color. red eyes was specified in the JSON and the eyes came out red. Unlike the text-form right character (which came out brown-eyed), the per-field JSON spec carried through as an attribute.
In both shots, neither image had identity bleeding all the way to the right. Anima’s character separation was working noticeably well — that was my first impression.
Then later, comparing the prompt_en sidecars, I noticed both runs had skip_translate=false and Ollama (llm-jp:4-8b-fixed) had rewritten both inputs into clean English:
- Text-form input → “Creative, vivid, high-resolution illustration of two distinct female characters set against a simple background. On the left stands Kanachan, identified by the Kanachan LoRA trigger, wearing her signature outfit and displaying her characteristic features…”
- JSON-form input → “A vivid illustration of two girls standing side by side, simple background, left girl Kanachan, her original hairstyle…”
Ollama added phrases like signature outfit and characteristic features to the text-form input, which likely caused the “stacked military gear” outfit for kanachan. Since the goal is to look at the prompt structure itself cleanly, that’s noise. Test 2 switches to skip_translate=true and sends raw prompts directly.
Test 2: sweep LoRA weight 0.4 → 1.2
This is the main test.
Holding the JSON prompt and seed fixed, vary only the kanachan LoRA weight across 0.4 / 0.6 / 0.8 / 1.0 / 1.2 and see:
- At which weight does the left kanachan identity actually start showing up?
- At which weight does the neighboring black-haired sailor start receiving any kanachan attributes?
The Anima Turbo LoRA weight stays at 1.0. Same seed, same prompt, same resolution, same sampler, so any change can be attributed to the kanachan LoRA weight only.
Prompt and seed are identical to test 1’s JSON form.
From here on, each image’s description is written using a combination of my own visual reading and Gemini’s image recognition. I have a color vision deficiency, so fine color calls like “yellow / orange / wine-red / pink” for scrunchies and ribbons are not something I trust on my own — I cross-check with what Gemini reports. There may still be color description drift; readers with normal color vision should feel free to correct from the actual images.
Comparison baseline: each character solo
Before reading the sweep, here’s a baseline of each character shot solo. Kanachan with kanachan LoRA weight 0.8 (since this is her LoRA), Reina and Lily with no LoRA (raw Anima). Tall portrait (640×1408) so only one character fits; seed fixed at 1293127692.

Kanachan comes out exactly per the training material: brown hair + side ponytail (blue scrunchie) + ahoge + brown eyes. Outfit is a darkish jacket + white shirt + gray pleated mini + black thigh-highs. The outfit doesn’t match the training source (white shirt + red tie + navy skirt), but that’s by design — the kanachan LoRA was deliberately trained on multiple outfits, so identity stays put while outfits vary.

Reina comes out per spec: black bob + red eyes + navy sailor uniform. But because the spec (“short black hair, red eyes, navy school uniform”) is coarse, the hair length and color shade swing across runs (shoulder-length one time, chin-length another; jet black one time, dark gray another). Reina’s own reproducibility is on the low side — keep that in mind when interpreting “Reina broke” later in the sweeps.

Lily comes out per spec: bright blonde + a half-up braid at the back of the head + blue ribbon + bluish-gray eyes. The spec is more detailed (hairstyle + body type + braid description + ribbon color), so reproducibility is higher than Reina. The “bright blonde + blue ribbon” here is the baseline for spotting bleed in the 3girls case later.
One quirk: because appearance includes “the back of her hair is pulled up into…”, a back-hair clause, Lily’s pose tends to skew to a three-quarter-back view instead of facing forward.
With these three in mind, here’s the weight 0.4 → 1.2 sweep.
weight 0.4

Left: brown long hair + some hair gathered loosely behind + amber eyes + white sailor uniform (dark green collar + two white lines) + black scarf. Neither the kanachan side ponytail nor the ahoge has appeared. Just brown hair shows up. Right: dark blue-gray (near-black) bob + red eyes + navy sailor uniform + red scarf. LoRA influence is too weak; the left is “a brown-haired girl,” not “Kanachan.”
weight 0.6

Left’s hair got slightly shorter (shoulder-length medium) + beige sailor uniform (dark green collar + white line) + a thin black / dark brown ribbon. Still no side ponytail, no ahoge. Right: dark blue-gray bob + red eyes + navy sailor + red scarf. Same trend as 0.4, kanachan hasn’t filled out yet.
weight 0.8

Now the kanachan identifier fills in all at once. Side ponytail (yellow scrunchie) + large ahoge + light brown hair (chestnut) + light brown eyes — the face shape is close to the training source too. Outfit is beige sailor (dark brown collar + same-color ribbon). Right: dark gray (blue-black) bob + red eyes + navy sailor + red scarf + a small sweat drop on the left cheek. Still completely a different character. No attribute leakage to the right side. This is the most balanced point of the sweep.
weight 1.0

Left: high side ponytail + large ahoge (curly) + light brown hair + amber-brown eyes + beige (off-white) sailor uniform + dark gray collar (two white lines). Reads as Kanachan. The side ponytail itself stays, but the scrunchie color shifted to orange and the chest ribbon to wine-red. The training source had a blue ribbon, so as weight rises the form (side ponytail) survives but the color decoration drifts off the training material — that’s what this seed showed. The “Anima character-LoRA training is unstable” problem I covered in earlier posts (caption rework and 12000-step training) shows up at weight 1.0 here, less as “direction / presence” issues and more as color drift. Right: dark gray semi-long + reddish brown eyes + navy sailor + red scarf — no identifier leak (yet).
weight 1.2 (reference: LoRA already breaking down here)

LoRA weight > 1.0 is well-known to break down a model generically, so this is just a reference for “what happens past 1.0 along the same trend.” When I asked Gemini to evaluate image quality, it flagged “skin or hair color noise overlapping the left character’s right eye distorting pupil shape, lines blurring and hair strand definition disappearing, the mouth simplifying to a short stroke, generation noise scattered” — typical LoRA over-application degradation. On top of that, identity bleed also happens: the right side’s spec (black bob + red eyes + navy sailor) shifts toward kanachan with hair color dark gray → ash brown, eye color red → brown, and a large ahoge on top. Image degradation and identity bleed happen at the same time, but past this point it’s just “what overcranked LoRAs look like in general,” so the kanachan-specific story is at ≤ 1.0.
Observed bleed ordering (2girls)
Laying out all five steps, the left’s “ramp-up as Kanachan” and the right’s “bleed from Kanachan” can be observed separately.
| weight | Left’s completeness as Kanachan | Bleed onto right |
|---|---|---|
| 0.4 | Brown hair only. No side ponytail / ahoge / face match | None |
| 0.6 | Brown medium hair. Identifier still hasn’t activated | None |
| 0.8 | Side ponytail (yellow scrunchie) + ahoge + matching face. Peak | None |
| 1.0 | Side ponytail stays, but scrunchie turns orange and chest ribbon turns wine-red (drifts from training blue) | None |
| 1.2 | Still preserved | Hair color dark gray → ash brown + large ahoge appears. Bleeds as a hair-color + style set |
Summarizing the bleed pattern:
- A clear threshold sits between weight 1.0 and 1.2. Up to 1.0 the right is fully distinct; at 1.2, hair color + ahoge bleed as a set
- What bleeds first is hair color and ahoge. The outfit (navy sailor), hair length (long), and eye color (red) survive longest
- Meanwhile, the left’s “side ponytail appears but with the wrong-color accessory” is the visible failure mode at weight 1.0. Form (hairstyle) learning and color (hair accessory) learning seem to live on different layers
In other words, the kanachan LoRA most strongly learned the “ahoge + hair color” pair, and those two are what bleed to the neighbor at weight 1.2. Colored hair accessories (blue ribbon) are learned less firmly than the shape, and shift to other colors as weight rises.
Test 3: re-sweep 2girls weight 0.4 → 1.2 with character names
Up to this point, the characters were distinguished only by left_character / right_character position. The Reddit thread also mentioned that giving characters names helps them be perceived as distinct people. So I labeled the left as Kanachan and the right as Reina (adding "name" to the JSON fields plus a Kanachan and Reina are two distinct people. Do not mix... rule), and re-swept the same range (weight 0.4→1.2, same seed, same prompt) as test 2.
Named weight 0.4

Left Kanachan: light brown semi-long + half-up + brown eyes + navy sailor + beige cardigan + red scarf. No ahoge, no side ponytail. Right Reina: black bob + red eyes + navy sailor + red scarf + two red hairpins on the right side. The identifier hasn’t activated yet.
Named weight 0.6

The identifier activates here. Left Kanachan gets a side ponytail (blue scrunchie) + small ahoge + light brown hair + brown eyes + white sailor + deep green collar + blue scarf. The unnamed version at the same weight 0.6 was just brown medium hair — naming the character pulled the identifier activation forward by 0.2. The chest scarf coming out blue (not specified) is likely a knock-on from Kanachan’s blue ribbon. Right Reina stays as black bob.
Named weight 0.8

Left Kanachan’s identifier is in full: side ponytail (blue scrunchie) + large ahoge + light brown hair + amber eyes + white sailor + deep green collar + thin black ribbon tie. Where the unnamed version at 0.8 had a yellow scrunchie, the named version produces the training-correct blue scrunchie straight away. Right Reina is black straight bob + red eyes + dark navy sailor + red scarf — completely a different character. This is the most stable peak for 2girls.
Named weight 1.0

The scrunchie stays stably blue. Where the unnamed version at weight 1.0 had drifted to orange, the named version keeps blue consistently across 0.6→0.8→1.0. The chest ribbon also returned to red (the unnamed version had wine-red). The kanachan LoRA’s training caption is kanachan, 1girl, left side ponytail, left side up, medium hair, double parted bangs, ahoge, ... (see past article: wai-anima-lora-animaloratoolkit-runpod) — the design is to give the kanachan trigger plus separate tags for left side ponytail etc., not pack everything into the single trigger. Yet the unnamed version drifts off color, and adding "name": "Kanachan" brings back the training-time blue ribbon. The most natural interpretation is that the name token binds strongly to the LoRA’s internal identifier group via attention.
Right Reina is a dark-gray (near-black) bob cut + dark brown eyes + navy sailor (white line) + red scarf — no cross-mix to the left, no identifier leak to the right. But the right Reina is missing a mouth (generation artifact). At LoRA weight 1.0, generation stability isn’t perfect even in this case.
Named weight 1.2 (reference: LoRA over-application zone)

LoRA weight > 1.0 is the general breakdown zone, so this is a reference. The unnamed version at 1.2 had “right turned ash brown + large ahoge = kanachan-ified,” but the named version has only the hair color drift on Reina (ash brown), without the ahoge appearing. Not a full prevention, but the second half of the identifier (ahoge) is blocked. On the left Kanachan side, however, the side ponytail’s scrunchie shifted from blue to navy (or black). The blue that held across 0.6/0.8/1.0 broke at 1.2. Naming preserves color decoration up to weight 1.0, but no further.
Named vs unnamed summary
| weight | Unnamed Kanachan | Named Kanachan | Naming effect |
|---|---|---|---|
| 0.4 | Brown hair only, no identifier | Half-up + beige cardigan, no identifier | Almost none |
| 0.6 | Brown medium, no identifier | Side ponytail (blue) + small ahoge | Identifier activates 0.2 earlier |
| 0.8 | Side ponytail (yellow scrunchie) + large ahoge | Side ponytail (blue scrunchie) + large ahoge | Color decoration matches training |
| 1.0 | Side ponytail (orange scrunchie) + wine-red ribbon | Side ponytail (blue scrunchie) + red ribbon | Color decoration matches training |
| 1.2 | Side ponytail (pink scrunchie), large ahoge bled to right | Side ponytail (navy/black scrunchie), right turned ash brown but no ahoge | Color not held, half of bleed blocked |
The naming effect is clear: across weight 0.6 to 1.0, the identifier’s color decoration (the training-correct blue scrunchie) is stably called. It’s a non-obvious phenomenon — the LoRA captions only have the kanachan trigger, yet adding "name": "Kanachan" separately in the prompt improves detail reproducibility. Probably related to how Anima’s Qwen-based text encoder handles name tokens.
Test 4: add a third character
Per the Reddit thread, “3 is practical, 5 is gachas, 10 is joke.” Time to add a third character. The third needs to be blonde + a distinctive hairstyle, so that any kanachan bleed shows up clearly. If kanachan’s brown hair / ahoge bleeds onto the third character at all, one of “blonde → brownish,” “straight → ahoge added,” or “half-up braid → disappears” will be visible at a glance.
Add middle_character and right_character to the JSON prompt, and name the third character Lily:
"right_character": {
"name": "Lily",
"identity": "different original girl, not Kanachan or Reina",
"position": "right",
"appearance": "long straight blonde hair, black eyes, late teens to early twenties, slender with a slightly larger bust, the back of her hair is pulled up into a half-up braid tied with a blue ribbon"
}
Resolution widened to 1216×768 for the 3-character lineup. Otherwise same: seed 1293127692 fixed, Anima Turbo + 8 steps + CFG 1.0, sweep kanachan LoRA weight 0.4 → 1.2.
3girls weight 0.4

All three are clearly separate. Left Kanachan hasn’t activated the identifier yet (no side ponytail / ahoge); brown semi-long + braided half-up + amber eyes + pink cardigan + white shirt + green ribbon. Middle Reina: black short bob + red eyes + navy sailor + red scarf — completely a different character. Right Lily: ash-blonde long + half-up + purple eyes + white short-sleeve blouse + thin blue ribbon + navy skirt + a large blue ribbon at the back of the head. Lily’s spec (long straight blonde hair, half-up braid with blue ribbon) is being respected.
3girls weight 0.6

Left Kanachan’s identifier activates here. Side ponytail (blue scrunchie) + large ahoge + amber eyes + beige cardigan + white shirt + red ribbon tie. This is the same activation point as test 3’s named 2girls 0.6 — the name token ("name": "Kanachan") lets the identifier come out at 0.6, and that behavior is consistent in 3-character setups too. Middle Reina is a dark brown bob + red eyes + navy sailor; right Lily is blonde long + half-up braid (per spec) + blue eyes + white blouse + thin red ribbon + navy skirt + a large navy hair ribbon. All three still hold as distinct characters — the last weight where that’s true.
3girls weight 0.8

Something decisive happens here. Left Kanachan: brown medium bob + large ahoge + brown eyes + white sailor (green collar + wine-red ribbon) + green skirt — the side ponytail is gone. The ahoge remains. Middle Reina: near-black dark brown bob + dark brown eyes + navy sailor + red scarf — still a different character. And right Lily. The prompt said “blonde + half-up tied with a blue ribbon,” but the output is “near-blonde light brown long + high side ponytail on the left + navy / white striped hair ribbon.” Lily’s half-up spec is gone, and the side ponytail that Kanachan had is now on Lily. Calling it “Lily got contaminated” is less accurate than “kanachan’s identifier (side ponytail) migrated from Kanachan herself into Lily’s slot.” Kanachan solo (the baseline at the top of this page) lands the blue-scrunchie side ponytail on her correctly; in a 3girls layout, the same identifier gets absorbed by a different character. The ahoge stays on Kanachan, so we can also see that only part of the composite identifier (the side ponytail) migrates — an asymmetric split.
3girls weight 1.0

The breakdown spreads. Left Kanachan still has no side ponytail (ahoge only). Middle Reina’s black hair shifts to dark brown + an ahoge appears — kanachan-ification starts here. Right Lily still has the side ponytail (navy scrunchie) + becomes light brown (lost blonde) + ahoge added. What’s visible here is that the kanachan identifier behavior is in two stages:
- The side ponytail (kanachan’s most visible identifier): away from Kanachan from weight 0.8 onward, fixed on Lily
- The ahoge: stays on Kanachan, and from weight 1.0 starts duplicating onto Reina and Lily as well
So within the identifier, the side ponytail is migration-type and the ahoge is duplication-type — an asymmetric bleed. The former is “a feature that should attach to one character got assigned to the wrong slot”; the latter is “the LoRA layered its feature on top of other characters too.”
3girls weight 1.2 (reference)

3girls also slips into the LoRA over-application zone at weight 1.2 just like 2girls. All three lean light brown + large ahoge / kanachan-ish. Kanachan still without a side ponytail; Reina with medium straight + navy sailor; Lily with long + side ponytail (blue scrunchie) + brown sweater + white collar shirt. Worth noting: even at weight 1.2, kanachan’s blue-scrunchie side ponytail stays on Lily, not back on Kanachan. Higher LoRA strength doesn’t move the identifier’s destination. The practical line is at 0.6, and 1.2 is “what it looks like past the ceiling.”
Side check: does changing Lily’s ribbon color to green stop the bleed?
From 3girls weight 0.8 onward, “Kanachan’s side ponytail with blue ribbon” lands on Lily. A naive hypothesis: “the tied with a blue ribbon text in Lily’s appearance — the blue — is pulling Kanachan’s blue-ribbon identifier toward Lily.” To check, I changed Lily’s spec to tied with a green ribbon, same seed, weight 0.8, one shot.

Result: no change.
- Left Kanachan: no side ponytail, ahoge + white sailor with red ribbon
- Middle Reina: near-black dark brown bob + navy sailor
- Right Lily: light brown-ish (lost blonde) + a high side ponytail on the left + a blue-based scrunchie with a white wave pattern + brown blazer + beige vest + wine-red chest bow
Even with Lily’s ribbon switched from blue to green, the side ponytail still lands on Lily and the scrunchie is still blue-based. The naive hypothesis “Lily’s blue ribbon spec is attracting kanachan’s identifier” is rejected.
So the reason the kanachan identifier migrates to Lily’s slot isn’t a color collision — it’s something more general (e.g. LoRA features tend to get pushed onto whichever appearance is longer / more detailed). From here on, more seeds and other compositions would be needed for further verification.
Test 5: try all three 2-character pair combinations
Up to now, the 2girls tests have all been Kanachan + Reina, and the migration to Lily was first observed in the 3girls (Kanachan + Reina + Lily) layout. Whether a 2girls layout with Lily already shows the migration, and how things look when Reina + Lily are paired without kanachan, were both missing. So I swept the other two pair combinations (K+L and R+L) at weight 0.4→1.2 with the same seed.
Kanachan + Lily 2girls sweep
Pair is left Kanachan, right Lily, with appearance identical to test 4’s 3girls.

weight 0.4: Left Kanachan is long with a braided half-up + brown hair + navy blazer + red ribbon, no side ponytail and no ahoge. Right Lily: blonde + half-up (per spec) + blue chest ribbon + blue ribbon at the back of the head. Kanachan identifier hasn’t activated.

weight 0.6: Left Kanachan activates with a side ponytail (light blue beaded scrunchie) + ahoge + amber eyes. The outfit is a black military-style getup, off the school uniform spec for kanachan, but that’s within the LoRA’s outfit-variation range. Right Lily: ash-blonde half-up, with a large blue ribbon at the back of the head + blue ribbon at the neck — per spec. At this weight Lily is still not touched by the kanachan influence.

weight 0.8: Left Kanachan’s side ponytail uses a blue-and-white pattern scrunchie + large ahoge + black-and-white based fantasy-ish outfit. Right Lily’s hair has slipped from full blonde to “ash brown” + half-up still preserved + navy ribbon at the back. Lily’s hair color starts drifting from blonde toward the ash-brown side.

weight 1.0: Left Kanachan with an orange-tinged brown + side ponytail (white frilled scrunchie) + large ahoge + Japanese-style off-shoulder outfit. Right Lily has half-up + side ponytail mixed into one hairdo + brown scrunchie + dark navy ribbon + brown-ified hair. Lily starts getting hair-tying elements too — not the specified half-up braid, but shapes near kanachan’s side ponytail.

weight 1.2 is the LoRA over-application zone, so reference only. The same pattern as 3girls 1.2 — side ponytail migrates to right Lily and both turn brown — reproduces here in a 2girls layout too.
The behavior observed in 3girls (kanachan’s identifier moving to Lily, and both turning brown) reproduces in the 2girls K+L pair at the same threshold. It’s not a “happens because there are 3 people” phenomenon; it’s something that triggers as soon as Lily is in the pair, regardless of headcount.
Reina + Lily 2girls sweep (no kanachan trigger)
Pair is left Reina, right Lily. kanachan trigger is NOT in the prompt. The kanachan LoRA is still loaded into the model though, and weight is swept 0.4→1.2. The question is: when the trigger isn’t called, does the LoRA do nothing, or does it still bias the model just by being loaded?

weight 0.4: Left Reina is a shoulder-length straight bob + dark brown (near-black) + red eyes + navy sailor + red scarf. Right Lily: blonde long + half-up + blue chest ribbon + large blue ribbon at the back of the head + blue eyes. Both per spec, no kanachan influence.

weight 0.6: Similarly, Reina dark brown bob + red eyes + navy sailor, Lily blonde + half-up + light blue ribbon + dark blue large ribbon at the back of the head. Both stable.

weight 0.8: Left Reina is a shoulder-length semi-long + dark brown (chestnut) + reddish-brown eyes + navy sailor. Right Lily: light brown (golden brown) + gray eyes + half-up + red ribbon + large blue ribbon at the back of the head. Lily’s hair color starts moving from blonde toward the light-brown side.

weight 1.0: Left Reina is darkish brown semi-long + a large ahoge appears on top + reddish-brown eyes + navy sailor. Right Lily: light brown + side ponytail (blue scrunchie) + light brown eyes + white blouse + wine-red ribbon. Even though the kanachan trigger isn’t in the prompt, both characters show kanachan’s traits (ahoge, side ponytail, blue scrunchie).
weight 1.2 is the LoRA over-application zone, so reference only. Both become brown + ahoge + side ponytail — kanachan-ified — confirming the direction.
This was the most unexpected finding of the whole experiment. The kanachan LoRA, even without its trigger word in the prompt, just by being loaded into the model leaks its identifiers (ahoge, side ponytail, brown hair, blue ribbon) onto other characters at weight 1.0+. Regardless of whether the trigger is called, the LoRA continually biases the entire model while loaded, and at high enough weight any character starts showing its features. This matters in multi-character generation even when you’re trying to draw other characters without your own custom character. If you leave the LoRA loaded at a high weight, unrelated characters get pulled toward your custom one too.
Summary across the three pair combinations
Laying out all three makes the behavior clearer.
| Pair | 0.6 | 0.8 | 1.0 | 1.2 |
|---|---|---|---|---|
| Kanachan + Reina (tests 2–3) | Kanachan identifier missing or activating | Kanachan peak | Color drift (unnamed) / preserved (named) | Hair color + ahoge leak to Reina |
| Kanachan + Lily | Kanachan activates, Lily stable | Lily hair color slight drift | Lily starts getting hair-tying elements | Side ponytail migrates to Lily |
| Reina + Lily (no kanachan trigger) | Both stable | Lily hair color slight drift | Both show kanachan-ification signs | Both kanachan-ified |
So:
- Reina (black hair + short bob + no identifier) stays a distinct character relatively well in any pair
- Lily (blonde + half-up + blue ribbon) is close to the kanachan identifier in feature space, so always gets pulled at weight 0.8+
- Even without the kanachan trigger, the LoRA bleeds from weight 1.0+ as long as it’s loaded. The bleed isn’t only about the trigger landing on Lily’s slot; it’s also about the LoRA biasing the entire model
Test 6: what happens when the three characters are tightly clustered
Up to here, every 3girls test used standing side by side, with the characters spaced apart. I had a suspicion that “Anima dividing into left / middle / right slots only works because of that spacing.” So I tested whether the same behavior holds when characters cluster.
Changed the scene to three girls leaning against each other, shoulders touching, close together, simple background. Other per-character specs (Kanachan / Reina / Lily appearance) are the same as test 4.
One shot doesn’t show variance, so I shot 4 seeds × 2 weights (0.6 and 0.8) = 8 images. Below are 4 representative (2 seeds × 2 weights).

Observations across all 8 images:
- Kanachan’s side ponytail (with blue ribbon) does not appear on her in 8/8. In test 4 with the spaced layout at weight 0.6 it did appear; clustering makes it disappear even at 0.6
- Lily’s hairstyle swings by seed / weight: half-up (per spec) and side-tail (kanachan-ish) come up about half-half
- Reina is comparatively stable: black hair + navy sailor holds in almost all images. Even when Kanachan and Lily mix, Reina doesn’t get pulled in
- All three still register as distinct characters (no full “chimera fusion” where faces become identical)
So “Anima can correctly assign identifiers to slots thanks to spatial separation” — that constraint is confirmed to some extent. When characters cluster, the attention pool is shared and Kanachan’s side ponytail can no longer be anchored to her; it flows unstably into Lily’s hairstyle slot.
Reasons why middle Reina doesn’t mix aren’t certain, but possibilities:
- Brown and blonde are close in lightness and hue, so feature mixing between Kanachan and Lily is more likely. Reina is black, separated
- Kanachan’s “side tie + blue ribbon” and Lily’s “half-up braid + blue ribbon” share “light hair + tied + blue ribbon” elements. Reina is a short bob with no tie or accessory, so she’s far in feature space
- Reina’s spec being coarse (
short black hair, red eyes, navy school uniform) might paradoxically help. Fewer specific features to grab onto, less interference
Trying to force the side tail
Can the “Kanachan loses her side tail when clustered” problem be rescued by writing right-side ponytail tied with a blue ribbon, big ahoge explicitly into Kanachan’s appearance? I shot 4 seeds × 2 weights = 8 with the same cluster prompt + this addition. 4 representative:

Conclusion: none of the 8 follows the spec. Kanachan does get “some tie with a blue ribbon” when forced, but:
- The ties end up on both sides as twintails (the right-only spec doesn’t go through)
- The tie ends up on the left side (the past Anima base “side ponytail = viewer left” bias reproducing)
- The tie correctly comes out on the right (about 3 out of 8)
These three variations rotate by seed. Meanwhile, the Lily-side ponytail still doesn’t stop; in all 8 images Lily also has a “blue ribbon + side ponytail.” “The side tail I specified for Kanachan doesn’t land on Kanachan but goes onto Lily, or duplicates onto both” — a strange behavior where prompt strength can’t fix the identifier’s placement.
This is speculation (training-data attractor influence?)
What stood out across the cluster experiments was that Lily’s output seemed pulled toward another character that exists inside Anima. Specifically, Lily’s spec long blonde hair + half-up tied with a blue ribbon + white-ish top + somewhat formal is heading in the direction of Saber from Fate/stay night (blonde + blue ribbon + white blouse + blue dress).
To check, I shot Uzuki Shimamura (THE iDOLM@STER Cinderella Girls: brown hair + an off-center half-up tie + school uniform) and Artoria Pendragon (Saber) — both characters whose features overlap with Lily and Kanachan respectively — solo, with just their tag names. No LoRA.

Both come out solidly recognizable. Saber’s face is in the Type-Moon visual style, very close to canonical; the blue dress + gold trim is in the Fate official artwork direction (whether the dress details are perfect I can’t say from memory, but it’s clearly Saber at first glance). For Uzuki, seed orig is the school uniform version, seed 42 is the idol stage costume — both clearly recognizable as the character. Uzuki’s seed orig has a doujin-style face, seed 42 is closer to official — suggesting Anima’s internal “Uzuki” is a mixed distribution of official art and fan art. That these two characters are embedded in Anima’s training data essentially intact is visually unmistakable.
With that in mind:
- Lily-toward-Saber hypothesis: Lily’s spec sits near Anima’s Saber attractor in latent space; with the added kanachan LoRA influence, Lily’s slot gets pulled toward Saber
- Kanachan-toward-Uzuki hypothesis: when kanachan’s identifier (the side tie) is missing, the remaining
brown hair + school uniformfeatures get drawn to the Uzuki attractor, which is why the tie position drifts to the left-top (Uzuki’s position) or becomes twintail-like - Uzuki super-attractor hypothesis: Uzuki has “brown hair + school uniform + left-top tie (half-up-like)” — features that partially overlap with all three characters. In the 3-character cluster setup this attractor pull surfaces, and kanachan’s right-side ponytail morphs into a Uzuki-style left-top tie, and Lily’s half-up gets pulled into a Uzuki-style tie
These are all guesses, not quantitatively confirmed (the Lily-ribbon-color flip alone doesn’t fully isolate it). But the phenomenon itself — “famous characters with a lot of training data sit as strong attractors in latent space, and ambiguous parts of prompts get absorbed there” — is plausible. Something easy to overlook when using a custom character LoRA in multi-character setups.
Side observation: Kanachan’s hair gets longer than the training source
Another thing that caught my eye in the cluster 3girls runs: Kanachan’s hair tends to come out longer than the training source. The source is medium length (shoulder to collarbone), but across the 8 cluster 3girls images (the original test 6 batch), the hair often runs below the shoulder. The kanachan LoRA was trained with outfit variations including cardigans etc., so outfit differences are by design — but hair length is a part that should be pinned by the training source. This isn’t being controlled. This is also consistent with the Uzuki attractor hypothesis above. Uzuki has medium-to-semi-long brown hair, so as kanachan’s identifier weakens, the hair length may also drift toward Uzuki.
Comparing against the training source
A preface: the kanachan LoRA was not trained with a fixed outfit (it was trained on multiple outfits). The training source at the top of this article is just “one of the images I use most on the blog,” not the LoRA’s canonical outfit. So even if the generation comes out in a beige sailor uniform, it’s not “the LoRA drifted away from its outfit”; it’s just “the outfit wasn’t specified, so the LoRA picked one from its training data drawer.” That’s why no raw-prompt shot here ever comes out as the white-shirt + red-tie + navy-skirt combo.
So “matches the training source” is meaningful only for parts that are consistent across the character’s design. Looking at the unnamed 2girls weight 0.8 (the “most kanachan-like” image in the sweep):
- Hair color (light brown / chestnut): match
- Large ahoge: match
- Brown eyes: match
- Face: match
- Side ponytail shape: match (small gathered tie)
- Hair accessory color (blue): mismatch — the generation has a yellow scrunchie
The headline here is the last item, the blue scrunchie. It’s consistent across the training source as part of the character design, so the LoRA naturally learned it. Yet it shifts by weight: 0.8 → yellow, 1.0 → orange, 1.2 → pink. The named 2girls weight 1.0 (test 3) brings it back to blue.
So the kanachan LoRA can stably recall “ahoge + hairstyle + face,” but a colored design element like “the blue scrunchie” doesn’t get correctly initialized unless the name token ("name": "Kanachan") is also in the prompt. This is the same family of issue as the “Anima character-LoRA detail instability” I covered in caption rework and 12000-step training — naming is one way to mitigate part of it.
Test 7: can negative prompts suppress Lily’s side ponytail?
In the cluster 3girls runs Kanachan’s side ponytail ends up on Lily; can negative prompts or NOT inside the positive prompt rescue it? ComfyUI-side negatives apply to the whole image, so I tried character-tagged phrases like blonde side ponytail, side ponytail on blonde hair, Lily with a side ponytail — intending to suppress only the Lily side without touching Kanachan’s (brown hair + blue ribbon) side ponytail.
Tried 4 stages:
- Negative slot only: append the above to the standard negative
- Positive
NOTonly: addNOT a side ponytail, do not tie her hair to one side, hair flows naturally down on both sidesto Lily’sappearanceand spell it out inrule - Negative slot + positive
NOTsimultaneously - Everything explicit (gachi-gachi): on top of the above, also add
right-side ponytail tied with a blue ribbon on the right side of her headexplicitly to Kanachan’sappearance
Each stage shot 2 seeds × 2 weights = 4 images. Across all 4 stages, Lily’s side ponytail doesn’t stop — Kanachan’s side ponytail keeps appearing on Lily. Below are 2 representative shots from the final gachi-gachi stage:

For Kanachan, when right-side ponytail is written explicitly, instead of attaching only on the right it often becomes a small tie on both sides (twintail-like). That’s because the kanachan LoRA’s training tags had left side ponytail as positive and right side ponytail, twin tails, twintails, two side up as negative (past article: wai-anima-lora-animaloratoolkit-runpod), so the right-side spec collides with training-time negatives. Including the partial-twintail Lily output, prompt strengthening didn’t help.
ComfyUI-style global negatives / positives can’t enforce per-character constraints — that’s the conclusion for the cluster layout. Without a region-based prompt mechanism like Regional Prompter, identifier bleed in cluster 3girls can’t be controlled.
Test 8: narrative kumitaisō — three characters intertwined but not clustered
Since “clustering causes identifier migration” was clear, I tried the opposite extreme: a pose where three characters are intricately intertwined but spatially separated. The subject is Narrative Kumitaisō (the complex three-character pose shown in the Mobile Suit Gundam NT movie, said to be inspired by the Renaissance sculpture The Rape of the Sabine Women).
The scene used: three girls in a dynamic intertwined standing pose, sculptural composition inspired by The Rape of the Sabine Women by Giambologna, three figures twisted around each other with arms and bodies overlapping, each facing a different direction, complex spiral pose, simple background, full body. Per-character specs unchanged. Weight 0.8, 2 seeds; one of the resulting shots is below:

All three are identifiable as distinct characters and the pose is genuinely intertwined. A gray snake-like shape is coiling around their feet, though. This is probably because the Renaissance sculpture reference The Rape of the Sabine Women got connected to “mythological painting territory (snakes, tentacles, etc.)” inside Anima.
In other seeds, the snake comes out more dramatically, or Reina’s face gets painted gray like a statue — reproducibility is low. The “sculpture reference + intertwined” combination summons this snake almost every time.
Side attempt: take 2 with a vertical totem-pole composition
The essence of narrative kumitaisō isn’t actually “bodies intricately intertwined” — it’s the Gundam NT key visual (three characters stacked vertically, a hand descending from above, a vertical beam of light), a tall symbolic composition. Decomposing the elements, I rewrote the prompt with three characters stacked vertically in a narrow composition, totem pole-like character arrangement, one character kneeling at the bottom, one character sitting or draped across the middle, one character standing behind and reaching straight upward, a mysterious hand descending from above, characters arranged along a vertical beam of light, dramatic anime movie poster composition, space background and put human pyramid, gymnastics, acrobatic pose in the negative:

The composition works as intended: three characters stacked vertically, golden light beam from the top, descending hand, space background — a movie-poster-style silhouette. But the three characters’ identities have completely collapsed. All three are brown hair + side ponytail (blue ribbon) + navy sailor uniform + red ribbon — everyone matches Kanachan. Lily’s specified blonde + half-up braid and Reina’s specified black short bob are gone. A complex composition prompt and per-character specs running together pulls attention toward the composition side and identities collapse — a trade-off.
Getting narrative kumitaisō (the vertical stack key visual composition) out of Anima with raw prompts alone is fairly hard. sculpture/intertwined summons snakes; the totem pole route gets the composition but collapses identity. Practical approaches would be ControlNet OpenPose to feed skeletons directly, or img2img from a reference image. That’s homework for another article.
Test 9: with a depth composition, identifiers stay intact
“Clustering breaks identifiers” and “abstract intertwined poses break them too” — so the opposite test: use depth to spread the three characters across foreground / midground / background. The subject is “Kanachan slumped face-down on a desk in class even though she’s supposed to be studying, Lily across from her trying to wake her up, Reina entering from a back door” — a slice-of-life anime scene with abundant training data. Unlike side-by-side or cluster, the three characters are separated along the Z axis (depth), so the attention pool should split spatially — that was the prediction.

The result matches the prediction: all three identifiers hold:
- Foreground: Kanachan, brown + side ponytail + blue ribbon + navy sailor, slumped on a desk
- Mid-right: Lily, blonde + blue ribbon + white blouse, sitting at a desk
- Background: Reina, black + navy sailor, standing by the chalkboard
Where the cluster 3girls had Kanachan’s side ponytail disappearing and migrating to Lily, the depth composition immediately puts the side ponytail back on Kanachan correctly, while Lily keeps her half-braid-style ribbon (per spec) and Reina holds black + sailor — three distinct characters. Not perfect (Kanachan isn’t facing Lily so the narrative naturalness is about half, and the background Reina doesn’t read as “small, entering through a door”), but in addition to spatially “separating” the three characters, “depth-separating” them also prevents identifier bleed. It reinforces the earlier hypothesis that Anima respects spatially-separated slots — meaning the cluster case is the special one.
The takeaway for keeping identifiers in multi-character generation:
- Separate horizontally and clearly (test 4’s standing side by side)
- Or spread by depth, front to back (test 9)
- Cluster layouts and complex intertwined compositions tend to pull the LoRA’s identifier onto other characters
Three points. Behavior changes a lot with composition, so Anima’s attention mechanism likely treats “spatially separated” vs “clustered” through different paths.
Anima-related posts on this blog
- Anima — A 2B Anime Image Generation Model Based on Cosmos-Predict2: Current State and Issues
- WAI-Anima v1 vs WAI-Illustrious on M1 Max ComfyUI: brings Anima’s atmospheric backgrounds but loses on tag control and character consistency
- WAI-Anima v1 on RTX 4060 Laptop (8GB) via ComfyUI API: 55s/image and the tqdm OSError fix
- Trained a WAI-Anima LoRA with AnimaLoraToolkit but Side Ponytail Direction Wouldn’t Move with Prompts
- Rewriting WAI-Anima Character LoRA Training Captions with Natural Language and Hairstyle Tags
- Pushing WAI-Anima Character LoRA Training to the Official 12,000-Step Recommendation Made Direction Control Worse — Half That at ep150 Hit 100%
- Anima-Base v1.0 on M1 Max: kana LoRA at 22% light prompt, 67% heavy prompt
- Anima inpaint on Mac ComfyUI: LanPaint + Crop-and-Stitch cuts 32 min to 2.5 min