Transform Translate
The Workhorse That Moves Anything
- BPY_OBJ
- value
- orient_matrix
- constraint_axis
- snap_elements
- snap_point
- snap_normal
- BPY_OBJ
Transform Translate is the node you'll wire into almost every Avatar Graph workflow, because it's the one that just moves stuff. It wraps Blender's transform.translate - the plain "grab and slide" operator - and the whole mesh it's handed moves along the vector you give it. When your mouth mesh sits a few pixels off, when the eye layer needs to drop half a head-height, when you're lining up parts before Join Meshes, this is the tool. No cleverness, no surprises, exactly what it says on the tin.
How it works
The pack's transform nodes are auto-generated wrappers: BPY_OBJ in, edit mode, bpy.ops.transform.translate(**props) runs, BPY_OBJ out. The value input is a B_VECTOR3 - the X, Y, Z offset. The rest of the input list is Blender's full translate operator, scraped from RNA, and most of it you'll never touch.
The ones that matter:
value- the 3-value offset. This is the node. Start here.orient_type- GLOBAL, LOCAL, NORMAL, GIMBAL, VIEW, CURSOR, or PARENT. If the mesh has been rotated, LOCAL moves along its own axes; GLOBAL moves along world axes. "Why is it moving sideways?" is almost always an orient_type answer.constraint_axis- a 3-boolean vector that locks movement to specific axes. Want a pure vertical drop? Set only Y.use_proportional_edit+proportional_size- again the organic-effect switch. Small radius = a gentle nudge of the middle while the edges stay put.
The rest - snap and its family, mirror, cursor_transform, texture_space, release_confirm - is carryover from Blender's operator and safe to ignore.
The gotcha that bites everyone
These transform nodes have no vertex-selection input, so Translate moves the entire mesh it receives. If you translate the joined character, the whole thing shifts. If you only wanted the mouth to slide, the mouth has to be its own mesh layer from Create Mesh Layer, and you translate that object before joining. That split-per-part architecture is the whole design of this pack, and it's also the #1 confusion for newcomers - you'll feel it the first time you move one part and the whole face goes with it.
Installing
Translate ships in the Avatar Graph pack (avatechai/avatar-graph-comfyui). The pack embeds bpy==3.6.0, so Python 3.10 is required:
conda create --name comfyui python=3.10
conda activate comfyui
Install via 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 with python main.py --enable-cors-header for the live preview (or skip the flag and export a .GLB/.GLTF from Avatar Main Output instead). No per-node downloads.
Inputs (31)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| valueopt | B_VECTOR3 | — | |
| orient_typeopt | COMBO | 7 options: GLOBAL, LOCAL, NORMAL, GIMBAL, VIEW, CURSOR, +1 | |
| orient_matrixopt | B_VECTOR9 | — | |
| orient_matrix_typeopt | COMBO | 7 options: GLOBAL, LOCAL, NORMAL, GIMBAL, VIEW, CURSOR, +1 | |
| constraint_axisopt | B_BOOLEAN3 | — | |
| mirroropt | BOOLEAN | false | — |
| use_proportional_editopt | BOOLEAN | false | — |
| proportional_edit_falloffopt | COMBO | 8 options: SMOOTH, SPHERE, ROOT, INVERSE_SQUARE, SHARP, LINEAR, +2 | |
| proportional_sizeopt | FLOAT | 1.009.999999974752427e-7–999999995904 | — |
| use_proportional_connectedopt | BOOLEAN | false | — |
| use_proportional_projectedopt | 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 | — | |
| snap_alignopt | BOOLEAN | false | — |
| snap_normalopt | B_VECTOR3 | — | |
| gpencil_strokesopt | BOOLEAN | false | — |
| cursor_transformopt | BOOLEAN | false | — |
| texture_spaceopt | BOOLEAN | false | — |
| remove_on_cancelopt | BOOLEAN | false | — |
| view2d_edge_panopt | BOOLEAN | false | — |
| release_confirmopt | BOOLEAN | false | — |
| use_accurateopt | BOOLEAN | false | — |
| use_automerge_and_splitopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |