Nodes/ComfyUI libigl/Decimate Pro (backend)
ComfyUI Node

Decimate Pro (backend)

Slim down a million-face scan without wrecking the silhouette

By PozzettiAndrea·Created 10 months ago·Updated 4 days ago· 218
Decimate Pro (backend)
  • trimesh
  • decimated_mesh
  • info
target_reduction0.50
feature_angle15
preserve_topologytrue

Photogrammetry and scans love to hand you a two-million-triangle mesh when your target is a game engine or a slicer that will choke on it. Decimation is how you get from there to something usable, and Decimate Pro is the "give me a good result with minimal fuss" backend of the pack's Decimate family. It's the node you reach for when you want the mesh reduced but you don't want to babysit a pile of parameters - three inputs, one of them is the real knob.

  • target_reduction - the control. It's the fraction of faces to remove, and the tooltip is worth quoting because everyone flips it the wrong way initially: 0.5 reduces to ~50% of the original faces, 0.9 reduces to ~10%. People who think of it as "keep this fraction" get surprised. Read it as "remove this fraction."
  • feature_angle - edges whose dihedral angle exceeds this (in degrees) are treated as features and preserved. This is how your hard edges survive the slimming. Too low and you smooth away detail; too high and the decimator chews through your creases. 15° is a sensible start.
  • preserve_topology - keeps the mesh genus (the holes and handles) intact while decimating. Defaults on; if you're decimating for a topology cleanup, you might turn it off.

Output is decimated_mesh plus an info string - and the info is worth reading here, because it tells you the actual face count you landed on. That's your sanity check against the reduction math.

Where it fits

Decimation is a downstream step: it's what you do to a mesh you're about to ship, render at scale, or put into a game engine. In a GeometryPack chain it belongs after cleanup and remeshing, not before - decimating a broken mesh just gives you a smaller broken mesh. The classic pipeline is Load → Fix Normals → maybe remesh → Decimate → Save. And if you're decimating a quad mesh because your remesher made one, remember the packing: quad decimation isn't always face-count-faithful the way triangle decimation is.

Install

Ships with the pack; install once, get everything:

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

Or ComfyUI Manager → GeometryPack. Usual caveats: experimental comfy-env/pixi install with a heavy first download; fast-moving repo, and the author asks for reports in Discussions.

The honest take

Decimate Pro is the "good default" decimator, but if your mesh has big flat regions and you care about keeping them flat, the pack's Quadric Edge Collapse backend with planar_quadric on is the more surgical choice. And the eternal decimation lesson: a low-poly version is a different model, not a smaller copy of the same one. If you need it to look identical, you don't want 10% of the faces - you want a LOD chain where the highest version stays intact.

Categorygeompack/decimation

Inputs (4)

NameTypeDefaultDescription
trimeshTRIMESH
target_reductionFLOAT0.500.01–0.99Fraction of faces to REMOVE. 0.5 = reduce to ~50%% of original faces, 0.9 = reduce to ~10%% of original.
feature_angleFLOAT150–180Feature angle threshold (degrees). Edges with dihedral angle above this are preserved.
preserve_topologyCOMBOtruePreserve mesh topology (genus) during decimation.

Outputs (2)

NameTypeDescription
decimated_meshTRIMESH
infoSTRING