Identity Mixer (Parts)
A character generator that snaps together trait by trait
- identity_txt
- identity_signature
- identity_meta_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.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| preset | COMBO | 4 options: (none), Fallen_Helly, Kira_Goth, Neutral_Studio | |
| age | COMBO | 11 options: (random), (preset), (empty), late teens, early 20s, mid 20s, +5 | |
| face_type | COMBO | 16 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 | |
| eyes | COMBO | 18 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_color | COMBO | 22 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_makeup | COMBO | 49 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 | |
| nose | COMBO | 14 options: (random), (preset), (empty), straight delicate nose, small straight nose with a narrow bridge and softly rounded tip, small button nose, subtle upturn, +8 | |
| mouth | COMBO | 17 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_makeup | COMBO | 47 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 | |
| hair | COMBO | 35 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_color | COMBO | 30 options: (random), (preset), (empty), hair color platinum-white, hair color silver-white, hair color ash blonde, +24 | |
| skin | COMBO | 16 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_type | COMBO | 11 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_base | COMBO | 37 options: (random), (preset), (empty), detached melancholic calm, cold confident stare, soft neutral expression, +31 | |
| ethnicity | COMBO | 18 options: (random), (none), (preset), (empty), None, Thai, +12 | |
| nails | COMBO | 6 options: (random), (preset), (empty), long almond-shaped nails, short natural nails, long stiletto nails | |
| nail_color | COMBO | 8 options: (random), (preset), (empty), glossy black nails, deep crimson nails, natural nude nails, +2 | |
| random_seed | INT | 1234560–2147483647 | — |
| custom_intro_prefix | STRING | — | |
| identities_fileopt | STRING | /tmp/ComfyUI/custom_nodes/PromptCreatorNode/identity.json | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| identity_txt | STRING | — |
| identity_signature | STRING | — |
| identity_meta_json | STRING | — |