Object Face Map Assign
Putting the selected faces into a face map
- BPY_OBJ
- BPY_OBJ
If Object_FaceMapAdd creates an empty playlist, Object Face Map Assign is where you actually add tracks to it: it takes whatever faces are currently selected in Edit Mode and adds them to the active face map.
How it works
It wraps bpy.ops.object.face_map_assign(). Two things have to already be true for this to do anything: the object needs to be in Edit Mode (so use Object_EditmodeToggle beforehand if you're not already there), and something needs to be selected at the face level. Whatever faces are selected get added to whichever face map is currently active on the object - this node doesn't take a name or index, so it always targets the active one, not a specific one you name.
This doesn't remove faces from other maps they might already belong to, and a face can belong to more than one face map at once - assigning is additive, not exclusive.
The inputs and outputs that matter
There's exactly one input:
BPY_OBJ- the object whose selected faces get assigned.
Output is a single BPY_OBJ, unchanged in identity, with its active face map now including the faces that were selected.
How to install it
ComfyUI Manager: search "Avatar Graph", install, restart - or manually:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui && python -m pip install -r requirements.txt
bpy needs Python 3.10.x, exactly. Windows gets a prebuilt Python-3.10 ComfyUI zip from the README; macOS/Linux wants a dedicated conda create --name comfyui python=3.10 environment rather than an existing newer-Python setup. Add --enable-cors-header on restart (--force-fp16 too on Mac) for the live avatar preview; skip it and you still get full functionality via .glb/.gltf export.
Common issues & troubleshooting
Node not loading traces to the Python-version pin - check the startup console for a bpy import error first.
Ran this and nothing got assigned - check two things: is the object actually in Edit Mode (Object_EditmodeToggle toggles state, so an unexpected extra call earlier in the graph can leave you in the wrong mode), and does it have an active face map at all (Object_FaceMapAdd needs to have run first, since this node doesn't create one). Without both, there's nothing for this operator to assign into.
Assigned to the wrong face map - since this always targets whichever map is currently active, not one you name, double-check what "active" means in your graph at the point this node runs. If you've created multiple face maps and the wrong one ends up active, the fix is making sure the right one is set active beforehand, not anything about this node's own inputs.
Faces are also in a different map than expected - that's expected, not a bug. Assigning is additive; a face can belong to several face maps simultaneously, this node doesn't strip existing membership.
Also worth knowing regardless of what you're debugging: face maps are a deprecated Blender feature, later replaced by the general attribute system in newer versions. If this errors on a missing face-map API rather than behaving as described, that's your bpy version, not your graph.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |