Transform Rotate
Rotating selected geometry — the transform node you'll actually use
- BPY_OBJ
- orient_type
- orient_matrix
- orient_matrix_type
- constraint_axis
- snap_elements
- snap_point
- center_override
- BPY_OBJ
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.
valueis 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.
Inputs (26)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| valueopt | FLOAT | 0.00-3.402823466385289e+38–3.402823466385289e+38 | — |
| orient_axisopt | COMBO | 3 options: X, Y, Z | |
| orient_typeopt | B_ENUM | — | |
| orient_matrixopt | B_VECTOR9 | — | |
| orient_matrix_typeopt | B_ENUM | — | |
| 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 | — | |
| 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 | — |