Tech 50 min read

Tried a custom character LoRA on WAI-Anima for multi-character generation on Mac — it works, with caveats

IkesanContents

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 ribbon keyword is attracting the LoRA’s blue color” was rejected: switching Lily’s spec to green ribbon reproduced the same bleed
  • LoRA weight 1.2 collapses 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

ItemValue
MachineMacBook Pro M1 Max 64GB
Image generationWAI-Anima v1.0 (waiANIMA_v10.safetensors)
Text Encoderqwen_3_06b_base.safetensors
VAEqwen_image_vae.safetensors
Speed LoRAAnima Turbo LoRA v0.1 (8 steps, CFG 1.0)
Character LoRAkanachan-waianima-rework-v4_epoch150.safetensors (custom)
sampler / schedulerer_sde / simple
Resolution888×768
Translation pipelinellm-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/jobs queues 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. /interrupt can 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_translate option: 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”):

Reference standing portrait of kanachan from the LoRA training data, in the outfit most commonly used on this blog

  • 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

Text-form prompt output. Left kanachan: brown semi-long hair with side ponytail and ahoge, wearing a navy sailor uniform under a beige cardigan and a dark brown zip parka, with black tactical gloves, thigh holsters, black thigh-high socks, and brown work boots. Right: charcoal-gray long straight hair in a navy sailor uniform. Background is a split blue / pink character-card style

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

JSON-form prompt output. Full body, two girls. Left kanachan: brown semi-long + ahoge + white cardigan + white shirt + red ribbon + dark brown / gray plaid pleated skirt. Right: dark gray hair + red eyes + navy sailor uniform

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 solo (LoRA w=0.8). Brown hair + side ponytail (blue scrunchie) + ahoge + brown eyes + a darkish jacket + gray pleated mini + black knee socks

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 solo (no LoRA). Black short bob + red eyes + navy sailor uniform + red scarf + navy pleats + black knee socks + brown loafers

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 solo (no LoRA). Bright blonde + half-up braid + blue ribbon + bluish-gray eyes + light blue sleeveless top + navy skirt

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

weight 0.4 output. Left: brown long hair + white sailor uniform (dark green collar + black scarf). Right: dark gray bob + navy sailor + red scarf

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

weight 0.6 output. Left: brown medium hair + beige sailor. Right: dark gray bob + navy sailor

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

weight 0.8 output. Left: side ponytail (yellow scrunchie) + ahoge + beige sailor on Kanachan. Right: dark gray bob + navy sailor

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

weight 1.0 output. Left: high side ponytail + large ahoge Kanachan, but the scrunchie is orange and the chest ribbon is wine-red. Right: dark gray semi-long + navy sailor

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)

weight 1.2 output. The image itself is degraded: skin-tone noise on the left character's eye distorts pupil shape, lines blur, the mouth simplifies to a short stroke, generation noise is visible. In parallel, the right character's hair color shifts from dark gray to ash brown and a large ahoge appears

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.

weightLeft’s completeness as KanachanBleed onto right
0.4Brown hair only. No side ponytail / ahoge / face matchNone
0.6Brown medium hair. Identifier still hasn’t activatedNone
0.8Side ponytail (yellow scrunchie) + ahoge + matching face. PeakNone
1.0Side ponytail stays, but scrunchie turns orange and chest ribbon turns wine-red (drifts from training blue)None
1.2Still preservedHair 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

Named weight 0.4. Left Kanachan: light brown semi-long + half-up + navy sailor with beige cardigan layered + red scarf. Right Reina: black bob + red eyes + navy sailor + red scarf + two red hairpins on the right side

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

Named weight 0.6. Left Kanachan: side ponytail (blue scrunchie) + small ahoge appears, white sailor + deep green collar + blue scarf. Right Reina: black bob + red eyes + navy sailor + red scarf + red hairpin

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

Named weight 0.8. Left Kanachan: light brown semi-long + side ponytail (blue scrunchie) + large ahoge + white sailor + deep green collar + thin black ribbon tie. Right Reina: black straight bob + red eyes + dark navy sailor + red scarf

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

Named weight 1.0 output. Left Kanachan: light brown semi-long + large ahoge + side ponytail (blue scrunchie) + white sailor + dark olive collar + red ribbon. Right Reina: dark gray bob + navy sailor + red scarf, but with a generation artifact: no mouth drawn

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)

Named weight 1.2 output. LoRA over-application zone. Left Kanachan: large ahoge + side ponytail (navy scrunchie) + cream sailor. Right Reina: ash brown medium bob + navy sailor — hair color bled, but no ahoge

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

weightUnnamed KanachanNamed KanachanNaming effect
0.4Brown hair only, no identifierHalf-up + beige cardigan, no identifierAlmost none
0.6Brown medium, no identifierSide ponytail (blue) + small ahogeIdentifier activates 0.2 earlier
0.8Side ponytail (yellow scrunchie) + large ahogeSide ponytail (blue scrunchie) + large ahogeColor decoration matches training
1.0Side ponytail (orange scrunchie) + wine-red ribbonSide ponytail (blue scrunchie) + red ribbonColor decoration matches training
1.2Side ponytail (pink scrunchie), large ahoge bled to rightSide ponytail (navy/black scrunchie), right turned ash brown but no ahogeColor 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

3girls weight 0.4 output. Left Kanachan: brown semi-long + braided half-up + pink cardigan + green ribbon. Middle Reina: black short bob + navy sailor + red scarf. Right Lily: ash-blonde half-up + white short sleeves + thin blue ribbon + navy skirt + large blue ribbon at the back of the head

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

3girls weight 0.6 output. Left Kanachan: side ponytail (blue scrunchie) + ahoge appears, beige cardigan + white shirt + red ribbon. Middle Reina: near-black dark brown bob + navy sailor + red scarf. Right Lily: blonde long + half-up + navy large hair ribbon + white blouse + thin red ribbon

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

3girls weight 0.8 output. Left Kanachan: brown medium bob + large ahoge + white sailor (green collar + wine-red ribbon) + green skirt. Middle Reina: near-black dark brown bob + navy sailor. Right Lily: near-blonde light brown long + a high side ponytail on the left + brown blazer + navy / white striped hair ribbon

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

3girls weight 1.0 output. Left Kanachan: light brown medium + ahoge + white long-sleeve shirt + red ribbon. Middle Reina: dark brown medium + ahoge appears + navy sailor + red scarf. Right Lily: ash brown + side ponytail + ahoge + gray eyes + brown blazer + navy scrunchie

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 weight 1.2 output. LoRA over-application zone. All three are light brown + large ahoge for a kanachan-ish look, and the image quality drops with visible rendering coarseness. Lily alone keeps the side ponytail (blue scrunchie) and a brown sweater + white collar shirt, vaguely distinguishable

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.

3girls Lily=green ribbon version (weight 0.8). Left Kanachan: brown + large ahoge + sailor (still no side ponytail). Middle Reina: black / dark brown bob + navy sailor. Right Lily: light brown-ish (lost blonde) + a high side ponytail on the left + a blue scrunchie with white wave pattern + brown blazer

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.

Kanachan+Lily weight 0.4. Left Kanachan: brown long with braided half-up + navy blazer + red ribbon. Right Lily: blonde long with half-up + white blouse + blue chest ribbon + large blue ribbon at the back of the head

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.

Kanachan+Lily weight 0.6. Left Kanachan: brown + side ponytail (light blue scrunchie) + ahoge + black military-style outfit. Right Lily: ash-blonde + half-up + white blouse + navy ribbon

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.

Kanachan+Lily weight 0.8. Left Kanachan: light brown + side ponytail (blue / white pattern scrunchie) + large ahoge + black-and-white fantasy outfit. Right Lily: ash brown + half-up + navy ribbon

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.

Kanachan+Lily weight 1.0. Left Kanachan: orange-tinged brown + side ponytail (white scrunchie) + large ahoge + Japanese-style off-shoulder outfit. Right Lily: brown + half-up plus side ponytail mix (brown scrunchie + dark navy ribbon)

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.

Kanachan+Lily weight 1.2. Both are light brown + large ahoge in a kanachan-ish look. Right Lily: side ponytail with a light blue scrunchie + white kimono-style off-shoulder

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?

Reina+Lily weight 0.4. Left Reina: near-black dark brown bob + red eyes + navy sailor + red scarf. Right Lily: blonde + half-up + white blouse + blue ribbon

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.

Reina+Lily weight 0.6. Left Reina: dark brown medium bob + red eyes + navy sailor. Right Lily: blonde half-up + light blue ribbon + dark blue large ribbon at the back of the head

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.

Reina+Lily weight 0.8. Left Reina: dark brown semi-long + reddish-brown eyes + navy sailor. Right Lily: light brown + half-up + red ribbon + large blue ribbon at the back of the head

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.

Reina+Lily weight 1.0. Left Reina: darkish brown semi-long + ahoge appears + reddish-brown eyes + navy sailor. Right Lily: light brown + side ponytail (blue scrunchie) + light brown eyes + white blouse + wine-red ribbon

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.

Pair0.60.81.01.2
Kanachan + Reina (tests 2–3)Kanachan identifier missing or activatingKanachan peakColor drift (unnamed) / preserved (named)Hair color + ahoge leak to Reina
Kanachan + LilyKanachan activates, Lily stableLily hair color slight driftLily starts getting hair-tying elementsSide ponytail migrates to Lily
Reina + Lily (no kanachan trigger)Both stableLily hair color slight driftBoth show kanachan-ification signsBoth 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).

Cluster 3girls weight 0.6 seed orig Cluster 3girls weight 0.6 seed 42 Cluster 3girls weight 0.8 seed orig Cluster 3girls weight 0.8 seed 42

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:

Cluster 3girls forced-sidetail seed orig w=0.6 Cluster 3girls forced-sidetail seed 42 w=0.6 Cluster 3girls forced-sidetail seed orig w=0.8 Cluster 3girls forced-sidetail seed 42 w=0.8

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.

Anima's rendering of Uzuki Shimamura (seed 1293127692). School uniform + brown hair + left-leaning hair tie Anima's rendering of Uzuki Shimamura (seed 42). Idol stage costume version Anima's rendering of Saber (seed 1293127692) Anima's rendering of Saber (seed 42)

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 uniform features 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:

  1. Negative slot only: append the above to the standard negative
  2. Positive NOT only: add NOT a side ponytail, do not tie her hair to one side, hair flows naturally down on both sides to Lily’s appearance and spell it out in rule
  3. Negative slot + positive NOT simultaneously
  4. 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 head explicitly to Kanachan’s appearance

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:

Gachi-gachi (everything explicit) cluster 3girls weight 0.6. Kanachan in twintail-like both-side ties; Lily still has a side ponytail Gachi-gachi (everything explicit) cluster 3girls weight 0.8. Same trend: Kanachan twintails, Lily side ponytail

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:

A narrative-kumitaisō-ish composition. Three girls intertwined on a pedestal. Kanachan brown + blue side ponytail, Reina black + navy sailor, Lily blonde + blue ribbon. A gray snake-like shape coils around their feet

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:

Totem-pole composition seed orig. Three stacked + descending hand + golden vertical light beam + space background. All three are navy sailor uniform + red ribbon + brown hair + side ponytail, identities nearly fused Totem-pole composition seed 42. Same setup, with a hand reaching toward a black orb at the top + space background. All three brown + side ponytail + navy sailor

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.

Classroom scene. In the foreground, Kanachan slumps on a desk (brown + blue ribbon + side ponytail). On the right, Lily sits at another desk (blonde + blue ribbon). In the background by the chalkboard, Reina stands (black hair + navy sailor). All three identifiers preserved

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.