Nodes/Avatar Graph/Mesh Face Set Extract
ComfyUI Node

Mesh Face Set Extract

Pull a sculpted piece out as its own mesh

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Mesh Face Set Extract
  • BPY_OBJ
  • BPY_OBJ
add_boundary_looptrue
smooth_iterations4
apply_shrinkwraptrue
add_solidifytrue

This one comes from a different corner of Blender than most of its neighbors here - it's a Sculpt Mode tool, not a raw Edit Mode operator. Face sets are Blender's way of tagging regions of a sculpted mesh (an ear, a horn, a strap) so you can isolate and work on them separately. Face Set Extract takes the active face set and pulls it out into its own standalone mesh object, complete with real thickness and a clean boundary, rather than leaving it as just a tagged region of the original.

The parameters that actually matter

Unlike most of the twenty nodes in this batch, this one exposes real, meaningful settings - it's genuinely tunable, not just a bare pass-through:

  • add_boundary_loop (default true) - adds an extra edge loop right at the seam where the extracted piece was cut away, keeping that edge clean rather than leaving a single ragged boundary ring.
  • smooth_iterations (INT, default 4) - how many smoothing passes run on the new boundary, softening the cut edge instead of leaving it jagged from wherever the face set happened to end.
  • apply_shrinkwrap (default true) - conforms the new piece back onto the surface it was extracted from, so it doesn't float free of the original shape it came from.
  • add_solidify (default true) - gives the extracted piece actual thickness, since a raw face set is paper-thin on its own.

Plus the standard optional BPY_OBJ input and BPY_OBJ output. It's a direct wrap of Blender's bpy.ops.mesh.face_set_extract - one of twenty low-level Blender operator wraps this pack ships without documenting in its own README (that document's node 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 where this naming convention comes from.

Where it fits

Avatar Graph, from Avatech AI, turns a single character image into a 2.5D interactive avatar - segmentation, per-layer mesh generation, shape-key rigging for blink and mouth movement, then a live view through Avatech's own hosted editor. This node is a genuine outlier among the twenty: most of its siblings are pure Edit Mode geometry edits, while this one assumes you've already got sculpted, face-set-tagged geometry to work from - a heavier, more deliberate use case than the plain plane-based meshes the pack's own demo templates build.

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. Watch out - the README's own manual-install command clones from avatechgg, a different org than the canonical avatechai/avatar-graph-comfyui; use the URL above.

What actually gates a successful install is Python version. bpy, Blender's Python API and this pack's core dependency, only ships wheels for specific Python builds - you need 3.10.x. A modern ComfyUI on Python 3.11/3.12 will fail to install or import it. Conda is the clean fix 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 a retrofit.

Once running, restart with python main.py --enable-cors-header (Mac: add --force-fp16) if you want the live avatar preview reaching Avatech's hosted editor. Skip it and everything still works - export manually via right-click → Save on Avatar Main Output instead.

Common issues

No model downloads, nothing unusual beyond bpy - install pain is almost always the Python pin, preview pain almost always the missing CORS flag. The README's own warning that nodes and templates are still evolving is a fair excuse for the sparse documentation here.

The genuine gotcha with this node specifically: it needs an active face set to already exist on the incoming mesh, which means whatever built or tagged that mesh has to have set one up first. If it's producing an empty or unexpected extraction, that's very likely upstream - check that a face set actually got assigned before this node runs, not that the extract itself is broken.

Categoryblender

Inputs (5)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
add_boundary_loopoptBOOLEANtrue
smooth_iterationsoptINT40–2147483647
apply_shrinkwrapoptBOOLEANtrue
add_solidifyoptBOOLEANtrue

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ