UV libigl ARAP (backend)
The unwrap that actually cares about distortion
- trimesh
- unwrapped_mesh
- info
Here's the thing nobody tells you about UV unwrapping: the interesting problem isn't flattening the surface, it's flattening it without turning every triangle into a stretched, squashed mess. If you texture a bad unwrap, your checkerboard is distorted, your seams are blurry, and your paint strokes smear. UV libigl ARAP is the GeometryPack backend that treats distortion as the enemy, using the as-rigid-as-possible (ARAP) parametrization method from libigl. It's the one you'd actually want to paint on.
It's the libigl_arap option in the UV Unwrap dropdown, or searchable directly as "UV libigl ARAP (backend)".
How it works
ARAP works on a simple idea: when you flatten the surface into the plane, each triangle should keep its shape as much as possible - no stretching, no squashing, just a rigid rotation into the 2D plane. You can't flatten a curved surface without some distortion, so ARAP runs iteratively, minimizing a global energy that measures how far each triangle has drifted from "rigid." Every iteration improves the layout, and the improvement is visible: angles stay closer to their 3D values, and the unwrap looks like a faithful skin of the model rather than a deflated balloon.
The only input that matters:
trimesh- the mesh to unwrap.iterations(default 10, 1–100) - how many ARAP solver passes to run. More iterations = lower distortion, but slower and with diminishing returns. The classic ARAP trick is to seed with a cheap parametrization and then let the iterations polish it; 10 is a reasonable default, push to 20–30 on meshes where distortion really shows, and don't expect miracles past that.
Outputs
unwrapped_mesh (TRIMESH, carrying UVs) and info (STRING). Feed the unwrapped mesh into a texture bake or UV preview step and see the difference for yourself.
When to use it
Between the two libigl unwraps, harmonic is fast and fold-free but pins your boundary to a circle and distorts toward the rim. ARAP gives meaningfully better angle preservation and is the one I'd reach for on anything organic or anything with awkward topology - a head, a torso, a saddle-shaped patch. Same caveat as its sibling: it works on disk-like surfaces; fully closed meshes need seams first, and for those the Blender smart backend is usually the pragmatic answer.
Install: ComfyUI Manager search "GeometryPack", or clone https://github.com/PozzettiAndrea/ComfyUI-GeometryPack into custom_nodes/ and run pip install -r requirements.txt --upgrade + python install.py, then restart. First run with the experimental comfy-env/pixi installer is slow but normal, and the author is actively collecting bug reports on GitHub.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | — | |
| iterations | INT | 101–100 | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| unwrapped_mesh | TRIMESH | — |
| info | STRING | — |