Skeleton Wavefront (backend)
Find the spine of a mesh by sending out waves
- trimesh
- skeleton
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.
Inputs (5)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | — | |
| fix_mesh | BOOLEAN | true | Fix mesh issues before skeletonization |
| normalize | BOOLEAN | false | Normalize skeleton to [-1, 1] range |
| waves | INT | 11–20 | Number of waves |
| step_size | FLOAT | 1.000.1–20 | Step size (higher = coarser) |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| skeleton | SKELETON | — |