UniRig Rig to GLB ⚡
Turning a Predicted Rig Into a File You Can Open
- rig
- model_3d
Everything up to here has been tensors in ComfyUI's memory. This node is where the rig becomes a file: a skinned, bind-pose GLB you can drop into Blender, Unity, or a Mixamo retarget and watch move. It takes one input, rig, and returns model_3d as FILE_3D_GLB. That's the whole interface.
What's in the file
Writing a skinned glTF is not the same as writing a mesh, and the parts that make it work are the parts people forget when they write one by hand:
- a joint node tree - actual glTF nodes with
childrenarrays, one per bone, mapped to theskins[0].jointslist; - inverse bind matrices, one per joint, which is what gives each bone its rest-pose reference frame;
JOINTS_0andWEIGHTS_0vertex attributes - the top 4 weight influences per vertex, normalised. glTF's standard limits you to four, so influences 5 through 8 are dropped, which is why the weights matrix is trimmed rather than dumped wholesale;- the mesh itself, in bind pose, with normals if the source mesh had them.
The node builds those bytes in memory and hands them back as a core File3D, which means it composes with everything ComfyUI already has: Save 3D Model (SaveGLB), Save3DAdvanced, Preview 3D. Nothing bespoke.
The shape of a working chain
UniRig Load Mesh (or TripoSG's mesh output) → Extract Skeleton → Apply Skinning → Rig to GLB → Save 3D Model, with Preview 3D on the end if you want to spin it before committing. The pack's example_workflows/triposg_to_unirig_rigged_glb_api.json is image → TripoSG → save → load → rig → save, and unirig_glb_to_rigged_glb_api.json is the second half on its own.
That glue matters more than it sounds: because the input and output are both core types (MESH in, FILE_3D_GLB out), you can rig in the same graph you generated in, or split it into two graphs and run the rig job separately. Both are legitimate; splitting is what most people end up doing, because rigging a mesh you're still iterating on in Blender is the wrong order of operations.
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 → "ComfyUI-GGUF-Loader" → restart. This node needs no weights and no extra packages - the GLB writer is part of the pack's vendored UniRig code. Note the licence detail the README is explicit about: vendor/unirig is GPL-3.0 (from PozzettiAndrea's ComfyUI-UniRig), while the rest of the pack is Apache-2.0. If you're shipping something derived from this, that's the file to read.
Where it goes wrong
An empty or bone-less GLB. Almost always the wrong skeleton_template upstream. articulationxl produces a generic skeleton with generic names, and some tools' importers silently skip rigs whose joint names they don't recognise; mixamo's mixamorig:* names are the most broadly compatible, which is why they're the default. If your viewer shows a mesh and no armature, check the template before the exporter.
Deformation looks broken in-engine but fine in preview. You're seeing the four-influence truncation. UniRig can predict more than four bones per vertex, glTF carries four, so a vertex split evenly across six joints gets normalised down to its four largest. At smooth_iters above 3 this gets worse because diffusion spreads influence across more bones. Drop smooth_iters back to 1 and compare.
Bind pose, not posed. The output is explicitly bind pose - it does not contain an animation. The bone hierarchy and weights are there; the motion is your job, in Blender, Mixamo, or UniRig upstream's own pose nodes which this port doesn't expose.
Only one object rigged. If your file had several meshes, Extract Skeleton rigged item 0. Load and rig the others separately.
And the closing thought, because it's the one that decides whether any of this is worth your evening: the rig works, the weights work, the file is valid - but the mesh under it is probably marching-cubes triangles, and it will deform accordingly. Auto-rigging is the last mile of a pipeline whose earlier miles don't produce animation-ready topology. Treat this node as the tool that gets you a starting rig, and be pleasantly surprised rather than annoyed when the elbows still need work.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| rig | CCTECH_UNIRIG_RIG | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| model_3d | FILE_3D_GLB | — |