βοΈ Female Outfit
The ComfyUI Female Outfit Node
- positive_prompt
- seed
- negative_prompt
- metadata
If you've ever written 1girl, red dress, ankle boots, gold necklace by hand and squinted at the result, this node is aimed at you. Female Outfit (class FemaleOutfitNode, in the π Outfit/Female menu) is the flagship of the comfyui-outfit pack: a giant dropdown-driven prompt builder that assembles a complete character prompt - clothing, accessories, hair, pose, background, lighting, the works - without you typing more than a name.
It's niche, but it fills a slot the ecosystem genuinely lacks. The dropdown-heavy approach shows up in community threads about modular prompt builders - people who want "a dropdown for everything" keep rediscovering packs like this one - and comfyui-outfit is the one that goes deepest on attire specifically. If your whole workflow is "generate a fashion image from scratch," it beats writing prompt templates.
How it works
Every dropdown you see is loaded from JSON on disk, not hardcoded: the pack ships outfit catalogs in data/outfit/female/*.json (torso, legs, feet, hands, headgear, jewelry, and so on - 20+ body parts), plus data/backgrounds.json, data/age_groups.json, data/race.json, and style lists under data/styles/. When a dropdown is set to random, the node picks from that list using a seed, then a PromptBuilder assembles the final text as labeled fragments - something like Age: adult (30-45 years), Attire: torso: red dress, legs: tights, feet: ankle boots, Pose: ..., Avoid: blurry, low-res.
That "labeled fragments" style is the main thing to know before you use it. The output is a prompt component list, not a polished sentence. On SDXL-lineage models that's fine - tag-ish input is exactly what they want. For a model that prefers natural language (Flux-style), set description_style to flux and the builder swaps in a "natural language style" hint; it's a nudge, not a rewrite, so keep expectations realistic.
Presets (the preset dropdown, 35 of them from the default data/presets.json) fill only fields that are empty, none, or random - anything you've explicitly chosen wins. preset_colors decides whether the preset also pins clothing colors or leaves them for the model. Flip export_preset on and it prints a JSON snippet of your current selections to the console, ready to paste back into presets.json as your own preset.
The inputs and outputs that matter
You can't realistically touch all ~40 inputs; here's what you'll actually set:
- preset -
none,random(pick a random preset from all of them), or a named preset like Cyberpunk or Ballerina. - seed / seed_mode / style_seed -
seed_modecontrols the main image seed (fixed,random,increment,decrement). style_seed is the clever one: set 0 to follow the image seed, or give it its own value to vary the outfit while keeping the image seed fixed - great for batch "same girl, different dress" runs. - avoid_terms - a comma-separated list of things you don't want (e.g.
blurry, extra fingers). These get folded into the negative_prompt output alongside the pack's own baseline negatives and a few auto-generated ones (like glasses forno eyewear). - The attire dropdowns (torso, legs, feet, hairstyle, headgear, jewelry) - leave them on
randomand let the seed do the exploring.
It returns four outputs: positive_prompt (wire into your CLIP/text encoder), seed (feed back into your KSampler so the image seed matches), negative_prompt, and metadata (a JSON dump of everything it picked - handy for logging). The seed output is worth wiring: if you leave it floating and just read the prompt, you lose reproducibility.
Install
Grab it via ComfyUI Manager (search "ComfyUI Outfit Selection") or:
cd ComfyUI/custom_nodes/
git clone https://github.com/manifestations/comfyui-outfit.git
Then restart ComfyUI. The requirements.txt is light - requests, pillow, numpy, torch - and the core outfit nodes download no model files at all. The Ollama LLM/vision nodes elsewhere in the pack are the ones that need a local model and a running Ollama server; this node is self-contained.
Common issues
- Preset keys get ignored with a console warning. If a preset references a key that isn't a current input (data rot after an update), it logs
contains unknown keys- your preset silently half-applies. Check the warning, fix the JSON. - enable_cache bites you. It's on by default, and identical inputs return cached output. If you're flipping an input and "nothing changes," toggle cache off or change the seed - you're probably hitting the cache key.
- Output reads oddly. Remember the labeled-fragment format; if your checkpoint wants comma-separated tags, the format is fine. If it wants sentences, you picked the wrong description_style.
Inputs (39)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | none | Choose a preset to auto-fill fields. Use 'random' to randomly select from all cultural and themed presets! |
| preset_colors | BOOLEAN | true | If OFF, preset fills only clothing types without colors (AI picks colors). If ON, uses preset colors exactly. |
| avoid_terms | STRING | β | |
| age_group | COMBO | random | 10 options: none, random, adult (30-45 years), baby (0-2 years), child (5-12 years), middle-aged (46-59 years), +4 |
| character_name | STRING | β | |
| body_type | COMBO | random | 17 options: none, random, apple, athletic, average, curvy, +11 |
| pose | COMBO | random | 60 options: none, random, A sultry look over the shoulder with a subtle hip pop., Adjusting a stylish hat, with a sly smile that says 'I know you're looking.', Bending down slightly, looking up with a mischievous gaze., Casually leaning against a car, with the keys dangling in the hand., +54 |
| background | COMBO | random | 42 options: none, random, Ancient temple courtyard, Art gallery, Beach boardwalk, Botanical garden, +36 |
| race | COMBO | random | 12 options: none, random, African, Caucasian, East Asian, Latino/Hispanic, +6 |
| mood | COMBO | random | 20 options: none, random, bright, dark, dramatic, dreamy, +14 |
| time_of_day | COMBO | random | 14 options: none, random, afternoon, blue hour, dawn, dusk, +8 |
| weather | COMBO | random | 14 options: none, random, crisp, dry, foggy, humid, +8 |
| color_scheme | COMBO | random | 14 options: none, random, analogous, complementary, cool tones, earth tones, +8 |
| description_style | COMBO | random | 5 options: none, random, flux, sd3, sdxl |
| creative_scale | COMBO | none | 8 options: none, random, cinematic, detailed, exact, exaggerated, +2 |
| custom_attributes | STRING | β | |
| seed | INT | 00β4294967295 | Main seed for image generation. Controls final image output. |
| style_seed | INT | 00β4294967295 | Separate seed for outfit/style randomization. Use 0 to follow main seed, or set different value to vary outfit while keeping same image seed. |
| seed_mode | COMBO | random | How the main seed behaves: fixed=use exact value, random=new each time, increment/decrement=step from last value |
| export_preset | BOOLEAN | false | β |
| lock_preset_fields | BOOLEAN | false | If on, also lock non-attire style fields (pose, background, etc.) to preset values |
| enable_cache | BOOLEAN | true | Cache outputs for identical inputs (faster repeats) |
| arm | COMBO | random | 25 options: none, random, arm band, arm tattoo, arm warmers, armband, +19 |
| cheeks | COMBO | random | 12 options: none, random, birthmark, cheek piercing, dimples, face paint, +6 |
| ear | COMBO | random | 33 options: none, random, bare ears, cartilage piercing, chandelier earrings, climber earrings, +27 |
| eyewear | COMBO | random | 27 options: none, random, aviator sunglasses, butterfly glasses, cat-eye glasses, colored contacts, +21 |
| feet | COMBO | random | 37 options: none, random, ankle boots, ankle-strap heels, ballet flats, bare feet, +31 |
| fingers | COMBO | random | 33 options: none, random, bare fingers, birthstone ring, class ring, cocktail ring, +27 |
| forearm | COMBO | random | 30 options: none, random, UV protection sleeve, arm guard, arm sleeve, arm warmer, +24 |
| forehead | COMBO | random | 28 options: none, random, bandage, bare forehead, bindi, birthmark, +22 |
| hairstyle | COMBO | random | 43 options: none, random, Bantu knots, Dutch braid, French twist, Fulani braids, +37 |
| hand | COMBO | random | 30 options: none, random, bare hands, compression gloves, cycling gloves, disposable gloves, +24 |
| headgear | COMBO | random | 37 options: none, random, bandana, barrette, baseball cap, beanie, +31 |
| legs | COMBO | random | 26 options: none, random, culottes, dhoti, dirndl skirt, fishnet tights, +20 |
| lips | COMBO | random | 17 options: none, random, bow lips, cupid's bow, full lips, heart-shaped lips, +11 |
| neck | COMBO | random | 32 options: none, random, amulet, ascot, bandana, bare neck, +26 |
| nose | COMBO | random | 28 options: none, random, L-shaped nose stud, bare nose, bridge piercing, bulak, +22 |
| torso | COMBO | random | 41 options: none, random, blazer, blouse, bodycon dress, bodysuit, +35 |
| waist | COMBO | random | 11 options: none, random, belt, chain belt, corset, cummerbund, +5 |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| positive_prompt | STRING | β |
| seed | INT | β |
| negative_prompt | STRING | β |
| metadata | STRING | β |