Nodes/ComfyUI_Make-It-Animatable/Make-It-Animatable Gaussian-Splat (Auto-Rig)
ComfyUI Node

Make-It-Animatable Gaussian-Splat (Auto-Rig)

Gaussian-splat people shouldn't stand still — this node fixes that

By speige·Created 10 months ago·Updated 2 months ago· 7
Make-It-Animatable Gaussian-Splat (Auto-Rig)
    • rigged_blend_path
    input_model_path
    opacity_threshold0.010
    no_fingerstrue
    use_normalsfalse
    weight_postprocesstrue
    animation_file

    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) - the output.ply a 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 login or set HF_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.

    CategoryMake-It-Animatable

    Inputs (6)

    NameTypeDefaultDescription
    input_model_pathSTRINGMust by Gaussian-Splat in `.ply` format.
    opacity_thresholdFLOAT0.0100–1Only solid Gaussian Splats with opacities larger than this threshold are used in sampling.
    no_fingersBOOLEANtrueWhether the input model does not have ten separate fingers. Can also be used if the output has unsatisfactory finger results.
    use_normalsBOOLEANfalseUse normal information to improve performance when the input has limbs close to other ones.
    weight_postprocessBOOLEANtrueApply some empirical post-processes to the blend weights.
    animation_fileoptSTRINGPath to Mixamo animation file to bake. Can be a single path or multiple paths separated by newlines or carriage returns.

    Outputs (1)

    NameTypeDescription
    rigged_blend_pathSTRING