Smooth Trimesh Taubin (backend)
Smoothing that doesn't shrink your model
- trimesh
- smoothed_mesh
- info
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.
Inputs (4)
| Name | Type | Default | Description |
|---|---|---|---|
| trimesh | TRIMESH | — | |
| iterations | INT | 51–200 | Number of smoothing passes. More = smoother but slower. |
| lambda_ | FLOAT | 0.500.01–1 | Smoothing strength per step. Higher = more aggressive smoothing per iteration. |
| mu | FLOAT | -0.53-1–-0.01 | Inflation factor (negative). Counteracts shrinkage from lambda. Must satisfy |mu| > lambda for stability. Typical: -0.53 for lambda=0.5. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| smoothed_mesh | TRIMESH | — |
| info | STRING | — |