modaux: dwpose
The pose preprocessor that actually gets hands and feet right
- image
- IMAGE
If you've ever run OpenPose and watched the hands come back as tangled spaghetti, DWPose is the fix. It's the newer whole-body pose detector that does the same job - body keypoints, face landmarks, hands, even feet - but reliably. This node, modaux: dwpose from the ControlNet Auxiliar pack, is just a clean wrapper around Hugging Face's DWposeDetector, so all you feed it is an image and out comes a pose skeleton ready for a ControlNet Apply node.
Why reach for it: pose conditioning is how you force a character into a specific stance without describing it in the prompt. Repose a character across frames, copy a dance from a video still, keep anatomy consistent between generations - the pose map is the scaffold and the prompt fills in the rest. DWPose is the version you actually want when hands and feet matter, because its whole-body model tracks 21 keypoints per hand and both feet, which is exactly where older OpenPose pipelines fall apart.
How it works
Under the hood the node instantiates DWposeDetector from the controlnet-aux==0.0.7 library, pointing at config files the pack ships with: a YOLOX person detector and the DWPose-l 384x288 whole-body model. That's why it's the heavyweight of the pack - DWPose runs a two-stage pipeline, detect the person first, then estimate the pose. On first run it downloads those weights from the OpenMMLab project into your Hugging Face cache, so don't panic if the first execution crawls; every run after is fast.
The inputs that matter
There are only three, and two of them are the standard pair every node in this pack shares:
- image - whatever you're extracting the pose from. A photo, a video frame, a previous generation.
- detect_resolution (default 512, range 256–1024) - the resolution the detector actually processes the image at. Higher is more precise but slower and heavier on VRAM.
- image_resolution (default 512) - the resolution the output map is resized back to, so it matches what your sampler is generating at.
Note there are no toggles for body/hand/face here like some pose nodes have - it's all or nothing, and honestly that's fine for DWPose since the whole selling point is that everything gets tracked.
The output is a single IMAGE tensor: the skeleton map on black. Wire it into a ControlNet Apply node paired with an openpose-style ControlNet model. On SD 1.5 that's control_sd15_openpose; on the modern union checkpoints (SDXL xinsir, the Z-Image/Flux 2 unions) the pose mode eats this map directly.
Installing it - the honest version
The pack installs through ComfyUI Manager (search "ControlNet Auxiliar") or by hand:
cd ComfyUI/custom_nodes
git clone https://github.com/madtunebk/ComfyUI-ControlnetAux.git
cd ComfyUI-ControlnetAux
pip install -r requirements.txt # timm, controlnet-aux==0.0.7, mediapipe
Then restart ComfyUI. But DWPose specifically needs the whole OpenMMLab stack on top - MMDetection, MMCV, MMPose. The README's own steps:
pip install -U openmim
pip install "mmcv>=2.0.1,<2.2.0"
mim install mmengine
mim install "mmdet>3.1.0"
mim install "mmpose>1.1.0"
This is the fiddliest part of the entire pack. MMDet/MMPose are opinionated about their versions and MMCV is notorious for silently breaking other things in your environment. The one consolation: the mm stack is only imported when you actually run the DWPose node, so the other fourteen nodes in this pack work fine if you skip it.
Where people get burned
- First run downloads. Weights come from OpenMMLab at runtime, not from a ComfyUI models folder, and there's no progress bar in some setups. Give it a minute before you assume it hung.
- Resolution. These preprocessors are tuned around 512. Push detect_resolution way up and you'll pay in VRAM and time for marginal map quality.
- Version fights. If DWPose throws an import error about mmpose, it's usually a version mismatch with MMCV - check the pinned ranges above rather than installing the latest of everything.
If you only ever need body pose and never care about hands, the lighter OpenPose preprocessors in the ecosystem are simpler and skip the mm stack entirely. Reach for DWPose when the hands are the whole point.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| detect_resolution | INT | 512256–1024 | — |
| image_resolution | INT | 512256–1024 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |