Mask Symmetry Tool
Mirror your masks for symmetrical shots
- mask
- symmetrical_mask
Symmetry is a mood. Portraits, product shots, architecture, that hallway in every corporate office building - if you want a mask that respects a mirror axis, drawing both halves by hand is a recipe for visible asymmetry and regret. This node mirrors your mask across an axis (or axes) and blends the result back, so you paint one side and the other side comes along for free. It's a small node and a small job, but it's exactly the kind of helper that stops you from rebuilding the same mirror operation with a handful of image-transform nodes every single time.
How it works
You feed it a mask and pick a symmetry_mode:
horizontal/vertical- mirror across the vertical or horizontal center line.bothdoes both at once.diagonal_tl_br/diagonal_tr_bl- mirror across the two diagonals, for corner-balanced layouts.radial_4way- four-way rotational symmetry, for mandala-type masks.
The mirrored copy is produced by flipping the mask, and then blend_mode decides how the original and mirror come together - replace (mirror wins), add, max, or average. blend_strength (0–1) controls how strongly the mirrored version influences the result, so you can do a partial, softened symmetry instead of a hard mirror. invert_mirrored inverts just the mirrored portion, which is a neat trick for a mask that's white on one side and a flipped negative on the other.
Output: a single symmetrical_mask MASK, ready for regional prompting, the batch combiner, or wherever your other masks go.
The inputs that matter
Honestly, the ones you'll touch are symmetry_mode, blend_mode, and blend_strength. max blend is the sensible default for "keep the painted content where I painted it, fill the other side." average is gentler if the seam bothers you. The debug flag prints mask stats if you want to verify the flip actually happened.
Installing it
Part of the curved_weight_schedule pack:
cd ComfyUI/custom_nodes
git clone https://github.com/diffussy69/comfyui-curved_weight_schedule
pip install matplotlib pillow numpy torch scipy
Pure torch/PIL under the hood - no models, no Advanced ControlNet requirement. Restart, hard-refresh.
Where people get burned
The mirror axes are hardwired to the mask's own center, not your composition's. If your subject isn't centered, horizontal symmetry mirrors around the mask's midline and the result won't line up with anything. Crop or pad your mask so the axis you want is centered first. Also, replace mode discards whatever you painted on the other side - if you painted both halves deliberately, use max or add instead. Symmetry tools are for when you want both sides identical; don't reach for this one if your shot is naturally off-balance.
Inputs (6)
| Name | Type | Default | Description |
|---|---|---|---|
| mask | MASK | — | |
| symmetry_mode | COMBO | 7 options: none, horizontal, vertical, both, diagonal_tl_br, diagonal_tr_bl, +1 | |
| blend_mode | COMBO | 4 options: replace, add, max, average | |
| blend_strength | FLOAT | 1.000–1 | How strongly to blend mirrored mask with original |
| invert_mirroredopt | BOOLEAN | false | Invert the mirrored portion |
| show_debugopt | BOOLEAN | false | Print debug information |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| symmetrical_mask | MASK | — |