Transform Edge Slide
Sliding edges along surfaces without tearing your UVs apart
- BPY_OBJ
- snap_elements
- snap_point
- BPY_OBJ
Transform Edge Slide is probably the most genuinely useful single node in the transform family, and the reason is right there in the last input: correct_uv, which defaults to true. It wraps Blender's bpy.ops.transform.edge_slide - slide selected edges along the faces they belong to - and because Avatar Graph's meshes are texture-mapped planes, an edge move that keeps the UVs intact is the difference between "moved a line" and "resmearing the whole texture."
In Blender, edge slide is the tool you use to adjust topology without changing the overall shape: nudge an edge loop forward or back, tighten a mouth, widen a nostril, all while the surrounding geometry stays put. In the avatar pipeline that's morph-target territory - the same kind of vertex adjustment that becomes a shape key the editor later animates. It's the least flashy transform and the one you'll reach for most.
How it works
An EditOps node: deselect all, set your BPY_OBJ active, enter edit mode, run the operator, return to object mode, pass the object back. The core input is value, a FLOAT in the -10 to 10 range (the auto-generated wrapper's window) - effectively how far along the adjacent faces the edges slide. Negative slides one way, positive the other.
The controls that matter for real work:
- use_even - keep edge spacing even while sliding. On for topology where you want a clean, regular loop; off when you want to push an edge close to a neighbor.
- flipped - slide toward the "other" end of the edge loop.
- use_clamp (default true) - stop the slide at the end of the available face range instead of overshooting. Leave it on; it's what keeps the operation sane.
- correct_uv (default true) - keep UVs glued to the geometry as it slides. This is the one that saves your textures, and the reason this node is friendlier than raw vertex moves.
- single_side - slide only one side of the edge, for asymmetric tweaks.
The rest - mirror, the whole snap/snap_elements/snap_target block, snap_point - is Blender's transform-tool furniture. Ignore it until you have a specific snapping need.
Inputs that matter
BPY_OBJ, value, use_even, use_clamp, correct_uv. That's the whole daily-driver list.
Output: BPY_OBJ - the modified mesh for the next node.
Installing it
Part of the Avatar Graph pack. 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 after. Pack gotchas: bpy==3.6.0 needs Python 3.10.x (a 3.11+ env breaks the pack's import), and first launch downloads the SAM ViT-H model (~2.5 GB) to ComfyUI/models/sams plus two MediaPipe landmarker files.
Common issues
- "No module named bpy" → Python 3.10.x. Standard answer for this pack.
- Texture smears after the slide →
correct_uvgot turned off. Flip it back on; that's the feature's whole job. - Slide goes too far / nowhere → respect
use_clamp. With clamping off you can push an edge past the point the mesh can represent, and it wraps weirdly. - Edges not sliding at all → selection. The node operates on the current selection in the shared scene; make sure the edges you mean are selected upstream.
- Scene resets between runs - build the mesh and slide it in a single graph.
If you pick one transform node to actually learn in this pack, make it this one. Small, precise, texture-safe - the workhorse hiding behind a boring name.
Inputs (19)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| valueopt | FLOAT | 0.00-10–10 | — |
| single_sideopt | BOOLEAN | false | — |
| use_evenopt | BOOLEAN | false | — |
| flippedopt | BOOLEAN | false | — |
| use_clampopt | BOOLEAN | true | — |
| mirroropt | BOOLEAN | false | — |
| snapopt | BOOLEAN | false | — |
| snap_elementsopt | B_ENUM_SET | — | |
| use_snap_projectopt | BOOLEAN | false | — |
| snap_targetopt | COMBO | 4 options: CLOSEST, CENTER, MEDIAN, ACTIVE | |
| use_snap_selfopt | BOOLEAN | true | — |
| use_snap_editopt | BOOLEAN | true | — |
| use_snap_noneditopt | BOOLEAN | true | — |
| use_snap_selectableopt | BOOLEAN | false | — |
| snap_pointopt | B_VECTOR3 | — | |
| correct_uvopt | BOOLEAN | true | — |
| release_confirmopt | BOOLEAN | false | — |
| use_accurateopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |