Nodes/ComfyUI libigl/Remesh PyMeshLab (backend)
ComfyUI Node

Remesh PyMeshLab (backend)

Remesh PyMeshLab — the default isotropic remesher you'll actually use

By PozzettiAndrea·Created 10 months ago·Updated 4 days ago· 218
Remesh PyMeshLab (backend)
  • trimesh
  • remeshed_mesh
  • info
target_edge_length1.00
iterations3
feature_angle30
adaptivefalse

If you only ever touch one remesh backend in this pack, this is the one. PyMeshLab's isotropic remeshing is the default for a reason: it's reliable, it's fast enough, it produces clean near-equilateral triangles, and its parameters make intuitive sense even on a first try. It's the remesh that the pack's own release thread pointed a struggling user at first, and for most "my mesh is garbage, make it nicer" jobs it's still the right answer.

It's the pymeshlab_isotropic backend of the main Remesh dispatcher - dev-only in the schema, so you'll pick it from the dropdown rather than add it directly.

How it works

Isotropic remeshing iteratively equalizes edge lengths: split the too-long edges, collapse the too-short, flip the badly-angled ones, and relax vertices - then repeat for iterations passes. Each pass converges the mesh toward the target_edge_length. Two extras set it apart from a bare uniform remesh: feature_angle protects sharp edges - any dihedral angle steeper than the threshold is treated as a feature and left alone instead of being smoothed away - and adaptive switches the edge-length target from a single value to a curvature-aware one, so detail-heavy areas keep smaller triangles.

Inputs and outputs

  • trimesh (TRIMESH) - the mesh to remesh.
  • target_edge_length (default 1) - the target edge length, relative to mesh scale. The main dial.
  • iterations (default 3) - passes. More = smoother, more uniform, slower. The default of 3 is genuinely reasonable; 5+ for stubborn meshes.
  • feature_angle (default 30) - degrees. Edges sharper than this get preserved as creases. If your hard edges keep getting rounded off, raise this.
  • adaptive (default false) - use curvature-adaptive edge lengths instead of a single target. Turn it on when the shape has both fine detail and big flat expanses.

Outputs: remeshed_mesh (TRIMESH) and info (STRING) with before/after counts.

Installing

ComfyUI Manager → GeometryPack, or:

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

Restart after. PyMeshLab runs inside the pack's isolated comfy-env environment built by install.py - one of the lighter heavier deps, since PyMeshLab is a compiled binary wheel.

Troubleshooting

  • Edges rounding off - feature_angle too low for your part, or iterations so high it grinds the features away. Raise the angle, cut the iterations.
  • "PyMeshLab not installed" / ImportError - the isolated env didn't build. Re-run python install.py; check the repo Discussions if it persists.
  • Triangles still uneven after many passes - the target length may be incompatible with the local geometry (e.g., too long where the surface is tight). Lower it.
  • Stale-workflow validation errors (e.g. could not convert string to float: 'true' on feature_angle) are the pack's signature gotcha - if a saved workflow with the Remesh node throws, delete and re-add the node and re-pick pymeshlab_isotropic. This exact error pattern is the most-reported GeometryPack complaint on r/comfyui, and it's almost always a stale DynamicCombo, not a real remesh failure.

The honest ranking: PyMeshLab for 90% of jobs, PMP or Geogram when you need specific behavior, CGAL when you need provable quality, and Blender/GPU when the environment cost is worth it to you. Start here.

Categorygeompack/remeshing

Inputs (5)

NameTypeDefaultDescription
trimeshTRIMESH
target_edge_lengthFLOAT1.000.001–10Target edge length for output triangles. Value is relative to mesh scale.
iterationsINT31–20Number of remeshing passes.
feature_angleFLOAT300–180Angle threshold (degrees) for feature edge detection.
adaptiveCOMBOfalseUse curvature-adaptive edge lengths.

Outputs (2)

NameTypeDescription
remeshed_meshTRIMESH
infoSTRING