Mesh Quads Convert To Tris
Triangulate before something else does it for you
- BPY_OBJ
- BPY_OBJ
Most 3D formats and real-time engines don't actually understand quads - GLTF/GLB, game engines, and most viewers triangulate everything at load time whether you asked them to or not, and if you don't do it deliberately, they'll do it for you with whatever algorithm they feel like, which can quietly change how a mesh deforms under a shape key. This node is Blender's real bpy.ops.mesh.quads_convert_to_tris operator, exposed as a ComfyUI node inside Avatar Graph - the pack that builds interactive 2D-to-3D avatars by running actual Blender (via the bpy Python package) inside ComfyUI itself, and auto-generates a node for every mesh operator Blender has. This one earns its keep here specifically because Avatar Graph's whole output pipeline ends in GLB/GLTF export for its web viewer - exactly the format that cares about triangulation.
How it works
It walks every quad and n-gon face on the mesh and splits it into triangles, using whichever diagonal-cutting rule you pick. That choice matters more than it sounds: cut a quad the wrong way and you can introduce a visible crease or a fold that behaves badly once a shape key starts deforming it - which is exactly the situation this pack's rigging pipeline puts meshes into. Doing the triangulation explicitly, with a method you chose, beats leaving it to whatever exporter or viewer touches the mesh last.
Inputs and outputs
BPY_OBJ- the mesh coming in from earlier in the graph; this node mutates its face topology and passes the same live object back out.quad_method- how each individual quad gets split:BEAUTY(Blender's default judgment call, generally the safest pick),FIXED/FIXED_ALTERNATE(always cut the same way regardless of shape), orSHORTEST_DIAGONAL/LONGEST_DIAGONAL(pick based on which diagonal is shorter or longer).BEAUTYis the right default unless you have a specific topology reason to override it.ngon_method- the same idea for faces with more than four sides:BEAUTYorCLIP.
Output is a single BPY_OBJ - same object, now fully triangulated, ready for whatever comes after it in the chain (a shape-key rig, an export, another mesh operation).
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.
The requirement to nail down first is Python 3.10.x - the bpy package this pack depends on is built for that exact version, and the README recommends a dedicated conda environment on macOS/Linux (conda create --name comfyui python=3.10) rather than hoping your system Python matches. Windows users get a prebuilt ComfyUI + Python 3.10 zip linked directly in the README, unzipped over your ComfyUI folder, followed by installing the pack itself through Manager. Restart with --enable-cors-header (macOS also needs --force-fp16) - that flag is what lets ComfyUI's live 3D preview talk to Avatech's web viewer. Without it, the graph still executes fine; you just save the model out manually via the pack's Avatar Main Output node instead of watching it live.
Common issues
Get the Python version wrong and the whole pack fails to load, well before you ever reach this node - check that first if custom nodes are missing entirely. Feed this node something other than a proper mesh-holding BPY_OBJ from earlier in the same pack's graph and you'll get a Blender-side error, since these mesh nodes aren't standalone - they're built to chain off each other. If a triangulated mesh looks fine in Blender but pinches or creases oddly once it's rigged with shape keys and animated through Shape Flow, that's usually the quad_method choice biting you on a specific problem quad - switching to BEAUTY (if you weren't already) or manually fixing that one face's topology upstream is the usual fix, not a bug in the node itself. And this pack is a heavier, more collision-prone dependency than most custom nodes since it embeds real Blender machinery - worth keeping in mind if you're chasing a conflict with another pack's pinned Python requirements.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| quad_methodopt | COMBO | 5 options: BEAUTY, FIXED, FIXED_ALTERNATE, SHORTEST_DIAGONAL, LONGEST_DIAGONAL | |
| ngon_methodopt | COMBO | 2 options: BEAUTY, CLIP |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |