Smooth Trimesh Laplacian (backend)
The smoothing backend that quietly shrinks your mesh
- trimesh
- smoothed_mesh
- info
This is one of the hidden backend nodes inside ComfyUI-GeometryPack ("ComfyUI libigl"), the pack Andrea Pozzetti shipped in late 2025. You don't usually add it by hand - you pick trimesh_laplacian in the "Smooth Mesh" front node's backend dropdown and this node does the actual work. Knowing what it's doing matters, because plain Laplacian smoothing has a nasty habit: it shrinks the mesh.
What it actually does
The node runs trimesh.smoothing.filter_laplacian with uniform weights. Every pass, each vertex moves toward the average position of its neighbors, and every pass also drags the whole surface inward - the classic soap-bubble collapse. On a noisy scan that's exactly what you want: high-frequency bumps get averaged away in a couple of iterations. On something you plan to 3D print or boolean against, a mesh that's 3% smaller than your model might bite you later.
That's why this node exists in a pack with so many smoothing options: it's the fast, dead-simple default, not the best quality. If shrinkage bothers you, the Taubin backend (trimesh_taubin) does the same cleanup with a negative mu term that pushes volume back out.
The inputs that matter
Only three, and only one is a knob you'll touch:
- trimesh - the mesh to smooth. Comes straight from a Load Mesh node.
- iterations (1–200, default 5) - how many smoothing passes. More passes = smoother but slower, and more shrinkage.
- lambda_ (0.01–1.0, default 0.5) - strength per pass. 0.5 is a sane starting point; crank it if the surface is really noisy.
It outputs smoothed_mesh (a TRIMESH you can pipe into Preview Mesh, Save Meshes to Folder, or anything else in the pack) plus an info string reporting vertex displacement, which is a genuinely useful way to tell if you over-smoothed - if the max displacement is large, you've carved off real detail.
Installing it
The whole pack installs the same way, whether you're after this backend or the front node:
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 just search GeometryPack in ComfyUI Manager and hit install - the README recommends taking the highest version shown, falling back to nightly. Fair warning: this pack is heavy. It uses the experimental comfy-env system to spin up isolated pixi environments for CGAL, Blender, and the GPU backends, so the first launch downloads a lot and takes a while. The main-env path for this particular node only needs trimesh, which is a modest dependency compared to the Blender/CGAL parts of the pack.
Where people get burned
Smoothing is subtractive. Run five passes at λ=0.5, and the mesh comes back with the same vertex and face counts (the info output confirms "unchanged") but a slightly rounder, slightly smaller version of itself. If you need the silhouette to stay put, reach for Taubin instead of fighting lambda down to 0.01.
Also worth knowing: if you load an old saved workflow and hit a validation error like "Failed to convert an input value to a FLOAT value", the stored combo values don't match the current pack schema - re-pick the backend in the node (or update the pack) and re-save. That's the single most common GeometryPack complaint in the wild, and it's a workflow-file problem, not this node being broken.
Inputs (3)
| 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. |
Outputs (2)
| Name | Type | Description |
|---|---|---|
| smoothed_mesh | TRIMESH | — |
| info | STRING | — |