Nodes/ComfyUI-SCAIL-Pose/NLF Predict Poses
ComfyUI Node

NLF Predict Poses

3D multi-person pose estimation for SCAIL-style pose control

By kijai·Created 8 months ago·Updated 4 months ago· 322
NLF Predict Poses
  • nlf_model
  • images
  • pose_results
  • bboxes
per_batch1
num_aug1
detector_threshold0.30

This is the actual detector - the node that looks at your images and figures out, in 3D, who's in the frame and how they're posed. NLFPredictPoses takes a loaded NLF model plus your driving footage and runs full multi-person 3D pose and shape estimation across it. It's the working half of ComfyUI-SCAIL-Pose, kijai's cleaned-up port of Z.ai's own SCAIL-Pose pipeline, and it's what stands behind the "SCAIL pose control" example workflow in his ComfyUI-WanVideoWrapper pack - extract a pose sequence from a driving video, then drive a SCAIL generation off that instead of the raw footage.

How it works

Under the hood this runs a two-stage pipeline: a person detector finds bounding boxes in each frame, then each detected person gets cropped and handed to the NLF model for a 3D pose and shape estimate - unlike OpenPose or DWPose, which output flat 2D joint coordinates, NLF's whole point is producing something that behaves in 3D. You can trade accuracy for speed with num_aug (test-time augmentation - running the same crop through slightly perturbed multiple times and averaging), and control memory pressure with per_batch, since running every frame of a long clip through at once is a fast way to run out of VRAM.

The inputs and outputs that matter

  • nlf_model and images (required) - the loaded model from NLFModelLoader, and your driving frames. The node's own tooltip on images spells out the expected shape: "Input images (BHWC format)".
  • per_batch (default 1, range -1 to 10000) - the tooltip says it plainly: "Images per batch. -1 = all at once. 1 = lowest VRAM usage." Start at 1 if you're not sure your GPU can handle a long clip; bump it up once you know it fits.
  • num_aug (default 1, range 1-20) - "Number of test-time augmentations. More = slower but more accurate." Leave it at 1 unless you're seeing jittery or clearly wrong joints and have compute to spare.
  • detector_threshold (default 0.3, 0-1) - the person-detection confidence cutoff. Lower it if people in your frame are getting dropped entirely; raise it if you're picking up false positives.
  • Outputs: pose_results (NLFPRED) feeds RenderNLFPoses or SaveNLFPosesAs3D; bboxes (BBOX) are the detected person boxes, handy if you want to crop or composite based on where people actually were found.

How to install it

Same pack as the loader - via ComfyUI Manager, search ComfyUI-SCAIL-Pose, install, restart. Manually: cd ComfyUI/custom_nodes && git clone https://github.com/kijai/ComfyUI-SCAIL-Pose, then pip install -r ComfyUI-SCAIL-Pose/requirements.txt (taichi, opencv-python, pillow), restart. You'll also need the NLF weight file (nlf_l_multi_0.3.2_fp16.safetensors, from Kijai/WanVideo_comfy on Hugging Face, SCAIL subfolder) sitting in ComfyUI/models/nlf/ before NLFModelLoader has anything to load.

Common issues & troubleshooting

Complex poses come back wrong or empty. This isn't guesswork - the actual SCAIL developer weighed in directly on a Reddit thread about this exact pipeline: "the NLFPose does not perform so well without segmentation, we recommend segment the character before doing pose extraction, may well help the pose extraction in complex scenarios." If you're feeding it a cluttered scene or overlapping people, segment your subject out first rather than fighting the detector.

It falls apart on fast motion or camera work. Independent user reports on that same thread match the dev's caveat: martial-arts-style complex poses came back mangled, legs sometimes didn't track at all, and camera zooms or pans confused it. This is a real, acknowledged limitation of the current model, not a settings problem you can tune away - treat it as "works well on a mostly-static single subject" rather than "handles anything you throw at it."

People are missing from pose_results. Check detector_threshold first - if it's set too aggressively, borderline detections get thrown out before pose estimation ever runs on them.

Running out of VRAM on a long clip. Drop per_batch down to 1. It's the slowest setting but it's there specifically so a long video doesn't OOM you on frame one.

CategorySCAIL-Pose

Inputs (5)

NameTypeDefaultDescription
nlf_modelNLF_MODEL
imagesIMAGEInput images (BHWC format)
per_batchoptINT1-1–10000Images per batch. -1 = all at once. 1 = lowest VRAM usage.
num_augoptINT11–20Number of test-time augmentations. More = slower but more accurate.
detector_thresholdoptFLOAT0.300–1Person detection confidence threshold

Outputs (2)

NameTypeDescription
pose_resultsNLFPRED
bboxesBBOX