Mesh from Skeleton
Give a skeleton some flesh so you can see it
- skeleton
- trimesh
Skeletons are great for analysis and terrible to look at. Mesh from Skeleton solves the "look at" half: it takes a SKELETON - the joints and bones that Extract Skeleton produces - and builds a solid TRIMESH out of it, spheres at every joint and cylinders along every bone. Same idea as a rig's visualization, except you get real geometry you can save, boolean, or drop into a viewer.
How it works
The node walks the skeleton's vertex list (joints) and edge list (bones). Each joint becomes a small sphere (trimesh.creation.uv_sphere), each bone a cylinder positioned and rotated to span its two joints. It even reads the skeleton's metadata - scale, center, whether it was normalized - so if you extracted with normalize on and the skeleton is in [-1, 1] space, the mesh rebuilds in that same space. The two inputs are:
- joint_radius (0.001–0.1, default 0.02) - sphere size at each joint.
- bone_radius (0.001–0.05, default 0.01) - cylinder thickness for each bone.
Output is a single trimesh (TRIMESH), no info string. The radius defaults are tuned for normalized skeletons - if your skeleton kept its original scale (the normalize option off), those radii will look invisible tiny, and you'll want to scale them up to match.
Why you'd bother
The honest use case is checking your skeleton extraction visually. Run Extract Skeleton → Mesh from Skeleton → Preview Mesh and you can actually see the structure you just computed - whether it's a clean tree, whether branches are landing where they should. It's also the natural pipeline partner to the pack's skeleton work: extract, convert, save as OBJ/GLB for use elsewhere. And when you're debugging the waves, sampling_dist, and shape_weight knobs of the extraction node, being able to see the result beats reading numbers.
Installing it
Standard pack install:
cd ComfyUI/custom_nodes
git clone https://github.com/PozzettiAndrea/ComfyUI-GeometryPack.git
cd ComfyUI-GeometryPack
pip install -r requirements.txt --upgrade
python install.py
Or ComfyUI Manager → GeometryPack → Install, restart. It's trimesh-only under the hood, so this node is light - the weight of the pack lives elsewhere.
Where people get burned
The scale mismatch is the #1 trap: skeletons extracted with normalize: false keep real-world scale, and the tiny default radii vanish into the mesh. Don't fight it - either extract normalized, or bump both radii up. Also note the joint spheres are low-res UV spheres by design (8×8 segments), so up close they're faceted, not smooth. That's fine for visualization; if you need a smooth surface, that's what smoothing and remeshing are for. And since this pack is young and moves fast, if a skeleton saved in an older workflow stops connecting cleanly, update the pack - the metadata handling has clearly been evolving.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| skeleton | SKELETON | — | |
| joint_radius | FLOAT | 0.0200.001–0.1 | — |
| bone_radius | FLOAT | 0.0100.001–0.05 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| trimesh | TRIMESH | — |