[Inference.Core] DensePose Estimator
Full body-surface mapping, not just skeleton joints
- image
- IMAGE
OpenPose and DWPose give you a stick-figure skeleton: joints connected by lines. DensePose gives you something much richer - a per-pixel map of the entire body surface, expressed as UV coordinates onto a standard 3D body model (SMPL). Instead of "here's where the elbow is," it's "here's exactly how the torso, arms, and legs are oriented and wrapped in 3D, pixel by pixel." That extra density is exactly what you want for clothing and skin-detail work where a skeleton alone loses too much information about body surface orientation.
How it works
DensePose runs a body-surface-segmentation network that assigns every pixel of a detected person both a body-part label and a UV coordinate on that part's unwrapped surface. The result gets rendered as a color image where color encodes surface position - which is why the node makes you choose a colormap explicitly rather than picking one for you.
The inputs and outputs that matter
image- required, your source image.model-densepose_r50_fpn_dl.torchscript(default, ResNet-50 backbone, faster) ordensepose_r101_fpn_dl.torchscript(ResNet-101, slower but more accurate).cmap-Viridis (MagicAnimate)(default) orParula (CivitAI). This isn't cosmetic: it's the exact color encoding, and the label names literally tell you which downstream convention each one matches. Pick the one that matches whichever DensePose ControlNet checkpoint you're loading - a mismatched colormap means the ControlNet is reading a color code it wasn't trained on, and results will be subtly wrong in ways that are hard to diagnose after the fact.resolution(default 512) - working resolution.
One output: IMAGE, the colorized DensePose map, wired into a DensePose ControlNet.
How to install it
ComfyUI Manager: search ComfyUI-Inference-Core-Nodes, install, restart. By hand:
cd ComfyUI/custom_nodes
git clone https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes
then run install.py, or pip install -e .[cuda12] (or .[cuda] / .[rocm] / .[directml] / .[cpu]). Restart ComfyUI. The DensePose model downloads from Hugging Face the first time you run the node, and switching between the r50 and r101 model options triggers a fresh download for whichever one you haven't used yet.
Common issues & troubleshooting
The single thing most likely to bite you: cmap mismatch. If your generation output looks like it's ignoring the DensePose conditioning entirely, or applying it in a strange, inconsistent way, check whether the checkpoint card or workflow you sourced your ControlNet from actually names which colormap convention it expects - before assuming the ControlNet itself is broken. This is the one node in the pack where a wrong dropdown pick fails silently instead of loudly.
Beyond that, it's the usual pose-node caveat: DensePose needs a clearly visible, unobstructed person to segment cleanly - heavy occlusion or extreme poses degrade the surface map the same way they'd degrade a skeleton. And it's a heavier model than skeleton-based pose detectors, so expect it to run slower than DWPose on the same hardware; drop to the r50 model variant first if speed matters more than the accuracy bump r101 gives you.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | — | |
| modelopt | COMBO | densepose_r50_fpn_dl.torchscript | 2 options: densepose_r50_fpn_dl.torchscript, densepose_r101_fpn_dl.torchscript |
| cmapopt | COMBO | Viridis (MagicAnimate) | 2 options: Viridis (MagicAnimate), Parula (CivitAI) |
| resolutionopt | INT | 51264–2048 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| IMAGE | IMAGE | — |