ComfyUI Node

Identity Mixer (Parts)

A character generator that snaps together trait by trait

By zeeoale·Created about a year ago·Updated 2 months ago· 9
Identity Mixer (Parts)
    • identity_txt
    • identity_signature
    • identity_meta_json
    preset
    age
    face_type
    eyes
    eyes_color
    eye_makeup
    nose
    mouth
    lip_makeup
    hair
    hair_color
    skin
    body_type
    expression_base
    ethnicity
    nails
    nail_color
    random_seed123456
    custom_intro_prefix
    identities_file/tmp/ComfyUI/custom_nodes/PromptCreatorNode/identity.json

    Identity Mixer (Parts) is the pack's character-factory: it builds a single reusable character description out of per-trait dropdowns - age, face type, eyes, eye color, makeup, nose, mouth, hair, skin, body type, expression, ethnicity, even nails. You assemble a person part by part, and it hands you the finished description plus a signature so you can prove two generations described the same person.

    Where does this fit? The pack's generator takes an identity_profile, but that only gives you a handful of hard-coded presets. This node is the open-ended version: it reads the same trait library (identity.json, with TRAITS and curated PRESETS like Kira_Goth, Fallen_Helly, Neutral_Studio) and lets you roll your own. It's aimed squarely at the character-consistency problem our KB keeps calling the community's #1 unsolved pain - same face, hair and vibe across a dataset. No adapter, no image reference; just text discipline.

    How it works

    Every trait dropdown offers (random), (preset), (empty), or a specific value. (random) samples from that trait's list in identity.json; (empty) drops the trait entirely; (preset) fills all traits from a named preset. Ethnicity has a dedicated (none) that excludes it cleanly rather than leaving it blank - handy if you want the description to stay culturally neutral. The chosen parts get joined into identity_txt in a fixed order, and a SHA-1 hash of the exact combination becomes the identity_signature (first 10 hex chars). Same parts in, same signature out - that's the consistency guarantee, and it's deterministic even though (random) isn't.

    The inputs that matter

    preset is the shortcut: pick one and all the trait dropdowns collapse into that curated identity. Everything else (age, eyes, hair, hair_color, skin, body_type, expression_base, …) is a per-part dropdown. random_seed lets you reproduce a specific random roll. custom_intro_prefix prepends your own text (e.g. a clothing note) to the output. And if you've customized your trait library, point identities_file at your identity.json - otherwise it uses the pack's built-in one.

    Outputs and wiring

    Three strings come out:

    • identity_txt - the comma-joined character description. This is the one you actually use.
    • identity_signature - the hash, for tracking/dedup across a dataset or caption set.
    • identity_meta_json - the full part-by-part breakdown as JSON.

    The natural loop is identity_txt → the generator's external_identity input (or custom_intro), with lock_identity set to yes, so the flagship bakes your mixed identity into every world. For LoRA training you'd paste the same text into every caption and keep the signature in a sidecar to prove which images match which identity.

    Install

    cd ComfyUI/custom_nodes
    git clone https://github.com/zeeoale/PromptCreatorNode
    

    restart, and "Identity Mixer (Parts)" appears with the rest of the pack. No model downloads and - notably for this node - no API keys at all; it's pure local text assembly.

    The honest take

    The trait writing is the product here, and it's good: the bundled trait lists are unusually specific ("asymmetrical side-shaved hairstyle with one side closely cropped…"), which dodges the semantic bleed you get from vague terms like "short hair". One honest caveat: text-level identity gets you consistent description, not consistent pixels - a model that can't hold a face across seeds will still drift, and for truly reliable character consistency the KB's current advice is instruction-editing (Qwen-Image-Edit) rather than prompting alone. Use this node where its text output shines: variation-with-a-locked-identity, and dataset captioning.

    CategoryPromptCreator

    Inputs (20)

    NameTypeDefaultDescription
    presetCOMBO4 options: (none), Fallen_Helly, Kira_Goth, Neutral_Studio
    ageCOMBO11 options: (random), (preset), (empty), late teens, early 20s, mid 20s, +5
    face_typeCOMBO16 options: (random), (preset), (empty), heart-shaped face, high cheekbones, narrow jaw, soft oval face with subtle heart-shaped proportions, delicate jawline and rounded chin, oval face, soft jawline, balanced proportions, +10
    eyesCOMBO18 options: (random), (preset), (empty), almond eyes, heavy lashes, demon eyes with black sclera, void-black sclera, iris and pupil swallowed by darkness, glossy corneal reflection, minimal catchlight, +12
    eyes_colorCOMBO22 options: (random), (preset), (empty), eyes color silver-white, eye color sclera fully black, iris and pupil swallowed by darkness, eye color void-black eyes with a glossy wet corneal reflection, +16
    eye_makeupCOMBO49 options: (random), (preset), (empty), sharp architectural winged eyeliner, precise elongated outer corner, defined inner flick, symmetrical upper line, minimal lower lashline, soft kohl lining, smudged outer corner, low-contrast, sharp winged eyeliner, clean upper line, minimal lower lashline, +43
    noseCOMBO14 options: (random), (preset), (empty), straight delicate nose, small straight nose with a narrow bridge and softly rounded tip, small button nose, subtle upturn, +8
    mouthCOMBO17 options: (random), (preset), (empty), soft full lips, slight cupid bow, soft full lips, slight cupid bow with dark/black lipstick, full lips, glossy finish, +11
    lip_makeupCOMBO47 options: (random), (preset), (empty), deep wine lipstick, satin finish, crisp outline, black lipstick, matte finish, sharp cupid bow, dark plum gradient tint, softened edges, +41
    hairCOMBO35 options: (random), (preset), (empty), asymmetrical side-shaved hairstyle with one side closely cropped, the opposite side featuring longer flowing hair that falls past the jawline, creating a soft yet edgy silhouette, urban asymmetrical haircut with one side shaved close and the remaining hair worn longer and loose, framing the face with a dark, modern edge, asymmetrical side-shaved hairstyle, one side closely cropped, the other side straight, smooth, and worn long past the jawline, +29
    hair_colorCOMBO30 options: (random), (preset), (empty), hair color platinum-white, hair color silver-white, hair color ash blonde, +24
    skinCOMBO16 options: (random), (preset), (empty), porcelain skin with soft diffused glow, subtle cool luminosity, refined satin finish, very fair skin with smooth porcelain-like texture and cool to neutral undertone, porcelain skin, faint under-eye shadows, +10
    body_typeCOMBO11 options: (random), (preset), (empty), slender delicate build, narrow shoulders, subtle curves, petite frame, soft curves, narrow waist, balanced natural proportions, gentle curves, relaxed posture, +5
    expression_baseCOMBO37 options: (random), (preset), (empty), detached melancholic calm, cold confident stare, soft neutral expression, +31
    ethnicityCOMBO18 options: (random), (none), (preset), (empty), None, Thai, +12
    nailsCOMBO6 options: (random), (preset), (empty), long almond-shaped nails, short natural nails, long stiletto nails
    nail_colorCOMBO8 options: (random), (preset), (empty), glossy black nails, deep crimson nails, natural nude nails, +2
    random_seedINT1234560–2147483647
    custom_intro_prefixSTRING
    identities_fileoptSTRING/tmp/ComfyUI/custom_nodes/PromptCreatorNode/identity.json

    Outputs (3)

    NameTypeDescription
    identity_txtSTRING
    identity_signatureSTRING
    identity_meta_jsonSTRING