UV libigl Harmonic (backend)
The clean parametrization that pins your boundary to a circle
- trimesh
- unwrapped_mesh
- info
UV unwrapping is how a 3D surface becomes a 2D painting. Before you can texture a mesh - bake a material, paint a face, lay out a decal - you need to flatten it into UV coordinates with as little stretching as possible. UV libigl Harmonic is the GeometryPack backend that does this by solving a harmonic map: a smooth, well-behaved parametrization from libigl, with the boundary of the surface pinned to a circle.
It's the libigl_harmonic option in the UV Unwrap front node's dropdown, or searchable directly as "UV libigl Harmonic (backend)".
How it works
Harmonic parametrization solves Laplace's equation on the surface: each interior vertex's UV position is determined by averaging its neighbors, with the boundary vertices fixed to a circle as the only boundary condition. Because the result satisfies a smoothness equation, you get a parametrization with no folds - the UVs never flip over themselves, which is the most basic thing you want from an unwrap. The catch is also visible in that description: everything depends on the boundary being a single circle, which means this works best on disk-like surfaces - a patch, a strip, a face, anything that has one outer boundary loop.
Inputs and outputs
Just one input: trimesh. That's it - no sliders, no tolerance, no way to tune it. Outputs are unwrapped_mesh (TRIMESH, with UV coordinates on it) and info (STRING).
When to use it
Harmonic is the honest, boring option in the libigl family, and "boring" is a compliment here - it's deterministic and never flips triangles. But its fixed circular boundary means real distortion: flat patches stretch toward the rim, and closed meshes with multiple boundary loops are out of its league entirely. If you're unwrapping a character or a hard-surface part with seams, libigl_arap gives you far better angle preservation for a few extra iterations. If your input is one clean patch that just needs a decent flat layout, harmonic is fast and reliable. And if your mesh has no boundary at all (a closed sphere), no libigl method will help - that's what the Blender projection backends are for.
Install is the pack standard: ComfyUI Manager search "GeometryPack", or git clone https://github.com/PozzettiAndrea/ComfyUI-GeometryPack into custom_nodes/, then pip install -r requirements.txt --upgrade and python install.py, restart. The pack is GPL-3.0-or-later, young, and actively developed - and remember the Blender-based UV backends need a working Blender install, while the libigl ones just need the pack itself.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| unwrapped_mesh | TRIMESH | — |
| info | STRING | — |