Nodes/ComfyUI_RandomPerson/Random Person: Face
ComfyUI Node

Random Person: Face

Give your crowd actual faces, not the default one.

By bradsec·Created 2 months ago·Updated 2 months ago· 5
Random Person: Face
    • full_face_description
    • sex
    • face
    • expression
    • seed
    seed0
    randomizetrue
    sexrandom
    eyes_moderandom
    eyes_allow_list
    eyes_fixed(none)
    eye_shape_moderandom
    eye_shape_allow_list
    eye_shape_fixed(none)
    eyebrows_modeoff
    eyebrows_allow_list
    eyebrows_fixed(none)
    face_shape_moderandom
    face_shape_allow_list
    face_shape_fixed(none)
    nose_shape_moderandom
    nose_shape_allow_list
    nose_shape_fixed(none)
    mouth_shape_moderandom
    mouth_shape_allow_list
    mouth_shape_fixed(none)
    face_feature_modeoff
    face_feature_allow_list
    face_feature_fixed(none)
    expression_modeoff
    expression_allow_list
    expression_fixed(none)
    extra_attributes

    The face is where "everyone looks the same" actually shows up. Prompt "a crowd of people" and the model renders the same few default faces over and over - the strongest human-identity signal in the image is the one you left vague. Random Person: Face is the segment node from the ComfyUI_RandomPerson pack that solves just this slice: face shape, eyes, eye shape, eyebrows, nose, mouth, distinctive features, and expression, all drawn per-seed into one clean comma-separated fragment.

    It's one of five segment nodes sharing the same engine as the big AIO node. Use Face on its own when all you need is variety in the face, or wire it alongside Identity, Hair, Body, and Style and concatenate their fragments for a full person - set the same sex on each and the pieces compose cleanly.

    What it generates

    On each run it resolves sex (or rolls it) and picks from the sex-appropriate JSON lists for:

    • face shape - angular, heart, oval, square… 10 options
    • eyes - a colour list written as grounded phrases, "muted natural green eyes" rather than a bare tag
    • eye shape - almond, monolid, hooded, upturned, and friends
    • eyebrows - defaults off; opt in
    • nose shape - button, aquiline, roman, broad…
    • mouth shape - full lips, thin lips, bow-shaped…
    • distinctive features - freckles, dimples, high cheekbones, cleft chin, the details that make a face memorable (defaults off)
    • expression - neutral, soft smile, serious, pensive… (defaults off)

    The defaults are worth understanding: the structural categories (shape, eyes, nose, mouth) roll random by default, while the "flair" ones (eyebrows, distinctive features, expression) start off so the face stays clean until you switch them on. A fragment can look like angular face, natural grey eyes, button nose, wide-set lips, a faint scar through one eyebrow or just heart face, hazel eyes, soft smile depending on what you've opted in.

    The inputs that matter

    Same three-widget pattern as the rest of the pack: _mode (random/allow_list/fixed/off), _allow_list (comma-separated subset - unknown values are kept as literal descriptors), and _fixed (a dropdown value for fixed mode). So eyes_allow_list: hazel, blue biases eye colour while everything else rolls, or expression_fixed: warm smile locks the mood. extra_attributes appends free text verbatim, which is handy for a scar or a dimple the data files don't cover.

    seed plus randomize is the pack standard: randomize on (default) means a fresh face every run and the seed is ignored; flip it off and the same seed reproduces the same face.

    Outputs and wiring

    • full_face_description - the assembled face fragment, ready for a CLIP Text Encode or a string concat node
    • sex - so you can keep the resolved sex in sync across segment nodes
    • face - the combined face fragment on its own pin, if you want to reuse just that string
    • expression - the expression alone, useful for routing
    • seed - INT

    If you're building a background crowd, the play is randomize: on, batch a bunch of runs, and let every person get a different face. The face pin makes it easy to feed the same generated face into a character-consistency workflow later.

    Install and gotchas

    ComfyUI Manager: search ComfyUI_RandomPerson, install, restart. Or:

    cd ComfyUI/custom_nodes
    git clone https://github.com/bradsec/ComfyUI_RandomPerson
    

    Find it under Add Node → Random Person. No pip dependencies, Python 3.10+, works on old and new ComfyUI (it registers both V1 and V3 APIs).

    One trap: expression and the distinctive features default to off, so if your faces come out oddly blank, that's the first place to look. Another: sex: random on a Face node doesn't communicate with the other segment nodes - if you're composing a full person from several nodes, set the same sex on each or you'll get a male face on a female body more often than you'd like.

    CategoryRandom Person

    Inputs (28)

    NameTypeDefaultDescription
    seedINT00–18446744073709550000Seed for reproducibility. With randomize off, the same seed reproduces the same person.
    randomizeBOOLEANtrueOn: pick a new random person every run, ignoring the seed widget. Off: use the seed.
    sexCOMBOrandomrandom, male, or female. male/female filter the sex-specific dropdowns in the UI.
    eyes_modeCOMBOrandomHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    eyes_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    eyes_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    eye_shape_modeCOMBOrandomHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    eye_shape_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    eye_shape_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    eyebrows_modeCOMBOoffHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    eyebrows_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    eyebrows_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    face_shape_modeCOMBOrandomHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    face_shape_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    face_shape_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    nose_shape_modeCOMBOrandomHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    nose_shape_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    nose_shape_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    mouth_shape_modeCOMBOrandomHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    mouth_shape_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    mouth_shape_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    face_feature_modeCOMBOoffHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    face_feature_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    face_feature_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    expression_modeCOMBOoffHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    expression_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    expression_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    extra_attributesSTRINGFree text appended to the description as-is, comma-separated. Pose, setting, props, extra detail, etc.

    Outputs (5)

    NameTypeDescription
    full_face_descriptionSTRING
    sexSTRING
    faceSTRING
    expressionSTRING
    seedINT