Nodes/ComfyUI-GGUF-Loader/UniRig Skin Model Loader ⚡
ComfyUI Node

UniRig Skin Model Loader ⚡

Teaching the Mesh to Follow the Bones

By ChrisColeTech·Created 2 months ago·Updated 4 days ago· 24
UniRig Skin Model Loader ⚡
    • skinning_model
    ◄checkpoint▾►
    ◄precisionfp32►

    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, from ComfyUI/models/unirig/. The dropdown lists .safetensors there, sorted with "skin"-named files first, since you'll typically have both UniRig checkpoints in that folder.
    • precision - fp32 default, plus bf16, fp16, auto. Same rule as the skeleton loader: fp32 is the POC's value, auto follows 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.

    Category🤖 CCTech/UniRig

    Inputs (2)

    NameTypeDefaultDescription
    checkpointCOMBOskin.safetensors (UniRig PTv3 skinning model) in models/unirig.
    precisionCOMBOfp324 options: fp32, bf16, fp16, auto

    Outputs (1)

    NameTypeDescription
    skinning_modelCCTECH_UNIRIG_SKINNING_MODEL—