Open Edges
Find the holes in your mesh before they cost you a remesh
- trimesh
- trimesh
- info
A mesh with open edges is a mesh with holes - edges that only one face touches, so the surface just ends there. They're invisible in most viewers and they ruin everything downstream that assumes a closed surface: boolean operations, watertight checks, some remeshers, signed distance. Open Edges finds them, counts them, and marks which faces are affected so you can see the damage instead of guessing at it.
It's part of ComfyUI-GeometryPack ("ComfyUI libigl") by Andrea Pozzetti. It runs on the pack's shared TRIMESH type and accepts a single mesh or a whole batch.
How it works
The node sorts the mesh's edges and finds the ones that appear exactly once - the signature of a boundary edge - then walks every face to see which ones contain them. You get back three kinds of output:
trimesh- a copy of the input with aface_attributes['open_edge_count']field added:0for interior faces,1+for faces sitting on a boundary, matching the number of open edges on that face. That field is what makes it visualizable - preview it with the pack's field-aware viewers and the holes light up.info- aSTRINGper mesh: how many open edges, how many faces touch them, boundary vertex count, and a per-face breakdown for the first few offenders.- Metadata - the output mesh also carries
num_open_edges,num_boundary_faces, and the boundary face IDs in itsmetadata, so downstream nodes can react to the numbers without re-deriving them.
Because it processes a list, run it straight off Load Mesh Batch and you'll get a per-mesh report that tells you which of your forty files are watertight and which are Swiss cheese.
The one input
Just trimesh - the mesh or list of meshes. No knobs. The real decision is what you do with the output.
The obvious follow-up is Fill Holes (if the holes are simple) or Reconstruct Surface (if the mesh is more wrecked than holey). The subtler move is using the open_edge_count face attribute as a diagnostic: it doesn't just say "you have holes," it says where, which is worth far more when the answer is "the bottom of the base is completely open" rather than "somewhere."
Install and context
Pack standard: search "GeometryPack" in ComfyUI Manager, or:
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 after. The pack's installer is the experimental comfy-env + pixi setup with a heavy isolated environment (Blender, CGAL, libigl, VTK) - slow first launch, and if anything breaks, the README asks you to report it on GitHub Discussions, since the author ships the pack as WIP with rapid releases.
Two honest caveats. First, "open edge" doesn't automatically mean "bad": every legitimate surface has a boundary - a flat plane is all boundary. The node is only telling you about the topology, not judging whether the mesh should be closed. Second, this finds topological holes, not geometric gaps; two almost-touching surfaces that overlap slightly won't show up here. For the latter you'd want a self-intersection check. Keep both in mind and this node turns "my remesh came out weird" into a named, located problem.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| trimesh | TRIMESH | — |
| info | STRING | — |