Nodes/ComfyUI libigl/Smooth Trimesh Taubin (backend)
ComfyUI Node

Smooth Trimesh Taubin (backend)

Smoothing that doesn't shrink your model

By PozzettiAndrea·Created 10 months ago·Updated 4 days ago· 218
Smooth Trimesh Taubin (backend)
  • trimesh
  • smoothed_mesh
  • info
iterations5
lambda_0.50
mu-0.53

Taubin smoothing is the answer to a specific, maddening problem: plain Laplacian smoothing cleans up noise but slowly deflates your mesh. Taubin fixes that by alternating two passes - one that pulls vertices inward (lambda) and one that pushes them back out (mu). Net result: the noise is averaged away but the volume and silhouette stay put. This node is the trimesh_taubin backend of the pack's Smooth Mesh front node, and it's the one I'd reach for when the mesh needs to keep its size.

How it works

Each smoothing iteration runs two steps: a shrink pass at strength lambda_, then an inflate pass at mu. The math works because mu is negative and slightly larger in magnitude than lambda_ - the inflate cancels the shrink on low-frequency shape while the high-frequency noise gets damped. The tooltips tell you the stability rule directly: |mu| must be greater than lambda, and the classic pairing is lambda_ = 0.5 with mu = -0.53.

The inputs are:

  • trimesh - the mesh.
  • iterations (1–200, default 5) - smoothing passes. More = smoother, slower.
  • lambda_ (0.01–1, default 0.5) - shrink strength per pass.
  • mu (−1 to −0.01, default −0.53) - the negative inflation factor that prevents shrinkage.

Outputs are smoothed_mesh (TRIMESH) and info, which reports the vertex displacement - same as its Laplacian sibling, that's your "did I overdo it" meter.

When to pick Taubin over plain Laplacian

Anytime the final size matters. If you're smoothing a scanned part that has to keep its dimensions to assemble with something else, or a mesh you're going to 3D print at a specific scale, Laplacian's slow deflation is a landmine. Taubin's the safe default for "clean this up without changing what I made." The trade-off is it's doing twice the math per iteration, but at these iteration counts the difference is trivial. The front node's tooltip even says it: taubin=shrinkage-free (recommended). The author's own recommended option.

Installing it

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 → Install, restart. Trimesh-only backend, so it's light on dependencies compared to the Blender/CGAL side of the pack.

Where people get burned

Ignoring the stability rule. Set mu too close to zero (or worse, positive-ish), and the inflation stops canceling the shrinkage, and you're back to a deflating mesh with extra steps. Keep the |mu| > lambda_ relationship and the defaults are fine. And the pack-wide gotcha: a saved workflow with stale combo values throws "failed to convert an input value" validation errors - re-pick the backend in the node and re-save before suspecting your geometry.

Categorygeompack/smoothing

Inputs (4)

NameTypeDefaultDescription
trimeshTRIMESH
iterationsINT51–200Number of smoothing passes. More = smoother but slower.
lambda_FLOAT0.500.01–1Smoothing strength per step. Higher = more aggressive smoothing per iteration.
muFLOAT-0.53-1–-0.01Inflation factor (negative). Counteracts shrinkage from lambda. Must satisfy |mu| > lambda for stability. Typical: -0.53 for lambda=0.5.

Outputs (2)

NameTypeDescription
smoothed_meshTRIMESH
infoSTRING