Nodes/ComfyUI-HumanComposer/Human Composer Prompt Builder
ComfyUI Node

Human Composer Prompt Builder

Writer's block for people? This node turns 'describe a person' into a 30-field checklist

By max-dingsda·Created 2 months ago·Updated 2 months ago· 12
Human Composer Prompt Builder
    • prompt
    output_formatSDXL – Structured
    gender— not set —
    gender_custom
    age— not set —
    age_custom
    ethnicity— not set —
    ethnicity_custom
    body_type— not set —
    body_type_custom
    skin_tone— not set —
    skin_tone_custom
    facial_expression— not set —
    facial_expression_custom
    eye_color— not set —
    eye_color_custom
    hair_length— not set —
    hair_length_custom
    hair_texture— not set —
    hair_texture_custom
    hair_style— not set —
    hair_style_custom
    hair_parting— not set —
    hair_parting_custom
    bangs— not set —
    bangs_custom
    hair_color— not set —
    hair_color_custom
    facial_hair— not set —
    facial_hair_custom
    clothing_category— not set —
    clothing_category_custom
    main_garment— not set —
    main_garment_custom
    clothing_material— not set —
    clothing_material_custom
    clothing_fit— not set —
    clothing_fit_custom
    clothing_color— not set —
    clothing_color_custom
    accessory_1— not set —
    accessory_1_custom
    accessory_2— not set —
    accessory_2_custom
    accessory_3— not set —
    accessory_3_custom
    pose— not set —
    pose_custom
    orientation— not set —
    orientation_custom
    framing— not set —
    framing_custom
    viewpoint— not set —
    viewpoint_custom
    environment— not set —
    environment_custom
    lighting— not set —
    lighting_custom
    art_style— not set —
    art_style_custom
    additional_details

    The hardest part of prompting a human character is rarely the model - it's remembering the details. You type "woman, ponytail, beach," get a generic render, and then spend five generations bolting on stray tags that never quite land. Human Composer Prompt Builder is the anti-blank-page tool: one node with roughly thirty dropdowns that hands you a finished prompt in the format your checkpoint actually wants.

    The name is a lie in the best way - it doesn't call any API, needs no LLM, no key, no model files. It's pure string assembly in Python.

    How it works

    You pick values from dropdowns grouped by subject, appearance, hair, clothing, accessories, scene, and camera. Every field ends with a Custom value… option that unlocks a plain text input right next to it, so you're never stuck with the author's vocabulary. Fields you leave at - not set - are simply skipped - no dangling Gender: not set garbage in your prompt.

    Under the hood there's exactly one renderer per model family, switched by output_format. That switch is the whole ballgame:

    • SDXL – Structured - labeled Label: value blocks separated by blank lines. Readable, and easy to hand-edit in a "Preview as Text" node before it hits the encoder.
    • SDXL – Comma Tags - Danbooru-style comma tags for tag-trained SDXL models.
    • FLUX – Natural Prompt - proper sentences with article handling ("An" vs "A"), "The person has…", "The person is wearing…".
    • Pony – Comma Tags - comma tags with score_9, score_8_up, score_7_up prepended.

    This is the bit people get wrong, and it's where the KB's advice matters: tags, prose, and Pony's score system are three different prompting paradigms, and the same words behave completely differently across them. Run a Pony checkpoint through the SDXL formats and you silently lose the quality tags the model was trained on; feed a FLUX checkpoint comma tags and it reads like a grocery list instead of an instruction.

    The fields that matter

    Honestly, output_format decides everything - set that first. After that, the subject block (gender, age, ethnicity) and hair are where this node earns its keep: nine independent hair dimensions (length, texture, style, parting, bangs, color) that you'd otherwise forget to describe at all. And when presets aren't enough, additional_details is a multiline free-text box for anything not covered. There's no node with more field groups; the value is the completeness, not any single dropdown.

    The output is a single prompt string - wire it straight into a CLIP Text Encode node's text input and queue.

    Install

    Clone into ComfyUI/custom_nodes/ and restart:

    cd ComfyUI/custom_nodes
    git clone https://github.com/max-dingsda/ComfyUI-HumanComposer
    

    No requirements to install - the pack's requirements.txt is empty and pyproject.toml lists zero dependencies. ComfyUI Manager can grab it too, since the repo publishes to the Comfy registry; search for the pack title there.

    Gotchas

    The format switch is a trap only if you pick it wrong, so don't. Switching formats later doesn't hurt - your field values are unchanged, it just re-renders.

    Two honest caveats. First, the Structured format with all thirty fields filled gets heavy - newline-separated labels are great for humans, but caption-trained models tolerate them less; Comma Tags is usually the safer default if you're not sure. Second, and worth stating plainly: this is a prompt-writing aid, not a consistency tool. It won't keep a character identical across generations - that's IPAdapter- and LoRA-shaped problems, not a text node's. What it does, reliably, is stop you from staring at a blank prompt box because you don't know the English word for "waist-length hair with side-swept bangs."

    CategoryHuman Composer

    Inputs (60)

    NameTypeDefaultDescription
    output_formatCOMBOSDXL – Structured4 options: SDXL – Structured, SDXL – Comma Tags, FLUX – Natural Prompt, Pony – Comma Tags
    genderCOMBO— not set —5 options: — not set —, Woman, Man, Non-binary person, Custom value…
    gender_customSTRING
    ageCOMBO— not set —8 options: — not set —, Child, Teenager, Young adult, Adult, Middle-aged adult, +2
    age_customSTRING
    ethnicityCOMBO— not set —11 options: — not set —, Caucasian / European, Black / African, East Asian, South Asian, Southeast Asian, +5
    ethnicity_customSTRING
    body_typeCOMBO— not set —10 options: — not set —, Slim, Athletic, Average, Curvy, Plus-size, +4
    body_type_customSTRING
    skin_toneCOMBO— not set —11 options: — not set —, Very pale, Fair, Light tan, Medium, Olive, +5
    skin_tone_customSTRING
    facial_expressionCOMBO— not set —12 options: — not set —, Smiling, Laughing, Neutral, Serious, Surprised, +6
    facial_expression_customSTRING
    eye_colorCOMBO— not set —8 options: — not set —, Blue, Green, Brown, Hazel, Gray, +2
    eye_color_customSTRING
    hair_lengthCOMBO— not set —8 options: — not set —, Buzzed / stubble, Very short, Chin-length, Shoulder-length, Mid-back length, +2
    hair_length_customSTRING
    hair_textureCOMBO— not set —7 options: — not set —, Straight, Slightly wavy, Wavy, Curly, Coily, +1
    hair_texture_customSTRING
    hair_styleCOMBO— not set —14 options: — not set —, Loose, Slicked-back, Bob, Pixie cut, Ponytail, +8
    hair_style_customSTRING
    hair_partingCOMBO— not set —6 options: — not set —, Center part, Side part, Deep side part, No visible part, Custom value…
    hair_parting_customSTRING
    bangsCOMBO— not set —7 options: — not set —, Blunt bangs, Curtain bangs, Side-swept bangs, Wispy bangs, No bangs, +1
    bangs_customSTRING
    hair_colorCOMBO— not set —11 options: — not set —, Black, Dark brown, Brown, Blonde, Red, +5
    hair_color_customSTRING
    facial_hairCOMBO— not set —7 options: — not set —, Clean-shaven, Stubble, Mustache, Goatee, Full beard, +1
    facial_hair_customSTRING
    clothing_categoryCOMBO— not set —12 options: — not set —, Casual wear, Business, Formal evening wear, Sportswear, Historical clothing, +6
    clothing_category_customSTRING
    main_garmentCOMBO— not set —18 options: — not set —, T-shirt, Blouse, Shirt, Sweater, Jacket, +12
    main_garment_customSTRING
    clothing_materialCOMBO— not set —13 options: — not set —, Cotton, Linen, Wool, Leather, Suede, +7
    clothing_material_customSTRING
    clothing_fitCOMBO— not set —7 options: — not set —, Figure-hugging, Tailored, Loose-fitting, Flowing, Oversized, +1
    clothing_fit_customSTRING
    clothing_colorCOMBO— not set —14 options: — not set —, Black, White, Red, Burgundy, Blue, +8
    clothing_color_customSTRING
    accessory_1COMBO— not set —13 options: — not set —, Glasses, Sunglasses, Earrings, Necklace, Hat, +7
    accessory_1_customSTRING
    accessory_2COMBO— not set —13 options: — not set —, Glasses, Sunglasses, Earrings, Necklace, Hat, +7
    accessory_2_customSTRING
    accessory_3COMBO— not set —13 options: — not set —, Glasses, Sunglasses, Earrings, Necklace, Hat, +7
    accessory_3_customSTRING
    poseCOMBO— not set —10 options: — not set —, Standing, Sitting, Walking, Running, Leaning, +4
    pose_customSTRING
    orientationCOMBO— not set —7 options: — not set —, Front view, Three-quarter view, Side view, Rear view, Looking over the shoulder, +1
    orientation_customSTRING
    framingCOMBO— not set —9 options: — not set —, Facial close-up, Head-and-shoulders portrait, Upper-body shot, Waist-up shot, Three-quarter body shot, +3
    framing_customSTRING
    viewpointCOMBO— not set —6 options: — not set —, Eye-level, Low-angle, High-angle, Overhead view, Custom value…
    viewpoint_customSTRING
    environmentCOMBO— not set —11 options: — not set —, Studio backdrop, Outdoor natural setting, Urban street, Home interior, Office interior, +5
    environment_customSTRING
    lightingCOMBO— not set —10 options: — not set —, Soft natural light, Golden hour, Studio lighting, Dramatic / high-contrast, Backlighting, +4
    lighting_customSTRING
    art_styleCOMBO— not set —11 options: — not set —, Photorealistic, Cinematic, Digital painting, Anime / manga, 3D render, +5
    art_style_customSTRING
    additional_detailsSTRING

    Outputs (1)

    NameTypeDescription
    promptSTRING