Fix Normals IGL Signed Dist (backend)
The signed-distance normal fixer for meshes too messy for raycasts
- trimesh
- fixed_mesh
- info
Signed-distance functions are one of those geometry concepts that sounds academic until you see it fix a mesh nothing else would. Fix Normals IGL Signed Dist uses one to decide which way each face should point: it evaluates the signed distance from points on the mesh to the surface, and uses the sign to tell inside from outside, then re-winds the faces accordingly. The payoff is that it's notably more forgiving than the raycast approach on messy geometry - meshes with holes, noise, and general chaos that make ray casting ambiguous.
It's another hidden backend inside the Fix Normals wrapper's backend dropdown, which is how you'll normally reach it. But knowing what this one does well is useful even if you never click it directly, because it's the answer to a specific question: "my mesh is a wreck, which normal fixer do I pick?" When the raycast method reports uncertainty, this is the sibling to switch to.
Inputs and outputs
- trimesh - the mesh in.
- fixed_mesh - the re-oriented TRIMESH.
- info - a STRING report of what changed.
No parameters - backend nodes in this pack are deliberately lean; the options live on the wrapper.
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). The one-click installer is experimental and pulls in pixi; the README's manual route is the reliable one.
When to reach for it
Pick this one when your mesh is noisy or partially open - scanner output, remeshed garbage, anything where "which side is out" isn't obvious to a ray. The signed-distance computation is more robust in exactly those conditions, at the cost of being heavier to compute than a simple BFS flip. For a clean, roughly-closed mesh, the raycast backend is faster and perfectly adequate; for a mess, this is the one that gets you to "every face points outward" without a fight. The workflow that saves the most pain: run the fix, check the info string, and verify with Check Normals before and after - if the after-check still shows flips, the mesh's topology (not its normals) is the real problem, and repair nodes like Fill Holes or Degenerate Faces come first. And as with the rest of this young, fast-moving pack: update it before you debug your graph.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | — |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| fixed_mesh | TRIMESH | — |
| info | STRING | — |