Nodes/Avatar Graph/Mesh Dissolve Limited
ComfyUI Node

Mesh Dissolve Limited

The one cleanup operator actually worth reaching for reflexively

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Mesh Dissolve Limited
  • BPY_OBJ
  • delimit
  • BPY_OBJ
angle_limit0.09
use_dissolve_boundariesfalse

Most of the other dissolve nodes in this pack need you to select the right geometry first, or they do nothing. Limited Dissolve doesn't - it's Blender's automatic version, and it's genuinely one of the more useful mesh-cleanup tools in Blender's whole toolkit, which is more than can be said for most of this pack's bpy.ops.mesh wrappers. Mesh_DissolveLimited wraps bpy.ops.mesh.dissolve_limited.

How it works

Point this at a mesh - no selection required, it can act on the whole thing - and it scans for edges and vertices where the surrounding geometry is nearly flat or collinear, below a configurable angle threshold, and removes them. The result: an over-tessellated mesh (the kind of thing a remesh, a boolean, or a mesh built from a raw segmented image plane tends to produce) turns into clean n-gons without the silhouette actually changing. It's the tool for the specific, common situation of "this has way more polygons than the shape needs," which shows up constantly in generated geometry.

The inputs and outputs that matter

  • BPY_OBJ (optional) - the mesh to simplify.
  • angle_limit - how close to perfectly flat/collinear something has to be before it gets dissolved, defaulting to roughly 5° and capped at 180°. Push it higher and you dissolve more aggressively, at the cost of starting to lose subtler shape detail; the default is a conservative, safe starting point.
  • use_dissolve_boundaries (default false) - whether the operator is allowed to touch edges on the open boundary of the mesh, not just interior ones. Off by default specifically to protect the mesh's outer edge from being simplified away; only turn it on if you genuinely want boundary geometry reduced too.
  • delimit - a multi-select flag field that restricts dissolve from crossing certain kinds of boundaries in the mesh (things like a material change or a marked seam), so cleanup doesn't erase markup you deliberately set elsewhere in the graph.

Output is a single BPY_OBJ, simplified but visually unchanged in shape.

How to install it

Search Avatar Graph in ComfyUI Manager, or clone manually:

cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui
python -m pip install -r requirements.txt

then restart. bpy==3.6.0 needs Python 3.10.x - README's prebuilt Python-3.10 zip on Windows, conda environment (conda create --name comfyui python=3.10) on Mac/Linux. opencv-python, mediapipe, and segment-anything also install.

Common issues & troubleshooting

Barely anything got simplified. angle_limit defaults conservative on purpose - if a mesh is genuinely over-tessellated and you want a more aggressive pass, raise it in small steps and check the result each time rather than jumping straight to a high value.

Detail you wanted to keep disappeared. That's the flip side of raising angle_limit too far - this operator can't distinguish "meaningless extra tessellation" from "subtle intentional shape detail" once the angle threshold covers both. Bring the value back down, and if specific regions need protecting, delimit is there to stop dissolve from crossing marked boundaries.

The mesh's outer edge got simplified when you didn't want it to. Check use_dissolve_boundaries - it's off by default for exactly this reason, so if it's on, boundary geometry is fair game for the operator.

Worth using more than you probably are. Unlike the selection-dependent dissolve nodes in this pack, this one is safe to run as a routine step right after any geometry-generating node - it won't change the silhouette, only the polygon count, so there's little reason not to include it in a pipeline that builds meshes from segmented planes or remeshed output.

Categoryblender

Inputs (4)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
angle_limitoptFLOAT0.090–3.141592741012573
use_dissolve_boundariesoptBOOLEANfalse
delimitoptB_ENUM_SET

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ