ComfyUI Node

Openpose Editor Node

ComfyUI's Local OpenPose Editor

By westNeighbor·Created 2 years ago·Updated about a month ago· 154
Openpose Editor Node
  • POSE_KEYPOINT
  • POSE_IMAGE
  • POSE_KEYPOINT
  • POSE_JSON
show_bodytrue
show_facetrue
show_handstrue
resolution_x-1
pose_marker_size4
face_marker_size3
hand_marker_size2
hands_scale1.00
body_scale1.00
head_scale1.00
overall_scale1.00
scalelist_behaviorposes
match_scalelist_methodloop extend
only_scale_pose_index99
POSE_JSON

OpenPose gives you the skeleton, but it doesn't let you fix the skeleton. That's the whole gap this node exists to close. You run an image through a DWPose/OpenPose detector, the ControlNet pose map comes back with the arm crossing the chest, and you just want to nudge the elbow - not regenerate, not fight the prompt. Openpose Editor Node lets you grab the stickman and move it, entirely inside ComfyUI, no extra web app and no internet round-trip.

It's a rewritten, expanded version of huchenlei's ComfyUI-openpose-editor, which was the go-to for years but leaned on a remote service. This one renders and edits everything locally, so it keeps working with your internet off. One node does what used to take two: it edits and renders the pose image, which is why the author also spun the rendering half out as a separate ultimate-openpose-render pack if you want the render without the editor.

How it works

The node accepts poses in three flavors - an image (POSE_IMAGE output of a pose detector), raw keypoints (POSE_KEYPOINT), or a JSON string (POSE_JSON) - and can also run with no input at all, giving you a blank canvas to draw a fresh pose from scratch. When you wire up both keypoints and JSON, the keypoints win for editing; on the output side, JSON wins (that's POSE_JSON > POSE_KEYPOINT for output, POSE_KEYPOINT > POSE_JSON for edit - worth remembering when your edited pose "doesn't apply").

Right-click the node → Open in Openpose Editor, and a canvas pops up showing the rendered stick figure. Drag joints, send it back, and your edits land in the node's POSE_JSON widget. The render itself is plain local drawing - the pack just needs matplotlib/OpenCV, no pose model of its own. Close the editor with ESC or SHIFT+ESC (click the window's outer area first so it's focused).

The inputs that actually matter

You don't need to touch most of these. The ones a beginner actually sets:

  • POSE_KEYPOINT / POSE_JSON - where the pose comes from. Leave both empty to draw from a blank canvas.
  • show_body / show_face / show_hands - which parts render. Turn hands off when a detector's hand estimates are garbage; it keeps the pose map cleaner.
  • body_scale / head_scale / hands_scale / overall_scale - quick procedural scaling without opening the editor. Useful for "the hands are too small in this pose" fixes.
  • resolution_x - render width; -1 keeps the original. With no input it defaults to a 512×768 blank.

The trickier ones: only_scale_pose_index targets one person in a multi-person image (a value larger than the person count scales everyone; negative indexes count from the end), and scalelist_behavior / match_scalelist_method decide how a list of scale values is applied per-pose or per-image and how short lists extend - only relevant for batch or animation work.

Outputs: POSE_IMAGE (the rendered ControlNet-ready image - wire this into your ControlNet), POSE_KEYPOINT (the raw dict, feeds other keypoint nodes), and POSE_JSON (the serialized poses, handy for saving or scripting).

Installing it

Through ComfyUI Manager, search ultimate-openpose-editor. Manual install is the same as any node:

cd ComfyUI/custom_nodes
git clone https://github.com/westNeighbor/ComfyUI-ultimate-openpose-editor
cd ComfyUI-ultimate-openpose-editor
pip install -r requirements.txt   # torch, polygraphy, numpy, opencv-python, matplotlib

Portable Windows? Use E:/ComfyUI_windows_portable/python_embeded/python.exe -m pip install -r requirements.txt. Restart ComfyUI, then add the node via Right Click → ultimate-openpose → Openpose Editor Node. No model downloads - the pack renders keypoints, it doesn't detect them. To produce POSE_KEYPOINT input you'll still want comfyui_controlnet_aux (DWPose/OpenPose Pose node), which is what defines the POSE_KEYPOINT type.

The gotcha people hit

Where people get burned: installing via Manager renames the folder, and the extension file hardcodes the path to the editor UI. The editor opens a blank window or nothing at all. Check your folder name under custom_nodes - if it's westNeighbor_ComfyUI-ultimate-openpose-editor instead of ComfyUI-ultimate-openpose-editor, open js/openpose_editor.js around line 110 and change src: "extensions/ComfyUI-ultimate-openpose-editor/ui/OpenposeEditor.html" to match your actual folder name. It's a two-second fix, but it's the top complaint in the community - people report "missing nodes" and an editor that never opens, and this folder mismatch is usually why. If your graph still can't find the node at all after a clean install, you're almost certainly missing comfyui_controlnet_aux and the POSE_KEYPOINT type it defines.

Categoryultimate-openpose

Inputs (16)

NameTypeDefaultDescription
show_bodyoptBOOLEANtrue
show_faceoptBOOLEANtrue
show_handsoptBOOLEANtrue
resolution_xoptINT-1-1–12800Resolution X. -1 means use the original resolution.
pose_marker_sizeoptINT40–100
face_marker_sizeoptINT30–100
hand_marker_sizeoptINT20–100
hands_scaleoptFLOAT1.000–10
body_scaleoptFLOAT1.000–10
head_scaleoptFLOAT1.000–10
overall_scaleoptFLOAT1.000–10
scalelist_behavioroptCOMBOposesWhen the scale input is a list, this determines how the scale list takes effect, the differences appear when there are multiple persons(poses) in one image.
match_scalelist_methodoptCOMBOloop extendMatch the scale list to the input poses or images when the scale list length is shorter. No extend: Beyound the scale list will be 1.0. Loop: Loop the scale list to match the poses or images length. Clamp: Use the last scale value to extend the scale list.
only_scale_pose_indexoptINT99-100–100For multiple poses in one image, the scale will be only applied at desired index. If set to a number larger than the number of poses in the image, the scale will be applied to all poses. Negative number will apply to the pose from the end.
POSE_JSONoptSTRING
POSE_KEYPOINToptPOSE_KEYPOINT

Outputs (3)

NameTypeDescription
POSE_IMAGEIMAGE
POSE_KEYPOINTPOSE_KEYPOINT
POSE_JSONSTRING