Random Person: Body
Body variety, from 'lanky' to 'dad bod', without the guesswork.
- full_body_description
- sex
- body_type
- shoulders
- chest
- bust
- seed
Every diffusion model has a default body, and it's the same one for everyone: lean, generic, forgettable. Random Person: Body is the segment node from ComfyUI_RandomPerson that breaks that habit - body type, shoulders, chest, and bust, rolled per-seed into a clean comma-separated fragment you can drop straight into a prompt. It's the part of the pack that makes a crowd read as people rather than mannequins.
It shares its engine with the other segment nodes (Identity, Face, Hair, Style) and the all-in-one node. Use it alone for body variety, or concatenate it with the sibling nodes for a full person - same sex on each, and the fragments compose without conflict.
What it generates
- body type - the headliner, 24 options: athletic, average, barrel chested, compact, curvy, dad bod, full figured, heavyset, hourglass, lanky, pear, petite, stocky, slim, and more. The description builder appends "build" to the body type, so you get "muscular build" or "hourglass build" in the final text.
- shoulders - broad, narrow, sloping, square, soft… (defaults
off) - chest - broad, barrel, muscular, flat, none (defaults
off) - bust size - petite through extra large (defaults
off) - bust shape - round, teardrop, natural, wide-set (defaults
off)
Note what's defaulted off here: only body_type rolls on random out of the box. Shoulders, chest, and the bust controls start at off, so a base description is just "muscular build" until you switch the rest on. The bust controls are also effectively female-only - the male bust list is a single none entry with an empty description, so males never get a bust phrase. The node combines size and shape into one natural descriptor ("a full, round bust") using the right a/an article, which is a small touch that keeps the output prompt-ready.
The inputs that matter
Standard pack pattern: _mode (random/allow_list/fixed/off), _allow_list (comma-separated subset, unknown values kept literally), and _fixed (a dropdown value for fixed mode). So body_type_allow_list: athletic, slim, average biases the pool, or body_type_fixed: hourglass locks the frame while shoulders and chest still roll. extra_attributes appends free text verbatim.
seed plus randomize is the pack norm: randomize on (default) gives a fresh body every run and ignores the seed; off reproduces the same body from the same seed.
Outputs and wiring
full_body_description- the assembled fragment, e.g.muscular build, broad shoulders, barrel chestor justhourglass buildsex- resolved sex, for keeping sibling nodes in syncbody_type,shoulders,chest,bust- each trait on its own pin for routingseed- INT
Wire full_body_description into a CLIP Text Encode's text input, or a string concat node next to the other segments. For a full cast, leave randomize on and batch - you'll get a genuinely varied lineup instead of five variations of one physique.
Install and gotchas
ComfyUI Manager: search ComfyUI_RandomPerson, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/bradsec/ComfyUI_RandomPerson
Under Add Node → Random Person. No pip dependencies, Python 3.10+, works on old and new ComfyUI (V1 and V3 API both registered).
The recurring gotcha: a bare body_type only gives "X build" - if you expected shoulders and chest to appear, check their modes, because they default to off. And remember the segment nodes each roll their own sex when it's set to random; composing a full person from several segments means setting the same concrete sex on each, or you'll occasionally get a male build under a female face.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| seed | INT | 00–18446744073709550000 | Seed for reproducibility. With randomize off, the same seed reproduces the same person. |
| randomize | BOOLEAN | true | On: pick a new random person every run, ignoring the seed widget. Off: use the seed. |
| sex | COMBO | random | random, male, or female. male/female filter the sex-specific dropdowns in the UI. |
| body_type_mode | COMBO | random | How this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it). |
| body_type_allow_list | STRING | Comma-separated values used when mode=allow_list. Unknown values are added as literal descriptors. | |
| body_type_fixed | COMBO | (none) | Exact value used when mode=fixed. (none) falls back to random. |
| shoulders_mode | COMBO | off | How this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it). |
| shoulders_allow_list | STRING | Comma-separated values used when mode=allow_list. Unknown values are added as literal descriptors. | |
| shoulders_fixed | COMBO | (none) | Exact value used when mode=fixed. (none) falls back to random. |
| chest_mode | COMBO | off | How this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it). |
| chest_allow_list | STRING | Comma-separated values used when mode=allow_list. Unknown values are added as literal descriptors. | |
| chest_fixed | COMBO | (none) | Exact value used when mode=fixed. (none) falls back to random. |
| bust_size_mode | COMBO | off | How this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it). |
| bust_size_allow_list | STRING | Comma-separated values used when mode=allow_list. Unknown values are added as literal descriptors. | |
| bust_size_fixed | COMBO | (none) | Exact value used when mode=fixed. (none) falls back to random. |
| bust_shape_mode | COMBO | off | How this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it). |
| bust_shape_allow_list | STRING | Comma-separated values used when mode=allow_list. Unknown values are added as literal descriptors. | |
| bust_shape_fixed | COMBO | (none) | Exact value used when mode=fixed. (none) falls back to random. |
| extra_attributes | STRING | Free text appended to the description as-is, comma-separated. Pose, setting, props, extra detail, etc. |
Outputs (7)
| Name | Type | Description |
|---|---|---|
| full_body_description | STRING | — |
| sex | STRING | — |
| body_type | STRING | — |
| shoulders | STRING | — |
| chest | STRING | — |
| bust | STRING | — |
| seed | INT | — |