Mesh Select Non Manifold
Find the mesh errors before they wreck your export
- BPY_OBJ
- BPY_OBJ
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(defaulttrue) - 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 defaulttrue) - 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.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| extendopt | BOOLEAN | true | — |
| use_wireopt | BOOLEAN | true | — |
| use_boundaryopt | BOOLEAN | true | — |
| use_multi_faceopt | BOOLEAN | true | — |
| use_non_contiguousopt | BOOLEAN | true | — |
| use_vertsopt | BOOLEAN | true | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |