SMP · Outfit Generator (dict) (legacy)
An outfit as structured data, not just a sentence
- outfit_raw
- summary
The pack's headline Outfit Generator produces a plain text prompt. This one - the "(dict)" variant - produces the same thing as structured data: an OUTFIT_DICT_RAW where every garment is its own record with a name, fabric, color_role, a region hint, and a prompt_fragment still full of #primary#-style color tokens. Same engine, same outfit_lists/ data as the non-dict version; the difference is the shape it hands downstream, which is what lets the SMP pipeline route each garment to a specific region of the image later.
446 outfit sets at last count, scanned from the pack's outfit_lists/ directory - business, casual, sheer/layered, aerobic sub-themes, all the way to female_lingerie. And it's seed-controlled, so the same seed gives the same outfit every run. For reproducible character styling across a batch, that's the whole game.
How it works
It wraps core.outfit_engine.generate_outfit_records and adds per-slot color roles plus region hints - including a sam_class_hint, so a top knows it maps to SAM3's upper_clothes class downstream. Each garment slot is gated by an enable toggle and filtered by the formality and coverage sliders; print_probability and text_mode control whether garments get prints or text decorations.
Inputs that matter
outfit_set- which of the ~446 sets to draw from.seed- reproducible outfits.formality/coverage- the style sliders (0.0–1.0).- The
enable_*toggles - top, bottom, footwear default on; headwear, outerwear, accessories, bag default off. overrides(optional) - a manual bypass string, same idea as the text generator's override.
Outputs
outfit_raw- wire it into SMP · Outfit Combiner.summary- a string describing what was generated.
Install
Zero extra dependencies. The SMP dict pipeline uses numpy and pydantic 2, both already in the ComfyUI venv:
cd ComfyUI/custom_nodes
git clone https://github.com/ping1979ping/comfyui-FVMtools
Restart and you're live.
Common issues
An outfit that ignores your formality slider usually means the set you picked simply doesn't have garments in that range - some sets are single-tone. And the gotcha that trips everyone migrating from the text generator: this node does not resolve colors. The tokens stay in the fragments by design, and the Outfit Combiner after it is what spends them. Wire the combiner or you'll be feeding literal #primary# text to your encoder.
Inputs (15)
| Name | Type | Default | Description |
|---|---|---|---|
| outfit_set | COMBO | 395 options: business_female2, female/athleisure/general, female/athleisure/hot_pilates, female/athleisure/hybrid_athflow, female/athleisure/low_intensity_walk, female/athleisure/outdoor_trail, +389 | |
| seed | INT | 00–18446744073709550000 | — |
| style_preset | COMBO | general | 14 options: beach, casual_daywear, cyberpunk_neon, earthy_natural, evening_gala, festival, +8 |
| formality | FLOAT | 0.500–1 | — |
| coverage | FLOAT | 0.500–1 | — |
| enable_headwear | BOOLEAN | false | — |
| enable_top | BOOLEAN | true | — |
| enable_bottom | BOOLEAN | true | — |
| enable_footwear | BOOLEAN | true | — |
| enable_outerwear | BOOLEAN | false | — |
| enable_accessories | BOOLEAN | false | — |
| enable_bag | BOOLEAN | false | — |
| print_probability | FLOAT | 0.300–1 | — |
| text_mode | COMBO | auto | 4 options: auto, quoted, descriptive, off |
| overridesopt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| outfit_raw | OUTFIT_DICT_RAW | — |
| summary | STRING | — |