UniRig Skeleton Model Loader ⚡
The Thing That Guesses Where Bones Go
- skeleton_model
You've got a mesh from TripoSG or TRELLIS.2 and you want it to move. Somewhere in that triangle soup there's a skeleton waiting to be discovered, and UniRig's job - one half of it, anyway - is to find it. This node loads that half.
What UniRig is, briefly
UniRig is the SIGGRAPH 2025 paper everyone points at when this question comes up, and the reason isn't subtle: nothing in the open image-to-3D stack gives you a rig, and a mesh you can't pose is a mesh you can't animate. The reception when someone wrapped it for ComfyUI was warm and a little relieved - the release thread landed at +160 with comments along the lines of "that should be so much more convenient than the c4d rig I'm currently using". Auto-rigging has been a paid DCC feature and a research demo for years; here it is in a graph.
Worth saying plainly, because this is where expectations go wrong: an auto-rig is a last step, not a shortcut past the work. If the mesh's topology is marching-cubes triangles, it'll rig, and the deformation will be mushy at joints because there are no loops to bend. The community's own framing is that you retopo first, then rig - and that retopo is Blender handiwork, not something ComfyUI is going to do for you. UniRig saves you the weight painting. It doesn't save you the modelling.
What this node loads
skeleton.safetensors, a 1.4 GB checkpoint containing UniRig's skeleton generator: a Michelangelo point-cloud encoder followed by an OPT-350m decoder running in pure PyTorch that emits bone tokens autoregressively. That "pure PyTorch" is doing real work here - the upstream ComfyUI-UniRig pack bundles its own Blender and a heavier dependency set, while this port needs no Blender, no spconv, no torch_scatter/torch_cluster, and no transformers at all. If your reason for avoiding 3D nodes in ComfyUI has been CUDA-extension install hell, this family is deliberately built to sidestep it.
Two inputs:
checkpoint- the.safetensorsfromComfyUI/models/unirig/. The dropdown lists them all, sorted so filenames containing "skeleton" float to the top, because having both UniRig checkpoints in one folder is the normal state of affairs.precision-fp32(default),bf16,fp16,auto. The tooltip spells out the split personality: fp32 is the POC's default;autopicks bf16/fp16 where the GPU supports it, which is what upstream ComfyUI-UniRig does. Start at fp32 if you're chasing fidelity on a 24GB card, switch toautoif you're tight on VRAM and the bones look the same to you.
Output is skeleton_model, which only the Extract Skeleton node wants.
Files and folders
ComfyUI/models/unirig/ - deliberately the same folder upstream ComfyUI-UniRig downloads into, so if you already have skeleton.safetensors and skin.safetensors sitting there from that pack, this one just uses them. No re-download.
# from ChrisColeTech/unirig on Hugging Face
# skeleton.safetensors (1.4 GB) -> ComfyUI/models/unirig/
# skin.safetensors (1.5 GB) -> ComfyUI/models/unirig/
Both packs can live side by side: every node id and socket type in this port is CCTech-prefixed (CCTECH_UNIRIG_SKELETON_MODEL and friends) specifically so installing this doesn't overwrite ComfyUI-UniRig's registrations.
Install
cd ComfyUI/custom_nodes
git clone https://github.com/ChrisColeTech/ComfyUI-GGUF-Loader
pip install -r ComfyUI/custom_nodes/ComfyUI-GGUF-Loader/requirements.txt
Manager search "ComfyUI-GGUF-Loader" is the same thing. For this family specifically the requirements.txt route matters - UniRig wants trimesh, addict, einops and optionally fast-simplification, and trimesh in particular is not optional: the skinning stage voxelizes the mesh with it. fast-simplification is the nice-to-have that gives you the POC's exact decimation; without it, core ComfyUI's QEM decimator is used instead.
Where people get burned
The dropdown says none. Nothing in models/unirig ends in .safetensors, or the folder is empty. There's no search outside that path.
"UniRig checkpoint 'x' not found". The dropdown offered a name and then the path lookup failed - usually because the file was moved or a symlink broke between listing and execution. Rare, but it means your model folder isn't stable (network drive, half-synced cloud folder).
Half the pair installed. This node is useless without the skinning model and vice versa; you need both checkpoints, both loaders, and an Extract Skeleton → Apply Skinning chain between them. If you've only downloaded skeleton.safetensors you have the ability to find a skeleton and no ability to bind anything to it.
fp16 on a card that quietly mishandles it. The auto path uses ComfyUI's own capability checks; picking fp16 by hand overrides them. If the skeleton comes out mangled on a 10-series or an older AMD card, drop back to fp32.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| checkpoint | COMBO | skeleton.safetensors (UniRig articulation-xl AR model) in models/unirig. | |
| precision | COMBO | fp32 | fp32 is the POC default; auto = bf16/fp16 where the GPU supports it (ComfyUI-UniRig's default). |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| skeleton_model | CCTECH_UNIRIG_SKELETON_MODEL | — |