Nodes/ComfyUI libigl/Skeleton Wavefront (backend)
ComfyUI Node

Skeleton Wavefront (backend)

Find the spine of a mesh by sending out waves

By PozzettiAndrea·Created 10 months ago·Updated 4 days ago· 218
Skeleton Wavefront (backend)
  • trimesh
  • skeleton
fix_meshtrue
normalizefalse
waves1
step_size1.00

Some geometry problems aren't about how the surface looks - they're about the shape's bones. Curve skeletons (also called medial axes) are the one-dimensional spine of a 3D object: the line through the middle of a branch, the armature inside a character, the pipe running through a tube. You want one when you're rigging, matching, animating, or analyzing structure. Skeleton Wavefront is GeometryPack's way of extracting that spine by literally sending waves through the mesh and watching where they collide.

It's a backend under the Extract Skeleton front node (pick wavefront in its dropdown), or searchable directly as "Skeleton Wavefront (backend)".

How it works

Imagine dropping a stone in a pond - except the pond is the inside of your mesh and the waves start at the surface. Wavefront skeletonization propagates wavefronts (fronts, not waves in the rippling sense) inward from the boundary of the shape at a controlled speed. Where wavefronts from opposite sides of a feature meet, they cancel and leave behind a point; the collection of those meeting points traces out the medial axis. The skeleton branches wherever the shape does, because that's where fronts converge from more than two sides.

The inputs control the granularity:

  • fix_mesh (default true) - repairs common mesh issues before skeletonizing. Leave it on; a bad input gives you a garbage skeleton.
  • normalize (default false) - rescales the skeleton to the [-1, 1] range. Useful if you're comparing skeletons across objects of different sizes.
  • waves (default 1, 1–20) - the number of wavefronts. More waves resolve finer structure but add cost and spurious branches.
  • step_size (default 1, 0.1–20) - the propagation step. Higher = coarser skeleton with less detail; lower = finer, more faithful, slower.

Outputs

A single output: skeleton, typed SKELETON. Wire it into the pack's skeleton viewer/preview nodes to actually see what you extracted - it's not a mesh, so it won't plug into a mesh viewer. This output is what you'd feed a rigging or analysis step.

When to use it

Wavefront is a solid all-rounder for organic and branching shapes - characters, animals, trees, anything with a clear medial structure. For pure branch-and-tube skeletons (plants, roots, vessels), the teasar backend is usually the stronger pick, and vertex_clusters is the fast-and-rough option for noisy data. If the skeleton comes out too hairy with spurious twigs, raise step_size; if it's missing real branches, lower it.

Install is the pack standard: ComfyUI Manager search "GeometryPack", or the manual git clone https://github.com/PozzettiAndrea/ComfyUI-GeometryPack into custom_nodes/, then pip install -r requirements.txt --upgrade and python install.py, restart. It's a young GPL-3.0 pack with an experimental comfy-env/pixi installer - first run is slow, and the author is actively collecting bug reports on GitHub.

Categorygeompack/skeleton

Inputs (5)

NameTypeDefaultDescription
trimeshTRIMESH
fix_meshBOOLEANtrueFix mesh issues before skeletonization
normalizeBOOLEANfalseNormalize skeleton to [-1, 1] range
wavesINT11–20Number of waves
step_sizeFLOAT1.000.1–20Step size (higher = coarser)

Outputs (1)

NameTypeDescription
skeletonSKELETON