Make-It-Animatable Gaussian-Splat (Auto-Rig)
Gaussian-splat people shouldn't stand still — this node fixes that
- rigged_blend_path
So you've got a 3D Gaussian splat of a person - a .ply capture you scanned, downloaded, or generated - and it's gorgeous, and it just stands there. Every tool that renders splats treats them as scenery. This node is the exception: it auto-rigs a humanoid Gaussian splat into a Mixamo-bone-format armature, so your splat person can finally move like a character instead of posing like a statue.
It's the sibling of the mesh version (MakeItAnimatableRig) in the same pack, and it shares all the heavy machinery. Same wrapper around jasongzy's Make-It-Animatable paper (arXiv 2411.18197), same one-time setup, same first-run storm. The difference is the input and what comes out the other side.
How it works (and how it differs from the mesh node)
Same pipeline under the hood: clone the upstream repo at a pinned revision, apply compatibility patches, download pretrained models and Mixamo bone data, build an isolated Python 3.11 venv inside the node folder, then hand the job to a headless Blender subprocess that predicts the character's pose, estimates blend weights, and fits the result to a best-matching Mixamo skeleton.
The key difference is sampling. A Gaussian splat isn't a surface you can weight-paint; it's a cloud of blobs. So this node samples only the "solid" splats - the ones with opacity above your threshold - and rigs those. It's more experimental than the mesh version, and the results are more variable. You're asking a model trained on clean humanoid meshes to reason about a noisy point cloud, and sometimes it shows.
The inputs that matter
- input_model_path - a file path to your splat. The tooltip is blunt: it must be a Gaussian-splat
.ply. Don't feed it a generic point cloud; it expects 3DGS-style attributes (positions, opacities, covariance data, colors) - theoutput.plya standard gaussian-splatting training run leaves behind. - opacity_threshold (default
0.01) - only splats with opacity above this get used in sampling. Too high and you carve chunks out of the person; too low and you let floating noise into the rig. The default is a reasonable starting point; raise it if the output looks bloated with ghost splats. - no_fingers (default
true) - your splat almost certainly doesn't have ten separate fingers (splats rarely capture that detail), so leave it on. Flip it if hand results are bad. - use_normals (default
false) - splats usually don't carry normals, but if yours do and limbs are close to the body, this can help the sampling. - weight_postprocess (default
true) - the empirical blend-weight cleanup. Leave it on.
animation_file - same deal as the mesh node: give it one or more Mixamo .fbx paths (one per line) and it bakes the animation right into the output, so you get a moving splat rather than a rigged static one.
Output
rigged_blend_path - note the suffix. Splats can't go to GLB, so this node hands you a rigged Blender file (.blend) in ComfyUI's output/ folder, containing the auto-rigged splat plus its Mixamo armature. That means this output is only useful if you're willing to open Blender - the whole point is you take the .blend in, add animations, and render from there. Don't expect to preview it on the canvas.
Installing it
Identical to the mesh node - it's the same pack. ComfyUI Manager: search "Make-It-Animatable". Or:
cd ComfyUI/custom_nodes
git clone https://github.com/speige/ComfyUI_Make-It-Animatable
Restart, and brace for the one-time setup: it clones the upstream repo, downloads pretrained models, and builds a second Python 3.11 environment, so the first run takes minutes. Two prerequisites trip people up before they ever see a splat move:
- Blender on your PATH. The pipeline runs inside headless Blender. No Blender, no rig.
- A logged-in HuggingFace account. The Mixamo bone dataset it pulls is gated - you must accept the terms on the dataset page, then
huggingface-cli loginor setHF_TOKEN. Setup dies with a clear error if you skip this.
Common issues
Everything from the mesh node applies here: CUDA version mismatches in the wrapped repo's own venv (check nvcc --version, patch its requirements.txt if needed), Windows long-path limits, and the delete-to-redownload cures (Make_It_Animatable/output/best/new/, Make_It_Animatable/data/Mixamo, Make_It_Animatable/venv311/).
The node-specific gotcha is input quality. If your splat isn't a clean single humanoid - two people, a partial scan, heavy background splats - the auto-rig will do something confidently wrong. Clean the splat first or lower your expectations. This is the fiddlier, more fun half of the pack, and it earns its place for anyone who actually lives in Blender and has splat data sitting around.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| input_model_path | STRING | Must by Gaussian-Splat in `.ply` format. | |
| opacity_threshold | FLOAT | 0.0100–1 | Only solid Gaussian Splats with opacities larger than this threshold are used in sampling. |
| no_fingers | BOOLEAN | true | Whether the input model does not have ten separate fingers. Can also be used if the output has unsatisfactory finger results. |
| use_normals | BOOLEAN | false | Use normal information to improve performance when the input has limbs close to other ones. |
| weight_postprocess | BOOLEAN | true | Apply some empirical post-processes to the blend weights. |
| animation_fileopt | STRING | Path to Mixamo animation file to bake. Can be a single path or multiple paths separated by newlines or carriage returns. |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| rigged_blend_path | STRING | — |