☁️BizyAir DWPose Estimator
The pose preprocessor that actually gets hands right
- image
- IMAGE
If you're conditioning a generation on someone's pose, DWPose is the detector you want over plain OpenPose - it's specifically the improved version with better hand detection, and hands are exactly where OpenPose-family detectors used to fall apart. This node takes a photo and hands back a pose skeleton image: body joints, face landmarks, and hand keypoints drawn out, ready to feed into a pose-capable ControlNet.
How it works
It runs two stages under the hood, which is why there are two model choices below: a person detector finds the humans in the frame first, then the pose estimator locates keypoints within each detected region. DWPose is one of the standard variants in the OpenPose family the wider ecosystem still relies on - every current ControlNet union, from SDXL through Z-Image and Flux 2, ships pose conditioning built on this same detect-then-estimate pattern.
The inputs and outputs that matter
image- required, the source photo.detect_hand/detect_body/detect_face(eachenable/disable, all default enable) - turn off whichever you don't need. If you only care about body pose, disabling hand and face detection speeds things up without changing the part of the output you actually use.resolution(default 512, 64-1024) - the internal detection resolution. Bump it up on high-detail source images if small joints (fingers especially) are getting missed at the default.bbox_detector(defaultyolox_l.onnx) - which model finds the people first. Choices trade accuracy for speed: theyolox_lvariants (torchscript or onnx) are the larger, more accurate option; theyolo_nas_l/m/s_fp16variants scale down from there for speed.pose_estimator(defaultdw-ll_ucoco_384_bs5.torchscript.pt) - which DWPose weight actually estimates the keypoints. The three options differ in export format (torchscript vs onnx) and batching (_bs5), not in the underlying pose model.
Output: a single IMAGE - the rendered pose skeleton, not a mask or keypoint data structure. This is a preprocessor only; you still need a separate ControlNet loader and apply node, loaded with a pose-capable model, to actually condition your generation on it.
How to install it
ComfyUI Manager: search BizyAir, install, restart. Or:
cd ComfyUI/custom_nodes
git clone https://github.com/siliconflow/BizyAir
then restart. BizyAir wants an account and API key set up on first use per the README.
Common issues & troubleshooting
Missing or mangled hands in the output skeleton. This is exactly the failure DWPose was built to fix relative to plain OpenPose, but it isn't perfect - try raising resolution first, since low-res hands are the most common cause of dropped keypoints.
Pose detected but generation ignores it. Check what you're actually loading downstream - the preprocessor output alone does nothing without a pose-capable ControlNet applied at reasonable strength; on a 2026-era union checkpoint, pose is usually one mode among several rather than a separate file, so confirm the model you loaded actually lists pose support.
Detection is slow. Turn off detect_hand/detect_face if you don't need them, and consider the smaller yolo_nas bbox detector variants if the person-detection stage is the bottleneck.
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–1024 | — |
| 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 (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |