Wan Pose Detect — YOLO + ViTPose (V2)
Just the skeleton, please — keypoints without the face-crop and gaze machinery
- images
- model
- pose_data
- info
WanPoseDetectViTPoseV2 is the slim version of the pack's main detector. It runs the same YOLO + ViTPose detection and emits the same POSEDATA bundle - but it stops there. No face cropping, no iris/gaze pipeline, no debug overlays, no temporal smoothing. Just keypoints. If you only need a skeleton - for a ControlNet conditioning map, for a pose-editing workflow, or as the front end to the format converter in this pack - this is the node you want, because it skips a lot of compute and a whole category of failure modes.
The trade-off is exactly the feature list of the big node. PoseAndFaceDetectionV2 gives you stabilised face crops and gaze because Wan Animate's character replacement path needs them. Here there's no character to replace - you're capturing motion, so the lean pipeline is the right tool.
Inputs and what they mean
Required: images (the RGB stack) and model (the POSEMODEL from OnnxDetectionModelLoaderV2). The optional knobs mirror the main detector's:
detection_threshold(0.3 - note this is the strict side, vs. the main node's 0.05) - YOLO person confidence. If people keep getting missed, drop it toward 0.05.pose_threshold(0.3) - per-keypoint confidence; below this, the keypoint's confidence is forced to 0.use_clahe(true) - CLAHE contrast on the 256×192 pose crop, matching the main preprocessor's default.use_blur_for_pose(false) - Gaussian pre-blur for noisy frames. Interesting: this defaults off, and the pack's main node even documents a bug-fix where blur was on by default and softened the exact edges ViTPose needs. Blur only for genuinely grainy source.rescale(1.25) - bbox padding factor before the ViTPose crop.fallback_to_full_frame(true) - if YOLO finds no person, run ViTPose on the whole frame instead of skipping it. Leave on for wide shots; it's the difference between a missing skeleton and a mediocre one.
Outputs: pose_data and an info string. The bundle is compatible with the V2 editor and downstream conditioning nodes, so you can feed it into WanPoseFormatConvertV2, DrawViTPoseV2, or the face controller.
Why this one earns its place
The skeleton-only path is genuinely faster - you're cutting the MediaPipe face mesh, the L2CS/blendshape gaze engine and the crop-smoothing machinery out of every frame. For pose-conditioned generation (skeleton → pose ControlNet, the classic OpenPose-style workflow that predates Wan Animate entirely), the heavy node is overkill and its face machinery is just more that can go wrong. If you've ever watched the main detector grind through face-crop smoothing on footage you only wanted a stick figure from, this is the node that stops that.
Install: shared pack path - ComfyUI Manager search "WanAnimatePreprocessV2", or git clone https://github.com/Code2Collapse/ComfyUI-WanAnimatePreprocessV2 into custom_nodes + pip install -r requirements.txt + restart. Needs the ONNX models in ComfyUI/models/detection/ like the rest of the pack.
Inputs (10)
| Name | Type | Default | Description |
|---|---|---|---|
| images | IMAGE | RGB image stack to detect poses on. Float [0,1], shape (B,H,W,3). | |
| model | POSEMODEL | ViTPose+YOLO bundle from OnnxDetectionModelLoaderV2. | |
| detection_thresholdopt | FLOAT | 0.300–1 | YOLO person-detection confidence threshold. |
| pose_thresholdopt | FLOAT | 0.300–1 | Per-keypoint confidence threshold; below this the keypoint's confidence is forced to 0. |
| use_claheopt | BOOLEAN | true | CLAHE contrast enhancement on the 256x192 pose crop. Matches the main preprocessor default. |
| use_blur_for_poseopt | BOOLEAN | false | Apply a Gaussian blur to the images before YOLO+ViTPose (anti-aliases noisy frames). |
| blur_radiusopt | INT | 20–32 | — |
| blur_sigmaopt | FLOAT | 1.50–8 | — |
| rescaleopt | FLOAT | 1.251–2 | Bbox padding factor before crop for ViTPose. 1.25 = match the main preprocessor. |
| fallback_to_full_frameopt | BOOLEAN | true | If YOLO finds no person in a frame, run ViTPose on the entire frame instead of skipping it. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| pose_data | POSEDATA | — |
| info | STRING | — |