Mesh Bevel
Rounds sharp edges — most of its 20 fields you'll never touch
- BPY_OBJ
- BPY_OBJ
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, orABSOLUTE. Start withOFFSET.offset- the bevel amount for most offset types (useoffset_pctinstead if you pickedPERCENT).segments(default 1) - how many facets the bevel is broken into.1gives 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 whensegments> 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.
Inputs (20)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| offset_typeopt | COMBO | 5 options: OFFSET, WIDTH, DEPTH, PERCENT, ABSOLUTE | |
| offsetopt | FLOAT | 0.000–1000000 | — |
| profile_typeopt | COMBO | 2 options: SUPERELLIPSE, CUSTOM | |
| offset_pctopt | FLOAT | 0.000–100 | — |
| segmentsopt | INT | 11–1000 | — |
| profileopt | FLOAT | 0.500–1 | — |
| affectopt | COMBO | 2 options: VERTICES, EDGES | |
| clamp_overlapopt | BOOLEAN | false | — |
| loop_slideopt | BOOLEAN | true | — |
| mark_seamopt | BOOLEAN | false | — |
| mark_sharpopt | BOOLEAN | false | — |
| materialopt | INT | -1-1–2147483647 | — |
| harden_normalsopt | BOOLEAN | false | — |
| face_strength_modeopt | COMBO | 4 options: NONE, NEW, AFFECTED, ALL | |
| miter_outeropt | COMBO | 3 options: SHARP, PATCH, ARC | |
| miter_inneropt | COMBO | 2 options: SHARP, ARC | |
| spreadopt | FLOAT | 0.100–1000000 | — |
| vmesh_methodopt | COMBO | 2 options: ADJ, CUTOFF | |
| release_confirmopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |