π§ SAM 3D Body Β· estimator β Anny
The same photo-to-body job, on the licence lane you can actually ship
- image
- glb_path
- anny_params_path
Two nodes in this pack turn a photo into a body. This is the one to reach for if the output might end up in something commercial, and that's not a soft recommendation - it's the entire reason the node exists. It chains SAM 3D Body β MHR β SOMA β Anny, and it deliberately never imports Multi-HMR 2 or anny-fit, because those two upstreams are NAVER non-commercial research licensed while SAM 3D Body rides the Meta SAM License, which the pack's design record treats as acceptable for commercial game work. MHR, SOMA-X and anny are Apache 2.0.
If you've met the licensing trap before, you recognise the shape: code permissive, weights not. This node is the version where someone did the paperwork for you.
What comes out
glb_path is a grounded, Y-up, bind-pose body fitted to the person in your photo - estimator_body.glb inside a numbered run directory. Note that it arrives already grounded, so don't run it through AnnyGroundBody afterwards; that transform exists for the other estimator's camera-space convention.
anny_params_path is the more interesting output. It's an anny_params.npz carrying phenotype values plus local-change rows - the same vocabulary the presets and sliders in the card UI speak, which is what makes the result re-poseable rather than a frozen mesh. When the chain produces an anny_preset.json alongside it, that file is surfaced as a UI artifact too, so downstream tooling can pick it up.
The inputs are three lines long
image is required - an IMAGE tensor, and again only batch index 0 is used. image_path is optional and overrides the tensor entirely; the tooltip's phrasing is "direct photo path... no recompression", and that's the honest reason to prefer it. If you loaded your photo through a node that already resized or re-encoded it, you've thrown away detail the body fit would have used. For a real photo you care about, set image_path.
person_index (0β32) picks which detected person to fit, in detection order. One person in frame, leave it at 0.
How it runs
Out of process, into a separately provisioned runtime. The node spawns <runtime>/.venv/bin/python estimator_chain.py <image> <rundir> and streams PROGRESS lines into the ComfyUI log, so a long run isn't a black box. If the subprocess exits non-zero, you get the tail of its stderr rather than a generic failure.
That venv is a torch cu130 + detectron2 stack, which is why it's separate: the pack notes the system's nvcc 13.x can't build against a cu128 serving environment. It also sets LD_LIBRARY_PATH into the venv's nvidia/cu13/lib directory before spawning, because torch's nvrtc JIT - used by the warp kernels in mhr2soma - fails to open libnvrtc-builtins.so.13.0 without it. The kind of thing that costs an afternoon to discover and one line to fix once someone has.
Alongside the GLB and the npz, the run directory keeps intermediates: soma.npz and a sam3d.parquet. If something looks wrong, those are what to inspect.
Installing it - the pack, then the runtime
cd /path/to/ComfyUI/custom_nodes
git clone https://github.com/JayDataEngineer/melite-kimodo-nodes.git
cd melite-kimodo-nodes
pip install -r requirements.txt
Restart. Now the part the pack can't do for you: this node needs a provisioned estimator runtime with estimator_chain.py, its own .venv, and a SOMA-X checkout containing tools/mhr2soma.py. The default location is under the repo's data/runtime/anny-estimator; the pack's own provisioning command is pnpm run provision -- estimator, and the source references a design doc rather than a shell script - so if you're not the person who set this estate up, expect to read dev_docs/design/estimator-chain.md and assemble the environment yourself. Point ANNY_ESTIMATOR_ROOT at wherever you build it.
That's the real barrier here, and it's worth saying plainly: the SAM licence is friendlier than the NAVER one, but the install is heavier. Neither node is a one-click install, and this one is the more opinionated of the two about its environment.
If you'd rather not
You're not limited to this pack. PozzettiAndrea's ComfyUI-SAM3DBody was announced on r/comfyui in November 2025 as a straightforward SAM 3D Body wrapper, and it's the node in this space that actually has community threads around it. If you want SAM 3D Body's results inside ComfyUI and you don't need the pack's Anny parameter outputs, that's a legitimate door - and a much shorter walk.
When it breaks
anny-estimator runtime not found at ... lists exactly which of the three expected files is missing; provision them or set ANNY_ESTIMATOR_ROOT. The venv path is pinned to Python 3.11, so building it on a different interpreter will simply not be found. And if the chain exits 0 but the artifacts aren't there, the node reports "worker drifted" and points you at the run directory - that's a real failure mode, not defensive noise, and the intermediates are held for exactly this.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| image | IMAGE | Image tensor (H,W,C in 0..1) β batch index 0 | |
| image_pathopt | STRING | Direct photo path (overrides the tensor; no recompression) | |
| person_indexopt | INT | 00β32 | Which detected person (detection order) |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| glb_path | STRING | β |
| anny_params_path | STRING | β |