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· 266
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—