Object Vertex Group Remove From
Scrub Weights Off Vertices Without Killing the Group
- BPY_OBJ
- BPY_OBJ
Removing a whole vertex group is one thing; scrubbing specific vertices out of a group is the surgical version, and that's what Object Vertex Group Remove From does. It takes the currently selected vertices and removes them from a group - or from every group - while leaving the group itself intact for the vertices that should stay.
In an avatar rig this is how you keep a brow group from bleeding into the forehead, or stop a mouth group from grabbing the cheeks. Delete the wrong weights from the wrong verts and the whole blink reads wrong, so the control here matters.
How it works
An auto-generated wrapper around Blender's bpy.ops.object.vertex_group_remove_from. BPY_OBJ in, edit mode, operator runs, same object out. Two booleans decide the scope:
- use_all_groups - default
false. When on, the selected vertices are removed from every group, not just the active one. A quick way to fully clear a selection's weights. - use_all_verts - default
false. When on, the operation applies to all vertices instead of just the selection.
Default behavior, with both off: selected vertices, active group. That's the one you'll reach for most. Select the verts you want to detach, make the target group active, run it.
Output is the same BPY_OBJ, so you can chain this into a smoothing or normalization pass afterward - removing stray weights and then tidying the survivors is a natural one-two.
Installing it
It's part of Avatar Graph:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui
python -m pip install -r requirements.txt
Restart ComfyUI, or install "Avatar Graph" from ComfyUI Manager. Pack-wide install notes: bpy==3.6.0 needs Python 3.10 (README suggests a conda env), and bpy is a several-hundred-MB headless Blender.
Common issues
The top gotcha is selection. The default scope is "selected vertices," so if your graph didn't actually select anything, the operator has an empty set to work with - a silent no-op. Make sure something upstream (an Object Vertex Group Select, or a mesh selection op) actually populated the selection.
Second: mixing up use_all_groups with use_all_verts. One is "every group," the other is "every vertex." Setting the wrong one and getting a blanked mesh is a rite of passage. And remember the standing rule - this only runs on a real BPY_OBJ from the pack's mesh nodes.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| use_all_groupsopt | BOOLEAN | false | — |
| use_all_vertsopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |