Portrait Master: Style & Pose
The Portrait Master node that dresses, lights, and frames your subject
- text_out
"Portrait Master: Style & Pose" is the scene-dressing node in the comfyui-portrait-master pack. Where Base Character decides who the person is, this one decides how they look - the pose, the clothes, the lighting, the camera, the background, and the artistic style stamped on top. It's the difference between "here's a woman in her 30s" and "here's a woman in a cocktail dress, shot on a 85mm lens in golden-hour rim light, with a fashion-editorial vibe."
It exists because the portrait-master workflow splits prompt-building into five specialized nodes, and this is the biggest of them. If you're only chaining one PM node into a working portrait workflow, this is the one people add second, right after Base Character.
How it works
Like every node in this pack, it doesn't touch a model. It's a string builder: pick options from dropdowns, set weights on sliders, and it assembles a comma-separated prompt, lowercases it, and hands you a single text_out STRING. You wire that into a CLIPTextEncode (or CLIPTextEncodeFlux for Flux models) and sample as usual. The whole thing runs in milliseconds.
The mechanism is simple and worth knowing: pose, clothes, and lingerie entries get appended at a fixed :1.25 emphasis, light and style entries use your weight sliders, and everything else sits at :1.05. That fixed :1.25 on the pose is deliberate - the pose has to fight the model's default bias toward plain headshots, so it gets a head start.
The inputs that matter
Most of the dropdowns are self-explanatory, but a few deserve attention:
model_pose- 88 entries, from "Adjusting Clothing Pose" to "Artistic Dance Pose." This is the node's headline feature. The README's note matters here: disable ControlNet when you rely on the pose library, because the pose is carried by the prompt text, and an active OpenPose control can fight it.light_type+light_direction+light_weight- 72 light types, butlight_directionis the underrated one. "Light from top-left" withlight_weightabove 1 reads instantly as "studio," while flat front light reads "phone camera."style_1/style_2- 67 artistic styles with independent weights. Many are film-emulation names (Agfa Vista, Astia, Classic Chrome). Those only do anything if your checkpoint actually knows the terms - on SDXL photoreal models like FormulaXL they land fine; on a model that never saw them they're inert tokens.background- 91 options, handy when you want a scene instead of the white-box look.photorealism_improvement- a single toggle that appends(professional photo, balanced photo, balanced exposure:1.2). It's a blunt instrument but it works; it's the same trick the legacy node uses.
Set anything to - to leave it out, or random 🎲 to have it picked for you. One honest caveat from the source: the seed INT input is declared but nothing in the node actually seeds Python's random from it, so random 🎲 picks aren't reproducible from the seed - if you need a repeatable look, set the dropdowns by hand.
Installing it
Style & Pose ships inside comfyui-portrait-master, so install the whole pack once:
cd ComfyUI/custom_nodes
git clone https://github.com/florestefano1975/comfyui-portrait-master
Then restart ComfyUI. Or use ComfyUI Manager and search for "Portrait Master" (by florestefano1975). No extra Python dependencies, no model downloads - the pack is pure Python plus text files, which is refreshingly light.
Common issues
- Full-body pose still returns a headshot. This is the classic Portrait Master complaint, and it's usually not this node's fault - the face-detail sliders on the other PM nodes are pulling the framing in. Drop their weights, describe the clothing, and add
(close up:1.5)to your negative prompt. - The pose is ignored entirely. Check whether ControlNet or an inpainting mask is fighting the text prompt, then verify the node's
activetoggle is on. - Weird stale values when you load an old workflow PNG. The pack has been restructured across versions, so dropdowns from an older save can hold values that no longer exist. Just re-set them.
Inputs (22)
| Name | Type | Default | Description |
|---|---|---|---|
| model_pose | COMBO | - | 88 options: -, random 🎲, Adjusting Clothing Pose, Against a Wall Pose, Ajusting Hair Pose, Arms Up Pose, +82 |
| clothes | COMBO | - | 22 options: -, random 🎲, Bohemian Dress, Business Casual Dress, Business Formal Dress, Business Professional Dress, +16 |
| female_lingerie | COMBO | - | 270 options: -, random 🎲, Babydoll set in pastel pink with floral embroidery lingerie, Beaded Mesh Teddy lingerie, Black latex waist cincher with matching pasties lingerie, Bridal lingerie set with pearls and lace lingerie, +264 |
| makeup | COMBO | - | 22 options: -, random 🎲, Anime Makeup, Artistic Makeup, Avant-garde Makeup, Bohemian Makeup, +16 |
| light_type | COMBO | - | 72 options: -, random 🎲, Abstract Light Patterns, Ambient Light, Backlight Light, Backlit Silhouette Light, +66 |
| light_direction | COMBO | - | 12 options: -, random 🎲, Light from bottom, Light from bottom-left, Light from bottom-right, Light from front, +6 |
| light_weight | FLOAT | 1.000–2 | — |
| style_1 | COMBO | - | 67 options: -, random 🎲, Agfa Vista, Astia, Aurora Borealis, Black and White Photography, +61 |
| style_1_weight | FLOAT | 1.000–2 | — |
| style_2 | COMBO | - | 67 options: -, random 🎲, Agfa Vista, Astia, Aurora Borealis, Black and White Photography, +61 |
| style_2_weight | FLOAT | 1.000–2 | — |
| background | COMBO | - | 91 options: -, random 🎲, angular, arched, ash, athletic, +85 |
| camera_angle | COMBO | - | 36 options: -, random 🎲, angled, asymmetrical, back, balanced, +30 |
| camera_distance | COMBO | - | 24 options: -, random 🎲, casual, close, close up, distant, +18 |
| camera_lens | COMBO | - | 66 options: -, random 🎲, 100mm, 200mm, 24-70mm, 35mm, +60 |
| photorealism_improvement | BOOLEAN | true | — |
| active | BOOLEAN | true | — |
| load_preset | COMBO | 1 options: -- disabled -- | |
| save_preset_as | STRING | — | |
| save_preset | BOOLEAN | false | — |
| text_inopt | STRING | — | |
| seedopt | INT | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text_out | STRING | — |