NSFW randomize person
Hand the 'who' to a dice roll
- prompt
- seed
The main NSFW Prompt node in this pack is a whole-scene generator. NSFW randomize person is the opposite shape of node: it's a post-processor that takes a prompt you already have and appends exactly one line describing who's in the shot. Height, hair, skin, face shape, eyes, nose, makeup, nails - 20 trait slots, each a dice roll. It's the "I've decided what's happening; I just can't pick a face every single run" node.
It belongs to the same theSharque/ComfyUI-NSFW-Prompt pack, so the install, the seed philosophy, and the plain-JSON dictionaries all carry over. The README is explicit about the division of labor: this node handles appearance (face, hair, skin - not body parts; that's the sibling NSFW body builder node's job). Run them back to back and you get a person and then a body in two appended lines.
How it works
It reads the incoming prompt text, not a widget, to figure out the grammar. Scan the detect_voice logic in the source: if the prompt mentions "woman", "girl", or "female" it picks She; "man" / "boy" / "male" picks He; a multi-person marker like "two women" or "woman and a man" flips it to They - and then the line is split into "They look different from each other, one with …, another with …". If the prompt doesn't mention a person at all, it silently defaults to She.
Each trait is disabled, a fixed dictionary value, or random N% (default random 50%). The one oddball is skin_details, which has no fixed values at all - it's a chance gate, and when it passes, each skin detail gets its own independent coin flip. That's why you can get "freckled, with a beauty mark" one run and nothing the next. Hair is the other special case: the length, type, and color traits are recombined into a single phrase ("long wavy blonde hair") before being added to the line.
Inputs and outputs
- prompt (required, multiline) - the text it appends to.
- seed (optional, default -1) - the tooltip says it plainly: connect a seed, or leave -1 / unconnected to generate.
- 20 trait widgets - hair_color, hair_length, skin_color, height, eyes, nose, makeup and the rest.
Outputs are prompt (the original text plus the new line) and seed. The seed echo is the important bit: when you leave it unconnected it rolls a fresh seed internally but still returns it - so you can capture the returned seed to lock in an appearance you liked.
Install
Same pack, same two steps:
cd ComfyUI/custom_nodes
git clone https://github.com/theSharque/ComfyUI-NSFW-Prompt
Restart ComfyUI. No extra Python dependencies - it imports the seed machinery straight out of the pack's own nsfw_prompt_node.py.
Gotchas
- Wire it in a chain: NSFW Prompt → randomize person → CLIP Text Encode. The node needs upstream text to work with; it won't conjure a scene from nothing.
- The she/he/they default means a prompt that names nobody gets a female subject. If that's not what you want, name a person in the prompt text.
- Reproducibility works like the rest of the pack: feed the prompt node's seed output into this node's seed input, and both the scene and the person stay fixed. Forget it and the face changes every run while the scene holds - which, to be fair, is sometimes exactly the point.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| prompt | STRING | — | |
| seedopt | INT | -1-1–18446744073709550000 | Connect a seed, or leave -1 / unconnected to generate |
| heightopt | COMBO | random 50% | 10 options: disabled, random 100%, random 80%, random 50%, random 20%, short, +4 |
| hair_coloropt | COMBO | random 50% | 28 options: disabled, random 100%, random 80%, random 50%, random 20%, black, +22 |
| hair_lengthopt | COMBO | random 50% | 13 options: disabled, random 100%, random 80%, random 50%, random 20%, buzz cut, +7 |
| hair_typeopt | COMBO | random 50% | 11 options: disabled, random 100%, random 80%, random 50%, random 20%, straight, +5 |
| skin_coloropt | COMBO | random 50% | 12 options: disabled, random 100%, random 80%, random 50%, random 20%, fair, +6 |
| skin_detailsopt | COMBO | random 50% | 5 options: disabled, random 100%, random 80%, random 50%, random 20% |
| face_shapeopt | COMBO | random 50% | 11 options: disabled, random 100%, random 80%, random 50%, random 20%, an oval face, +5 |
| shouldersopt | COMBO | random 50% | 9 options: disabled, random 100%, random 80%, random 50%, random 20%, narrow shoulders, +3 |
| neckopt | COMBO | random 50% | 9 options: disabled, random 100%, random 80%, random 50%, random 20%, a long neck, +3 |
| collarbonesopt | COMBO | random 50% | 8 options: disabled, random 100%, random 80%, random 50%, random 20%, subtle collarbones, +2 |
| earsopt | COMBO | random 50% | 9 options: disabled, random 100%, random 80%, random 50%, random 20%, small ears, +3 |
| noseopt | COMBO | random 50% | 11 options: disabled, random 100%, random 80%, random 50%, random 20%, a small nose, +5 |
| eyesopt | COMBO | random 50% | 11 options: disabled, random 100%, random 80%, random 50%, random 20%, large eyes, +5 |
| lipsopt | COMBO | random 50% | 10 options: disabled, random 100%, random 80%, random 50%, random 20%, full lips, +4 |
| teethopt | COMBO | random 50% | 9 options: disabled, random 100%, random 80%, random 50%, random 20%, even teeth, +3 |
| eyebrowsopt | COMBO | random 50% | 10 options: disabled, random 100%, random 80%, random 50%, random 20%, thin eyebrows, +4 |
| cheekbonesopt | COMBO | random 50% | 9 options: disabled, random 100%, random 80%, random 50%, random 20%, high cheekbones, +3 |
| handsopt | COMBO | random 50% | 10 options: disabled, random 100%, random 80%, random 50%, random 20%, slender fingers, +4 |
| makeupopt | COMBO | random 50% | 15 options: disabled, random 100%, random 80%, random 50%, random 20%, natural makeup, +9 |
| manicureopt | COMBO | random 50% | 13 options: disabled, random 100%, random 80%, random 50%, random 20%, short natural nails, +7 |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| prompt | STRING | — |
| seed | INT | — |