Ultralytics Studio
Hand-draw the skeleton, let ControlNet do the rest
- pose_keypoint
- areas
- IMAGE
- JSON
- KPS
Most pose workflows start with a photo: DWPose detects a person, you get keypoints, ControlNet copies the pose. Ultralytics Studio flips that. Instead of detecting a pose, you author it - pick a preset or drag keypoints on a canvas, and it emits the skeleton image, JSON, and keypoint data that OpenPose-style ControlNet conditioning expects. No source photo, no detector, no pose model downloads.
It's the flagship node of andreszs's ComfyUI-Ultralytics-Studio pack - a from-scratch rewrite (v2.0.0) of the original "Ultralytics Studio" that ships via ComfyUI Manager, and it's backward compatible with it, so workflows built on the old node load unchanged. The author maintains a whole family of packs (LoRA-Pipeline, Styler-Pipeline, OpenPose-Studio) and publishes through the Comfy Registry.
How it works
Click the node's preview (or the pencil icon) to open the editor - a browser-side canvas. Pick a pose from the built-in gallery (poses/ is JSON presets, not model weights), drag the 17 COCO-17 body keypoints around, and use the dedicated 21-keypoint hand editor to move, scale, rotate, or mirror an entire hand at once. Face landmarks are preserved and rendered but not editable yet. There's undo/redo, a non-destructive background reference overlay, and keyboard shortcuts (Enter applies and closes, Delete removes the selected keypoint).
Hit Apply and the pose serializes back into the pose_json widget, then the node re-renders server-side into an image plus keypoint data. The pack's rendering is defensive - bad keypoints get filtered, missing ones render as empty rather than crash.
Inputs that matter
pose_json- the pose itself, in OpenPose-style JSON (canvas_width,canvas_height, and apeoplearray withpose_keypoints_2d). The editor writes back here, and you can paste in a pose exported from another tool.render_body,render_hand,render_face- what gets drawn. These are also export filters: turn off hands or face and those keypoints get stripped from the JSON and KPS output, which is handy for cleaning pose packs.pose_keypoint(optional) - wire a DWPose Estimator's output here to load a detected pose into the editor and refine it by hand. COCO-18 input auto-converts to COCO-17 before loading.areas(optional) - connect theareas_outof andreszs's own Conditioning Pipeline (Combine) node from ComfyUI-LoRA-Pipeline to overlay conditioning region boundaries while you position multi-character poses.
The outputs
- IMAGE - the rendered skeleton as RGB float32.
- JSON - the serialized OpenPose-style pose as a string. Wire it into the pack's Show String node to read it on the graph.
- KPS - the money output: POSE_KEYPOINT data that ControlNet/OpenPose-compatible nodes accept, which is what lets this slot into detection-driven pipelines as a drop-in authoring step.
The ecosystem framing: ControlNet's OpenPose control guides generation toward the 17 body joints (body + face + hands), and DWPose is the improved detector people default to. Ultralytics Studio is the other half - build the skeleton here instead of detecting it, feed KPS toward a ControlNet OpenPose model, and prompt the rest. Great for character sheets, repeated compositions, and multi-character scenes where you want the pose exact before the model ever runs.
Installing it
Manager search for ComfyUI-Ultralytics-Studio (display name "Ultralytics Studio"), or:
cd ComfyUI/custom_nodes
git clone https://github.com/andreszs/ComfyUI-Ultralytics-Studio
Restart ComfyUI. No pip dependencies and no model downloads - rare and welcome. Requires Python 3.10+ and a recent ComfyUI. The one real gotcha, straight from the README: Nodes 2.0 must be disabled or the node misbehaves.
Troubleshooting
- Blank output image - no valid pose selected, or you edited and never hit Apply. Pick a preset, click Apply.
- Empty KPS - you turned off
render_body; keep body on for ControlNet to have a skeleton. - Pose not in gallery - the JSON is invalid, or the folder was scanned before you added it. Restart ComfyUI to trigger re-discovery.
- No node at all - verify the clone lives at
custom_nodes/ComfyUI-Ultralytics-Studio, restart fully, and check the console for import errors.
If you need exact, repeatable poses without hunting for reference images, this is the authoring tool you'd actually reach for - just budget for the missing face editing when a face is the whole point.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| pose_json | STRING | — | |
| render_body | BOOLEAN | true | — |
| render_hand | BOOLEAN | true | — |
| render_face | BOOLEAN | true | — |
| pose_keypointopt | POSE_KEYPOINT | — | |
| areasopt | CONDITIONING_AREAS | — |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| JSON | STRING | — |
| KPS | POSE_KEYPOINT | — |