Nodes/Avatar Graph/Transform Create Orientation
ComfyUI Node

Transform Create Orientation

Giving your transforms a named frame of reference

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Transform Create Orientation
  • BPY_OBJ
  • BPY_OBJ
name
use_viewfalse
usefalse
overwritefalse

Most people live their whole Blender life in Global and Local orientation and never notice the dropdown. Transform Create Orientation is for the other kind of person - the one who wants a named coordinate system to transform against, like "along the jaw" or "facing the camera." It wraps bpy.ops.transform.create_orientation, which saves the current transform as a named custom orientation that other transform operations can then reference via their orient_type input.

In Avatar Graph terms, this is a helper that feeds the other Transform_* nodes. Rotate and Mirror both take an orient_type that can point at a custom orientation, and something like a jaw rotation for a talking avatar reads much better if it's authored in a frame aligned to the head rather than world axes. That's the honest use case: set up a sensible orientation once, then rotate/mirror against it.

How it works

This wraps the Blender operator that takes a snapshot of the current transform orientation and stores it under a name. The node gives you:

  • name - the string to save it as. Empty name with use_view off is a recipe for an unnamed orientation you'll struggle to find later, so name it.
  • use_view - base the orientation on the current view direction instead of the object/world transform. Great when you want "screen-right" as a frame.
  • use - apply the new orientation immediately to the active object's transform space.
  • overwrite - replace an existing orientation with the same name.

One structural quirk you should know: it inherits EditOps, so the wrapper dutifully enters edit mode, creates the orientation, and exits. That's harmless - the operator works at the scene level - but it means you want your mesh in a sane state when this runs.

Inputs that matter

Really just name (and maybe use_view). The rest are fine at defaults.

Output: BPY_OBJ - the object passes through; the real output is the named orientation now living in the shared scene, which you reference by name in a Rotate or Mirror node's orient_type.

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 requires Python 3.10.x or the whole pack won't import, and first launch downloads the SAM ViT-H model (~2.5 GB) into ComfyUI/models/sams plus two MediaPipe landmarker files.

Common issues

  • "No module named bpy" → Python 3.10.x needed; the number one pack install failure.
  • The orientation is gone when the next node runs → Avatar Graph resets the shared Blender scene at the start of each execution, so the named orientation only survives within a single graph run. Create it in the same graph that uses it, and set overwrite so re-runs don't pile up duplicates.
  • Another node ignores the orientation → check that node's orient_type is actually set to your named orientation; the wrappers default to whatever Blender's default is.

It's a quiet utility - create, name, point other transforms at it, done. Not exciting, but it's the difference between guessing at angles and authoring them deliberately.

Categoryblender

Inputs (5)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
nameoptSTRING
use_viewoptBOOLEANfalse
useoptBOOLEANfalse
overwriteoptBOOLEANfalse

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ