ComfyUI Node

DWPose v5.1.0

DWPose detection with a built-in JSON dump (no separate preprocessor pack needed)

By TRI3D-LC·Created 3 years ago·Updated about a year ago· 27
DWPose v5.1.0
  • images
  • IMAGE
  • STRING
detect_handenable
detect_bodyenable
detect_faceenable
filename_pathdwpose/keypoints/input.json

If you've done pose ControlNet work, you know DWPose as the better OpenPose: cleaner hand and face detection than the original openpose_full, and it's become the default pose preprocessor in most packs. tri3d-dwpose is that detector wrapped for TRI3D's virtual-try-on pipeline - same skeleton output you'd get from any DWPose node, plus a side effect that makes it genuinely different: it writes the detected keypoints to a JSON file for you.

What it does

Feed it an IMAGE (a batch works), and it runs DWPose detection and returns two things:

  • IMAGE - the classic skeleton canvas (body + hands + face, per your toggles), the thing you'd normally feed an OpenPose ControlNet.
  • STRING - the file path of the pose JSON it just saved, so you can wire it straight into tri3d-pose-to-image or tri3d-adjust-neck without typing a path.

The four inputs are the ones you expect: detect_hand, detect_body, detect_face as enable/disable dropdowns, and filename_path, defaulting to dwpose/keypoints/input.json. Keep in mind the path is resolved inside the pack folder - the default works fine, but it means every run overwrites the same file rather than accumulating outputs.

Under the hood it's the standard DWPose stack: the yzd-v/DWPose ONNX models (yolox_l.onnx for detection, dw-ll_ucoco_384.onnx for pose) get downloaded from Hugging Face on first use into the pack's dwpose/ckpts cache. One thing worth knowing before you blame this node for being slow: it runs through OpenCV's DNN module on CPU - the code literally warns "DWPose doesn't support CUDA out-of-the-box". Detection is a few hundred milliseconds per image on CPU, which is fine for a single reference image and a bit tedious for long batches.

How it differs from the usual DWPose node

Most preprocessors (ControlNet Aux, ComfyUI's own) give you the skeleton image and nothing else. This one also serializes the keypoints in TRI3D's flattened 130-point format - the {"height", "width", "keypoints"} JSON their whole pose pipeline reads. That's what makes it the entry point for the pack's pose-adaptation machinery: detect on a mannequin, run tri3d-adjust-neck / tri3d-pose-adaption, render with tri3d-pose-to-image, and you have a ControlNet condition nobody else's stock nodes produce.

If you only want a pose image for a one-off ControlNet pass, use your usual DWPose node - this one's JSON side effect is the value, not the skeleton.

Installing

ComfyUI Manager, search "tri3d", or:

cd ComfyUI/custom_nodes
git clone https://github.com/TRI3D-LC/tri3d-comfyui-nodes

Restart, and make sure requirements are installed (Manager does this automatically; manual install is pip install -r custom_nodes/tri3d-comfyui-nodes/requirements.txt). First run downloads the two ONNX models, which needs network and a minute or two.

Troubleshooting

  • CPU-only and you need speed - it is what it is; this pack's DWPose is OpenCV-DNN on CPU. For high-throughput pose extraction, reach for a CUDA-accelerated preprocessor pack instead.
  • JSON saved, but pose-to-image shows blank - detection found no person, so the JSON is all [-1, -1] markers. Check the input image actually has a person and detect_body is enable.
  • Slow first run after install - that's the model download, not the node.
CategoryTRI3D

Inputs (5)

NameTypeDefaultDescription
imagesIMAGE
detect_handCOMBOenable2 options: enable, disable
detect_bodyCOMBOenable2 options: enable, disable
detect_faceCOMBOenable2 options: enable, disable
filename_pathSTRINGdwpose/keypoints/input.json

Outputs (2)

NameTypeDescription
IMAGEIMAGE
STRINGSTRING