ComfyUI Node

UV Unwrap

Nine UV unwrappers behind one dropdown

By PozzettiAndrea·Created 10 months ago·Updated 4 days ago· 218
UV Unwrap
  • trimesh
  • unwrapped_mesh
  • info
backend

UV Unwrap is where ComfyUI-GeometryPack shows off. It's a single node with a backend dropdown that hides nine different unwrapping algorithms, spanning three totally separate environments - main, Blender, and a GPU one. Flattening a 3D surface into 2D texture space is one of those "there is no single right answer" problems, and this node's whole point is that you get to pick the tool per job instead of living with whatever one library does.

The backends, in one breath

  • xatlas - the fast, automatic default. Splits vertices, packs islands, done. Start here for game assets.
  • libigl_lscm - least-squares conformal maps; great angle preservation, needs a sensible boundary.
  • libigl_harmonic - harmonic mapping, wants a fixed boundary.
  • libigl_arap - as-rigid-as-possible, iterative and slow but the quality pick (backend.iterations, default 10).
  • cumesh - GPU-accelerated, with chart controls (chart_cone_angle, chart_refine_iterations, chart_global_iterations, chart_smooth_strength) if you want to micromanage charting.
  • blender_smart / cube / cylinder / sphere - Blender's projections: Smart UV Project for automatic seams (angle_limit default 66, island_margin default 0.02), plus the three geometric projections for clean, predictable unwraps on things shaped like their names.

Everything returns unwrapped_mesh (TRIMESH) and an info string. The geometry output carries its UVs, so it wires into texture baking, Remesh with Texture, or the Preview Mesh viewer's texture mode.

How it fits the workflow

The honest take: for 90% of casual use, pick xatlas and don't think about it. It's the fastest and rarely embarrasses you. Reach for libigl_arap when distortion matters and you can wait, and blender_cube/blender_cylinder when you have a shape that maps trivially and you want zero wasted texture space. The reason to have all nine is the other 10% - hard assets with awkward topology where one algorithm's failure mode is another's specialty.

Installing it

This node spans the pack's isolated environments, so installation is the full monty:

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. Because the Blender backends run in a separate pixi environment with actual Blender (bpy), the first launch downloads a serious chunk. Give it time.

Where people get burned

The Blender backends silently need their isolated environment to have built correctly - if the bpy import fails, the pack logs "skipping blender_uv" at startup and those options just won't exist. Check the ComfyUI console if a Blender backend is missing from the dropdown. And the workflow-file trap applies double here: a saved workflow with an old backend's parameter values will fail validation with "value not in list" errors - re-pick the backend in the node and re-save. One more: harmonic unwrap needs a boundary, so on a closed watertight mesh it can misbehave - that's what LSCM and ARAP are for.

Categorygeompack/uv

Inputs (2)

NameTypeDefaultDescription
trimeshTRIMESH
backendCOMBO9 options: [object Object], [object Object], [object Object], [object Object], [object Object], [object Object], +3

Outputs (2)

NameTypeDescription
unwrapped_meshTRIMESH
infoSTRING