Symmetry
Mirror your strokes across an axis automatically. Useful for symmetric character designs, mandalas, and any sprite where left/right or top/bottom should match exactly.
Symmetry is a workspace toggle — once on, pencil, eraser, fill, line, rectangle, ellipse all paint mirrored branches transparently. Pixel-perfect mode also applies independently on each branch.
Where to find it
Tools panel → Symmetry section. Collapsible.
Configuration
| Control | What |
|---|---|
| ON / OFF | Master toggle |
| Axis | vertical / horizontal / both (4-way) / diagonal NW-SE / diagonal NE-SW |
| Center X / Y | Numeric inputs for the axis position. Accepts .5 steps for between-pixel placement (gap-free on even-canvas sizes). |
| Center on canvas | Reset button — sets center to (canvas-1)/2. |
When symmetry is on, the canvas displays the axis as a dashed amber overlay. Drag the axis with the mouse to reposition (the centre coordinates update live).
Axes explained
| Axis | Mirror behaviour |
|---|---|
| vertical | Left ↔ right (mirror across a vertical line at center.x) |
| horizontal | Top ↔ bottom (mirror across a horizontal line at center.y) |
| both | 4-way symmetry (reflect across both vertical and horizontal axes) |
| diagonal NW-SE | Mirror across the line going from top-left to bottom-right of the centre |
| diagonal NE-SW | Mirror across the line going from top-right to bottom-left |
For "both" you get a quadrant pattern — useful for symmetric icons, gems, and emblems.
Center position: integer vs .5
For odd-size canvases (e.g. 31×31), the natural centre is the middle pixel — an integer like 15. The axis runs through that pixel.
For even-size canvases (e.g. 32×32), the natural centre is between pixels — use 15.5 so the axis runs between pixels 15 and 16. Without this, you'd get a 1-pixel gap on one side.
The Center on canvas button picks the right value automatically: (canvas - 1) / 2 (integer for odd, .5 for even).
Tools that respect symmetry
- ✅ Pencil
- ✅ Eraser
- ✅ Fill
- ✅ Line, Rectangle, Ellipse
- ❌ Gradient — deliberately bypasses symmetry (mirroring a gradient is rarely desired)
- ❌ Shade tool — works per-click; symmetry would mean weird stepping on the mirror
- ❌ Magic Wand / Lasso — selections are not mirrored
When symmetry is on but the active tool doesn't support it, the axis overlay still shows, just for visual reference.
Pixel-perfect with symmetry
Pixel-perfect mode is per-branch. Each mirror has its own L-filter trail, so the corner-removal logic works correctly on each side.
Workflow
- Make sure your canvas is centred how you want — symmetric character on an odd canvas is the simplest.
- Turn on symmetry, axis = vertical.
- Paint only on one side of the axis. The other side mirrors live.
- For details that should NOT be symmetric (e.g. a scar, an asymmetric pose), turn symmetry off temporarily.
Tips
- The axis is draggable — hold and drag on the canvas to reposition. Useful for symmetric details that don't share the canvas centre.
- Save common axis configurations by leaving them in your project — they're persisted in
.mstack. - Combined with Reference image, symmetry is great for fast character sketching: drop a reference, position the axis at its centre, paint half.