UV Select Linked
UV Select Linked is the workhorse of Avatar Graph
- BPY_OBJ
- BPY_OBJ
UV Select Linked looks like nothing. One input, one output, no widgets to fiddle with - the kind of node you'd drag out, stare at, and delete. Don't. It's the quiet workhorse of the Avatar Graph pack, and once you understand what it's for you'll reach for it constantly.
Here's the context. Avatar Graph (by Avatech, the avatar-animation company behind editor.avatech.ai) turns a 2D character image into a real-time 3D avatar. A mesh gets created from your character's segmented face, and that mesh carries a UV layout that decides how the image texture sticks to it. The UV_* family - UV Select Linked, UV Select More, UV Stitch, UV Weld, and the rest - are Blender's own UV editing operators exposed as ComfyUI nodes so you can repair that layout without leaving the graph. The README never even mentions them in its custom-nodes table; they're generated wholesale from Blender's operator list. Boring plumbing, but it's the plumbing that makes the avatar rigs hold together.
What it actually does
UV Select Linked takes whatever UVs are currently selected on the mesh and expands the selection to everything connected to them - in Blender terms, the whole UV island. One island is the unit of texture layout: it's the set of UVs that move together and share a texture region. When your mesh was auto-generated from a flat image, the islands are a mess of half-grabbed faces, so "select the complete island" is the first move of nearly every cleanup.
Typical chain: grab one vertex with a select node, then UV Select Linked to flood-fill the selection to the full eye or mouth island, then pipe into a pin or snap node. It's the "select everything connected" move, as a node.
How it works
Under the hood this is bpy.ops.uv.select_linked() - the same operator Blender's UV editor calls when you press L over a selection. The pack's blender/ops_mesh.py generates every UV_ node from Blender's operator list, and the shared EditOps base enters edit mode on your mesh, fires the operator, exits edit mode, and hands the same object back. Nothing is created and nothing is deleted - only the mesh's UV selection state changes. Because that selection persists on the mesh between chained nodes, you can build a real pipeline out of these: select, then select more, then pin, then project.
Inputs and outputs
There's exactly one of each:
- BPY_OBJ in - the mesh you're operating on (a Blender object reference, not an image; this type only exists inside this pack's graph).
- BPY_OBJ out - the same mesh, so you can keep chaining blender nodes downstream.
That's the whole story. If you're looking for settings, you've got the wrong node.
Installing it
Avatar Graph needs Python 3.10 exactly - the pack pins bpy==3.6.0, and bpy (Blender as a Python library, a ~300 MB wheel) won't install on 3.11+. If your ComfyUI env is newer, no node in this pack will even register. Easiest path is ComfyUI Manager (search "Avatar Graph"). Or:
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 after installing. First launch also auto-downloads the SAM ViT-H model (~2.5 GB) and mediapipe face/pose landmarker files, so don't panic when it sits there "downloading" - that's normal. The README suggests running ComfyUI with --enable-cors-header for the live preview in the Avatech editor; without it you can still export a .GLB by right-clicking the Avatar Main Output node.
Troubleshooting
If the node appears to do nothing, the usual culprits are: the mesh has no UV map at all (run a Create Mesh Layer or plane unwrap first), or nothing was selected upstream - select_linked only grows an existing selection, it doesn't invent one. And the classic confusion: you can't wire a normal ComfyUI IMAGE into this. It eats BPY_OBJ, full stop.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |