π Body Pose Estimator
Real MediaPipe pose tracking, with a caveat about its confidence numbers
- image
- pose_landmarks
- pose_visualization
- person_mask
- confidence
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. Pickfulland 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_segmentationis on and the mask is missing, it quietly drops to the bbox fallback. - The
pose_modelselector 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.
Inputs (8)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | β | |
| pose_model | COMBO | full | 3 options: lite, full, heavy |
| detection_confidence | FLOAT | 0.500.1β1 | β |
| enable_segmentationopt | BOOLEAN | false | β |
| smoothingopt | FLOAT | 0.500β1 | β |
| wan_versionopt | COMBO | auto | 3 options: wan_2.1, wan_2.2, auto |
| enable_t2i_adapteropt | BOOLEAN | true | β |
| cache_resultsopt | BOOLEAN | true | β |
Outputs (4)
| Name | Type | Description |
|---|---|---|
| pose_landmarks | POSE_LANDMARKS | β |
| pose_visualization | IMAGE | β |
| person_mask | MASK | β |
| confidence | FLOAT | β |