ComfyUI Node Runs on cloud

Draw NLF Poses

Render NLF pose predictions into a control image

By kijai·Created about a year ago·Updated 3 months ago· 6,654
Draw NLF Poses
  • poses
  • image
width512
height512
stick_width4.00
point_radius5
styleoriginal

This is the node that turns NLF's 3D pose predictions into an actual image - a drawn skeleton you can look at and, more importantly, feed into a pose-driven Wan generation. NLF (Neural Localizer Fields) estimates 3D human pose from a driving video; DrawNLFPoses renders those predictions as keypoint/stick-figure images, frame by frame. It's the last step of the "extract poses from footage" pipeline before those poses drive your character.

If you've used DWPose or OpenPose preprocessors, this is the same idea - a rendered skeleton as a control signal - just sourced from NLF's richer 3D estimate. The rendered images become the pose sequence for something like UniAnimate, VACE, or SCAIL-2 motion transfer.

How it works

You hand it the NLF pose predictions (produced by running the loaded NLF model on your driving images) plus a canvas size, and it draws each pose onto a blank image of that size - joints as points, bones as sticks. The result is an IMAGE (a batch, one per predicted frame) suitable as a pose-control input downstream. A couple of style knobs control the look of the drawn skeleton, which matters because different pose-consuming models expect their control images to look a certain way.

The inputs that matter

  • poses (NLFPRED, required) - the 3D pose predictions from the NLF prediction step. This is the data you're visualizing.
  • width / height (default 512 × 512) - the canvas size. Set these to match the resolution you'll generate at, so the pose control lines up with your output frame.
  • style (original / scail, optional) - how the skeleton is drawn. Pick scail if you're feeding SCAIL-2 motion transfer, which expects its pose images in a particular style; original is the default look otherwise. Matching the style to the consumer matters more than it looks.
  • stick_width / point_radius (optional) - thickness of the drawn bones and size of the joint dots. Cosmetic, but a control model can be sensitive to line weight, so tweak if the pose isn't reading cleanly.

The output is image (IMAGE) - the drawn pose sequence, wired into your pose-control input.

How to install it

ComfyUI Manager: search ComfyUI-WanVideoWrapper, install, restart. Manually:

cd ComfyUI/custom_nodes
git clone https://github.com/kijai/ComfyUI-WanVideoWrapper
pip install -r ComfyUI-WanVideoWrapper/requirements.txt

then restart. This node draws - it downloads nothing - but it needs NLFPRED input, which means you need the NLF model loaded (LoadNLFModel) and a prediction step ahead of it.

Common issues & troubleshooting

Poses don't line up with the generated character. Match width/height to your generation resolution. If the skeleton was drawn on a 512×512 canvas but you generate at 832×480, the pose lands off. Keep the canvas and the output the same aspect and size.

The downstream model ignores the pose. Check style. Feeding SCAIL-2 an original-style skeleton (or vice versa) can make the control model misread or ignore it - the two styles exist because different consumers want different drawings. Set it to match what you're driving.

Skeleton looks noisy or jittery frame to frame. That usually traces back upstream to the NLF prediction quality on your driving footage, not to the draw step. Cleaner, higher-res, well-lit driving video gives steadier poses. stick_width/point_radius only change how it's drawn, not how stable the underlying estimate is.

CategoryWanVideoWrapper

Inputs (6)

NameTypeDefaultDescription
posesNLFPREDInput poses for the model
widthINT512
heightINT512
stick_widthoptFLOAT4.000–1000Stick width multiplier
point_radiusoptINT51–10Point radius for drawing the pose
styleoptCOMBOoriginalstyle of the pose drawing

Outputs (1)

NameTypeDescription
imageIMAGE