Nodes/ComfyUI libigl/Boolean Blender Exact (backend)
ComfyUI Node

Boolean Blender Exact (backend)

Carve one mesh out of another, the exact way — no Blender window needed

By PozzettiAndrea·Created 10 months ago·Updated 4 days ago· 218
Boolean Blender Exact (backend)
  • mesh_a
  • mesh_b
  • result_mesh
  • info
operation

Boolean operations are the bread and butter of CAD-style modeling: punch a hole, join two parts, or carve one mesh out of another. You reach for this node when you want that to come out right - with the exact solver instead of the approximate one. This is the "blender_exact" backend hiding inside GeometryPack's Boolean node, which presents a dropdown between libigl_cgal and blender_exact. This is the Blender side of that choice.

The name is a small lie you should be glad about: you don't need Blender open, installed, or even visible. GeometryPack bundles its own Blender build as a dependency, and the node drives Blender's Boolean modifier in "Exact" mode under the hood. That solver is the one that handles the gnarly cases - coplanar faces, touching edges, partial overlaps - that the older "Fast" (carve) solver tends to produce artifacts on. The trade-off is speed and memory. For a heavy CAD part it can take noticeably longer, and the bundled Blender binary is a chunky download on top of the pack itself.

What you actually set

Three inputs, and you'll only touch one of them most of the time:

  • mesh_a and mesh_b - the two TRIMESH inputs. Which is "A" matters for difference operations: A minus B is not B minus A.
  • operation - the COMBO dropdown: union, difference, intersection, the usual suspects. Union glues the volume of both, difference carves B out of A, intersection keeps only where they overlap.

Outputs are result_mesh (a TRIMESH you wire into a viewer, exporter, or the next processing node) and info (a STRING with the diagnostic report). The meshes feeding in come from GeometryPack's mesh I/O nodes - the whole pack speaks the TRIMESH type, so you load an OBJ/FBX/PLY/STL with a loader and feed it straight here.

Installing it

GeometryPack installs as one pack (all the node articles on this site share these steps), so:

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 afterward. ComfyUI Manager works too - search "GeometryPack" or use "Install via Git URL" with https://github.com/PozzettiAndrea/ComfyUI-GeometryPack.git. Fair warning: the pack ships an experimental one-click installer via comfy-env that pulls in the pixi package manager, and this Blender backend is one of the heaviest parts of it. The README calls the manual route above "most reliable," and the author actively asks for issue reports, so if install breaks, that's not you - that's the pack being young. GPL-3.0-or-later, by the way, because Blender and CGAL are GPL; fine for commercial use, just know the copyleft rules if you ever redistribute modified builds.

Where people get burned

The classic gotcha: your two meshes aren't actually intersecting - one is a few units away or slightly inside the other's bounding shell - and you get back a mesh that looks untouched. Check the info string; it'll tell you what the boolean actually did. Also, exact booleans are ruthless about messy inputs: if either mesh has degenerate faces or self-intersections, results get weird. Run a repair pass first - GeometryPack has a whole repair shelf for exactly that. This isn't the node you use to glue loose parts together; that's Combine Meshes, which just stacks geometry without carving. Different job, different node.

Categorygeompack/boolean

Inputs (3)

NameTypeDefaultDescription
mesh_aTRIMESH
mesh_bTRIMESH
operationCOMBO3 options: union, difference, intersection

Outputs (2)

NameTypeDescription
result_meshTRIMESH
infoSTRING