Make-It-Animatable (Auto-Rig Mesh)
Make a static 3D mesh walk without ever opening Blender
- rigged_glb_path
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:
- Estimates the character's pose (SMPL-X style joint prediction).
- Predicts blend weights for the mesh.
- Fits the result to the best-matching skeleton from a Mixamo bone library.
- 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 loginor anHF_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 wrappedrequirements.txtand dropping a git patch intopatches/. - Windows long paths. Paths get long here. Enable
LongPathsEnabledin the registry and reboot before you blame the node. - Missing pretrained models / Mixamo data. Delete
Make_It_Animatable/output/best/new/orMake_It_Animatable/data/Mixamoinside 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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| input_model_path | STRING | — | |
| 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_glb_path | STRING | — |