Portrait Master 2.9.2 (Legacy)
The original all-in-one node that started it all
- positive
- negative
This is the one that started it. Before the pack split into five modular nodes, there was one giant PortraitMaster node with roughly seventy inputs, and it was everywhere in 2023 and 2024 - the reddit launch threads for it hit +90 upvotes and people were building entire SDXL portrait workflows around it. In 3.x the author split it into Base Character, Skin Details, Style & Pose, Make-up, and Face Generator, but kept this monolith around under the "Old versions" category so every workflow and PNG that references it keeps working.
So when is it the right tool? When you already have an old workflow that uses it, or when you genuinely want everything in one panel. Otherwise reach for the split nodes - a single node with fifty inputs and fifty random_* toggles is a lot to look at, and the modular versions are easier to reason about. The one thing the legacy node has that the others don't: it outputs two strings, a ready positive prompt and a ready negative prompt, so it's closer to a drop-in prompt generator than the modular chain.
How it works
Same mechanism as the rest of the pack - dropdowns and sliders become weighted tag text, lowercased, joined with commas. What's different:
RETURN_NAMESarepositiveandnegative. The positive is the full assembled portrait prompt. The negative starts from yournegative_promptfield and, whenphotorealism_improvementis set toenable, automatically appends(shinny skin, shiny skin, reflections on the skin, skin reflections:1.35)- the classic SDXL "don't give me wax" guard.prompt_start/prompt_additional/prompt_endlet you wrap your own text around the generated core.prompt_startdefaults toraw photo, (realistic:1.5), which is a solid baseline for SDXL photorealism.- Per-field
random_*booleans replace therandom 🎲dropdown entries of the new nodes - fliprandom_hair_colorand it rerolls each run. - It prints the assembled prompt to the ComfyUI console on every run. Annoying if you run long batches, useful the first few times to see exactly what it's building.
One legacy-specific gotcha: the photorealism_improvement input here is an enum (enable/disable), not the boolean toggle the new nodes use.
The inputs that matter
The defaults are already set to something sensible (Close-up, Man, 30, Afghan, Beefy, Amused, Agfa Vista…) - you can queue it the second it loads and get a usable portrait prompt. From there, the high-leverage edits are shot, gender, age, hair_style, facial_expression, and negative_prompt. Everything else is refinement. Set a random_* boolean to true and it'll surprise you; the pack's randomization is genuinely good for exploring.
Installing it
It's the same pack - install comfyui-portrait-master once and every node including this legacy one shows up:
cd ComfyUI/custom_nodes
git clone https://github.com/florestefano1975/comfyui-portrait-master
Then restart ComfyUI. Or search "Portrait Master" (florestefano1975) in ComfyUI Manager. No dependencies, no model downloads.
Common issues
- Loading an old workflow scrambles the values. This is the defining legacy-node problem - the community has reported dropdowns holding values that don't exist in the current lists (a "Red" face shape, a weight sitting in a hair-style field) after loading PNGs saved against older versions. "Creating monsters," as one user put it. Re-set the fields manually.
- Full body still isn't full body. The long-running complaint. The author's own advice: reduce the face/skin detail weights, describe the clothing explicitly, and put
(close up:1.5)in the negative prompt. - The prompt is enormous. Stacking every category at high weights produces a monster string that dilutes attention on SDXL-lineage CLIP encoders. Set the fields you don't care about to
-. - The console spam. It prints both prompts every run. That's by design, not a leak.
Inputs (82)
| Name | Type | Default | Description |
|---|---|---|---|
| shot | COMBO | Close-up | 9 options: -, Close-up, Face, Full body, Full-length portrait, Half-length portrait, +3 |
| shot_weight | FLOAT | 0.000–1.95 | — |
| gender | COMBO | Man | 3 options: -, Man, Woman |
| androgynous | FLOAT | 0.000–1.95 | — |
| age | COMBO | 30 | 37 options: 18, 20, 22, 24, 26, 28, +31 |
| nationality_1 | COMBO | Afghan | 193 options: -, Afghan, Albanian, Algerian, Andorran, Angolan, +187 |
| nationality_2 | COMBO | Afghan | 193 options: -, Afghan, Albanian, Algerian, Andorran, Angolan, +187 |
| nationality_mix | FLOAT | 0.500–1 | — |
| body_type | COMBO | Beefy | 35 options: -, Beefy, Buff, Buxom, Chubby, Curvy, +29 |
| body_type_weight | FLOAT | 0.000–1.95 | — |
| model_pose | COMBO | Adjusting Clothing Pose | 87 options: -, Adjusting Clothing Pose, Against a Wall Pose, Ajusting Hair Pose, Arms Up Pose, Artistic Dance Pose, +81 |
| clothes | COMBO | Bohemian Dress | 21 options: -, Bohemian Dress, Business Casual Dress, Business Formal Dress, Business Professional Dress, Casual Chic Dress, +15 |
| eyes_color | COMBO | Albino | 11 options: -, Albino, Amber, Blue, Brown, Gray, +5 |
| eyes_shape | COMBO | Almond Eyes Shape | 13 options: -, Almond Eyes Shape, Asian Eyes Shape, Close-Set Eyes Shape, Deep Set Eyes Shape, Double Eyelid Eyes Shape, +7 |
| lips_color | COMBO | Berry Lips | 16 options: -, Berry Lips, Black Lips, Blue Lips, Brown Lips, Burgundy Lips, +10 |
| lips_shape | COMBO | Biting Lips | 22 options: -, Biting Lips, Bow-shaped Lips, Closed Lips, Cupid's Bow Lips, Defined Cupid's Bow Lips, +16 |
| facial_expression | COMBO | Amused | 33 options: -, Amused, Angry, Anxious, Bored, Calm, +27 |
| facial_expression_weight | FLOAT | 0.000–1.95 | — |
| face_shape | COMBO | Circle | 24 options: -, Circle, Diamond, Heart, Heart with Pointed Chin, Heart with Rounded Chin, +18 |
| face_shape_weight | FLOAT | 0.000–1.95 | — |
| facial_asymmetry | FLOAT | 0.000–1.95 | — |
| hair_style | COMBO | A-line bob | 118 options: -, A-line bob, Afro, Asymmetrical, Balayage, Bald, +112 |
| hair_color | COMBO | Auburn | 22 options: -, Auburn, Black, Blonde, Burgundy, Caramel, +16 |
| hair_length | COMBO | Long | 4 options: -, Long, Medium, Short |
| disheveled | FLOAT | 0.000–1.95 | — |
| makeup | COMBO | Anime Makeup | 21 options: -, Anime Makeup, Artistic Makeup, Avant-garde Makeup, Bohemian Makeup, Boho Makeup, +15 |
| beard | COMBO | Anchor Beard | 21 options: -, Anchor Beard, Balbo Beard, Chevron Mustache, Chinstrap Beard, Circle Beard, +15 |
| natural_skin | FLOAT | 0.000–1.95 | — |
| bare_face | FLOAT | 0.000–1.95 | — |
| washed_face | FLOAT | 0.000–1.95 | — |
| dried_face | FLOAT | 0.000–1.95 | — |
| skin_details | FLOAT | 0.000–1.95 | — |
| skin_pores | FLOAT | 0.000–1.95 | — |
| dimples | FLOAT | 0.000–1.95 | — |
| wrinkles | 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 | Abstract Light Patterns | 71 options: -, Abstract Light Patterns, Ambient Light, Backlight Light, Backlit Silhouette Light, Bloom Light, +65 |
| light_direction | COMBO | Light from bottom | 11 options: -, Light from bottom, Light from bottom-left, Light from bottom-right, Light from front, Light from left, +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 | — | |
| style_1 | COMBO | Agfa Vista | 66 options: -, Agfa Vista, Astia, Aurora Borealis, Black and White Photography, Bleach Bypass, +60 |
| style_1_weight | FLOAT | 1.501–1.95 | — |
| style_2 | COMBO | Agfa Vista | 66 options: -, Agfa Vista, Astia, Aurora Borealis, Black and White Photography, Bleach Bypass, +60 |
| style_2_weight | FLOAT | 1.501–1.95 | — |
| random_shot | BOOLEAN | false | — |
| random_gender | BOOLEAN | false | — |
| random_age | BOOLEAN | false | — |
| random_androgynous | BOOLEAN | false | — |
| random_nationality | BOOLEAN | false | — |
| random_body_type | BOOLEAN | false | — |
| random_model_pose | BOOLEAN | false | — |
| random_clothes | BOOLEAN | false | — |
| random_eyes_color | BOOLEAN | false | — |
| random_eyes_shape | BOOLEAN | false | — |
| random_lips_color | BOOLEAN | false | — |
| random_lips_shape | BOOLEAN | false | — |
| random_facial_expression | BOOLEAN | false | — |
| random_face_shape | BOOLEAN | false | — |
| random_hairstyle | BOOLEAN | false | — |
| random_hair_color | BOOLEAN | false | — |
| random_hair_length | BOOLEAN | false | — |
| random_disheveled | BOOLEAN | false | — |
| random_makeup | BOOLEAN | false | — |
| random_freckles | BOOLEAN | false | — |
| random_moles | BOOLEAN | false | — |
| random_skin_imperfections | BOOLEAN | false | — |
| random_beard | BOOLEAN | false | — |
| random_style_1 | BOOLEAN | false | — |
| random_style_2 | BOOLEAN | false | — |
| seedopt | INT | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| positive | STRING | — |
| negative | STRING | — |