Load SDPose Model
The anime-proof pose estimator that thinks it's a diffusion model
- SDPOSE_MODEL
If you've ever fed an anime frame into DWPose and watched it hand you a black void where a skeleton should be, this node is the answer you were looking for. Load SDPose Model loads SDPose-OOD, a pose estimator that handles the out-of-distribution images - cartoons, illustrations, stylized art - that the classic OpenPose-family preprocessors just refuse to see.
Here's the clever part. SDPose-OOD isn't a classic keypoint detector. It borrows the trick that made Marigold great for depth: take an image-generation model's prior knowledge and repurpose it for a vision task. SDPose is a small diffusion pipeline - a UNet wrapped around a standard diffusers UNet2DConditionModel, a VAE encoder, and a heatmap head - that takes a person crop and produces keypoints plus confidence scores in a single denoising step. The "OOD" in the name is the whole pitch: because it's generative, it generalizes to art styles that ground-truth detectors were never trained on.
The two models
model_type: Body- 17 keypoints, body only. The classic OpenPose layout.model_type: WholeBody- 133 keypoints: body, face, and both hands. This is the one you want for pose-ControlNet work that needs fingers and expressions, the same reason you'd pickopenpose_fullover bare OpenPose in the ControlNet ecosystem.
The README's precision guidance is worth following: bf16 for 30-series GPUs and newer, fp16 for 20-series and older, fp32 for CPU. bf16/fp16 cut VRAM noticeably at essentially identical speed. CPU inference silently forces fp32, so don't fight it.
What you actually set
model_type- Body or WholeBody. WholeBody is bigger, slower, and more useful.unet_precision-fp32/fp16/bf16. Use the guidance above.device-auto(picks your CUDA GPU via ComfyUI's model management),cuda, orcpu.unload_on_finish- a genuinely useful toggle that offloads the model to CPU after a run, freeing VRAM for the sampler that follows. Leave it off while you're testing, flip it on for big workflows.- Output
SDPOSE_MODEL- wires straight intoRun SDPose Estimation. Nothing else consumes it.
Install and the heavyweight dependency
Install via ComfyUI Manager (search "ComfyUI-SDPose-OOD") or:
cd ComfyUI/custom_nodes
git clone https://github.com/judian17/ComfyUI-SDPose-OOD
cd ComfyUI-SDPose-OOD
pip install -r requirements.txt
The requirements list is where this pack gets spicy: diffusers, groundingdino-py, ultralytics, mmdet, mmengine, timm, and mmcv==2.1.0. The good news on mmcv - normally the thing that eats entire weekends because it wants to compile against your exact torch build - is that this requirements file pins a prebuilt piwheels wheel, so no compilation. On Windows, set PYTHONUTF8=1 before pip install for groundingdino-py.
First run downloads the model automatically from Hugging Face (teemosliang/SDPose-Body or SDPose-Wholebody) into ComfyUI/models/SDPose_OOD/. The pack also ships the empty_text_encoder/empty_embedding.safetensors the pipeline needs, so that part is handled. The downloads are a couple of gigabytes and the WholeBody variant is a chunky VRAM resident - don't be alarmed by the first-run wait.
One honest caveat: the README notes that ComfyUI has since added native SDPose_OOD support. This loader still earns its place if you want the pack's extra person-detection paths (YOLO, GroundingDINO, Florence2 bboxes) and its editor-JSON export, which the built-in node doesn't offer. If all you need is a bare anime pose map, check the native node first - you may not need the install hassle.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model_type | COMBO | 2 options: Body, WholeBody | |
| unet_precision | COMBO | 3 options: fp32, fp16, bf16 | |
| device | COMBO | 3 options: auto, cuda, cpu | |
| unload_on_finish | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| SDPOSE_MODEL | SDPOSE_MODEL | — |