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

Make-It-Animatable (Auto-Rig Mesh)

Make a static 3D mesh walk without ever opening Blender

By speige·Created 10 months ago·Updated 2 months ago· 7
Make-It-Animatable (Auto-Rig Mesh)
    • rigged_glb_path
    input_model_path
    no_fingerstrue
    use_normalsfalse
    weight_postprocesstrue
    animation_file

    Rigging is the most annoying job in 3D, and it's a gateway skill: no armature, no animation. This node is the "skip the gateway" button. Give it a humanoid 3D mesh - GLB, OBJ, FBX, whatever you have sitting in an output folder - and it returns a rigged GLB with a Mixamo-bone-format armature, ready to have walk cycles dumped on it. No Blender window, no weight painting, no week of tutorials.

    It's a ComfyUI wrapper around Make-It-Animatable, the NeurIPS 2024 paper (arXiv 2411.18197) from jasongzy, repackaged by speige. The upstream project is a standalone Gradio app; this node exposes it as one box in the graph.

    How it actually works

    The node is deceptively simple - one input string, one output string - but underneath it's doing a lot. On first run it clones the upstream repo, pins it to a known-good revision, applies a handful of compatibility patches, downloads pretrained models and Mixamo bone data from HuggingFace, and builds an isolated Python 3.11 venv (via uv) inside its own folder. Then it launches a headless Blender subprocess that:

    1. Estimates the character's pose (SMPL-X style joint prediction).
    2. Predicts blend weights for the mesh.
    3. Fits the result to the best-matching skeleton from a Mixamo bone library.
    4. Exports a rigged GLB whose armature uses Mixamo's bone names - so Mixamo's animation library just works against it.

    That's why the output is so usable: the skeleton isn't some bespoke rig you have to learn; it's the standard everyone's animations are already made for.

    The inputs that matter

    You set two things in practice: the path and the fingers.

    • input_model_path - a plain file path to your mesh (GLB/OBJ/FBX). This node is not a "load 3D" node; it takes a string. You'll usually type or paste a path, or wire it from another custom node that hands out a path.
    • no_fingers (default true) - whether your model doesn't have ten separate fingers. If your character's hands come out mangled, flipping this on (it's on by default) tells the rig to stop fighting for individual fingers.
    • use_normals (default false) - helps when limbs are pressed close to the body, where sampling gets confused. Turn it on for hugging-pose or A-pose-with-tight-arms models.
    • weight_postprocess (default true) - the author's empirical cleanup pass on the predicted blend weights. Leave it on; it fixes more than it breaks.

    animation_file is the fun one. Leave it empty and you get a static rigged mesh. Point it at one or more Mixamo .fbx animation files (multiple paths, one per line in the multiline box) and the node bakes the animation right into the GLB. That's how you go from "a model" to "a model doing the floss" in one execution.

    Output

    rigged_glb_path - a string pointing at a GLB written to ComfyUI's output/ folder, named after your input file plus _rigged.glb. It's not an image, so it won't show on the canvas; wire it to a save node, or just note the path and open it in any GLB viewer.

    Installing it

    ComfyUI Manager: search "Make-It-Animatable" and install. Or the manual route:

    cd ComfyUI/custom_nodes
    git clone https://github.com/speige/ComfyUI_Make-It-Animatable
    

    Then restart ComfyUI. First run is not quick. The node clones the upstream repo, downloads pretrained models, and builds a whole second Python environment - budget several minutes and a decent internet connection before the first job actually starts. Two prerequisites will bite you:

    • Blender must be on your PATH. The pipeline runs inside Blender headless; if Blender can't import/export FBX or GLB, the run dies. Install Blender and make sure the executable is findable.
    • A HuggingFace account, logged in. The Mixamo bone dataset it downloads is gated - you have to visit the dataset page, accept the terms, then authenticate locally (huggingface-cli login or an HF_TOKEN). Skip this and setup fails with a helpful-but-easy-to-miss error.

    Common issues

    This is a heavyweight node in a graph of featherweights, so a few failure modes are predictable:

    • CUDA version mismatch. The wrapped repo installs its own torch (cu128) inside its venv. If it doesn't match your toolkit, the subprocess errors out. Check nvcc --version; the README walks you through editing the wrapped requirements.txt and dropping a git patch into patches/.
    • Windows long paths. Paths get long here. Enable LongPathsEnabled in the registry and reboot before you blame the node.
    • Missing pretrained models / Mixamo data. Delete Make_It_Animatable/output/best/new/ or Make_It_Animatable/data/Mixamo inside the node folder and restart to force a re-download.
    • Broken venv. Delete Make_It_Animatable/venv311/ and restart; it rebuilds itself.

    Where people get burned: they expect a lightweight node, hit the first-run setup storm, and panic. It's a one-time cost. The second run is a normal few-seconds job, and you get a properly animated humanoid out of it - which is a genuinely rare trick for a single node to pull off.

    CategoryMake-It-Animatable

    Inputs (5)

    NameTypeDefaultDescription
    input_model_pathSTRING
    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_glb_pathSTRING