๐คฉ Pose Priestess
Never hand-type a pose description again
- pose
Pose Priestess is the node that turns "I want a pose but I don't want to type one" into a dropdown. It's a text node from the ComfyUI-Violet-Tools pack - no models, no pose extraction, no ControlNet. You pick a general pose and an arm gesture, it hands you a comma-separated pose description, and you wire that text into your prompt. That's the whole job, and it's good at it.
Why you'd reach for it. The real value isn't saving keystrokes, it's consistency. When you hand-write "kneeling, hand on hip" today and "kneels with hand on hip" next week, the model hears two different things. Pose Priestess pulls every option from a YAML file, so the phrasing is identical every time - which matters if you're building a character preset or batch-generating a set of images that should feel like they came from one shoot. It also covers the whole range, from "hip pop" to "all fours" and a bunch of explicitly spicy poses, so if you're making mature content the vocabulary is already there. Just know what you're signing up for before you hit generate on anything NSFW - platform rules apply.
How it works. Options live in feature_lists/pose_priestess.yaml, and you can edit that file to add your own poses. The general_pose dropdown has 37 entries, arm_gesture has 24. Set either to Random and the node picks a fresh one every run - it forces a re-execution each time so Random actually re-rolls, and the same seed will give you the same pick. Each category has a strength slider from 0 to 2. Drop it below 1 and the node wraps the phrase in (text:0.8) attention syntax; leave it at 1 and it stays bare. That weighting trick only does anything on CLIP-based, 77-token models (SDXL, Illustrious, NoobAI, Pony). On LLM-encoded models like Flux 2 Klein or Z-Image, the parens get discarded, so there the strength slider mostly just toggles inclusion.
The inputs a beginner actually sets:
general_pose- the main stance. Random is the default and the fun one.arm_gesture- hands. Think "hands_behind_head", "fingers_in_waistband", "caressing_cheek".general_pose_strength/arm_gesture_strength- 0 to 2, how hard the pose is pushed.extra- free text, and it supports wildcards:{soft light|rim lighting|studio glow}picks one per run.
The one output, pose, is a POSE_STRING. The obvious destination is the pose input on Encoding Enchantress (same pack), but it's just text - you can feed it into any CLIP Text Encode or a text-concat node.
Install. ComfyUI Manager handles it: search "ComfyUI-Violet-Tools" and install. Or do it by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/leylahkrell/ComfyUI-Violet-Tools
Then restart ComfyUI - the nodes appear under "Violet Tools ๐
". No model downloads at all; the pack's only real deps are PyYAML (already bundled with ComfyUI), rapidfuzz, and requests. One gotcha: the README still shows the author's older GitHub handle in its clone command (leylahviolet). The repo moved - use the URL above or just let Manager resolve it.
Troubleshooting. If Random keeps landing on the same pose, you're on a fixed seed - that's the node working as designed; change seed or pick explicitly. If your (text:0.8) weights seem to do nothing, check the model's encoder before blaming the node. And if a pose you want is missing, it's one line in the YAML to add it.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| general_pose | COMBO | Random | 37 options: None, Random, all fours, arched back, bent over, crossed legs, +31 |
| general_pose_strength | FLOAT | 1.000โ2 | โ |
| arm_gesture | COMBO | Random | 24 options: None, Random, adjusting_jewelry, arms_crossed_chest, hands_behind_head, brushing_hair, +18 |
| arm_gesture_strength | FLOAT | 1.000โ2 | โ |
| extra | STRING | โ | |
| extra_inputopt | STRING | Optional chained input - will be prepended to extra field with ', ' |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pose | POSE_STRING | โ |