Nodes/ComfyUI_RandomPerson/Random Person: Identity
ComfyUI Node

Random Person: Identity

Who is this person? The Identity node builds the answer.

By bradsec·Created 2 months ago·Updated 2 months ago· 5
Random Person: Identity
    • full_identity_description
    • sex
    • age
    • nationality
    • complexion
    • seed
    seed0
    randomizetrue
    sexrandom
    nationality_moderandom
    nationality_allow_list
    nationality_fixed(none)
    complexion_moderandom
    complexion_allow_list
    complexion_fixed(none)
    skin_texture_modeoff
    skin_texture_allow_list
    skin_texture_fixed(none)
    age_moderandom
    age_min0
    age_max0
    age_fixed0
    extra_attributes

    If your prompt just says "a woman in a cafe", the model answers with its default woman - the same one it answers with for everyone else. Random Person: Identity is the part of ComfyUI_RandomPerson that pins down who the person is before anything else is decided: sex, age, nationality, complexion, and skin texture. It's the opening clause of the person description, the part that establishes that this is a specific 43-year-old Russian with light-medium skin and not generic-face-of-the-week.

    It's one of five segment nodes in the pack, all sharing the same engine. Where the AIO node shoves every attribute on one (very tall) node, Identity exposes only its slice - so if you just want a varied age/nationality/skin block and plan to hand-write the rest, this is the one you want.

    What it generates

    Every run it resolves sex (or picks one at random) and draws from the sex-appropriate JSON lists for:

    • nationality - 66 entries, from American to Nigerian to Swedish
    • complexion - fair, olive, golden brown, and everything between
    • skin texture - smooth, freckled, weathered, the lot (defaults to off; opt in)
    • age - the interesting control on this node

    Age deserves its own paragraph because it's the most "real" thing here. Instead of a dropdown, you get age_mode (random/fixed/off), age_min, age_max, and age_fixed. Leave both bounds at 0 and you get a random age in the default 21–90 range; set age_min: 30, age_max: 40 for a tighter window. Values below 21 are clamped to 21. The ages carry descriptive detail in the data files ("skin still unlined, features not yet fully set"), and the opener is assembled as "43 year old Russian female" - age, nationality, then sex.

    The inputs that matter

    Like every node in this pack, each attribute gets the same three widgets: _mode (random/allow_list/fixed/off), _allow_list (comma-separated subset, unknown values kept as literal text), and _fixed (a dropdown value for fixed mode). So you can force nationality_fixed: Swedish and let age and complexion roll, or allow-list nationalities with nationality_allow_list: Japanese, Korean, Chinese. extra_attributes appends free text verbatim.

    seed plus randomize works the standard way - randomize on means a new person every run and the seed is ignored; off means the same seed reproduces the same person.

    Outputs and wiring

    • full_identity_description - the assembled fragment, e.g. 43 year old Russian female, light medium complexion, smooth skin
    • sex, age, nationality, complexion - individual trait pins for routing elsewhere
    • seed - INT, the resolved seed

    Because the segment nodes are independent generators, you can run Identity alongside the Face, Hair, Body, and Style nodes and concatenate their full-description outputs with any string node to build a complete prompt - just set the same sex on each. Wire the fragment into a CLIP Text Encode's text input (or a string concat node first).

    Install and gotchas

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

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

    It shows up under Add Node → Random Person. No pip dependencies, Python 3.10+.

    Where people trip: the complexion output pin is actually complexion plus skin texture joined with a comma, so it can look like two values - that's normal. And if you set age_mode: off, the opener loses its age, so you get "Russian female" instead of "43 year old Russian female" - and if you also turn nationality off, sex drops out too, since sex only appears alongside an age or nationality. Keep age_mode on random for the full effect.

    CategoryRandom Person

    Inputs (17)

    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.
    nationality_modeCOMBOrandomHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    nationality_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    nationality_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    complexion_modeCOMBOrandomHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    complexion_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    complexion_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    skin_texture_modeCOMBOoffHow this attribute is chosen: random (any), allow_list (subset you list), fixed (the dropdown value), off (omit it).
    skin_texture_allow_listSTRINGComma-separated values used when mode=allow_list. Unknown values are added as literal descriptors.
    skin_texture_fixedCOMBO(none)Exact value used when mode=fixed. (none) falls back to random.
    age_modeCOMBOrandomHow to pick the age: random within range, fixed value, or off (no age in the description).
    age_minINT00–90Minimum age. 0 = no lower bound (defaults to 21). Cannot go below 21.
    age_maxINT00–90Maximum age. 0 = no upper bound (defaults to 90). Minimum is always 21.
    age_fixedINT00–90Exact age when mode=fixed. 0 = ignored. Values below 21 are clamped to 21.
    extra_attributesSTRINGFree text appended to the description as-is, comma-separated. Pose, setting, props, extra detail, etc.

    Outputs (6)

    NameTypeDescription
    full_identity_descriptionSTRING
    sexSTRING
    ageSTRING
    nationalitySTRING
    complexionSTRING
    seedINT