Fill Holes PyMeshFix (backend)
The industry default for hole filling, now a ComfyUI node
- mesh
- filled_mesh
- info
PyMeshFix is one of those libraries that quietly became the industry default for mesh repair - if you've ever prepped a model for 3D printing, you've probably used it without knowing its name. This node wraps it as a backend inside GeometryPack's Fill Holes family, and if you don't have a reason to prefer a specific solver, it's the one to start with. The "industry default" label isn't hype: PyMeshFix has spent years handling the grubby reality of broken meshes, and its hole filling is dependable in a way that makes you forget you're even repairing anything.
The mechanism is proper boundary-loop triangulation with refinable output - it finds each hole's boundary, triangulates the patch, and can then refine those new triangles so the fill has decent quality rather than being a slapdash fan. Two knobs on top of that give it more control than the simpler backends:
- max_edges - the maximum boundary edges a hole can have to be filled. Default 0 means "fill all holes." Set it to something like 200 and huge, messy openings get skipped while small artifacts get patched. That's the escape hatch the no-option fan fill lacks.
- refine - a true/false COMBO (default true) to refine filled regions for better triangle quality. Leave it on unless you're in a hurry.
Inputs and outputs
- mesh - the TRIMESH in.
- filled_mesh - the repaired TRIMESH.
- info - a STRING report of what got patched.
Installing it
Standard pack install:
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 works too (search "GeometryPack" or install via Git URL with https://github.com/PozzettiAndrea/ComfyUI-GeometryPack.git). PyMeshFix is a lightweight dependency relative to the pack's CGAL and Blender backends; the one-click installer is still experimental, so the manual route above remains the README's "most reliable."
The call to make
If you're standing in front of a mesh with a pile of holes and no strong opinion, PyMeshFix is the default that won't embarrass you: good fills, refinable, and the max_edges cap for protecting intentional openings. When do you not want it? When a hole sits on big visible curved geometry - there, CGAL's fair option will make the patch blend with the surface instead of looking filled. And when you need raw speed over a mesh with dozens of holes, the GPU backend is faster. This pack's Fill Holes wrapper gives you all of them behind one dropdown, so treat this as your baseline and the others as specialists. It's a young, fast-moving pack - update it regularly and don't be shy about reporting issues, since the author explicitly asks for them.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| mesh | TRIMESH | — | |
| max_edgesopt | INT | 00–100000 | Max boundary edges for a hole to be filled. 0 = fill all holes. |
| refineopt | COMBO | true | Refine filled regions for better triangle quality. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| filled_mesh | TRIMESH | — |
| info | STRING | — |