Transform Mirror
Mirroring geometry across an axis — the shortcut to symmetric everything
- BPY_OBJ
- orient_type
- orient_matrix
- orient_matrix_type
- constraint_axis
- center_override
- BPY_OBJ
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_VECTOR3to 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, andcenter_overrideis 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_Alignor 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.
Inputs (9)
| Name | Type | Default | Description |
|---|---|---|---|
| BPY_OBJopt | BPY_OBJ | — | |
| orient_typeopt | B_ENUM | — | |
| orient_matrixopt | B_VECTOR9 | — | |
| orient_matrix_typeopt | B_ENUM | — | |
| constraint_axisopt | B_BOOLEAN3 | — | |
| 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 | — |