Transform Transform
33 modes, one node
- BPY_OBJ
- value
- orient_matrix
- constraint_axis
- snap_elements
- snap_point
- snap_normal
- center_override
- BPY_OBJ
Transform_Transform is the pack's generic transform operator, and if you squint it's basically Blender's transform system in a single node. Pick a mode, give it a value, and it moves, rotates, scales, shears, bends, or otherwise distorts your selection. There are 33 modes hiding behind that dropdown - from the everyday TRANSLATION, ROTATION, and RESIZE to the niche BEND, SHRINKFATTEN, TILT, TRACKBALL, and SKIN_RESIZE. It's the operator Blender's own transform gizmo invokes under the hood, exposed as a node.
Why you'd reach for it
Because it's the generalist. The pack ships specialized transform nodes for the common cases (Transform_SkinResize for skin radii, dedicated rotate/resize/translate wrappers), but when you want something off the beaten path - a BEND for a curved limb, a TOSPHERE to puff geometry into a ball, a SHEAR for a skewed element - this is the one that has it. It's also the right starting point when you're not sure which transform you need, since the mode enum doubles as a menu of everything Blender can do to geometry.
How it works
Auto-generated from the transfrom_api list in blender/ops_mesh.py, wrapping bpy.ops.transform.transform. It's an EditOps node, so the flow is: deselect everything, make your object active, enter edit mode, run the operator with your parameters, return to object mode, pass the object through. The important inputs:
mode- the 33-mode enum. The ones you'll actually use areTRANSLATION,ROTATION,RESIZE, and occasionallyBENDorTOSPHERE.value(aB_VECTOR4) - the amount. The vector's meaning changes with the mode: translation offset, rotation angles, resize factors.orient_type(GLOBAL/LOCAL/NORMAL/GIMBAL/VIEW/CURSOR/PARENT) - what space the transform happens in.LOCALmatters when your mesh isn't axis-aligned.orient_axis- which axis a rotation-style transform spins around.constraint_axis- lock individual axes so the transform only affects the ones you leave open.mirror- mirror the transform across the object's local axes.
The remaining inputs - use_proportional_edit, proportional_edit_falloff, proportional_size, the whole snap block, release_confirm, use_accurate - are the standard transform-operator furniture, inherited from Blender. You'll touch them when you want smooth falloffs or snapping; ignore them otherwise.
The honest advice
For most avatar work, you'll use TRANSLATION, ROTATION, and RESIZE - and for those, the dedicated nodes or Create Shape Flow's shape keys usually serve you better. Reach for Transform_Transform when the dedicated nodes run out. The catch is the same one every transform node in this pack has: the operator acts on whatever is selected in the shared headless Blender scene, and the wrapper deselects everything before it runs. Make sure your target geometry is actually selected by the time this node fires.
Install
Same pack, same install:
cd ComfyUI/custom_nodes
git clone https://github.com/avatechai/avatar-graph-comfyui.git
cd avatar-graph-comfyui && python -m pip install -r requirements.txt
Or ComfyUI Manager → "Avatar Graph". Python 3.10 for bpy==3.6.0, ~2.5GB SAM checkpoint plus mediapipe models on first load, scene resets each run, and --enable-cors-header for the live preview.
Transform_Transform is the node you learn last and appreciate most. It's not the star of the pack - but when you need a transform that no dedicated node covers, it's the one that already has the mode.
Inputs (29)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| modeopt | COMBO | 33 options: INIT, DUMMY, TRANSLATION, ROTATION, RESIZE, SKIN_RESIZE, +27 | |
| valueopt | B_VECTOR4 | — | |
| orient_axisopt | COMBO | 3 options: X, Y, Z | |
| 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 | — |
| center_overrideopt | B_VECTOR3 | — | |
| release_confirmopt | BOOLEAN | false | — |
| use_accurateopt | BOOLEAN | false | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| BPY_OBJ | BPY_OBJ | — |