Nodes/comfyui-kisekae/๐Ÿ‘˜ Kisekae Outfit
ComfyUI Node

๐Ÿ‘˜ Kisekae Outfit

Pick a dress, it clears the skirt for you

By KagejitsuยทCreated 11 days agoยทUpdated 10 days agoยท 0
๐Ÿ‘˜ Kisekae Outfit
  • char
  • char
โ—„preset(none)โ–บ
โ—„headwear(keep)โ–บ
โ—„headwear_textโ–บ
โ—„headwear_appendfalseโ–บ
โ—„full(keep)โ–บ
โ—„full_textโ–บ
โ—„full_appendfalseโ–บ
โ—„upper(keep)โ–บ
โ—„upper_textโ–บ
โ—„upper_appendfalseโ–บ
โ—„outerwear(keep)โ–บ
โ—„outerwear_textโ–บ
โ—„outerwear_appendfalseโ–บ
โ—„lower(keep)โ–บ
โ—„lower_textโ–บ
โ—„lower_appendfalseโ–บ
โ—„legwear(keep)โ–บ
โ—„legwear_textโ–บ
โ—„legwear_appendfalseโ–บ
โ—„footwear(keep)โ–บ
โ—„footwear_textโ–บ
โ—„footwear_appendfalseโ–บ
โ—„handwear(keep)โ–บ
โ—„handwear_textโ–บ
โ—„handwear_appendfalseโ–บ
โ—„accessories(keep)โ–บ
โ—„accessories_textโ–บ
โ—„accessories_appendfalseโ–บ
โ—„underwear(keep)โ–บ
โ—„underwear_textโ–บ
โ—„underwear_appendfalseโ–บ
โ—„extra(keep)โ–บ
โ—„extra_textโ–บ
โ—„extra_appendfalseโ–บ

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).

Categorykisekae

Inputs (35)

NameTypeDefaultDescription
presetCOMBO(none)Replace the whole outfit section with this preset's outfit
headwearCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
headwear_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
headwear_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
fullCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
full_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
full_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
upperCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
upper_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
upper_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
outerwearCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
outerwear_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
outerwear_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
lowerCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
lower_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
lower_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
legwearCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
legwear_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
legwear_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
footwearCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
footwear_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
footwear_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
handwearCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
handwear_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
handwear_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
accessoriesCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
accessories_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
accessories_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
underwearCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
underwear_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
underwear_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
extraCOMBO(keep)(keep) passes the incoming value through; (clear) empties it
extra_textSTRINGTyped text wins over the dropdown. (tag:1.2) weights work.
extra_appendBOOLEANfalseappend: add to the incoming value; replace: overwrite it
charoptKISEKAE_CHARCharacter from the previous node; empty starts a new one

Outputs (1)

NameTypeDescription
charKISEKAE_CHARโ€”