Nodes/Avatar Graph/Mesh Bevel
ComfyUI Node

Mesh Bevel

Rounds sharp edges — most of its 20 fields you'll never touch

By avatechai·Created 3 years ago·Updated 2 years ago· 266
Mesh Bevel
  • BPY_OBJ
  • BPY_OBJ
◄offset_type▾►
◄offset0.00►
◄profile_type▾►
◄offset_pct0.00►
◄segments1►
◄profile0.50►
◄affect▾►
◄clamp_overlapfalse►
◄loop_slidetrue►
◄mark_seamfalse►
◄mark_sharpfalse►
◄material-1►
◄harden_normalsfalse►
◄face_strength_mode▾►
◄miter_outer▾►
◄miter_inner▾►
◄spread0.10►
◄vmesh_method▾►
◄release_confirmfalse►

This is Blender's real bpy.ops.mesh.bevel operator, auto-wrapped into a ComfyUI node - Avatar Graph generates a big chunk of its node list directly from Blender's own mesh API rather than writing custom logic per node, and Bevel is one of the more parameter-heavy examples of that. Don't let the ~20 fields intimidate you; nearly all of them are advanced fine-tuning that ships at sensible defaults, and the real reference for what each one does is Blender's own documentation, not this pack's README.

What it does

Bevel takes a sharp edge or vertex and rounds or chamfers it - replacing the hard corner with a small angled or curved facet. It's one of the most commonly used mesh-cleanup operations in Blender, and here it's exactly what you'd expect: applied to a selection on your Avatar Graph mesh, useful anywhere a perfectly sharp edge from a traced or generated outline looks too "cut with scissors" and you want a softer, more natural transition.

The inputs that actually matter to a beginner

  • BPY_OBJ (optional) - the mesh object.
  • offset_type - how the bevel amount is measured: OFFSET (a raw distance), WIDTH, DEPTH, PERCENT, or ABSOLUTE. Start with OFFSET.
  • offset - the bevel amount for most offset types (use offset_pct instead if you picked PERCENT).
  • segments (default 1) - how many facets the bevel is broken into. 1 gives you a flat chamfer (a single angled cut); higher numbers give a smoother, more rounded curve. This is the one people usually forget to raise and then wonder why their "rounded" edge still looks sharp.
  • profile (default 0.5) - shapes the curve of the bevel when segments > 1; 0.5 is a even, circular-ish arc.

Everything else - affect (vertices vs. edges), clamp_overlap, loop_slide, mark_seam/mark_sharp, material, harden_normals, face_strength_mode, miter_outer/miter_inner, spread, vmesh_method - are legitimate Blender bevel controls, but they're there because the node is a 1:1 wrap of the real operator, not because you need to understand all of them to get a working bevel. Leave them at default until you have a specific reason not to.

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) rather than fighting an existing 3.11/3.12 setup. It's a heavier install overall - segment-anything, mediapipe, and OpenCV all come along.

Common issues & troubleshooting

Bevel looks flat/sharp even after setting an offset. You almost certainly need to raise segments above its default of 1 - a single segment is a flat chamfer, not a round.

"Operator poll() failed, context is incorrect." Standard Blender complaint for an invalid mesh object or an empty selection - check whatever feeds BPY_OBJ and confirm there's actually something selected by the time this node runs (it flips into Edit Mode automatically, runs, and flips back, so selection state needs to be correct going in).

Bevel amount looks wrong/tiny. Double check offset_type matches the field you're actually setting - if you're typing a value into offset_pct but offset_type is still OFFSET, that percentage value is being ignored. They're separate fields precisely because Blender's operator only reads one depending on the mode.

Categoryblender

Inputs (20)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ—
offset_typeoptCOMBO5 options: OFFSET, WIDTH, DEPTH, PERCENT, ABSOLUTE
offsetoptFLOAT0.000–1000000—
profile_typeoptCOMBO2 options: SUPERELLIPSE, CUSTOM
offset_pctoptFLOAT0.000–100—
segmentsoptINT11–1000—
profileoptFLOAT0.500–1—
affectoptCOMBO2 options: VERTICES, EDGES
clamp_overlapoptBOOLEANfalse—
loop_slideoptBOOLEANtrue—
mark_seamoptBOOLEANfalse—
mark_sharpoptBOOLEANfalse—
materialoptINT-1-1–2147483647—
harden_normalsoptBOOLEANfalse—
face_strength_modeoptCOMBO4 options: NONE, NEW, AFFECTED, ALL
miter_outeroptCOMBO3 options: SHARP, PATCH, ARC
miter_inneroptCOMBO2 options: SHARP, ARC
spreadoptFLOAT0.100–1000000—
vmesh_methodoptCOMBO2 options: ADJ, CUTOFF
release_confirmoptBOOLEANfalse—

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ—