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

Smooth Laplacian (backend)

The classic, and why your mesh shrinks

By PozzettiAndrea·Created 10 months ago·Updated 4 days ago· 218
Smooth Laplacian (backend)
  • trimesh
  • smoothed_mesh
  • info
iterations5
cotangent_weighttrue

Laplacian smoothing is the oldest trick in the mesh book, and it's the one every other smoother in this pack is secretly trying to fix. Smooth Laplacian moves each vertex toward the average of its neighbors, once per iteration, and that's it. Simple, predictable, and it does one thing you need to know about before you use it: it shrinks the mesh and blurs detail. That's not a bug - it's the algorithm - and knowing when that's acceptable is the real skill.

You'll reach it via the Smooth Mesh front node's backend dropdown (laplacian), or by searching "Smooth Laplacian (backend)" directly.

How it works

Each pass takes every vertex and nudges it toward the centroid of the vertices it's connected to. Run that N times and high-frequency noise averages out while the overall shape survives - until it doesn't, because every averaging pass also pulls corners inward. That's the volume loss. It's why pure Laplacian smoothing is great for removing scan noise before remeshing, and bad for anything where you need the silhouette to stay exact.

Two inputs:

  • iterations (default 5, 1–200) - number of smoothing passes. More = smoother but slower, and more shrinkage. Start at 5; go to 10–20 for noisy photogrammetry.
  • cotangent_weight (default true) - whether to use cotangent weights instead of uniform weights. Cotangent weights respect mesh geometry - they weight each neighbor by the angles of the opposite edges - so they're usually the better choice. The caveat in the tooltip is real: they can be unstable on degenerate meshes (slivers, bad triangulations). If your output explodes or develops spikes, flip this to false and re-run.

Inputs and outputs

trimesh, iterations, cotangent_weight. Outputs are smoothed_mesh (TRIMESH) and info (STRING).

When Laplacian is the right call

If you're prepping a noisy mesh for remeshing or retopology, Laplacian is exactly right - the shrinkage doesn't matter because the mesh is about to be rebuilt anyway. If you're smoothing a mesh you intend to keep, use Taubin (which counteracts the shrink) or HC Laplacian (which corrects it after each pass). And if you notice your model coming out a size smaller and you don't know why, this node is almost certainly the culprit - that's the classic surprise for people new to mesh smoothing.

Pack install is standard: ComfyUI Manager → search "GeometryPack", or git clone https://github.com/PozzettiAndrea/ComfyUI-GeometryPack into custom_nodes/, then pip install -r requirements.txt --upgrade and python install.py, then restart. The pack is GPL-3.0-or-later and fast-moving (the author ships WIP builds and genuinely wants bug reports), so if a backend misbehaves, checking the GitHub Discussions before you tear your hair out is a good move.

Categorygeompack/smoothing

Inputs (3)

NameTypeDefaultDescription
trimeshTRIMESH
iterationsINT51–200Number of smoothing passes. More = smoother but slower.
cotangent_weightCOMBOtrueUse cotangent weights instead of uniform weights. Cotangent weights respect mesh geometry better but may be unstable on degenerate meshes.

Outputs (2)

NameTypeDescription
smoothed_meshTRIMESH
infoSTRING