Automatically rig 3D models with UniRig (VAST-AI-Research, SIGGRAPH'25) โ predict a skeleton, predict skinning weights, and merge the rig back onto the original mesh. Use when the user wants auto-rigging for .obj/.fbx/.glb/.gltf/.dae/.vrm assets, a skeleton or skin weights for a character or creature, a UniRig environment prepared on a CUDA machine, batch rigging of a model directory, or an honest comparison between UniRig, SkinTokens, Tripo, Mixamo, AccuRig, and Blender Rigify. Triggers on: unirig, auto rig, auto-rigging, 3D rigging, skeleton prediction, skinning weights, rig a character, armature generation, rigged glb, rigged fbx, bone weights.
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
A direct command skips the review prompt. Inspect the source before running it.
The command stays on one line. Scroll horizontally to inspect it before copying.
Prefer a local copy? Download the files currently available to SkillsMP.
File Explorer
10 files
Showing SKILL.md
SKILL.md
Source instructions ยท Read-only preview
name
unirig
description
Automatically rig 3D models with UniRig (VAST-AI-Research, SIGGRAPH'25) โ predict a skeleton, predict skinning weights, and merge the rig back onto the original mesh. Use when the user wants auto-rigging for .obj/.fbx/.glb/.gltf/.dae/.vrm assets, a skeleton or skin weights for a character or creature, a UniRig environment prepared on a CUDA machine, batch rigging of a model directory, or an honest comparison between UniRig, SkinTokens, Tripo, Mixamo, AccuRig, and Blender Rigify. Triggers on: unirig, auto rig, auto-rigging, 3D rigging, skeleton prediction, skinning weights, rig a character, armature generation, rigged glb, rigged fbx, bone weights.
allowed-tools
Bash Read Write Edit Glob Grep WebFetch
compatibility
Requires Python 3.11 and an NVIDIA CUDA GPU for inference (spconv, flash_attn, torch_scatter/torch_cluster). The routing, dry-run planning, and GLB inspection paths work on any machine.
Only rig assets the user is licensed to modify. UniRig is MIT-licensed, but its checkpoints,
the Rig-XL/VRoid/Objaverse data, and the user's own models each carry their own terms.
UniRig is a two-stage autoregressive rigging framework: a GPT-like transformer predicts a
topologically valid skeleton from mesh geometry, then a bone-point cross-attention model
predicts per-vertex skinning weights. A third step merges the predicted rig back onto the
original (full-resolution, textured) asset.
The single most common failure is skipping the merge stage or merging the wrong file โ see
Step 5. The second most common failure is an environment that silently lacks CUDA extensions.
When to use this skill
The user wants a static 3D character/creature/prop turned into a rigged asset
The user needs a skeleton only, or skin weights for a skeleton they already edited
The user needs UniRig installed and verified on a CUDA machine, or wants to know up front that
their machine cannot run it
The user wants to batch-rig a directory of models
The user is choosing between UniRig, its successor SkinTokens, or classical/hosted riggers
The user has a rigged output and wants to verify that joints and skin weights actually landed
Instructions
Step 1: Capture the intake packet and pick the stage
Collect four facts before running anything:
Asset: file format (.obj, .fbx/.FBX, .dae, .glb, .gltf, .vrm), poly count, single
model or directory, textured or not
Goal: skeleton only, skin only, or a fully rigged deliverable
Hardware: NVIDIA GPU + CUDA version, VRAM, OS (no CUDA โ no inference; route out)
Constraint: install budget (UniRig needs spconv, flash_attn, torch_scatter,
torch_cluster, bpy), and whether hand-authored control over the skeleton is required
Routing rules:
Static mesh, no skeleton yet โ ()
skeleton stage
--stage skeleton
Skeleton exists (predicted or hand-edited) โ skin stage (--stage skin)
Deliverable must keep the original geometry/materials โ merge stage (--stage merge)
All three in one shot โ --stage all (the default of scripts/rig.sh)
doctor.sh reports Python 3.11, torch + CUDA availability, spconv, torch_scatter,
torch_cluster, flash_attn, bpy, trimesh, the UniRig checkout, its launch/inference
scripts, and Hugging Face reachability. It exits 1 when a blocking item is missing, so an
agent can stop before promising a rig that cannot run. Use --unirig-home <path> (or
UNIRIG_HOME) when the checkout is not at ~/.cache/unirig/UniRig.
Step 3: Install the skill and, when the machine qualifies, the upstream repo
# print the exact upstream commands without executing them
bash scripts/rig.sh --input examples/giraffe.glb --output results/giraffe_rigged.glb --dry-run
# run the whole pipeline (skeleton โ skin โ merge)
bash scripts/rig.sh --input examples/giraffe.glb --output results/giraffe_rigged.glb
# one stage at a time
bash scripts/rig.sh --stage skeleton --input model.glb --output results/model_skeleton.fbx
bash scripts/rig.sh --stage skin --input results/model_skeleton.fbx --output results/model_skin.fbx
bash scripts/rig.sh --stage merge --source results/model_skin.fbx --target model.glb \
--output results/model_rigged.glb
# whole directory (skeleton and skin stages only โ upstream merge takes one file pair)
bash scripts/rig.sh --stage skeleton --input-dir assets/ --output-dir results/skeletons/
rig.sh is a thin, honest wrapper over launch/inference/generate_skeleton.sh,
generate_skin.sh, and merge.sh: it validates the input suffix, derives intermediate
<input>_skeleton.fbx / <input>_skin.fbx paths next to the final output (override with
--skeleton-out / --skin-out), runs the stages in order from UNIRIG_HOME, and fails when an
expected artifact is missing instead of reporting a rig that was never written. --seed,
--faces-target-count, --num-runs, --add-root, --force-override, --skeleton-task, and
--skin-task are passed straight through to upstream with upstream's own defaults.
Step 5: Respect the two merge rules
Merge the skin file, not the skeleton file.merge.sh --source <skeleton>.fbx produces an
armature with no skinning weights. Use the *_skin.fbx output for a deliverable rig.
Fix the skeleton before skinning. Skin quality collapses when bones are missing (tails,
wings, extra limbs). Hand-edit the predicted skeleton in Blender, then re-run --stage skin
on the edited FBX. Different --seed values produce different skeleton proposals โ cheap to
sample a few before committing.
inspect_glb.py is stdlib-only (no torch, no Blender): it parses the GLB/glTF JSON chunk and
reports meshes, nodes, skins, joint counts, animations, and whether any mesh primitive carries
JOINTS_0/WEIGHTS_0 attributes. It exits 1 when the file has no skin, which is exactly the
"merged the skeleton file by mistake" case. For FBX outputs, verify in Blender or with bpy
(see the troubleshooting reference) โ FBX is binary and not parseable stdlib-only.
Step 7: Training and datasets (only when asked)
Training, Rig-XL/VRoid data layout, the raw_data.npz key schema, and the Rignet validation task
live in references/training-and-datasets.md. Do not start a
training run for a request that only needs inference โ the published checkpoint is downloaded
automatically on first inference.
Examples
Example 1: "Rig this GLB character for me"
doctor.sh โ rig.sh --dry-run to show the plan โ rig.sh โ inspect_glb.py to prove the
output has skins and joints.
Example 2: "The tail has no bones"
Do not re-run skinning on the bad skeleton. Re-sample with another --seed, or edit the skeleton
FBX in Blender, then run --stage skin on the edited file and re-merge.
Example 3: "I'm on a MacBook"
doctor.sh exits blocking. Say so plainly and route out to a CUDA machine/cloud GPU, the hosted
Tripo rigging service, or classical Mixamo/AccuRig/Rigify โ do not pretend a CPU fallback exists.
Example 4: "Which is better, UniRig or SkinTokens?"
SkinTokens is the same lab's successor (unified autoregressive skin tokens, RL-trained, reported
98โ133% skinning and 17โ22% bone-prediction gains). Recommend it for new work; keep UniRig when
the user needs its released checkpoint, its Rig-XL tooling, or an already-working environment.
Checklist
Capture the asset/goal/hardware/constraint packet before touching a shell.
Run doctor.sh first; report a blocking environment instead of installing blindly.
Never install CUDA-only wheels on a machine without an NVIDIA GPU.
Dry-run the pipeline and show the exact upstream commands before a long GPU run.
Fix the skeleton before skinning; sample seeds when the topology looks wrong.
Merge the *_skin.fbx, never the *_skeleton.fbx, into the original asset.
Verify the deliverable with inspect_glb.py (GLB) or Blender (FBX) โ never claim success from
a command exit code alone.
Route out honestly to SkinTokens, hosted services, or classical riggers when UniRig is the
wrong tool.