Nodes/Avatar Graph/Transform Mirror
ComfyUI Node

Transform Mirror

Mirroring geometry across an axis — the shortcut to symmetric everything

By avatechai·Created 3 years ago·Updated 2 years ago· 264
Transform Mirror
  • BPY_OBJ
  • orient_type
  • orient_matrix
  • orient_matrix_type
  • constraint_axis
  • center_override
  • BPY_OBJ
gpencil_strokesfalse
release_confirmfalse
use_accuratefalse

Transform Mirror flips the selected elements of a mesh across a chosen axis - the node version of Blender's mirror tool in edit mode. It's the fastest way to make something symmetric, which in Avatar Graph's world is practically the whole job: characters are built from segmented, texture-mapped mesh layers, and the fastest route to a clean pair of eyes, a matching brow, or a balanced face is building one side and mirroring it.

The wrap maps 1:1 to bpy.ops.transform.mirror. It's an EditOps node, so it deselects everything, sets your BPY_OBJ active, enters edit mode, runs the operator, exits, and returns the same object. What actually gets mirrored is whatever is selected in the shared Blender scene at that moment - so selection setup upstream is the real workflow, and the constraint_axis input (B_BOOLEAN3, three booleans for X/Y/Z) decides which axis the flip happens across.

How it works

The inputs mirror Blender's redo panel for the tool:

  • constraint_axis - the axis (or axes) to mirror across. For a character face that's usually just X.
  • orient_type - the transform space the mirror uses (Global, Local, a custom orientation from Transform_CreateOrientation). Global is the default and usually what you want.
  • orient_matrix / orient_matrix_type - backing data for custom orientations; ignore unless you're doing something exotic.
  • center_override - a B_VECTOR3 to mirror around a point other than the object center. This matters: if your mesh isn't centered on the world origin, mirroring about the object's center gives a lopsided result, and center_override is how you fix it.
  • gpencil_strokes, release_confirm, use_accurate - ignore.

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

Inputs that matter

BPY_OBJ, constraint_axis (X, usually), center_override when the mesh isn't centered.

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, 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. The pack's perennial first answer.
  • Mirror lands off to the side → the object isn't centered and you didn't set center_override. Mirror is about the object center by default, not the world origin.
  • It mirrored everything, not just the selection → selection again. The node acts on the current selection in the shared scene; if the whole mesh is selected, the whole mesh flips.
  • Texture looks backwards after the flip → mirroring geometry can flip UVs with it. Pair this with a UV node (UV_Align or a flip) downstream, or mirror before unwrapping.
  • Scene resets between runs - do the build-and-mirror in one graph.

For anyone making symmetric characters, this is a genuine time-saver hiding in the pack's generated noise. Set the axis, mind the center, and let the graph do the symmetry.

Categoryblender

Inputs (9)

NameTypeDefaultDescription
BPY_OBJoptBPY_OBJ
orient_typeoptB_ENUM
orient_matrixoptB_VECTOR9
orient_matrix_typeoptB_ENUM
constraint_axisoptB_BOOLEAN3
gpencil_strokesoptBOOLEANfalse
center_overrideoptB_VECTOR3
release_confirmoptBOOLEANfalse
use_accurateoptBOOLEANfalse

Outputs (1)

NameTypeDescription
BPY_OBJBPY_OBJ