Nodes/ComfyUI-ProportionChanger/Mascot Pose Detector
ComfyUI Node

Mascot Pose Detector

Pose detection for characters that aren't built like people

By grmchn·Created about a year ago·Updated 3 months ago· 102
Mascot Pose Detector
  • mascot_pose_model
  • image
  • pose_keypoint
width1024
height1024
threshold0.30

Mascot Pose Detector is the node this pack's mascot half exists to deliver: it estimates a 25-point body pose on characters that normal DWPose simply cannot handle - mascot suits, costume characters, chibi and otherwise stylized bodies. Standard pose detectors are trained on real human proportions, so a giant-headed suit character reads as a deformed blob. This detector was trained to look at exactly those shapes and still produce a clean, human-compatible skeleton you can drive generation with.

The output is a POSE_KEYPOINT, which is the whole point: once it's in that format, your mascot character drops straight into the same pipeline as a human - ProportionChanger Reference to reshape proportions, Params to fine-tune, Pose Render to preview, and from there into VACE or ControlNet-style conditioning for actual video. The pack's SCAIL example workflow literally runs mascot detection straight into ConvertToSCAILPose to drive SCAIL-Pose video generation with a suit character. That's the gap this node closes: previously, suit characters were simply off the table for pose-driven workflows.

How it works

It's a two-model top-down pipeline, both running in ONNXRuntime. First the RTMDet-style bounding-box model finds the body region (the same detector the standalone Mascot BBox Detector exposes), then a DINOv2-backed ViTPose keypoint model (dinov2_vitpose_l_v2 by default) estimates joints inside that crop. The results get rebuilt into the pack's 25-point POSE_KEYPOINT format on the canvas size you specify, including toe keypoints. If no body is found, you get an empty frame instead of a crash.

The inputs that matter

  • mascot_pose_model - output of DownloadAndLoadMascotDWPoseModel. Required; the node has no model of its own.
  • image - the input, RGB float [0,1].
  • width / height (defaults 1024×1024) - the output canvas size the keypoints are mapped onto, not a resize of your image. Match it to whatever your downstream model expects (e.g. the video generation resolution), because the skeleton coordinates are expressed in this canvas.
  • threshold (default 0.3) - keypoint confidence cutoff.

Output is pose_keypoint, ready for the rest of the pack.

Install and gotchas

Shared pack install - ComfyUI Manager search "ComfyUI-ProportionChanger", or clone + pip install -r requirements.txt + restart. First run downloads the ONNX models from HuggingFace into ComfyUI/models/mascot_body_detect/, so you need network once. And as with the loader node: the pack installs CPU-only onnxruntime unless you swap in onnxruntime-gpu, and the cuda flag on the loader will just fall back to CPU otherwise.

The two traps people actually hit: forgetting the loader (red socket, no output), and mismatching the canvas size - if you set width/height to 512 but your video model wants 1024, your pose renders tiny or off-center, and it can look like a detection failure when it's really a canvas mismatch. Also set expectations: the model handles stylized proportions, not mangled input - a heavily cropped or nearly invisible subject still returns an empty skeleton.

CategoryProportionChanger

Inputs (5)

NameTypeDefaultDescription
mascot_pose_modelMASCOT_POSE_MODELOutput of (Down)Load Mascot Pose Model
imageIMAGEInput image, RGB float [0,1].
widthINT102464–8192
heightINT102464–8192
thresholdFLOAT0.300–1

Outputs (1)

NameTypeDescription
pose_keypointPOSE_KEYPOINT