Mesh Bisect
Cuts a mesh with a plane — most of the fields are leftover UI state
- BPY_OBJ
- plane_co
- plane_no
- BPY_OBJ
Like the rest of the Mesh_* family in Avatar Graph, this is Blender's own bpy.ops.mesh.bisect operator auto-wrapped into a node - the pack generates these directly from Blender's real mesh API, so the field list is Blender's own operator signature, not something Avatech designed from scratch. That's useful context, because a chunk of this node's parameters only make sense in light of where they came from.
What it does
Bisect slices the selected geometry with an infinite plane, defined by a point on the plane (plane_co) and the plane's normal direction (plane_no). Depending on your other settings, it can just leave a cut (new edge loop where the plane crosses the mesh), or actually delete one side and optionally fill the resulting hole. It's a genuinely useful cutting tool for trimming generated mesh geometry down to a specific boundary.
The inputs that matter, and the ones that don't
BPY_OBJ(optional) - the mesh object.plane_coandplane_no- define your cutting plane. These are the two you're actually driving deliberately.use_fill,clear_inner,clear_outer- whether to cap the cut with a new face, and whether to delete the geometry on one side of the plane entirely. These control what you actually end up with after the cut.threshold- a small numerical tolerance for what counts as "on" the plane; rarely needs adjusting.
Here's the part worth flagging honestly: xstart, xend, ystart, yend, and cursor exist in the schema because Blender's Bisect is normally an interactive viewport tool - you drag a line across the screen and Blender derives the cutting plane from where you dragged. Those four coordinates are that interactive gesture, captured as parameters. In a scripted node context like this, they're effectively vestigial - the plane is what actually matters, driven by plane_co/plane_no instead. Don't spend time trying to make sense of screen-space coordinates in a headless mesh-editing graph; they're not the mechanism you're using here.
Output is the same BPY_OBJ, passed through for chaining.
How to install it
Via ComfyUI Manager: search "Avatar Graph" (avatar-graph-comfyui), install, restart. Manually:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui
pip install -r requirements.txt
The pack's hard blocker: bpy==3.6.0 is pinned in requirements.txt and only builds on Python 3.10.x. Windows users get a bundled Python 3.10 ComfyUI zip from the README; Mac/Linux users should build a dedicated conda environment (conda create --name comfyui python=3.10) instead of fighting an existing 3.11/3.12 setup. Expect a heavier install - segment-anything, mediapipe, and OpenCV all come along.
Common issues & troubleshooting
Cut happened in the wrong place or didn't happen at all. Check plane_co/plane_no first - if you're used to Blender's interactive Bisect and expecting the xstart/ystart fields to matter, that's the mismatch; those are screen-space leftovers from the interactive tool, not what's actually driving the plane here.
"Operator poll() failed, context is incorrect." Standard Blender complaint for an invalid mesh object or empty selection - this node flips into Edit Mode automatically before running, so make sure whatever you're feeding it has real, selected geometry.
Got a hole instead of a clean cap, or vice versa. That's use_fill - leave it off if you want a raw cut with no new face, turn it on if you need the exposed cross-section capped.
Inputs (13)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| plane_coopt | B_VECTOR3 | — | |
| plane_noopt | B_VECTOR3 | — | |
| use_fillopt | BOOLEAN | false | — |
| clear_inneropt | BOOLEAN | false | — |
| clear_outeropt | BOOLEAN | false | — |
| thresholdopt | FLOAT | 0.000–10 | — |
| xstartopt | INT | 0-2147483648–2147483647 | — |
| xendopt | INT | 0-2147483648–2147483647 | — |
| ystartopt | INT | 0-2147483648–2147483647 | — |
| yendopt | INT | 0-2147483648–2147483647 | — |
| flipopt | BOOLEAN | false | — |
| cursoropt | INT | 50–2147483647 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |