OpenPose Editor
Pose your character in 3D, feed the result to ControlNet
- image
- pose_image
You want a character standing in exactly this pose, and "exactly this pose" is a thing you can't type. OpenPose conditioning is the standard answer - detect a pose from a reference, or draw one yourself - and this node is the "draw one yourself" option with a big upgrade: instead of clicking joints on a flat stick figure, you get a full 3D skeleton editor you can rotate, pose, and render.
The node hosts a Three.js editor. Hit "Open Editor" and a full-screen modal loads (served from the pack's own web endpoint), where you grab a humanoid rig and bend it - arms, legs, torso, head - in 3D. When you close the editor it renders the current pose to a skeleton image and uploads it into ComfyUI/input/openpose/, and the backend hands you that same image back as an IMAGE output. Pose state is saved to localStorage and auto-restored, so closing and reopening doesn't lose your work. Because the node's IS_CHANGED always reports changed, it re-executes on every run - which is exactly what you want so your latest pose edit actually reaches ControlNet.
Inputs and outputs
There are no required inputs - add the node and it works. There's one optional image input, and it's a subtle one: the backend ignores it, but the frontend can use it for MediaPipe pose detection in the browser, so you can load a photo and try to match its pose. The single output is pose_image, an IMAGE you feed into a ControlNet Apply node with an OpenPose model.
That's the workflow, and it's the controlnet.md loop in miniature: get a pose skeleton → apply ControlNet (openpose) → the model has to follow the skeleton. It's the same conditioning that powers a ton of character-pose work, just with the "draw the skeleton" step made dramatically more pleasant.
Where it fits
If you already extract poses from reference images with DWPose preprocessors, you don't need this node for that job - detection is a one-click preprocessor. Where this wins is inventing poses: a pose that doesn't exist in any reference, a pose you're iterating on, a choreography. It also pairs well with the rest of Steaked-nodes - the same pack has regional prompting, so you can pose a character in a region and prompt it separately. It's marked as an output node, so it can preview on its own.
Install
Part of Steaked-nodes:
cd ComfyUI/custom_nodes
git clone https://github.com/StealthNinja1O1/Steaked-nodes
Restart ComfyUI, or use ComfyUI Manager ("Steaked-nodes"). No model files to download - the editor is browser-side Three.js, and the backend only needs torch/numpy/Pillow. You will need an OpenPose ControlNet model for the downstream Apply node, but that's a standard download and not part of this pack.
Common issues
If the pose output doesn't change, it's usually the hidden pose_image filename going stale - the widget stores the last uploaded file, and re-running should pick up the new one. If you get a black 512×768 frame, the backend couldn't find the pose file in input/openpose/ (its fallback), which means the upload failed - re-open the editor and close it again. And the optional image input won't do anything unless the frontend's browser-side detection path is active; if you're trying to match a reference and nothing happens, extract the pose with a DWPose preprocessor instead and save it as a starting point.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| imageopt | IMAGE | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| pose_image | IMAGE | — |