Nodes/Avatar Graph/Mesh Bisect
ComfyUI Node

Mesh Bisect

Cuts a mesh with a plane — most of the fields are leftover UI state

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Mesh Bisect
  • BPY_OBJ
  • plane_co
  • plane_no
  • BPY_OBJ
use_fillfalse
clear_innerfalse
clear_outerfalse
threshold0.00
xstart0
xend0
ystart0
yend0
flipfalse
cursor5

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_co and plane_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.

Categoryblender

Inputs (13)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
plane_cooptB_VECTOR3
plane_nooptB_VECTOR3
use_filloptBOOLEANfalse
clear_inneroptBOOLEANfalse
clear_outeroptBOOLEANfalse
thresholdoptFLOAT0.000–10
xstartoptINT0-2147483648–2147483647
xendoptINT0-2147483648–2147483647
ystartoptINT0-2147483648–2147483647
yendoptINT0-2147483648–2147483647
flipoptBOOLEANfalse
cursoroptINT50–2147483647

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ