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

Smooth Trimesh Laplacian (backend)

The smoothing backend that quietly shrinks your mesh

By PozzettiAndrea·Created 11 months ago·Updated 26 days ago· 226
Smooth Trimesh Laplacian (backend)
  • trimesh
  • smoothed_mesh
  • info
◄iterations5►
◄lambda_0.50►

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.

Categorygeompack/smoothing

Inputs (3)

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.

Outputs (2)

NameTypeDescription
smoothed_meshTRIMESH—
infoSTRING—