MultiPose ▸ Pose Extraction
Every person in the frame, one skeleton canvas — not just the one closest to the camera
- model
- images
- pose_images
- pose_keypoints
Most pose extractors in ComfyUI have a quiet bias: they detect one person. DWPose and OpenPose pick the dominant figure in the frame and hand you a single skeleton, which is exactly wrong for a group shot, a dance clip with two people, or any sports footage where the interaction is the point. MultiPose ▸ Pose Extraction is the node that fixes that - it detects every person in the frame and renders all of them onto one pose canvas. That's the whole pitch, and it's why the pack exists.
How it works
The pipeline is deliberately simple, per the README, and it's all ONNX:
- YOLO runs on each frame at 640×640 and keeps every bounding box that clears its confidence and NMS thresholds, sorted by area so each person holds a stable sequence position.
- Each detected crop is resized to 256×192, normalized with ImageNet stats, and pushed through a ViTPose Whole-Body model. The heatmaps are decoded to 133 keypoints plus confidences (body, both hands, and 68 face landmarks).
- All of those skeletons - body, hands, face - are drawn onto a single black canvas per frame and returned as a normal
IMAGE.
That black-canvas skeleton rendering is worth knowing about: it's the classic pose-guider format from the Alibaba Wan team's pose utilities (the pack literally reuses their drawing code, copyright header and all). So the output drops into Wan / SCAIL / VACE-style pose-conditioned video workflows in the same slot a single-person extractor would fill.
Inputs and outputs
There are only two inputs and you'll rarely touch either:
model- thePOSEMODELhandle from MultiPose ▸ ONNX Loader. Load that first; nothing here works without it.images- anIMAGEtensor, i.e. one frame or a whole video batch.
Outputs:
pose_images(IMAGE) - the rendered pose canvases, same resolution as the input. Feed these to a pose ControlNet, Pose Guider, or just preview them.pose_keypoints(POSE_KEYPOINT) - per-frame data in the OpenPose-style schema (pose_keypoints_2d,face_keypoints_2d,hand_left/right_keypoints_2d, canvas dimensions). Same shape DWPose/OpenPose produce, so anything that already consumes aPOSE_KEYPOINTcan take this instead.
Sensible fallback: if a frame has no people, it uses the full frame as the bounding box rather than erroring - you still get a skeleton, just a "where's the person" skeleton.
Installation and gotchas
Same pack install as the rest: ComfyUI Manager → search ComfyUI-MultiPoseToolkit, or git clone https://github.com/starsFriday/ComfyUI-MultiPoseToolkit into custom_nodes/, install the requirements, download the YOLO + ViTPose ONNX files into ComfyUI/models/detection/, restart. Nodes land under the WanMultiPose menu group.
The honest gotcha is speed. It's per-frame YOLO plus per-person ViTPose, all in Python with a tqdm bar. On CPU, a short clip with three people can take a real while; run the loader on CUDAExecutionProvider and batch short previews first. There are no tuning knobs on this node - thresholds live in the detector defaults - so if you need to relax detection confidence you're editing code or picking a different YOLO checkpoint, not flipping a slider. Given the pack is brand new (single commit), treat any weirdness as a report to the repo rather than a skill issue.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| model | POSEMODEL | — | |
| images | IMAGE | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| pose_images | IMAGE | — |
| pose_keypoints | POSE_KEYPOINT | — |