๐ Kisekae Outfit
Pick a dress, it clears the skirt for you
- char
- char
If you only install one node from this pack to see what the fuss is about, make it this one. Outfit is where prompt text fails hardest: dress plus a leftover pleated skirt from the character prompt gives you a render that's neither, and you spend ten minutes figuring out which tag to delete.
๐ Kisekae Outfit models clothing as ten fields running literally head to toe - headwear, full, upper, outerwear, lower, legwear, footwear, handwear, accessories, underwear - and, crucially, knows things like "a dress occupies the slots a top and skirt would". Pick dress from the full dropdown and the node clears upper and lower coming in from earlier in the chain. Pick swimsuit and it clears upper, lower and legwear too.
How it works
The character is a dict on a KISEKAE_CHAR wire, section by section. Per node: incoming character first, then the node's own preset (replacing the whole outfit section, LoRAs included), then field overrides.
The clearing behaviour is a data table, not inference. In the shipped vocab for outfit.full, the field-level default is "hides": ["outfit.upper", "outfit.lower"], with per-value overrides - maid apron hides nothing, plugsuit hides upper, lower and legwear. The comparison happens before the overrides apply, and anything this same node sets explicitly is exempt, so setting full: dress and legwear: black thighhighs on one node keeps the thighhighs. Appended values hide nothing at all: append means "add", not "replace".
Same table drives negatives: a value can carry a negative that gets added while it's selected. And the one real footgun: hides and negative only apply to dropdown picks. Typed _text overrides and preset-loaded values are never pruned. That's deliberate - a preset that says both white dress and skirt keeps both - but it means the safety net only exists while you're using the dropdowns.
The inputs that matter
full is the one you'll use most; 37 options covering dresses, uniforms, swimsuits, armor, witch, miko. upper / lower / legwear / footwear are the granular path when you're building an outfit rather than picking one. headwear is here rather than in head, which is why hats swap with the outfit instead of sticking to the character.
For a reusable wardrobe you want the preset dropdown: load examples/outfits/maid, school-uniform or shrine - presets that are only an outfit section, so other characters can wear them. preset only shows presets that define an outfit section; that's why a scene preset doesn't appear.
Output is a single char. Wire it into Kisekae Style or straight into Kisekae Prompt.
Install
ComfyUI Manager โ search kisekae (Registry: comfyui-kisekae), or:
cd ComfyUI/custom_nodes
git clone https://github.com/Kagejitsu/comfyui-kisekae
Restart. Nothing to pip install - the pack ships zero Python dependencies. Nodes appear under kisekae as "๐ Kisekae โฆ". Optionally install LoRA Manager if you want the preset cards in Tansu to show LoRA previews and trigger words filled in; the Kisekae nodes themselves don't need it.
Common issues
The dress didn't clear the skirt. You typed dress in full_text rather than picking it. Typed values are treated as plain text, no hides, no negatives. Drop the text box and use the dropdown.
It cleared a field I wanted. A full pick hides upper/lower in the incoming character. If you want to keep something, set it explicitly on this same node - explicit fields on the node survive its own hides pass.
The whole outfit reset. A preset pick on this node replaces the outfit section wholesale, including LoRAs. Use a plain Outfit node for overrides, or Load Preset with mode: merge to layer fields instead of sections.
Nothing changed after I edited the outfit JSON. Press R to rebuild the dropdowns; the node also re-runs on its own when a preset file it reads changes (it fingerprints them), so a stale render is more likely a cached queue entry than a stale file.
Want to see what got cleared? Drop Kisekae Debug JSON after this node and switch the view to trace. It literally reads like outfit.upper cleared (hidden by outfit.full = dress).
Inputs (35)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | (none) | Replace the whole outfit section with this preset's outfit |
| headwear | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| headwear_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| headwear_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| full | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| full_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| full_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| upper | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| upper_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| upper_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| outerwear | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| outerwear_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| outerwear_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| lower | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| lower_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| lower_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| legwear | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| legwear_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| legwear_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| footwear | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| footwear_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| footwear_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| handwear | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| handwear_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| handwear_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| accessories | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| accessories_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| accessories_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| underwear | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| underwear_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| underwear_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| extra | COMBO | (keep) | (keep) passes the incoming value through; (clear) empties it |
| extra_text | STRING | Typed text wins over the dropdown. (tag:1.2) weights work. | |
| extra_append | BOOLEAN | false | append: add to the incoming value; replace: overwrite it |
| charopt | KISEKAE_CHAR | Character from the previous node; empty starts a new one |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| char | KISEKAE_CHAR | โ |