OpenPose Editor
Pose Control Without a Reference Photo
- IMAGE
OpenPose Editor is the rare ControlNet tool that works backwards, and that's exactly what makes it useful. Normally you feed ControlNet a reference photo and let a preprocessor like DWPose rip the pose skeleton out of it. This node skips the photo entirely: it hands you a stick figure on a canvas, you grab its joints and pose it by hand, and it hands you the skeleton map ControlNet wants. No reference image, no model file, no API - just you dragging little colored dots around.
It's a port of the old fkunn1326/openpose-editor extension from A1111, rebuilt as a ComfyUI node with the whole editor living in the browser. That lineage matters: this is the "old OpenPose Editor" people still mean when they compare against newer tools, and its JSON format has become the informal standard - the 2026 successor OpenPose Studio advertises drop-in compatibility with it.
What it's for
Any workflow where you want a specific pose and don't have a photo of someone doing it. Hands hovering uselessly at the subject's sides? Pull them up, out, crossed, whatever. Want two characters in a conversation layout, or a specific action for a LoRA-training dataset? Draw it. It feeds the OpenPose conditioning type - the "body/hand/face pose skeleton" row in the ControlNet table - and it's most at home on SD 1.5-lineage bases (including Illustrious and Pony) where openpose ControlNets are mature. Worth knowing: pose ControlNets on the 2026 bases (Flux, Qwen, Z-Image) are patchier, and pose-from-reference has partly moved to edit models like AnyPose. On SD-family checkpoints this is still the direct route.
How it works
Click "open editor" on the node and a Fabric.js canvas panel opens - the library ships inside the pack, so nothing to download. Every person on the canvas is a group of the 18 standard COCO keypoints: nose, eyes, ears, shoulders, elbows, wrists, hips, knees, ankles, connected by colored bones. Drag a joint and the bones follow; drag the whole group to reposition a person; scale and rotate work too. Add Pose stacks more people, Remove deletes the selected one, Reset wipes the canvas. Ctrl+Z / Ctrl+Y undo and redo, and the width/height fields (64–4096, step 64) set the canvas resolution.
Each edit does two things. It serializes the pose to JSON - width, height, keypoints - and stores it on the node as the savedPose property, so the pose travels inside your workflow file and survives reloads. Then it renders the skeleton onto a black background and uploads that PNG to ComfyUI's input folder as ComfyUI_OpenPose_<node_id>.png (overwriting each edit). The node then behaves exactly like a LoadImage pointing at that file.
Inputs and outputs
One input, one output, and you barely touch either. The required image field is a string holding the filename of the generated PNG - the editor writes it for you; it's disabled on the widget. The output is IMAGE, the skeleton map itself. Wire it into a DWPose or OpenPose preprocessor if you want it normalized, or straight into a ControlNet Apply node when your checkpoint takes pose maps directly. From there, the usual ControlNet knobs apply: keep strength around 0.8–1.0 on SD 1.5, and consider ending control early so the pose locks composition without freezing detail.
Installing it
The easy way is ComfyUI Manager: search "OpenPose Editor" and hit install. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/space-nuko/ComfyUI-OpenPose-Editor
Restart ComfyUI. No pip requirements, no model downloads - the editor is pure frontend JavaScript that gets copied into ComfyUI's web/extensions folder on startup. That's also the one install gotcha: if the "open editor" button doesn't show up, hard-refresh the browser (or fully restart the backend) so the extension actually loads.
Where people get burned
The input folder clutter is the classic complaint - every pose you draw leaves a ComfyUI_OpenPose_*.png in ComfyUI/input, and they persist after you delete the node. Harmless, but sweep them out eventually. The bigger trap is sharing: the pose lives in the workflow JSON via savedPose, so anyone you hand the workflow to needs the pack installed or the node will fail. And remember the output is a conditioning image, not art - if the pose renders but your character ignores it, you've wired the skeleton somewhere the checkpoint isn't actually reading. Lower the strength before you blame the editor.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| image | STRING | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |