Nodes/ComfyUI-SCAIL-Pose/Save NLF Poses as 3D Animation
ComfyUI Node

Save NLF Poses as 3D Animation

Bake a pose prediction into an actual animated 3D file

By kijai·Created 8 months ago·Updated 4 months ago· 322
Save NLF Poses as 3D Animation
  • nlf_poses
  • output_path
filename_prefixnlf_pose_3d
fps24.0
cylinder_radius21.50

Most of this pack's pipeline ends at a 2D image. This node is for when that isn't enough. SaveNLFPosesAs3D takes the same pose prediction that RenderNLFPoses flattens into a picture and instead builds real 3D geometry from it - a bone for every joint, exported as an animated GLB (glTF binary) file you can open in Blender, a game engine, or any standard 3D viewer. It's the node for when you want the actual skeleton data out of ComfyUI, not just a picture of it.

Why you'd reach for it

The obvious case is retargeting - you extracted a pose from footage and want to drive a rigged 3D character with it elsewhere. But there's a less obvious, genuinely useful case that came up directly from the SCAIL developer on Reddit: because the NLF-based pose extraction can be shaky on complex, cluttered, or fast-moving footage, you can flip the whole pipeline around. Instead of extracting a pose from video and hoping it comes out clean, build a skeleton animation by hand in 3D software, export it as this kind of pose data, and feed that in as your driving pose. As the developer put it: "the SCAIL model is pretty robust to pose skeletons, render something in 3d software... and the SCAIL model can just do the work of 'binding' character to the skeleton." That's a real workaround for the exact failure modes users hit with complex source video - skip the shaky extraction and author the motion directly.

How it works

Each frame's joints get converted into "cylinder specs" - literally one cylinder per bone, sized by cylinder_radius - and those cylinders are written out as glTF animation keyframes at your chosen frame rate, then saved to disk. There's no video re-rendering happening here; it's pure geometry export.

The inputs and outputs that matter

  • nlf_poses (required, NLFPRED) - the pose prediction from NLFPredictPoses. Tooltip: "Input poses for the model".
  • filename_prefix (default nlf_pose_3d) - what the output file is named.
  • fps (default 24, range 1-300, step 0.1) - "Frames per second for the output animation". This sets playback speed of the exported clip; it doesn't resample your source frames, so it just changes how fast or slow the GLB plays back what it was given.
  • cylinder_radius (default 21.5) - "Radius of the cylinders representing bones." This is in the model's native units, not pixels - if bones come out comically thick or hairline-thin in your 3D viewer, this is the value to adjust. There's no auto-scaling, so expect to eyeball it once and reuse whatever works.
  • Output: output_path (STRING) - the path the file just got written to. It's an output node (this is a save, not a pass-through), so this exists mainly for chaining into something that wants to know where the file landed.

How to install it

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, restart. Unlike RenderNLFPoses, this node doesn't touch Taichi - it's pure geometry export, so it isn't affected by any GPU-rendering setup issues you might hit elsewhere in the pack.

Common issues & troubleshooting

Bones look wrong-sized in your 3D viewer. That's cylinder_radius, not a bug - it's a raw scale value with no relationship to your viewer's units by default. Adjust it and re-export until it looks right for your pipeline, then keep that number.

Animation plays too fast or slow. Check fps - it's purely a playback-rate setting on the exported file, not a resampling of the source data.

This node barely gets used compared to the rest of the pack, and that's expected. Most people building a pose-control workflow stop at RenderNLFPoses's 2D image and never need the actual 3D file - this is a deliberately niche export for when you specifically want to touch the skeleton in Blender or another 3D tool, not a step every workflow needs.

Same detection caveats as the rest of the pipeline apply upstream. If the pose going in was shaky (complex scene, no segmentation, fast camera motion), the 3D geometry coming out will be shaky too - this node doesn't clean up bad input, it just faithfully turns it into a GLB.

CategoryWanVideoWrapper

Inputs (4)

NameTypeDefaultDescription
nlf_posesNLFPREDInput poses for the model
filename_prefixSTRINGnlf_pose_3d
fpsFLOAT24.01–300Frames per second for the output animation
cylinder_radiusFLOAT21.50Radius of the cylinders representing bones

Outputs (1)

NameTypeDescription
output_pathSTRING