OpenPose Image → Keypoints
Resurrect OpenPose keypoints from a plain skeleton image
- openpose_image
- pose_keypoint
- debug_overlay
- info
You've got a rendered OpenPose skeleton - a pose ControlNet output, a DWPose map, some workflow you downloaded that only saved the final image. Now you want to crop the hand region for a detailer pass, but every crop node needs POSE_KEYPOINT data, and all you have is pixels. This node is the adapter: it walks the skeleton image backwards and recovers the keypoint data from what's drawn.
Why it works at all
OpenPose renderings are color-coded, and that's the whole trick. The controlnet_aux drawer paints each of the 18 body joints as a solid, unique-color filled circle, drawn on top of the limb sticks (which are dimmed). So each joint's color is effectively a label. The node isolates each exact color, finds the connected blobs (one per person), and takes the centroid of each blob as the joint position. Hands are clusters of blue dots and the face is a cluster of small white dots - optionally recovered too and attached to the nearest wrist or nose, so hand and face crops come out accurate.
It's a clever bit of reverse-engineering, and it drops into any node that consumes POSE_KEYPOINT, including this pack's own OpenPose Part Mask and OpenPose Part Crop.
Inputs
openpose_image- a rendered OpenPose / DWPose skeleton image. Nothing else.color_tolerance(default 40) - per-channel color match tolerance for joint detection. If joints aren't being found, your renderer may be using slightly off colors; nudge this up.min_dot_area(default 4) - ignore color blobs smaller than this many pixels. Filters noise dots.reconstruct_hands_face(default true) - also recover the blue hand and white face dot clusters. Turn off only if a busy image is producing spurious clusters.
Outputs
pose_keypoint- the recoveredPOSE_KEYPOINT, ready for the crop/mask nodes.debug_overlay- the skeleton image with detected joint positions circled and numbered, so you can see exactly what it found.info- a string with frame count and people detected.
Honest limits
This is a decoder for rendered skeletons, so its accuracy is bounded by the render. It needs the standard OpenPose color scheme - if someone saved a pose map in a custom palette, the defaults won't match and you'll have to lean on color_tolerance. And it reconstructs positions from pixels, so it can't recover joint confidence values the way a live detector would. If you still have the original image and a pose detector handy, running DWPose fresh will always beat recovering from a rendering - this node is for when the skeleton image is all you've got, which is a genuinely common situation with downloaded workflows.
Install
Part of Mickmumpitz-Nodes (MIT, deps: numpy, Pillow, opencv-python - no models needed). ComfyUI Manager, search "Mickmumpitz", or:
cd ComfyUI/custom_nodes && git clone https://github.com/mickmumpitz/ComfyUI-Mickmumpitz-Nodes.git
Restart, find it under Mickmumpitz/OpenPosePartCropper as "OpenPose Image → Keypoints". Pair it with OpenPose Part Crop + OpenPose Part Stitch for a full pose-driven detailer loop.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| openpose_image | IMAGE | A rendered OpenPose / DWPose skeleton image. | |
| color_toleranceopt | INT | 400–128 | Per-channel color match tolerance for joint detection. |
| min_dot_areaopt | INT | 41–200 | Ignore color blobs smaller than this (px). |
| reconstruct_hands_faceopt | BOOLEAN | true | Also recover hand (blue) and face (white) dot clusters. |
Outputs (3)
| Name | Type | Description |
|---|---|---|
| pose_keypoint | POSE_KEYPOINT | — |
| debug_overlay | IMAGE | — |
| info | STRING | — |