UV Select Pinned
Find every UV you froze in place
- BPY_OBJ
- BPY_OBJ
Pinning is how you tell an unwrap "these UVs stay put, reflow everything else around them." And once you've pinned a handful of points, you need a way to find them again. That's UV Select Pinned: select every pinned UV on the mesh. One input, one output, no options.
It wraps Blender's bpy.ops.uv.select_pinned(), part of the Avatar Graph pack's auto-generated UV operator family. These nodes are Blender's UV editor tools exposed as ComfyUI nodes - generated from Blender's operator list rather than hand-documented, which is why they're the forgotten half of the pack's README while the flashy avatar-output nodes get all the screenshots.
Why pinning matters in avatar rigs
The whole Avatar Graph pipeline is about keeping a character's features consistent: the corners of the mouth, the outer edge of the eye, the jawline. When you re-project or re-unwrap a mesh (say, after UV Sphere Project on a head), the layout wants to shift everything. Pinned UVs are your anchors - they refuse to move, so the projection has to fit around them. That's how you stop a mouth corner from drifting across the cheek between shape keys.
The workflow is a triangle: select the anchors you care about, pin them, then run whatever projection or packing op you want, and finally use UV Select Pinned to confirm your anchors are still where you expect before wiring the mesh toward a shape-key or export node. Because selection persists on the mesh between chained nodes, whatever you run after UV Select Pinned acts on exactly the anchored set.
Inputs and outputs
- BPY_OBJ in - the mesh with pinned UVs (a Blender object reference, not a ComfyUI image).
- BPY_OBJ out - the same mesh, selection now set to everything pinned.
Nothing to configure. If you find yourself wishing there were a "select unpinned" mode, chain it into a select-mode or invert-style node upstream - the operator itself only does the one thing.
Installing it
Every node in this pack installs the same way, and the big one is the Python requirement: bpy==3.6.0 is pinned, so you need Python 3.10 in your ComfyUI environment or the pack won't load at all. ComfyUI Manager users search "Avatar Graph"; everyone else:
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, then let the first launch pull the SAM ViT-H model (~2.5 GB) and the mediapipe face/pose landmarkers in the background - that download on startup has confused more than one person into thinking the install failed.
Troubleshooting
If UV Select Pinned returns an empty selection, it's not broken - you just have no pinned UVs. Pinning happens elsewhere in the pack (the pin operator) and if you never pinned anything, there's nothing to select. Also worth knowing: the pack's README explicitly warns it's still "making changes to the nodes and demo templates," so if a template workflow's pinning behavior seems off, check for a newer version of the pack before assuming the node is wrong.
Inputs (1)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |