Mesh Extrude Faces Indiv
Every face pops out on its own
- BPY_OBJ
- BPY_OBJ
Select a handful of faces and run a normal extrude, and Blender treats them as one connected region - the new geometry stitches together into a single continuous surface. This node skips that: "Indiv" means each selected face extrudes independently, popping out along its own normal, disconnected from its neighbors. Select a patch of faces and you get a field of separate little bumps rather than one smooth raised area - the classic move for spiky, paneled, or scale-like surface detail.
Why it's here
It's a direct wrap of Blender's bpy.ops.mesh.extrude_faces_indiv, one of twenty low-level Blender operator wraps that ship in this pack without appearing in the README's own documented node table - that table covers the headline pieces (Create Mesh Layer, Mesh Modify Shape Key, Avatar Main Output). The repo's dev notes describe regenerating Blender operator bindings via a generate_blender_types.py script, which is exactly the naming pattern you're looking at here. You're working with raw Blender topology tools, not a purpose-built avatar node.
Avatar Graph, from Avatech AI, exists to turn a single character image into a 2.5D interactive avatar: segment it, generate a mesh per layer, rig blink/mouth-open motion with shape keys, then stream the result to Avatech's own live viewer. If you're hand-sculpting texture or detail into a generated mesh - rather than relying purely on the automated pipeline - an individual face extrude is the kind of tool you'd reach for.
Inputs and outputs
BPY_OBJ in and out, plus one boolean: mirror (default false), which mirrors the offset direction across the local X axis - relevant if you've got symmetric mesh editing on and want faces on both sides to pop out consistently.
No offset or distance value is exposed, which is consistent with the rest of this batch: in Blender, this operator's move is normally driven by a live drag right after the extrude fires. Here, treat the node as generating the individually-extruded faces in place, on top of the originals, and pair it with a separate transform step if you actually need visible displacement. Which faces get extruded is set entirely by the selection state already carried on the incoming BPY_OBJ.
Installing Avatar Graph
Search "Avatar Graph" in ComfyUI Manager and install, or go manual: cd ComfyUI/custom_nodes && git clone https://github.com/avatechai/avatar-graph-comfyui, then python -m pip install -r requirements.txt inside that folder, then restart. One thing to flag - the README's own manual-install line points the git clone at avatechgg, a different org than the canonical avatechai/avatar-graph-comfyui. Use the URL above.
What actually determines whether this installs cleanly is Python version. bpy, Blender's Python API package this pack depends on, only publishes wheels for specific Python builds - here, 3.10.x. A modern ComfyUI running 3.11 or 3.12 will fail to install or import it. Conda sidesteps this cleanly on Mac/Linux (conda create --name comfyui python=3.10); on Windows the author ships a dedicated prebuilt ComfyUI + Python 3.10 zip rather than leaving you to retrofit one.
Once it's running, restart with python main.py --enable-cors-header (Mac: add --force-fp16) to get the live avatar preview talking to Avatech's hosted editor. Without that flag, everything still works - you just export via right-click → Save on Avatar Main Output instead of watching a live viewer.
Common issues
No model downloads, nothing exotic beyond bpy - the friction is almost always the Python-version pin, or a missing CORS flag if the preview doesn't update. The README's own note that nodes and templates are still changing explains why documentation on something this specific is essentially absent.
Specific to this node: because every face extrudes on its own, running it on a large selection can generate a lot of separate, disconnected geometry fast - that's the point of "Indiv," not a bug. If you wanted a single continuous raised patch instead, you're looking for Mesh_ExtrudeFacesMove instead of this one.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| mirroropt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |