Pose Detector (RTMW/DWPose)
Better hands than DWPose — RTMW pose detection for ComfyUI
- image
- pose_keypoint
- skeleton_preview
If you've ever chased an OpenPose/DWPose skeleton around a photo of someone with their arm behind their back, you know the standard complaint: hands vanish, arms get dropped at the elbow, feet trail off. The whole pitch of the Eric_Composer_Studio pack is that RTMW - a Shanghai AI Lab whole-body model - recovers those limbs far better than DWPose, and this node is where that pitch lands. It runs RTMW-x/l/m or classic DWPose via the rtmlib ONNX backend and hands you a POSE_KEYPOINT in the exact format comfyui_controlnet_aux uses.
DWPose remains the community-standard pose preprocessor - the format every pose ControlNet was trained on - but its weak spot has always been hands under partial occlusion, and that's precisely the case RTMW is better at. So the practical answer is: default to RTMW-x for quality, keep DWPose around for maximum ControlNet compatibility.
How it works
The node builds an rtmlib Wholebody pipeline with ONNX Runtime - a YOLOX person detector plus a whole-body keypoint model that outputs 133 keypoints (body + hands + face + feet). RTMW results get a leg-cleanup pass that strips edge-clamped extrapolation artefacts; DWPose is left conservative. The provider is cuda or cpu (with onnxruntime-gpu installed it picks GPU automatically and logs which provider is active).
The inputs that matter
image- input image batch.model-rtmw-x(default, best quality),rtmw-l,rtmw-m(faster, quick iteration), ordwpose.score_threshold- the knob you'll actually tune. Default 0.30 routinely drops arms/hands when a limb is occluded, blurred or foreshortened. Drop it to 0.15–0.20 and the missing hands come back. This is the first thing to try when a skeleton looks amputated.det_score_thresh- YOLO person-detector confidence. Leave at 0.50; only lower it if entire people are being missed.device, plus the preview knobs:preview_color_mode(dwposeorenhancedL/R colour-coding),preview_line_width,preview_joint_radius, anddraw_face/draw_hands/draw_feet.
Outputs
pose_keypoint- detected keypoints as OpenPose JSON, ready for any node that speaksPOSE_KEYPOINT.skeleton_preview- a rendered skeleton image at source resolution, so you can eyeball the detection before it goes anywhere.
Models auto-download on first use (the pack's model manager fetches the ONNX files from OpenMMLab); if you keep your own copies in ComfyUI/models/pose/, it uses those first. Expected files are rtmw-*.onnx, dw-ll_ucoco_384.onnx and a yolox detector.
Installing it
ComfyUI Manager → Custom Nodes Manager → search Eric Composer Studio → install → restart. Manual:
cd ComfyUI/custom_nodes
git clone https://github.com/EricRollei/Eric_Composer_Studio.git
cd Eric_Composer_Studio
python -m pip install -r requirements.txt
rtmlib is in requirements - that's the package that isn't bundled with ComfyUI. You also need comfyui_controlnet_aux installed (from Fannovel16's pack), because the POSE_KEYPOINT socket type this node outputs lives there; without it the pose sockets don't exist. onnxruntime-gpu is recommended for anything but a quick CPU test. One thing to check before you build a commercial pipeline on it: the pack is released under CC BY-NC 4.0 with a separate commercial license, so non-commercial use is fine but selling products built on it needs the paid terms.
Where people get burned
Missing hands → lower score_threshold (not det_score_thresh). "rtmlib is not installed" → pip install rtmlib into the Python that runs ComfyUI. And if the skeleton looks fine but ControlNet ignores it, that's a renderer problem, not a detection one - switch the downstream render to dwpose colour mode, because the enhanced preview colours are for your eyes, not for the model.
Inputs (11)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| model | COMBO | rtmw-x | 4 options: rtmw-x, rtmw-l, rtmw-m, dwpose |
| device | COMBO | cuda | 2 options: cuda, cpu |
| score_threshold | FLOAT | 0.300–1 | Keypoint confidence cutoff. Lower (0.15-0.20) recovers arms/hands at partial occlusion. |
| det_score_thresh | FLOAT | 0.500.1–1 | YOLO person detector confidence. Only lower if entire people are being missed. |
| preview_color_mode | COMBO | enhanced | 2 options: dwpose, enhanced |
| preview_line_width | INT | 41–12 | — |
| preview_joint_radius | INT | 51–16 | — |
| draw_face | BOOLEAN | true | — |
| draw_hands | BOOLEAN | true | — |
| draw_feet | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| pose_keypoint | POSE_KEYPOINT | — |
| skeleton_preview | IMAGE | — |