UniRig Skin Model Loader ⚡
Teaching the Mesh to Follow the Bones
- skinning_model
A skeleton on its own doesn't animate anything. Something has to decide how many of each vertex's eight weights go to the left forearm versus the left upper arm, and that's the second half of UniRig - a network that predicts per-vertex skin weights so you never open a weight-painting tool. This node loads it.
The mechanism, in one paragraph
UniRig's skinning model is a stack: Point Transformer V3 for the local geometry, a Michelangelo encoder for global shape, and a bone-attention block that lets each vertex attend to the predicted skeleton. Fed a mesh and its joints, it predicts a weight vector per vertex. Upstream then runs a cleanup pass - reskin edge diffusion - and this port exposes that as smooth_iters on the Apply Skinning node, not here. What matters for this node is that the network's sparse convolutions are a pure-PyTorch SubMConv3d implementation checked against real spconv to within 1e-5 max absolute error. That's the claim that makes an auto-rigger installable on a normal machine: no compiled CUDA extensions, no Blender, no torch_scatter.
What the node takes
checkpoint-skin.safetensors, 1.5 GB, fromComfyUI/models/unirig/. The dropdown lists.safetensorsthere, sorted with "skin"-named files first, since you'll typically have both UniRig checkpoints in that folder.precision-fp32default, plusbf16,fp16,auto. Same rule as the skeleton loader: fp32 is the POC's value,autofollows ComfyUI's own bf16/fp16 capability detection.
Output is skinning_model (CCTECH_UNIRIG_SKINNING_MODEL), which has exactly one consumer: Apply Skinning. Nothing else in ComfyUI understands the type.
Why the folder is worth knowing about
It's models/unirig/ - the same directory upstream [ComfyUI-UniRig] uses. If you've already installed that pack, or downloaded skeleton.safetensors and skin.safetensors for it, this one picks them up with no copying. And because every type here is CCTech-prefixed, both packs can be installed at once without one overwriting the other's node registrations. That's a small thing that saves a genuinely annoying afternoon.
Both files come from ChrisColeTech/unirig on Hugging Face - 1.4 GB skeleton, 1.5 GB skin. Budget about 3 GB for the pair plus whatever the mesh needs.
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 install (search "ComfyUI-GGUF-Loader") works as well. The dependencies this family truly needs are trimesh for the skinning stage's voxelization, plus addict, einops and timm (PTv3's DropPath path) - all in the requirements file. fast-simplification is listed too and worth having: with it you get the POC's exact decimation, without it core's QEM decimator steps in and the rig binds to a slightly different decimated mesh.
Where it goes wrong
Loading skin without skeleton. The two loaders are a pair. Extract Skeleton needs the skeleton model; Apply Skinning needs this one and a skeleton object. Buying one gets you nowhere, which is why the README lists them on one line.
"UniRig skinning needs the 'trimesh' package". The clearest error in the pack, and completely literal. pip install trimesh in the right environment - the embedded Python if you're on a Windows portable build, not your system Python.
fp16 that fractures the weights. Skinning is a regression on per-vertex weights; low precision shows up as vertices that snap between limbs rather than blending. If deformation looks wrong in a way you can't explain, put precision back to fp32 before you go hunting elsewhere.
Expecting the skin model to also produce the skeleton. It doesn't. Order of operations: Load Mesh → Extract Skeleton → Apply Skinning → Rig to GLB. Four nodes, two models, one long chain.
And the release-thread caveat that's worth repeating: the rig is only as good as the mesh under it. Dense marching-cubes triangles give you weights that are technically correct and deformations that look like rubber. The people doing useful work with this retopologise first - in Blender, because ComfyUI isn't going to do it - and then come back here for the weights.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| checkpoint | COMBO | skin.safetensors (UniRig PTv3 skinning model) in models/unirig. | |
| precision | COMBO | fp32 | 4 options: fp32, bf16, fp16, auto |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| skinning_model | CCTECH_UNIRIG_SKINNING_MODEL | — |