Run SDPose Estimation
Turn a cartoon still into a pose map and OpenPose JSON
- sdpose_model
- images
- data_from_florence2
- grounding_dino_model
- yolo_model
- images
- pose_keypoint
This is the node that does the actual work in the SDPose-OOD pack. Point it at a model from Load SDPose Model, feed it an image, and it returns two things: a pose map (the OpenPose-style skeleton overlay) and an OpenPose-format keypoint JSON. Both of those feed the exact workflow you're probably here for - pull a pose out of a reference image, then drive a pose ControlNet so your own character lands in the same stance. The trick that makes it special: it works on anime and cartoon art that DWPose and the standard preprocessors famously return black for.
How it works
Internally the processor runs a three-stage pipeline, and it's worth knowing about because it explains both the settings and the gotchas.
- Collect. Find every person in each input frame using whatever detector you've connected. The priority is baked in:
data_from_florence2wins, thengrounding_dino_model, thenyolo_model. No detector connected at all, and it just treats the whole image as one person - the right default for a single subject. - Batch inference. Each detected person is cropped, resized, and pushed through the SDPose diffusion model in batches. This is what makes feeding it video frames or a batch of images feasible instead of a crawl.
- Reconstruct. Keypoints are mapped back onto the original frames, remapped into the OpenPose layout (neck computed, wholebody hands/face arranged), drawn as a skeleton, and serialized to JSON.
The settings that matter
Only two inputs are truly required beyond the model and image: score_threshold (default 0.3) and overlay_alpha (default 1.0). That threshold drops keypoints below a confidence floor - raise it if the skeleton gets noisy, lower it if limbs start vanishing. overlay_alpha controls the output: 1.0 gives you a pure pose map on a black background, which is exactly what a ControlNet wants. 0.6 blends in the original, 0.0 is the original untouched. For a ControlNet you want 1.0, full stop.
Everything else is optional and mostly self-explanatory:
batch_size- how many person crops infer at once; raise it for multi-frame video passes.yolo_model,grounding_dino_model+prompt,data_from_florence2- your three detector choices, wired in the priority order above.keep_face,keep_hands,keep_feet- WholeBody-only filters, for when you want the hands but not the facial landmarks (common for openpose body-only ControlNets).scale_for_xinsr- if you're feeding the xinsir SDXL OpenPose union ControlNet, this adjusts the skeleton scale to match what that model expects. Flip it on for SDXL, leave off for the classic OpenPose setups.pose_scale_factor- line thickness/size of the drawn skeleton.save_for_editor- writes a JSON toComfyUI/output/poses/that loads straight into judian17's OpenPose-Editor nodes, handy when the reference pose needs manual fixing before you generate.
Outputs
images- the visualized frame, blended peroverlay_alpha.pose_keypoint- the OpenPose-format JSON (keypoints normalized 0–1) as aPOSE_KEYPOINTstring. This is the socket that plugs into pose-ControlNet setups or pose-editing/visualizer nodes.
Gotchas worth knowing
WholeBody at fp32 is a VRAM hog - use bf16 on a 30-series card. The stock YOLO models are tuned for real people, so if an anime character isn't being detected, either drop the detector and let SDPose handle the whole frame, or switch to GroundingDINO/Florence2. And don't expect both a detector and the full-image path to run - the first detector to produce boxes wins, the rest are ignored. One more: ComfyUI now ships native SDPose_OOD support, but it doesn't have this node's multi-detector routing or the editor-JSON export, so this pack still earns its keep for pose-heavy workflows.
Inputs (18)
| Name | Type | Default | Description |
|---|---|---|---|
| sdpose_model | SDPOSE_MODEL | — | |
| images | IMAGE | — | |
| score_threshold | FLOAT | 0.300.1–0.9 | — |
| overlay_alpha | FLOAT | 1.000–1 | — |
| batch_size | INT | 11–64 | — |
| data_from_florence2opt | JSON | — | |
| grounding_dino_modelopt | GROUNDING_DINO_MODEL | — | |
| promptopt | STRING | person . | — |
| gd_thresholdopt | FLOAT | 0.300–1 | — |
| yolo_modelopt | YOLO_MODEL | — | |
| save_for_editoropt | BOOLEAN | false | — |
| filename_prefix_editopt | STRING | poses/pose_edit | — |
| keep_faceopt | BOOLEAN | true | — |
| keep_handsopt | BOOLEAN | true | — |
| keep_feetopt | BOOLEAN | true | — |
| scale_for_xinsropt | BOOLEAN | false | — |
| pose_scale_factoropt | FLOAT | 1.00.1–10 | — |
| enable_confidence_filteropt | BOOLEAN | true | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| images | IMAGE | — |
| pose_keypoint | POSE_KEYPOINT | — |