Nodes/character-studio-prompt/Character Studio — Portret-prompt
ComfyUI Node

Character Studio — Portret-prompt

The prompt builder that never forgets to describe your character

By Perry76·Created 2 months ago·Updated 2 months ago· 7
Character Studio — Portret-prompt
    • prompt
    originDutch
    genderwoman
    androgynyneutral gender expression
    age25 years old
    build_typeathletic-slim
    height~172cm
    skin_tonefair Northern-European
    skin_detailswith a light natural tan and faint freckles across the nose
    skin_realismnatural skin texture with visible pores
    skin_poresnatural visible pores
    frecklesno freckles
    molesno moles
    dimplesno dimples
    skin_imperfectionssubtle natural imperfections
    face_shapeoval
    facial_asymmetryslight natural asymmetry
    lip_colornatural
    lip_shapefull
    expressionneutral
    makeupnatural everyday makeup
    beardclean-shaven
    eye_colorlight-grey blue
    eye_shapealmond-shaped
    eye_detailsrealistic detailed irises
    hair_colordirty-blonde
    hair_stylebeach waves
    hair_lengthpast the shoulders
    dishevelmentsubtly disheveled
    wardrobecasual everyday clothing
    shot_typeReference sheet 3 Panels: left panel - front full-body photo on a grey backdrop, center panel - back full-body photo on a grey backdrop, right panel - tight front portrait photo on a grey backdrop
    poseStanding straight with hands at sides
    camera_typefull-frame digital
    focal_length85mm, flattering portrait compression
    aperturef/2.8, shallow depth of field, softly blurred background
    camera_angleeye level
    lightingsoft even key light
    backdropneutral pale grey seamless studio backdrop
    extra

    Every portrait you generate starts with you re-typing the same wall of text: age, build, skin, hair, eyes, wardrobe, "shot on 85mm at f/2.8". Character Studio - Portret-prompt is a single node that turns that wall into ~38 dropdowns and text fields, then assembles a complete natural-language prompt for you. Same fields in, same structured prompt out - which is the whole point. It's not a LoRA, not a control net, not an IP-adapter. It's just very disciplined prompt-writing, and it doesn't call any API, needs no key, and ships zero model files.

    What it actually is

    The author (Perry76 on GitHub, PerryD1976 on Reddit) built a local "character studio" webapp - FastAPI orchestrator, React UI, ComfyUI as the render engine - and pulled the prompt-composition piece out of it into this standalone node. It's MIT-licensed and genuinely dependency-free: Python standard library only, nothing to pip install, nothing to download.

    Under the hood it's manifest-driven. The node reads a bundled cast_character.manifest.json, which holds a fixed template plus every field's options. Each dropdown is literally a list from that manifest - 192 nationalities in origin, 19 ages, 140+ hair styles, 80+ poses, 60+ lighting options. You pick values, the node fills the template via a small compose_form function, cleans up double commas and stray spaces, and hands you one STRING.

    The template ends with a block that shows exactly whose prior this node is fighting: "Photoreal, natural unretouched skin texture, subtle facial asymmetry, lifelike detailed eyes, natural color, authentic, unfiltered." That's the "skincare-ad default" complaint from r/StableDiffusion's photorealism canon - glossy skin and a symmetric face are the number-one AI tell, and this template pushes back on both before you even touch a slider.

    The inputs that matter

    You don't need to touch all 38. Every field has a sensible default, so an untouched node still emits a coherent, fully-clothed portrait prompt - which is the other deliberate choice: leave wardrobe empty and it substitutes "casual everyday clothing" rather than render a nude subject.

    The few you'll actually set:

    • origin, gender, age, build_type, height - the identity block. Dropdowns, all with defaults.
    • shot_type - defaults to a three-panel reference sheet (front full-body, back full-body, tight portrait). That's the "character bible" workflow this node was built around: one generation that captures the whole character.
    • camera_type, focal_length, aperture, camera_angle - "Shot on full-frame digital at 85mm, f/2.8, eye level." Naming a physical camera is the highest-leverage phrase for LLM-encoded models (Flux, Qwen, Z-Image), per the KB; on SDXL-lineage checkpoints it does less.
    • extra - the one free-text escape hatch. It's appended verbatim to the end of the prompt, so use it for scene or mood one-offs the dropdowns can't express.

    Output: a single STRING named prompt. That's it.

    Installing it

    Manager covers this pack - search "character-studio-prompt". Or the old-fashioned way:

    cd ComfyUI/custom_nodes
    git clone https://github.com/Perry76/character-studio-prompt.git
    

    Restart ComfyUI. No requirements.txt, no model downloads, no conflicts to babysit - refreshing after the ecosystem essay's horror stories about node dependency hell. It appears under Add Node → Character Studio → Portret-prompt.

    The trap that will eat 20 minutes

    The prompt output is a STRING, but a CLIP Text Encode's text field is a widget by default - you can't just drag one onto the other. Right-click CLIP Text Encode (Prompt)Convert Widget to Input → text, then drag prompt into that new input. Do this once and it's second nature, but it's the question on every beginner thread about this node.

    Two more notes. First: the camera wording only works if your model speaks optics - one user on the author's launch thread reported "camera angle has no effect" on Krea2. On booru-tag models, treat those fields as garnish. Second, the dropdowns are fixed lists; you can't type a custom nationality or hairstyle in. That's what extra is for, and a Show Text node is the way to capture the full prompt so you can reuse it across runs.

    It's a niche convenience node, not a hype train - zero impressions, one developer, actively iterating (the lighting and backdrop dropdowns were added after community request). If you batch-test character LoRAs or keep re-describing the same person, it earns its place fast. If you only generate one-off images, it's a fun way to stop forgetting the freckles.

    CategoryCharacter Studio

    Inputs (38)

    NameTypeDefaultDescription
    originCOMBODutch192 options: Afghan, Albanian, Algerian, Andorran, Angolan, Antiguans Barbudans, +186
    genderCOMBOwoman5 options: woman, man, non-binary person, androgynous person, person
    androgynyCOMBOneutral gender expression5 options: neutral gender expression, subtly androgynous, moderately androgynous, visibly androgynous, strongly androgynous
    ageCOMBO25 years old19 options: 2 years old, 4 years old, 6 years old, 8 years old, 10 years old, 12 years old, +13
    build_typeCOMBOathletic-slim11 options: slim, slender, athletic-slim, athletic, average, curvy, +5
    heightCOMBO~172cm7 options: petite ~160cm, ~165cm, ~168cm, ~172cm, ~178cm, tall ~185cm, +1
    skin_toneCOMBOfair Northern-European9 options: fair Northern-European, light, light olive, olive, tan, golden brown, +3
    skin_detailsSTRINGwith a light natural tan and faint freckles across the nose
    skin_realismCOMBOnatural skin texture with visible pores6 options: clean smooth skin, natural skin texture, natural skin texture with visible pores, realistic detailed skin with visible pores, realistic detailed skin with visible scars and wounds, weathered with fine lines and pores
    skin_poresCOMBOnatural visible pores4 options: no visible pores, subtle pores, natural visible pores, noticeable pores
    frecklesCOMBOno freckles5 options: no freckles, a few light freckles, scattered subtle freckles across the nose, light freckle coverage, heavy freckles
    molesCOMBOno moles4 options: no moles, a single subtle beauty mark, a few small moles, scattered moles
    dimplesCOMBOno dimples3 options: no dimples, subtle dimples, soft dimples when smiling
    skin_imperfectionsCOMBOsubtle natural imperfections4 options: perfectly clear skin, subtle natural imperfections, minor blemishes, realistic skin imperfections
    face_shapeCOMBOoval9 options: oval, round, square, heart, oblong, diamond, +3
    facial_asymmetryCOMBOslight natural asymmetry4 options: perfectly symmetrical, very subtle asymmetry, slight natural asymmetry, moderately asymmetrical
    lip_colorCOMBOnatural12 options: natural, soft pink, rosy, red, coral, berry, +6
    lip_shapeCOMBOfull7 options: full, thin, bow-shaped, heart-shaped, pouty, defined, +1
    expressionCOMBOneutral35 options: amused, angry, anxious, aroused, blissful, bored, +29
    makeupCOMBOnatural everyday makeup8 options: no makeup, bare face, natural everyday makeup, soft glam makeup, bold editorial makeup, dewy fresh makeup, matte makeup, +2
    beardCOMBOclean-shaven13 options: clean-shaven, light stubble, short beard, full beard, goatee, A La Souvarov, +7
    eye_colorCOMBOlight-grey blue10 options: light-grey blue, blue, deep blue, green, emerald green, hazel, +4
    eye_shapeCOMBOalmond-shaped9 options: almond-shaped, round, deep-set, upturned, downturned, hooded, +3
    eye_detailsCOMBOrealistic detailed irises3 options: natural eye details, realistic detailed irises, lifelike eyes with detailed iris patterns
    hair_colorCOMBOdirty-blonde14 options: dirty-blonde, blonde, platinum blonde, light brown, brown, chestnut, +8
    hair_styleCOMBObeach waves144 options: 1970s long cut, angled bob, balayage, bangs, bantu knots, beach waves, +138
    hair_lengthCOMBOpast the shoulders6 options: short, chin-length bob, shoulder-length, past the shoulders, long, very long
    dishevelmentCOMBOsubtly disheveled5 options: perfectly neat, subtly disheveled, slightly messy, artfully tousled, windswept
    wardrobeSTRINGcasual everyday clothing
    shot_typeCOMBOReference sheet 3 Panels: left panel - front full-body photo on a grey backdrop, center panel - back full-body photo on a grey backdrop, right panel - tight front portrait photo on a grey backdrop5 options: Reference sheet 3 Panels: left panel - front full-body photo on a grey backdrop, center panel - back full-body photo on a grey backdrop, right panel - tight front portrait photo on a grey backdrop, Full-body front photo, Tight front portrait photo, Half-body portrait photo, Editorial fashion full-body shot
    poseCOMBOStanding straight with hands at sides80 options: Sitting cross-legged, Standing with hands on hips, Leaning against a wall, Jumping with arms raised, Lying on the stomach, propped up on elbows, Sitting with one leg folded, +74
    camera_typeCOMBOfull-frame digital8 options: analog 35mm, medium format, large format, cropped-sensor digital, full-frame digital, iPhone, +2
    focal_lengthCOMBO85mm, flattering portrait compression6 options: 14mm, ultra-wide angle, strong perspective, 24mm, wide angle, expansive perspective, 35mm, natural wide perspective, 50mm, natural perspective, 85mm, flattering portrait compression, 135mm, strong telephoto compression
    apertureCOMBOf/2.8, shallow depth of field, softly blurred background8 options: f/1.4, very shallow depth of field, creamy bokeh, f/2, shallow depth of field, soft background blur, f/2.8, shallow depth of field, softly blurred background, f/4, moderate depth of field, f/5.6, moderate depth of field, f/8, deep depth of field, mostly sharp, +2
    camera_angleCOMBOeye level25 options: bird's eye view, boom shot, close-up, crane shot, dolly shot, dutch angle, +19
    lightingCOMBOsoft even key light61 options: soft even key light, key light from the left, soft fill, key light from the right, soft fill, key light from above, soft fill, 45-degree key light, rim light from top left, +55
    backdropCOMBOneutral pale grey seamless studio backdrop24 options: neutral pale grey seamless studio backdrop, white seamless studio backdrop, off-white seamless studio backdrop, light grey seamless studio backdrop, mid grey seamless studio backdrop, charcoal seamless studio backdrop, +18
    extraoptSTRING

    Outputs (1)

    NameTypeDescription
    promptSTRING