Body: NLF
The robust body workhorse — flat hands included, hands on after
- model
- image
- smplx_hands
- smplx_face
- smplx
- preview
Body: NLF is the "robust single-image body" estimator of this pack, and it's the one with the most honest trade-off of the bunch. NLF (Neural Localizer Fields) is genuinely solid at recovering body pose and global orientation from one photo - it's the estimator you'd trust when the image is awkward, partially framed, or the pose is unusual. But its released model is SMPL-only, so the SMPL-X output you get is built with neutral shape and flat hands. The body is the star; hands and face are the afterthoughts, by design.
That's not a flaw you work around so much as a workflow you lean into. The pack expects you to finish the job with the specialist nodes: wire Hand: WiLoR into smplx_hands and Face: SMIRK into smplx_face, and the estimator grafts their results onto its own body. The grafting is wrist-relative - hand pose lands where the body's wrists actually are, so you don't get the classic floating-hand melt.
Inputs and outputs
Required inputs are just two:
- model - the
NLF_MODELfrom Load NLF. - image - your photo, as a normal ComfyUI
IMAGE.
Optional, and this is where the workflow gets good:
- smplx_hands - from Hand: WiLoR. Grafts hand pose (and any face the hands result carries).
- smplx_face - from Face: SMIRK. Grafts jaw + expression, and takes precedence over
smplx_handsfor the face bits.
Outputs are smplx (the full SMPL-X parameter bundle - this is what you feed the SMPL-X Editor) and a preview image (a quick 512px pose render so you can sanity-check without opening the editor).
Installing
Standard pack install - ComfyUI Manager, search SMPLx Estimator, install, restart - or:
cd ComfyUI/custom_nodes
git clone https://github.com/ameliacode/ComfyUI-SMPLx-Estimator.git
cd ComfyUI-SMPLx-Estimator
pip install -r requirements.txt
python install.py
You need nlf_l_multi_0.3.2.torchscript in models/nlf/ (from the isarandi/nlf releases, CC-BY-NC) and the registration-walled SMPLX_NEUTRAL.npz in models/smplx/ - that second one is the classic pack blocker, see the Load SMPLx article.
Common issues
- GPU-only. The big one. NLF doesn't run on CPU -
deviceon the loader defaults to auto and picks the GPU, and if you don't have one, this estimator simply won't run. That's the single most common "why is my Body: NLF dead" answer. If you're CPU-bound, use Multi-HMR instead. - Flat hands surprise you. If your output has stiff hands and you didn't wire in WiLoR, that's expected behavior, not a bug. Either wire the hand path or pose the fingers in the SMPL-X Editor.
- No face expression by default. Same deal - SMIRK or the editor's expression field, not a malfunction.
This is the estimator for "I just need the body and pose to be right" - the one you'd trust on messy input. Just bring your GPU, and add WiLoR/SMIRK when you want the full person.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| model | NLF_MODEL | — | |
| image | IMAGE | — | |
| smplx_handsopt | SMPLX | Optional SMPL-X (e.g. from Hand: WiLoR) to graft hand pose + jaw + expression onto NLF's body (wrist-relative — no melt). | |
| smplx_faceopt | SMPLX | Optional SMPL-X (e.g. from Face: SMIRK) to graft jaw + expression onto NLF's body. Takes precedence over smplx_hands' face. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| smplx | SMPLX | — |
| preview | IMAGE | — |