DWPose Estimator
Tbox's built-in pose extractor for ControlNet
- image
- IMAGE
- POSE_KEYPOINT
If you want to lock a generation to a specific body pose, this is the node that turns a photo of a person into the skeleton map a Pose ControlNet actually understands. DWPose replaced OpenPose as the community default a while back for one simple reason: better hands. OpenPose's hand keypoints were notoriously flaky; DWPose is the "improved pose detector, better hand detection" successor, and tbox ships its own copy of it so you're not forced to install the separate comfyui_controlnet_aux pack just to get pose extraction.
How it works
It's a two-stage pipeline, not a single model. First a bounding-box detector (the yolox family) finds the people in your image, then a dedicated pose estimator (the dw-ll_ucoco family) runs inside each box to extract body, hand, and face keypoints. You get two outputs out of that: a rendered skeleton image, ready to feed straight into a Pose ControlNet, and the raw keypoint data as JSON, useful if you want to inspect, retarget, or hand the pose off to something other than a standard image-space ControlNet.
The inputs and outputs that matter
image(required) - your reference photo or frame.detect_hand/detect_body/detect_face(all defaultenable) - the toggles a beginner actually touches. Turn one off if it's fighting you: hand keypoints in particular are the shakiest part of any pose estimator, so if your hands are coming out mangled downstream, disabling hand detection and letting the model improvise is a legitimate fix, not a cop-out.resolution(default 512, 64–16384) - the internal detection resolution. Push it up for a small or distant figure where the default is too coarse to pick up detail; it costs speed.bbox_detectorandpose_estimator(enum choices, defaulting toyolox_l.onnxanddw-ll_ucoco_384_bs5.torchscript.pt) - which underlying checkpoint runs the detection..torchscript.ptvariants run through native PyTorch and are usually the faster choice on a working GPU setup;.onnxvariants needonnxruntimeand are a reasonable fallback if the torchscript path misbehaves.
Outputs: IMAGE (the rendered skeleton - wire this into your ControlNet's image input alongside a DWPose/OpenPose ControlNet model) and POSE_KEYPOINT (the raw keypoint JSON).
How to install it
Via ComfyUI Manager: search ComfyUI-tbox, install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/ai-shizuka/ComfyUI-tbox
then restart. One honest gap here: the pack's README doesn't document where the bbox/pose checkpoints come from or how they're fetched - it's three empty section headers, nothing more. Every other ComfyUI pose preprocessor pulls its model files down automatically on first use, so expect the same: the first run with a given bbox_detector/pose_estimator choice will likely try to download that file before it can do anything. If your executor has no outbound internet, that first run is where it'll hang or error - check the console output for what it's trying to fetch.
Common issues & troubleshooting
Hands look wrong or jittery. This is the known weak point of every pose estimator, DWPose included. Either disable detect_hand if it's making things worse than not having hand conditioning at all, or raise resolution for a cleaner detection pass.
First run is slow or appears to hang. Almost certainly the model download described above, not a crash - give it time on a normal connection, or pre-place the weights if you're offline.
Import error mentioning onnxruntime. You picked an .onnx detector/estimator variant without that package installed. Either install it or switch to one of the .torchscript.pt options, which don't need it.
No skeleton shows up at all. DWPose didn't find a person in the frame. Check detect_body is enabled and that your input actually contains a visible figure - cropped-too-tight or heavily obscured subjects are the usual culprit.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| detect_handopt | COMBO | enable | 2 options: enable, disable |
| detect_bodyopt | COMBO | enable | 2 options: enable, disable |
| detect_faceopt | COMBO | enable | 2 options: enable, disable |
| resolutionopt | INT | 51264–16384 | — |
| bbox_detectoropt | COMBO | yolox_l.onnx | 5 options: yolox_l.torchscript.pt, yolox_l.onnx, yolo_nas_l_fp16.onnx, yolo_nas_m_fp16.onnx, yolo_nas_s_fp16.onnx |
| pose_estimatoropt | COMBO | dw-ll_ucoco_384_bs5.torchscript.pt | 3 options: dw-ll_ucoco_384_bs5.torchscript.pt, dw-ll_ucoco_384.onnx, dw-ll_ucoco.onnx |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |
| POSE_KEYPOINT | POSE_KEYPOINT | — |