Nodes/Avatar Graph/Transform Rotate
ComfyUI Node

Transform Rotate

Rotating selected geometry — the transform node you'll actually use

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Transform Rotate
  • BPY_OBJ
  • orient_type
  • orient_matrix
  • orient_matrix_type
  • constraint_axis
  • snap_elements
  • snap_point
  • center_override
  • BPY_OBJ
value0.00
orient_axis
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
gpencil_strokesfalse
release_confirmfalse
use_accuratefalse

Transform Rotate rotates selected geometry around an axis. It's Blender's bpy.ops.transform.rotate in node form, and of all the transform tools in Avatar Graph, this is the one with the most everyday uses: tilting a head mesh, swinging a jaw for a talking shape key, rotating an eye patch into place, squaring up a prop. You'll reach for it constantly once you're building anything by hand.

The useful mental model: this rotates the contents of the mesh, not the object itself. The object stays where it is in the scene; the selected vertices spin around a pivot. That's what makes it the right tool for morph-target work - you can rotate just the mouth region while the rest of the face stays planted, then bake the result into a shape key the avatar editor later animates.

How it works

An EditOps node: deselect all, set your BPY_OBJ active, enter edit mode, run the operator, return to object mode, hand the object back. The inputs are Blender's rotate-tool redo panel, auto-exported:

  • value - the rotation amount as a FLOAT, in radians. A full 90° is about 1.5708; don't feed it degrees and wonder why nothing budges.
  • orient_axis - X, Y, or Z: the axis you rotate around. This is the one you'll set every single time.
  • orient_type - the transform space (Global, Local, or a custom orientation from Transform_CreateOrientation). Global is the safe default.
  • constraint_axis - B_BOOLEAN3, locks the rotation to particular axes when you want to restrict it.
  • center_override - B_VECTOR3; the pivot to rotate around when it's not the object center. Rotating a jaw hinge is impossible to do well without this.
  • mirror - mirror the rotation to the symmetric side. Perfect for paired features like brows.
  • The proportional block (use_proportional_edit, falloff, size) lets the rotation taper - rotate a smile corner up while the rest of the mouth stays still.

Inputs that matter

BPY_OBJ, value (radians), orient_axis, and center_override for anything pivot-sensitive. The rest can sit at defaults until you need them.

Output: BPY_OBJ - the modified mesh for the next node.

Installing it

Part of the Avatar Graph pack (Avatech AI). 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 or the pack won't import at all, 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. It's always the pack's first failure.
  • Rotation is way too big or way too small → radians vs degrees. value is radians; 1.5708 ≈ 90°.
  • It rotates around the wrong point → set center_override. Default pivot is the object center, which is rarely the hinge you want.
  • It rotated everything instead of the bit you meant → selection. The node acts on whatever is selected in the shared scene when it runs.
  • Scene resets between runs - build and rotate in a single graph pass.

Straightforward, predictable, and useful. If you only learn three transform nodes in this pack, make it Rotate, Edge Slide, and Bend - they cover 80% of what you'll actually do.

Categoryblender

Inputs (26)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
valueoptFLOAT0.00-3.402823466385289e+38–3.402823466385289e+38
orient_axisoptCOMBO3 options: X, Y, Z
orient_typeoptB_ENUM
orient_matrixoptB_VECTOR9
orient_matrix_typeoptB_ENUM
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
gpencil_strokesoptBOOLEANfalse
center_overrideoptB_VECTOR3
release_confirmoptBOOLEANfalse
use_accurateoptBOOLEANfalse

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ