ComfyUI Node

πŸƒ Body Pose Estimator

Real MediaPipe pose tracking, with a caveat about its confidence numbers

By kanibusΒ·Created about a year agoΒ·Updated about a year agoΒ· 5
πŸƒ Body Pose Estimator
  • image
  • pose_landmarks
  • pose_visualization
  • person_mask
  • confidence
β—„pose_modelfullβ–Ί
β—„detection_confidence0.50β–Ί
β—„enable_segmentationfalseβ–Ί
β—„smoothing0.50β–Ί
β—„wan_versionautoβ–Ί
β—„enable_t2i_adaptertrueβ–Ί
β—„cache_resultstrueβ–Ί

Another of the Kanibus pack's genuinely working nodes. BodyPoseEstimator runs MediaPipe's pose model - 33 body landmarks covering torso, limbs, face and hands-as-ankles - and gives you the landmarks, a drawn visualization, a person mask, and a confidence number. Given that the pack it ships in is half real and half placeholder (the kanibus/kanibus repo is Claude-generated, last commit Aug 2025), it's worth knowing which half this is in: the real one.

How it works

It feeds your image through MediaPipe Pose and pulls out the 33 landmark points, scaled to pixel coordinates (plus a z value per landmark - relative, not metric). It draws the skeleton with MediaPipe's connection map, and produces a person_mask one of two ways: if enable_segmentation is on and MediaPipe's segmentation mask is available, that becomes the mask; otherwise it falls back to a bounding box computed from the detected landmark extremes. The box fallback is coarse but harmless.

Outputs: pose_landmarks (POSE_LANDMARKS, a 33Γ—3 array), pose_visualization (IMAGE with the skeleton drawn), person_mask (MASK), confidence (FLOAT).

The inputs that matter

  • pose_model (lite/full/heavy) - these are the real MediaPipe model tiers in spirit, but the shipped code doesn't actually swap models; it uses a single pose instance and just tweaks the detection threshold. Pick full and move on.
  • detection_confidence (0.1–1, default 0.5) - lower for blurry or far-away subjects.
  • enable_segmentation (default off) - turns on the real person silhouette mask instead of the bbox fallback. Costs a bit of speed.
  • smoothing - declared but largely inert in the code; don't expect much from it.

One honest caveat: confidence is hardcoded to 0.9 whenever any pose is detected. It's a real output, but it's not a meaningful measure of pose quality - treat it as "a person was detected," not "this pose is great."

What to do with it

The pose_visualization output is the one that plugs into pose-driven workflows: a skeleton-drawn image that any OpenPose-style ControlNet can consume. Note that with this pack's own MultiControlNetApply, "consume" is doing a lot of work - that node returns your model unchanged rather than actually conditioning it. If your goal is real pose-to-generation, take pose_visualization and wire it into a standard ControlNet OpenPose setup with a proper apply node instead.

Installing

cd ComfyUI/custom_nodes
git clone https://github.com/kanibus/kanibus
cd kanibus    # lowercase - README's "cd Kanibus" fails on Linux/Mac
pip install -r requirements.txt   # or requirements_minimal.txt if it clashes
python install.py

Restart ComfyUI, find it under Kanibus. MediaPipe's pose model downloads automatically (~a few MB); nothing manual. The README's "5.6GB of ControlNet models required" line doesn't apply to this node.

Gotchas

  • Full-body framing. Pose detection wants the person roughly in frame; a close-up face shot won't produce a useful pose.
  • Segmentation mask availability varies. MediaPipe Pose's segmentation mask isn't guaranteed in every frame; if enable_segmentation is on and the mask is missing, it quietly drops to the bbox fallback.
  • The pose_model selector is cosmetic. Don't expect the lite/heavy performance difference the name implies.

If you want pose landmarks in ComfyUI without dragging in the whole pack, there are more mature standalone pose nodes - but if you've already installed Kanibus for the eye tracking, this is a perfectly usable pose tracker. It does what it says, which is the exception rather than the rule in this repo.

CategoryKanibus

Inputs (8)

NameTypeDefaultDescription
imageIMAGEβ€”
pose_modelCOMBOfull3 options: lite, full, heavy
detection_confidenceFLOAT0.500.1–1β€”
enable_segmentationoptBOOLEANfalseβ€”
smoothingoptFLOAT0.500–1β€”
wan_versionoptCOMBOauto3 options: wan_2.1, wan_2.2, auto
enable_t2i_adapteroptBOOLEANtrueβ€”
cache_resultsoptBOOLEANtrueβ€”

Outputs (4)

NameTypeDescription
pose_landmarksPOSE_LANDMARKSβ€”
pose_visualizationIMAGEβ€”
person_maskMASKβ€”
confidenceFLOATβ€”