Nodes/Avatar Graph/Transform Transform
ComfyUI Node

Transform Transform

33 modes, one node

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Transform Transform
  • BPY_OBJ
  • value
  • orient_matrix
  • constraint_axis
  • snap_elements
  • snap_point
  • snap_normal
  • center_override
  • BPY_OBJ
mode
orient_axis
orient_type
orient_matrix_type
mirrorfalse
use_proportional_editfalse
proportional_edit_falloff
proportional_size1.00
use_proportional_connectedfalse
use_proportional_projectedfalse
snapfalse
use_snap_projectfalse
snap_target
use_snap_selftrue
use_snap_edittrue
use_snap_nonedittrue
use_snap_selectablefalse
snap_alignfalse
gpencil_strokesfalse
release_confirmfalse
use_accuratefalse

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 are TRANSLATION, ROTATION, RESIZE, and occasionally BEND or TOSPHERE.
  • value (a B_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. LOCAL matters 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.

Categoryblender

Inputs (29)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
modeoptCOMBO33 options: INIT, DUMMY, TRANSLATION, ROTATION, RESIZE, SKIN_RESIZE, +27
valueoptB_VECTOR4
orient_axisoptCOMBO3 options: X, Y, Z
orient_typeoptCOMBO7 options: GLOBAL, LOCAL, NORMAL, GIMBAL, VIEW, CURSOR, +1
orient_matrixoptB_VECTOR9
orient_matrix_typeoptCOMBO7 options: GLOBAL, LOCAL, NORMAL, GIMBAL, VIEW, CURSOR, +1
constraint_axisoptB_BOOLEAN3
mirroroptBOOLEANfalse
use_proportional_editoptBOOLEANfalse
proportional_edit_falloffoptCOMBO8 options: SMOOTH, SPHERE, ROOT, INVERSE_SQUARE, SHARP, LINEAR, +2
proportional_sizeoptFLOAT1.009.999999974752427e-7–999999995904
use_proportional_connectedoptBOOLEANfalse
use_proportional_projectedoptBOOLEANfalse
snapoptBOOLEANfalse
snap_elementsoptB_ENUM_SET
use_snap_projectoptBOOLEANfalse
snap_targetoptCOMBO4 options: CLOSEST, CENTER, MEDIAN, ACTIVE
use_snap_selfoptBOOLEANtrue
use_snap_editoptBOOLEANtrue
use_snap_noneditoptBOOLEANtrue
use_snap_selectableoptBOOLEANfalse
snap_pointoptB_VECTOR3
snap_alignoptBOOLEANfalse
snap_normaloptB_VECTOR3
gpencil_strokesoptBOOLEANfalse
center_overrideoptB_VECTOR3
release_confirmoptBOOLEANfalse
use_accurateoptBOOLEANfalse

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ