Nodes/Avatar Graph/Mesh Select Non Manifold
ComfyUI Node

Mesh Select Non Manifold

Find the mesh errors before they wreck your export

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Mesh Select Non Manifold
  • BPY_OBJ
  • BPY_OBJ
extendtrue
use_wiretrue
use_boundarytrue
use_multi_facetrue
use_non_contiguoustrue
use_vertstrue

This is the mesh-cleanup QA step, not a creative tool. It wraps Blender's real bpy.ops.mesh.select_non_manifold operator, part of Avatar Graph, the pack that runs actual Blender inside ComfyUI's process (via the bpy Python package) to build interactive 2D-to-3D avatars, auto-generating a node for every mesh operator Blender has. Meshes here get built programmatically from segmented image layers rather than hand-modeled, and auto-generated geometry is exactly the kind of thing that ends up with the small structural flaws this node exists to catch.

What "non-manifold" means here

A manifold mesh is one where every edge cleanly borders exactly two faces, like a proper closed (or intentionally open) surface should. Non-manifold geometry breaks that: an edge shared by three or more faces, an isolated edge with no face at all, inconsistent face-normal directions across a shared edge, or the natural open boundary of a mesh that isn't closed. Some of these are genuine errors (they'll cause weird shading, broken Solidify/extrude results, or export glitches); others - like a flat plane's outer edge before it's been solidified - are expected and not actually problems. This node just flags candidates; it's on you to judge which flags matter.

Inputs and outputs

  • BPY_OBJ - the mesh coming in.
  • extend (default true) - adds the flagged geometry to whatever's already selected rather than replacing it.
  • use_wire, use_boundary, use_multi_face, use_non_contiguous, use_verts (all default true) - each toggles one category of non-manifold geometry: wire edges (floating, no attached face), boundary edges (the open edge of a mesh that isn't closed), multi-face edges (shared by three-plus faces - usually a real error), non-contiguous normals (faces meeting at an edge but facing inconsistently), and whether the check extends down to individual vertices, not just edges.

Output is a single BPY_OBJ with the selection now marking whatever matched your enabled categories.

Installing it

ComfyUI Manager: search "avatar-graph-comfyui", install, restart. Manually: cd ComfyUI/custom_nodes && git clone https://github.com/avatechai/avatar-graph-comfyui, then cd avatar-graph-comfyui && python -m pip install -r requirements.txt, then restart.

Python 3.10.x is the requirement to nail down first - the bpy package this pack is built on needs that exact minor version, and the README recommends a dedicated conda environment on macOS/Linux (conda create --name comfyui python=3.10) rather than trusting an existing Python install. Windows users get a prebuilt ComfyUI + Python 3.10 zip linked in the README to unzip over their install before adding the pack via Manager. Restart with --enable-cors-header (macOS also wants --force-fp16) for the live 3D preview - without it, the graph still runs fine, you just save the model manually from the pack's Avatar Main Output node instead.

Common issues

Rule out the Python version first if this pack's nodes aren't loading. On this node specifically, the most common surprise is running it on a mesh you know is intentionally open - like a flat plane before it's gone through Solidify - and getting its entire outer boundary selected. That's not a bug; an open plane's edge genuinely is a non-manifold boundary by definition. Turn use_boundary off if you only care about actual structural errors on geometry you know is meant to stay open. If you're getting a suspiciously huge selection everywhere, all five toggles defaulting to true at once is aggressive - narrow it down to just the category you're actually chasing (usually use_multi_face for genuine topology errors) rather than every kind at once.

Categoryblender

Inputs (7)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
extendoptBOOLEANtrue
use_wireoptBOOLEANtrue
use_boundaryoptBOOLEANtrue
use_multi_faceoptBOOLEANtrue
use_non_contiguousoptBOOLEANtrue
use_vertsoptBOOLEANtrue

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ