easy portraitMaster
A guided prompt builder for portraits
- positive
- negative
Instead of remembering the magic words for pores and catchlights and skin imperfections, easy portraitMaster gives you a wall of dropdowns and sliders that assemble a portrait prompt for you. It's Easy-Use's port of florestefano1975's well-known Portrait Master node, and it's aimed squarely at people who want photoreal-ish faces without having learned the whole vocabulary of portrait prompting. Set the shot, gender, age, nationality, expression, hair; nudge a few realism sliders; out comes a positive and negative prompt.
It's a nice on-ramp, and it's honest about what it is: a very elaborate prompt template. Worth calibrating your expectations up front, though - the whole approach (weighted tokens like skin details:1.4) is native to the SD 1.5 and SDXL era it was built in. On modern language-model-encoder models (Flux, Z-Image, Qwen), that kind of quality-token weighting does a lot less, and sometimes nothing. If you're on SDXL or a 1.5 realism checkpoint, this node is right at home. On the newest bases, treat its output as a starting draft you then rewrite in plain photographic language.
How it works
Every widget maps to a chunk of prompt text with an associated weight. The dropdowns (shot, gender, nationality, hair style, light type…) drop in descriptive phrases; the 0–1.95 sliders (skin_details, skin_pores, freckles, eyes_details, iris_details, and so on) emit weighted tokens at the strength you dial. It stitches all of that together - with your prompt_start, prompt_additional, and prompt_end text wrapped around it - into a finished positive prompt, plus a matching negative. Nothing is generated here; you get two strings to encode.
The inputs and outputs that matter
There are dozens of controls; a beginner really only needs a handful:
shotandshot_weight- framing (headshot, close-up, etc.) and how hard to push it.gender,age,nationality_1(andnationality_2+nationality_mixto blend two) - the core identity of the subject.facial_expression,hair_style,hair_color,eyes_color- the obvious descriptors.- The realism sliders -
skin_details,skin_pores, and friends. This is where the "does it look like a photo or a plastic doll" lever lives. Per the photorealism playbook, too-smooth skin is the number-one tell that gives away an AI face, so a touch ofskin_details/skin_poresis what pushes it toward believable. Don't crank everything to max - that overcooks fast. prompt_start(defaults toraw photo, (realistic:1.5)),prompt_additional,prompt_end,negative_prompt- your own text woven around the generated parts.
Outputs: positive and negative, both STRING. Encode them like any other prompt.
How to install it
Ships in ComfyUI-Easy-Use. ComfyUI Manager: search ComfyUI-Easy-Use, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/yolain/ComfyUI-Easy-Use
then install.bat (Windows) or pip install -r ComfyUI-Easy-Use/requirements.txt, and restart. No model downloads - it's a text builder.
Common issues & troubleshooting
Everything looks over-baked. Leaving a pile of sliders at high values stacks a lot of weighted tokens, and the result fights itself - plastic skin, exaggerated features. Start with most sliders near zero and raise only the two or three you care about (usually the skin ones). A focused prompt beats a maximal one.
Weak or no effect on Flux / Z-Image / Qwen. As noted up top, this is SD-era prompt engineering. The newer language-model encoders largely ignore (token:1.4) weighting, and quality-booster spam is close to inert on them. On those models, use portraitMaster's phrasing as inspiration but write like a photographer - name a camera, a lens, a film stock - which is what actually moves those models.
Output isn't conditioning. Same caveat as the other prompt nodes: positive and negative are strings. Send them into an encode / loader prompt input, not straight into a sampler.
Nationality/ethnicity terms feel blunt. They're literal prompt phrases and behave like any other token. If a result skews wrong, adjust the nationality_mix blend or override the relevant part via prompt_additional rather than expecting the dropdown alone to nail it.
Inputs (40)
| Name | Type | Default | Description |
|---|---|---|---|
| shot | COMBO | 9 options: -, Head portrait, Head and shoulders portrait, Half-length portrait, Full-length portrait, Face, +3 | |
| shot_weight | FLOAT | 0.000–1.95 | — |
| gender | COMBO | Woman | 3 options: -, Man, Woman |
| age | INT | 3018–90 | — |
| nationality_1 | COMBO | Chinese | 194 options: -, Afghan, Albanian, Algerian, Andorran, Angolan, +188 |
| nationality_2 | COMBO | 194 options: -, Afghan, Albanian, Algerian, Andorran, Angolan, +188 | |
| nationality_mix | FLOAT | 0.000–1.95 | — |
| body_type | COMBO | 5 options: -, Underweight, Normal weight, Overweight, Obese | |
| body_type_weight | FLOAT | 0.000–1.95 | — |
| model_pose | COMBO | 19 options: -, Power Pose, Walking Pose, The Over-the-Shoulder Look, S-curve Pose, Sitting Pose, +13 | |
| eyes_color | COMBO | 9 options: -, Brown, Blue, Green, Hazel, Gray, +3 | |
| facial_expression | COMBO | 25 options: -, Happy, Sad, Angry, Surprised, Fearful, +19 | |
| facial_expression_weight | FLOAT | 0.000–1.95 | — |
| face_shape | COMBO | 13 options: -, Oval, Round, Square, Heart-shaped, Long, +7 | |
| face_shape_weight | FLOAT | 0.000–1.95 | — |
| facial_asymmetry | FLOAT | 0.000–1.95 | — |
| hair_style | COMBO | 40 options: -, Asymmetrical cut, Blunt cut, Bob cut, Braided bob, Buzz cut, +34 | |
| hair_color | COMBO | 10 options: -, Black, Brown, Blonde, Red, Auburn, +4 | |
| disheveled | FLOAT | 0.000–1.95 | — |
| beard | COMBO | 21 options: -, Stubble Beard, Goatee, Full Beard, Van Dyke Beard, Soul Patch, +15 | |
| skin_details | FLOAT | 0.000–1.95 | — |
| skin_pores | FLOAT | 0.000–1.95 | — |
| dimples | FLOAT | 0.000–1.95 | — |
| freckles | FLOAT | 0.000–1.95 | — |
| moles | FLOAT | 0.000–1.95 | — |
| skin_imperfections | FLOAT | 0.000–1.95 | — |
| skin_acne | FLOAT | 0.000–1.95 | — |
| tanned_skin | FLOAT | 0.000–1.95 | — |
| eyes_details | FLOAT | 0.000–1.95 | — |
| iris_details | FLOAT | 0.000–1.95 | — |
| circular_iris | FLOAT | 0.000–1.95 | — |
| circular_pupil | FLOAT | 0.000–1.95 | — |
| light_type | COMBO | 33 options: -, Natural sunlight, Soft ambient light, Harsh sunlight, Overcast sky, Sunset glow, +27 | |
| light_direction | COMBO | 11 options: -, top, bottom, right, left, front, +5 | |
| light_weight | FLOAT | 0.000–1.95 | — |
| photorealism_improvement | COMBO | 2 options: enable, disable | |
| prompt_start | STRING | raw photo, (realistic:1.5) | — |
| prompt_additional | STRING | — | |
| prompt_end | STRING | — | |
| negative_prompt | STRING | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | STRING | — |
| negative | STRING | — |