UV Select Overlap
Find the UV islands colliding with each other
- BPY_OBJ
- BPY_OBJ
Textures bleed where UV islands collide. When two separate islands occupy the same patch of the UV texture space, the renderer has to decide which one gets the pixels, and whatever it picks usually shows up as a smeared seam on your avatar's face. UV Select Overlap is the node that finds those collisions for you.
It wraps Blender's bpy.ops.uv.select_overlap() - select all UVs whose area overlaps another island's area. Like every UV_* node in the Avatar Graph pack, it's auto-generated from Blender's operator list and runs against a mesh object inside the pack's embedded Blender scene. It doesn't fix anything by itself; it flags. That's the whole point. You can't repair what you can't see.
How it works
The shared edit-mode wrapper activates your mesh, calls the operator, and returns the same object. The operator compares the selected UVs' coverage against all other UVs and selects anything that shares texture space with another island. Selection state stays on the mesh, so the nodes you chain after it (pin, snap, stitch) act on exactly the troublemakers.
The inputs are minimal:
- BPY_OBJ - the mesh, in and out.
- extend (bool) - add the overlapping UVs to the existing selection instead of replacing it.
The extend toggle matters more than it looks. Leave it off and the selection becomes "everything that overlaps." Turn it on and you can accumulate overlap detections across multiple meshes or passes before doing a single cleanup operation.
Why you care in avatar work
Meshes created from 2D images via the pack's Create Mesh Layer start with auto-generated UVs, and auto-generated UVs love to stack islands. Before you export a .GLB or build shape keys, running Select Overlap is a fast sanity check: if it selects a chunk of the face, your layout has a collision problem that will show up as texture smearing during animation. Run it, see what's flagged, then decide whether to pack islands or stitch.
Installing it
Same pack-wide story: Avatar Graph pins bpy==3.6.0, so your ComfyUI environment must be Python 3.10. Install from ComfyUI Manager by searching "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 afterward. First launch auto-downloads the SAM ViT-H model (~2.5 GB) and the mediapipe face/pose landmarkers - that's normal, not a hang. For the live preview in the Avatech editor you'd run ComfyUI with --enable-cors-header; without it, right-clicking Avatar Main Output still gets you a .GLB.
Troubleshooting
If the node selects nothing, that's genuinely good news - no overlaps. But before you celebrate, remember it only checks what the operator considers overlap; tiny slivers of shared space can fall under the detection threshold. If you suspect bleeding anyway, zoom into the UV layout of the mesh in a real DCC like Blender and eyeball it. Also note that heavily overlapping stacked islands (deliberate, like mirrored UVs) will read as overlaps - which is correct, but might not be the bug you're hunting.
Inputs (2)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| extendopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |