UV Remove Doubles
Merge the UV vertices that were never supposed to be split
- BPY_OBJ
- BPY_OBJ
UV Remove Doubles is the cleanup node for a UV map that's picked up duplicated vertices. Every seam and every rip splits UV vertices that sit on top of each other - that's the point - but splits also happen by accident during unwrapping and projecting, and each duplicate is a tiny landmine: seams that won't stitch, islands that won't merge, gaps that leak texture. This node welds the coincident ones back together.
How it works
Another auto-generated Blender wrapper in the Avatar Graph pack, calling bpy.ops.uv.remove_doubles. It takes your BPY_OBJ, enters edit mode, and merges UV vertices closer than a threshold into a single vertex. Two inputs matter:
- threshold - the merge distance in UV space (default
0.02, range 0–10). If two UV vertices are within this distance, they're fused. The default is fine for most cleanup; raise it a little if you have near-misses that won't weld, lower it if you're accidentally fusing islands that should stay separate. - use_unselected - normally only selected UV vertices are touched; flip this on to merge unselected ones too.
Output is the same BPY_OBJ, with a slightly cleaner UV map than it had going in.
Where it fits
In Avatar Graph, doubles tend to sneak in around the parts you edit most - the mouth and eye islands that get ripped, re-unwrapped, and packed. A good habit: run Remove Doubles after any rip/stitch sequence and before exporting the .GLB/.GLTF for the Avatech editor, because split UVs are exactly what cause visible seams or smears on the final rig that are a pain to chase down later. It's the UV equivalent of Blender's merge-by-distance on mesh vertices, and it's cheap enough to just always run once near the end of the graph.
The trap to avoid: threshold too high on a map with deliberately separated islands will fuse things that should stay apart. Start at the default 0.02 and only nudge it if the result isn't clean.
Installing Avatar Graph
This node ships in the Avatar Graph pack from Avatech. From ComfyUI/custom_nodes:
git clone https://github.com/avatechai/avatar-graph-comfyui
cd avatar-graph-comfyui
python -m pip install -r requirements.txt
then restart ComfyUI with --enable-cors-header. Or ComfyUI Manager → search Avatar Graph → Install.
Standard pack warnings: it pins bpy==3.6.0, which needs Python 3.10.x or the install fails entirely; first launch auto-downloads the ~2.5 GB SAM model; and the README says the nodes are still changing, so pin the version once your workflow is stable.
Inputs (3)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| thresholdopt | FLOAT | 0.020–10 | — |
| use_unselectedopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |