BLENDER ADD-ON · RIGGING
Weight mirroring that works on real characters
SymmetryFlow mirrors vertex-group weights from one side of a character to the other, then checks every L/R pair and tells you whether the two sides really match. If they don't, one click fixes it.
Blender 3.6 – 5.1 Posed rigs Shape keys Faces & lashes Rigify · Daz · CC · MMD
Blender's built-in mirror only works when every vertex has an exact twin at the mirrored position. Production meshes rarely have that: posed rigs, shape keys, split face shells, assembled parts, lashes, lips, teeth and brows. SymmetryFlow is built for those meshes.
Why riggers use it
| 🤸 Mirrors posed and shape-keyed meshes. Topological matching follows the mesh's own edges, so the mirror still works when the two sides are nowhere near each other in space. |
| 🧩 Handles messy geometry. A spatial matcher covers disconnected islands, asymmetric edge flow and assembled parts. Auto-Detect picks the right engine for each group. |
| 🔍 Tells you what's wrong. The L/R Balance panel marks every pair Balanced, Mismatched or Distorted and shows the vertices that disagree. It uses the same check as the repair, so the report and the fix always agree. |
| 🔁 Rebuilds a whole side in one click. Mirror All L/R Groups pairs every group by name, creates missing counterparts and mirrors each one in the right direction. |
| ✋ Says so when a region can't be mirrored. Where one side has no matching vertex, it names the group instead of quietly writing the wrong weights. |
See it work
POSED RIGS
🤸 Mirroring out of rest pose
Where a coordinate mirror can't even pair the two sides.

SymmetryFlow reads the unposed mesh, so an arm with a band of weight cut out goes from 296 weights back to 438.
DIAGNOSE
🔍 Find it, then fix it
The face looks fine. The panel knows it isn't.

The lower eyelids don't match. The L/R Balance panel names the pair, and one press of Mirror Active Group puts the missing band back.
REPAIR
🔧 One-click repair
A damaged group, rebuilt from its healthy twin.

A calf with a band stripped from its middle goes from 179 weights back to 340, and every counterpart matches.
BATCH
🔁 A whole side rebuilt
37 groups deleted. One button.

Every left-side group is gone. One press of Mirror All L/R Groups and the panel goes from "L: 0, R: 37" to "L: 37, R: 37", with weights matching their counterparts.
CENTRE GROUPS
🧠 Groups that mirror onto themselves
For heads, spines and lash strips, with no opposite group to copy from.

HEAD spans both eyelash strips. Perfect Single Mirror rebuilds the stripped half: 342 back to 684.
Features
| ✓ | Mirror one group to its counterpart (Arm.L → Arm.R), or symmetrize a centre-line group onto itself |
| ✓ | Mirror All L/R Groups: batch rebuild with a self-heal pass at the end |
| ✓ | L/R Balance panel with Quick Fix buttons; balanced pairs are left alone |
| ✓ | Confine to Mesh Island keeps eye, teeth and lash weights on their own shell |
| ✓ | Tolerances scale with the mesh, so the same defaults work in centimetres or metres. Every pair mirrored exactly from 14,000 to 225,000 vertices in testing |
| ✓ | UV-space mirroring |
| ✓ | Naming presets: _L/_R, .L/.R, -L/-R, Left/Right, Lft/Rgt and prefixes, Daz Genesis 3/8, 3ds Max Biped, MMD Japanese names, or your own pattern |
| ✓ | 24 operators for transfer, selection, counterpart creation and diagnostics, all documented |
Options for the hard cases
Each clip mirrors the same group twice, once with the box unticked and once ticked, so what changes on screen is what the option does.
OPTION
🎯 Restrict to Counterpart Vertices
Mirror only where a twin is proven.

The mirror only writes to vertices with a proven counterpart and skips everything else. On this lower eyelid, 279 vertices get weight unticked and 273 ticked; the 6 it skips have no proven twin. The white dots are the 550 vertices it was allowed to touch, left selected and ready to paint.
OPTION
🌈 Interpolate Symmetrical Weights
For halves that weren't built vertex-for-vertex.

It blends values onto targets that can't be paired exactly, taking this cheek from 94 weights to 296.
OPTION
🧹 Clean Unmatched Weights
Clear out leftovers from earlier painting.

Removes weight the source side can't account for: 463 weights down to 340, with all 123 strays gone.
OPTION
🔃 Invert Transferred Weights
For opposite-side masks and gradients.

Writes each mirrored value as 1 − w. The count stays at 438; 433 of those weights change value.
OPTION
👄 Verify Normal Alignment
Stop weight leaking onto the surface behind.

Where two surfaces touch, such as closed lips or an eyelid against its lash, the nearest point can be on the wrong surface. This option won't write weight onto a surface facing the other way from the source. In the clip the jaw is nudged to bring the hidden surface into view: 57 weights go across unticked and 53 ticked, and the strip on the seam disappears.
Quick start
- Select your character mesh and enter Weight Paint or Object mode.
- Open the SymmetryFlow tab in the 3D Viewport sidebar (N).
- Make the group you want to mirror the active group.
- Click Mirror Active Group, or Mirror All L/R Groups for the whole rig.
- Check the L/R Balance panel. Any Mismatched pair has a Quick Fix button.
Honest limits
We'd rather you know these before buying than after.
| It can't make an asymmetric mesh symmetrical. Where one side has no matching vertex, SymmetryFlow names the group instead of guessing. |
| Face regions may end with different vertex counts. The weights are right; a rebuilt side can hold them on a few more vertices. Judge faces by the viewport, not the tally. |
| Hair cards, lashes and brows can take minutes. They're thousands of small overlapping pieces. Blender looks frozen while it works; SymmetryFlow warns you before it starts. |
| Very dense meshes take longer. Mirror All takes about 3.5 s at 14,000 vertices, 52 s at 225,000 and about five minutes at 1.1 million. It shows progress, and Esc cancels with every weight restored. At 1.1 million a few face weights can land a vertex or two off; Mirror Active Group places those exactly. |
OPTION · KNOWN LIMIT
🧩 Robust Asymmetric Fallback
For halves that aren't vertex-for-vertex at all.

Recovers vertices a strict check would drop: 378 of 678 with it off, 671 of 678 with it on. It closes most of the gap, not all of it. Seven vertices on this mesh are still not reached, and we don't yet know why.
A full Known Issues document ships in the download.
Compatibility
Blender 4.2 or newer → SymmetryFlow v3.3.0 (Blender 4.2+).zip
Blender 3.6, 4.0, 4.1 → SymmetryFlow v3.3.0 (Blender 3.6-4.1).zip
Same add-on and features in both. Install straight from the zip; don't unzip it. Tested on 3.6 LTS, 4.0.0, 4.2.9 LTS, 4.4.0, 4.4.3, 4.5.0 and 5.1.2.
In the download
The add-on and its full source, a plain-language user manual, the Known Issues document and the changelog.
Questions or problems? Contact Dev.Luv Studios through this page or at [email protected]
GPL-2.0-or-later · © 2026 Dev.Luv Studios