Nodes/Avatar Graph/Object Vertex Weight Normalize Active Vertex
ComfyUI Node

Object Vertex Weight Normalize Active Vertex

Rescale One Vertex's Weights to Sum to One

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Object Vertex Weight Normalize Active Vertex
  • BPY_OBJ
  • BPY_OBJ

Normalizing a whole vertex group fixes the global sums, but sometimes only one vertex is off - a single point where the weights add up to 0.7 instead of 1.0, just enough to make the deformation sag. Object Vertex Weight Normalize Active Vertex is the per-vertex version: it rescales the active vertex's weights across all its groups so they sum to 1.

If the group-level Normalize nodes are the wide brush, this is the touch-up. It's the kind of node you reach for when the avatar looks almost right.

How it works

An auto-generated wrapper around Blender's bpy.ops.object.vertex_weight_normalize_active_vertex. No parameters - just BPY_OBJ in and the same object out. The only control is the active vertex (set via the mesh's edit-mode selection), because the operator normalizes exactly that one vertex.

Technically it balances the weights on that vertex across the groups that own it, so the ratios are preserved but the total comes out to 1. That's different from the group-normalize nodes: those rescale within a group; this rescales across groups for a single vertex.

The output is the passthrough BPY_OBJ, so you can chain this right before export for a last-mile cleanup.

Installing it

It rides in the Avatar Graph pack:

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 (the README suggests a dedicated conda env), and bpy is a several-hundred-MB headless Blender.

Common issues

The dominant failure is scope confusion. This node does exactly one vertex, so if you wire it in expecting a whole-mesh cleanup, nothing visible happens. That's correct behavior - you want the group-level Object Vertex Group Normalize All for the big pass and this only for the stragglers.

Also, "active vertex" is inherited state, not something you set here. If the wrong vertex is active, the wrong vertex gets normalized. And the standing rule: no BPY_OBJ from upstream mesh nodes, no vertex to fix.

Categoryblender

Inputs (1)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ