Portrait Pose Prompt
Pose your subject without drawing a single control line
- text
"Dynamic pose" is a prompt phrase that produces nothing in particular, because the model has to invent what dynamic means. Portrait Pose Prompt takes the other approach: it breaks a pose down into body parts and gives you a dropdown for each. Standing, walking, arms crossed, head tilted, one leg lifted - you assemble the stance from 350 poses, 531 actions, and per-body-part micro-actions, and the node turns it into a weighted prompt. It's from ComfyUI-PromptWrapper, and it pairs naturally with the pack's Portrait Prompt, which handles the face while this handles the body language.
How it works
Same machinery as the other builders in this pack: each dropdown reads from a bundled JSONL dataset in either Chinese or English, random 🎲 picks via seed % dataset_length, and weight sliders (0–2) set emphasis - weight 1 is the bare phrase, anything else wraps it as (phrase:1.3). Parts left at -- are simply omitted from the joined comma string.
The inputs that matter
- pose - the overall stance, and the one you'll set first. 350 options.
- action - what the subject is doing on top of the pose. 531 options.
- head_action, arms_action, hands_action, legs_action - the detail sliders when you want something specific like "hands behind back" or "head tilted". Each has a weight, so you can make the hands thing loud and everything else quiet.
- chest_action, waist_action, feet_action - the fine-grained stuff for when you're chasing a specific look.
- seed - makes any
randompick reproducible. - language, enable, preset_prompt, optional input_prompt - the standard pack controls;
input_promptgets prepended to whatever pose text is generated.
One text output, straight into a CLIP Text Encode (or into a Combine Prompt alongside a Portrait Prompt result).
Install
ComfyUI Manager → Custom Nodes Manager → search ComfyUI-PromptWrapper → Install → restart, or:
cd ComfyUI/custom_nodes
git clone https://github.com/clouddreamfly/ComfyUI-PromptWrapper
Datasets ship with the pack; nothing to download.
Where people get burned
Pose words are an area where models differ wildly. A weighted phrase like (hands behind back:1.2) is respected by SDXL-lineage checkpoints, but LLM-encoded 2026 models drop the weights, and some simply don't carry the pose vocabulary the datasets assume - so test against your checkpoint before you blame the node. Also, this is text-only posing. If you need a pose to be enforced geometrically - a real skeleton your image must follow - you want a ControlNet OpenPose workflow, and this node becomes a source of good caption text instead. For most portrait work, though, it beats typing "dynamic pose" and praying.
Inputs (23)
| Name | Type | Default | Description |
|---|---|---|---|
| language | COMBO | Chinese | 2 options: Chinese, English |
| pose | COMBO | -- | 350 options: --, random 🎲, 站立, 走路, 双臂张开, 身体前倾,像鞠躬那样, +344 |
| pose_weight | FLOAT | 1.000–2 | — |
| action | COMBO | -- | 531 options: --, random 🎲, 行走, 转身, 摆动, 弯腰, +525 |
| action_weight | FLOAT | 1.000–2 | — |
| head_action | COMBO | -- | 8 options: --, random 🎲, 抬头, 低头, 左偏头, 右偏头, +2 |
| head_action_weight | FLOAT | 1.000–2 | — |
| chest_action | COMBO | -- | 5 options: --, random 🎲, 挺起胸部, 退缩胸部, 晃动胸部 |
| chest_action_weight | FLOAT | 1.000–2 | — |
| waist_action | COMBO | -- | 106 options: --, random 🎲, 挺直腰, 弯腰, 半弯腰, 拱起腰, +100 |
| waist_action_weight | FLOAT | 1.000–2 | — |
| arms_action | COMBO | -- | 24 options: --, random 🎲, 张开双臂, 抬起双臂, 放下双臂, 交叉双臂, +18 |
| arms_action_weight | FLOAT | 1.000–2 | — |
| hands_action | COMBO | -- | 140 options: --, random 🎲, 手放在身后, 手在头上, 手放头后, 手交叉于胸前, +134 |
| hands_action_weight | FLOAT | 1.000–2 | — |
| legs_action | COMBO | -- | 61 options: --, random 🎲, 抬一只腿, 张腿, 两腿并拢, 二郎腿, +55 |
| legs_action_weight | FLOAT | 1.000–2 | — |
| feet_action | COMBO | -- | 10 options: --, random 🎲, 抬起起脚, 踮起脚尖, 翘起脚尖, 泡脚, +4 |
| feet_action_weight | FLOAT | 1.000–2 | — |
| seed | INT | 00–18446744073709550000 | — |
| enable | BOOLEAN | true | — |
| preset_prompt | STRING | — | |
| input_promptopt | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| text | STRING | — |