Nodes/IBB_POSE/IBB Pose — Load Model
ComfyUI Node

IBB Pose — Load Model

Load the actual pose brain — SDPose is a diffusion model, and it shows

By IBB666·Created 4 months ago·Updated 4 months ago· 0
IBB Pose — Load Model
    • IBB_POSE_MODEL
    model_type
    unet_precision
    device
    unload_on_finishfalse

    Yes, this is a pose detector built out of an image-diffusion UNet. That's the whole trick of SDPose, and it's why this node loads like it's loading a checkpoint for Stable Diffusion rather than a CV model. The payoff is that the "pose" it estimates is unusually robust - it's a diffusion model literally denoising a keypoint heatmap out of the image, which is why it holds up on hard poses and cluttered scenes where classic detectors give up. It's a genuine research lineage (T-S-Liang's SDPose-OOD, wrapped for ComfyUI by judian17, re-wrapped here), and it's niche enough that most people hit it through pack like this one.

    How it works

    Under the hood this is a diffusers load, full stop. The node pulls a HuggingFace repo - teemosliang/SDPose-Body or teemosliang/SDPose-Wholebody - and assembles a UNet2DConditionModel, an AutoencoderKL, and a DDPMScheduler, then wraps the UNet with a modified forward pass and bolts on a heatmap-head decoder loaded from decoder.safetensors. It even needs an empty text embedding - that's what the repo's empty_text_encoder/empty_embedding.safetensors is for, and there's a generate_empty_embedding.py if you ever need to rebuild it. Models auto-download on first use into ComfyUI/models/IBB_POSE/, so there's nothing to hunt down.

    The inputs that matter

    • model_type - Body (17 COCO keypoints) or WholeBody (133 keypoints, adding face, hands, and feet). WholeBody is the better-control option but it drags in an onnxruntime dependency for its detector and heavier inference. Start with Body unless you specifically need hand/face keypoints for your ControlNet or editor.
    • unet_precision - fp32, fp16, or bf16. If your device is CPU, don't bother: the node force-falls back to fp32, because fp16/bf16 aren't supported there. On CUDA, fp16 is the sensible default; bf16 if your card is new enough to like it.
    • device - auto picks your torch device, otherwise cuda or cpu.
    • unload_on_finish - offloads the model back to CPU after every run. Turn this on if pose is a one-shot preprocess in a big workflow and you want the VRAM back; leave it off if you're running the processor repeatedly.

    The output is a single IBB_POSE_MODEL - you feed it into the processor's ibb_pose_model input. There's no image in, no image out. This node is purely "load and cache."

    Installing it

    Pack-wide steps: ComfyUI Manager (search "IBB_POSE") or clone into custom_nodes, then pip install -r requirements.txt. That file is deliberately minimal - the SDPose load itself lazily imports diffusers, huggingface_hub, and safetensors, none of which are listed. If your environment doesn't already have them:

    pip install diffusers huggingface_hub safetensors
    

    If you chose WholeBody, you also need onnxruntime (or onnxruntime-gpu for GPU). The README calls for Python 3.13 / torch 2.10+, so keep that in mind on older setups.

    Troubleshooting

    • First run is slow - it's downloading a couple of hundred MB of SDPose weights to models/IBB_POSE/. Normal, once.
    • ImportError on diffusers/huggingface_hub - the missing lazy dependency above. Install and restart.
    • "Empty embedding not found" - the repo normally ships it, but if you've cloned weirdly, run generate_empty_embedding.py to rebuild it.
    • WholeBody errors on import - onnxruntime isn't installed. See above.
    CategoryIBB_POSE

    Inputs (4)

    NameTypeDefaultDescription
    model_typeCOMBO2 options: Body, WholeBody
    unet_precisionCOMBO3 options: fp32, fp16, bf16
    deviceCOMBO3 options: auto, cuda, cpu
    unload_on_finishBOOLEANfalse

    Outputs (1)

    NameTypeDescription
    IBB_POSE_MODELIBB_POSE_MODEL