Fill Holes IGL Fan (backend)
Mesh in, patched mesh out
- mesh
- filled_mesh
- info
Some nodes are the ones you set up carefully; others are the ones you just drop in because they're simpler than thinking. Fill Holes IGL Fan is the second kind. It takes a mesh, fills every hole it finds by fan-triangulating each boundary loop, and hands you back a closed mesh. That's the entire job. No quality dial, no perimeter limit, no mode selector - one TRIMESH in, one patched mesh out. It's the libigl fan backend hiding inside GeometryPack's Fill Holes wrapper, and it's the perfect default for one specific situation: a mesh full of small holes on mostly-flat geometry, where you want them gone with zero fuss.
The "fan" in the name is the mechanism. For each hole, the algorithm picks a vertex on the boundary loop and connects it to all the others, fanning triangles across the gap like slices of a pie. Simple, fast, and guaranteed to close the loop. It's also why it's not the tool for every hole: on a big, curvy opening, a flat fan produces long skinny triangles and a patch that ignores the surrounding surface shape.
Inputs and outputs
- mesh - the TRIMESH in.
- filled_mesh - the repaired TRIMESH.
- info - a STRING with the report (which holes were filled, how the topology came out).
That's it. If you want more control, the pack's other fill backends are where to look.
Installing it
Same install as the whole pack:
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
Restart ComfyUI. ComfyUI Manager also works - search "GeometryPack" or install via Git URL with https://github.com/PozzettiAndrea/ComfyUI-GeometryPack.git. The one-click installer is experimental and pulls in pixi; the README's manual route is the reliable one.
The honest trade-off
This node is the fastest thing between you and a closed mesh, and for scan noise it's genuinely great. But it fills everything - there's no way to say "skip the big opening." If your mesh has an intentional large hole and you run IGL Fan on it, you'll get a pie-slice disk where the opening used to be. In that case you want Fill Holes GPU, which has a perimeter cap and will leave big openings alone. And if the hole is on visible, curved surface, CGAL's fair option produces a patch that actually blends instead of an obvious flat fan. So: tiny artifacts, flat areas, close-it-and-move-on - this is your node. Everything else, read the other fill backends' write-ups. And since the pack is a fast-moving WIP, keep it updated; a load error on a node this simple is almost certainly the pack, not your graph.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| mesh | TRIMESH | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| filled_mesh | TRIMESH | — |
| info | STRING | — |