Nodes/ComfyUI-SCAIL-Pose/Convert OpenPose Keypoints to DWPose
ComfyUI Node

Convert OpenPose Keypoints to DWPose

Bring OpenPose keypoints into this pack's DWPose format

By kijai·Created 8 months ago·Updated 4 months ago· 322
Convert OpenPose Keypoints to DWPose
  • keypoints
  • dw_poses
max_people2

Sometimes you already have the pose data, just in the wrong shape. ConvertOpenPoseKeypointsToDWPose is the second of two adapter nodes in kijai's ComfyUI-SCAIL-Pose pack, and it's the plainer of the two - no new detection happens here at all. If you're already producing standard POSE_KEYPOINT output somewhere in your graph (say, from a regular OpenPose preprocessor - ComfyUI's ControlNet Auxiliary Preprocessors pack is the common source), this node reshapes it into DWPOSES, the format this pack's rendering and alignment nodes actually expect.

Why you'd reach for it

The other converter in this pack, PoseDetectionVitPoseToDWPose, needs a whole separate pack installed just for its ViTPose model loader. This one needs nothing extra - if you're already sitting on OpenPose-format keypoints from something else in your workflow, this is the cheapest way into this pack's DWPose ecosystem. No new model, no new dependency, just a reshape.

How it works

It's plumbing, and that's a compliment in this case. It takes the OpenPose-schema joints in keypoints - body, face, and hand points in OpenPose's own layout - and repacks them into the DWPOSES structure. Nothing gets re-detected or re-estimated; whatever quality your original OpenPose extraction had is exactly what comes out the other side, just relabeled into a shape this pack's other nodes can consume.

The inputs and outputs that matter

  • keypoints (required, POSE_KEYPOINT) - your already-extracted OpenPose-format keypoints.
  • max_people (default 2, range 1-100) - the tooltip is direct: "Maximum number of people to process per frame." Raise it if your source video has a group and people are getting dropped from the output; lower it if you only care about the main subject and want to cut noise from background detections.
  • Output: dw_poses (DWPOSES) - wire this into RenderNLFPoses's dw_poses or ref_dw_pose inputs for 2D drawing or alignment against an NLF render.

How to install it

Same install as the rest of the pack - via ComfyUI Manager, search ComfyUI-SCAIL-Pose, install, restart. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-SCAIL-Pose
pip install -r ComfyUI-SCAIL-Pose/requirements.txt

This particular node doesn't add any dependency of its own beyond what the pack already pulls in (taichi, opencv-python, pillow) - and it doesn't need any of those to actually run, since it's a pure format conversion. The real prerequisite is whatever node in your graph is producing the POSE_KEYPOINT input in the first place; that typically means installing ComfyUI's ControlNet Auxiliary Preprocessors pack or something equivalent, separately from this one.

Common issues & troubleshooting

Empty or garbage dw_poses output. This almost always traces back to the input, not this node - check that your keypoints source is genuinely OpenPose-schema POSE_KEYPOINT data and not something with a similarly-named type that isn't actually compatible.

A background person is missing from the output. Check max_people first - only that many detected people get converted per frame, so if your source video has more subjects than the current setting, raise it.

There isn't much else to debug here. This node is deliberately thin - the interesting failure modes (missed hands, wrong joints, bad detections on cluttered scenes) all live upstream, in whatever produced your POSE_KEYPOINT data. If the pose looks wrong after conversion, go check the extraction step, not this one.

CategoryWanAnimatePreprocess

Inputs (2)

NameTypeDefaultDescription
keypointsPOSE_KEYPOINT
max_peopleINT21–100Maximum number of people to process per frame

Outputs (1)

NameTypeDescription
dw_posesDWPOSES