KPU Wailustrious Multi-Character Scene
The Node That Tries to Stop Two Characters From Becoming One Four-Armed Blob
- positive_prompt
- negative_prompt
Here's the problem this node exists for, and it's a real one: anime SDXL checkpoints - especially WAI-illustrious, the most-loaded anime model around - are notoriously bad at multi-character scenes. Two characters in one prompt and the model starts loaning out body parts. The community workaround is regional prompting (Forge Couple, Regional Prompter, that family) plus a naming convention: prefix each character's tags with girl1_, boy1_, and so on, so the model can tell whose hair is whose. KPU Wailustrious Multi-Character Scene automates the prefix convention. It won't fix everything, but it's the single most interesting node in the comfyui-kpu-utils pack, because it encodes a real technique instead of just concatenating strings.
How it works
You feed it up to five character descriptions - the natural source is the pack's own WailustriousCharacterBuilder, whose character_description and character_type outputs plug straight into the character_N_desc / character_N_type slots. Then it does three things:
- Counts. It tallies girls and boys and emits the Danbooru count token at the front -
1girl,2girls,1boy, 2girls, whatever the roster adds up to. That count token is critical: these models were trained on Danbooru captions where the headcount comes first. - Prefixes. Every feature of every character gets stamped with
girl1_,girl2_,boy1_, etc.blue eyesfrom character 2 becomesgirl2_blue eyes. This is the attribute-binding trick that keeps character A's dress from bleeding onto character B. - Assembles the scene. Camera angle (15 options, from eye level to bird's eye view),
location,lighting,time_of_day, optionalcompositionandscene_description,art_style(anime/manga/illustration/pixelart) andquality_tagsall get appended in that order. Out comepositive_promptandnegative_promptstrings, ready for CLIP Text Encode.
The inputs that matter
character_1_desc+character_1_type- required, and that's deliberate: you can't build a zero-character scene. Fill this from the Character Builder.character_2throughcharacter_5desc/type - optional, and each desc slot defaults empty, so adding a character is as simple as filling the next pair.camera_angle- the one setting that does real compositional work here. Eye level is the default and gets omitted from the prompt; anything else is emitted as e.g.high angle view.negative_prompt- defaults to the usualugly, deformed, blurry, lowres, watermark, text, extra fingers. That default is fine and short; don't stack much more on top, WAI explicitly warns long negatives degrade quality.
Where it falls short
Two honest caveats, both straight from the source code.
Only girls and boys are counted. The character_type enums include elf, demon, maid, magical girl, nun, and witch - but the counting loop only checks for girl and boy. A character whose type is anything else is silently dropped from the prompt, description included. So a two-elf scene won't produce a count token and won't include either elf. If you're doing non-human casts, paste their descriptions into a character_1_desc slot with type girl/boy (the description text is what matters) or assemble the scene by hand.
Prefixes are not regional conditioning. Writing girl1_red hair is a nudge the model can interpret, not a hard mask like Forge Couple gives you. For simple two-character scenes it genuinely helps; for two characters interacting, overlapping, or touching, the community consensus is that you still want actual regional prompting on top of this.
Installing
Pack is comfyui-kpu-utils by kpucha - young, hobby-scale, Spanish-authored, essentially zero community footprint, so glance at the repo before installing (it's benign: text assembly). Manager → search "comfyui-kpu-utils", or:
cd ComfyUI/custom_nodes
git clone https://github.com/kpucha/comfyui-kpu-utils
Restart, look under KPU Utils. The comfyui>=0.9.0 line in requirements.txt isn't a real PyPI package - ignore the install error it causes; nothing else needs installing and there are no model downloads.
Troubleshooting
- A character is missing from the output → check its
character_type. Non-girl/boy types are dropped by design (for now). - Attributes still cross over between characters → you're hitting WAI's known multi-char weakness; add regional prompting rather than more tags.
- Weird counts → the count token comes from desc/type pairs where both are filled. An empty desc with a type selected doesn't count.
Remember the family settings when you sample: CLIP skip 2, CFG 5–7, Euler a, no external VAE (it's baked in). And if you're chasing a genuinely great two-person scene, treat this node as the first pass - the input to a regional-prompting setup, not the end of the road.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| character_1_desc | STRING | black hair, long hair, straight hair, blue eyes, slim, school uniform, standing, looking at viewer, smiling | — |
| character_1_type | COMBO | girl | 8 options: girl, boy, elf, demon, maid, magical girl, +2 |
| location | STRING | bedroom | — |
| lighting | STRING | soft lighting | — |
| time_of_day | STRING | daytime | — |
| camera_angle | COMBO | eye level | 15 options: eye level, dutch angle, low angle, high angle, overhead, POV, +9 |
| art_style | COMBO | anime | 4 options: anime, manga, illustration, pixelart |
| quality_tags | STRING | high quality, masterpiece, detailed | — |
| character_2_descopt | STRING | — | |
| character_2_typeopt | COMBO | 9 options: , girl, boy, elf, demon, maid, +3 | |
| character_3_descopt | STRING | — | |
| character_3_typeopt | COMBO | 9 options: , girl, boy, elf, demon, maid, +3 | |
| character_4_descopt | STRING | — | |
| character_4_typeopt | COMBO | 9 options: , girl, boy, elf, demon, maid, +3 | |
| character_5_descopt | STRING | — | |
| character_5_typeopt | COMBO | 9 options: , girl, boy, elf, demon, maid, +3 | |
| compositionopt | STRING | — | |
| scene_descriptionopt | STRING | — | |
| negative_promptopt | STRING | ugly, deformed, blurry, lowres, watermark, text, extra fingers | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive_prompt | STRING | — |
| negative_prompt | STRING | — |