KPU Wailustrious Prompt Generator
Why This Prompt Node Puts Character Tags First
- positive_prompt
- negative_prompt
This is the big one - the node the rest of the pack points at. KPU Wailustrious Prompt Generator takes a full scene description and assembles it into a structured, Danbooru-tag prompt in the exact order the models want it, plus a sensible negative. If you're only going to install one node from comfyui-kpu-utils, it's this one.
The reason the ordering matters is a real, testable property of CLIP-encoded models (which is what every Illustrious-family checkpoint is): earlier tags get stronger attention. Put the count and the character first and they land harder. This node does that ordering for you, in the same order an experienced tag-writer would hand-type it: character count → character type → hair → eyes → body → clothing → pose/action/expression → camera → composition → location/lighting/time → art style → quality tags → your custom tags. That's the whole job, done as a form.
How it works
Twenty-three required inputs and three optional ones - this is the kitchen-sink node. It's still friendly because most fields are free-text with sane defaults (black hair, long length, straight style, blue eyes, slim body, school uniform, bedroom, soft lighting, daytime). The enums are the things that benefit from being enums: character_count (1girl, 2girls, 1girl, 1boy, group, etc.), hair_length (4 options), camera_angle (9 options), and art_style (anime/manga/illustration/pixelart).
It also does the small bookkeeping that keeps prompts clean: if hair_color is left at black, it emits black hair rather than the redundant black hair, black hair you might expect from stacked fields; the default eye level camera angle is skipped instead of written into the prompt; and a few tags get normalized as it goes. When it's done it returns both positive_prompt and negative_prompt strings, so a single node feeds both sides of your CLIP Text Encode.
The three optional inputs are worth knowing:
negative_prompt- defaults tougly, deformed, blurry, lowres, watermark, text, extra fingers. Short on purpose; see the warning below.custom_tags- appended near the end, after quality. Your place for artist names, series tags, or anything the form doesn't cover.weight_emphasis- appended last, raw. This is where(very beautiful:1.5)-style emphasis goes. On these CLIP-based checkpoints that syntax works; keep values in the 0.5–1.5 band or you get artifacts.
The inputs that matter
For a first generation, you can leave almost everything at its default and change just three things: character_count (who's in the shot), character_type (girl, boy, or free text like demon girl, maid), and location. Then run a couple of seeds before you start tuning hair and clothing. Quality comes from the model and settings, not from piling on tags.
The two things that bite people
Free-text fields are free text. There's no dropdown stopping you from typing longhair or red hair, blue eyes into the wrong slot. Danbooru tags are specific - twintails, not twin tails, and it's long hair with a space. When a tag isn't landing, that's usually why. (The Character Builder, with its curated dropdowns, is the safer path if you're not confident; this node is the flexible path.)
Keep quality tags and negatives short. WAI's model page is explicit: on Illustrious-family checkpoints, too many quality/aesthetic tags and overly long negative prompts reduce image quality and add blur. The defaults here are already in the right ballpark - high quality, masterpiece, detailed - so resist the SD 1.5 instinct to stack best quality, amazing quality, 8k, ultra detailed, trending on artstation. It makes things worse, and WAI is one of the models where the community has measured it.
Installing
Pack is comfyui-kpu-utils by kpucha - a young, Spanish-authored, hobby-scale project with essentially zero community footprint, so do the standard glance at the repo before installing (the code is plain string assembly; no network calls, no model loading). ComfyUI Manager → search "comfyui-kpu-utils", or:
cd ComfyUI/custom_nodes
git clone https://github.com/kpucha/comfyui-kpu-utils
Restart and it appears under KPU Utils. Ignore the phantom comfyui>=0.9.0 pip dependency (not on PyPI); nothing else needs installing and there are no model downloads. The prompts target the "Wailustrious XL" line, which in practice means any Illustrious-family checkpoint - WAI-illustrious-SDXL being the one most people run.
A sane starting config
Wire the two outputs into CLIP Text Encode (positive and negative), load your checkpoint, and use the family settings: CLIP skip 2 (a Clip Set Last Layer node at -2), CFG 5–7, Euler a, 20–30 steps, no external VAE (baked in). One fixed seed, one changed variable at a time - that's how you figure out which of your tags are actually doing anything.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| character_count | COMBO | 9 options: 1girl, 1boy, 2girls, 2boys, 1girl, 1boy, 3girls, +3 | |
| character_type | STRING | — | |
| hair_color | STRING | black | — |
| hair_length | COMBO | long | 4 options: short, shoulder-length, long, very long |
| hair_style | STRING | straight | — |
| eye_color | STRING | blue | — |
| eye_shape | STRING | — | |
| body_type | STRING | slim | — |
| body_feature | STRING | — | |
| clothing | STRING | school uniform | — |
| clothing_color | STRING | — | |
| accessories | STRING | — | |
| pose | STRING | standing | — |
| action | STRING | looking at viewer | — |
| expression | STRING | smiling | — |
| camera_angle | COMBO | eye level | 9 options: eye level, dutch angle, low angle, high angle, overhead, POV, +3 |
| composition | STRING | — | |
| location | STRING | bedroom | — |
| lighting | STRING | soft lighting | — |
| time_of_day | STRING | daytime | — |
| background_detail | STRING | — | |
| art_style | COMBO | anime | 4 options: anime, manga, illustration, pixelart |
| quality_tags | STRING | high quality, masterpiece, detailed | — |
| negative_promptopt | STRING | ugly, deformed, blurry, lowres, watermark, text, extra fingers | — |
| custom_tagsopt | STRING | — | |
| weight_emphasisopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive_prompt | STRING | — |
| negative_prompt | STRING | — |