Mirror a video down the middle: a symmetry effect with hstack
Make a left-right symmetric video from one clip with a Sume video-filter graph: keep the left half, mirror it with hflip, join with hstack. $0.02, free check.

To make a clip symmetric left to right, send Sume's video filter this graph: split[a][b];[b]hflip[c];[a]crop=w=iw/2:h=ih:x=0:y=0[l];[c]crop=w=iw/2:h=ih:x=iw/2:y=0[r];[l][r]hstack. It keeps the left half of the picture and joins it to a mirrored copy of itself. One encode costs $0.02 and the check is free.
The effect is a quick way to turn an abstract or landscape clip, for example an image-to-video render from a still made with Nano Banana 2.1, into a kaleidoscope-like background for a title or a lyric video.
Why is the second crop at x=iw/2?
A plain hflip mirrors the whole frame, so the left half of the flipped copy shows the original's right side. To mirror the left half you need the right half of the flipped copy, which is what crop=...:x=iw/2 takes. I checked it with a local ffmpeg build on a test pattern: a row of pixels across the output is equal on both sides of the centre line.
To mirror the right half onto the left instead, swap the two crop offsets: take x=iw/2 from the original and x=0 from the flipped copy, and put the flipped half first in hstack.
What changes in the output?
hstack joins two streams of equal height, so the output width is twice the cropped width. If the source width is even, the output has the source width. An odd width loses one pixel. The frame rate and audio follow the source.
Because the graph uses labels [l] and [r] between filters, it passes Sume's rule that labels are internal only. It starts with a filter and ends with a filter, as required.
curl -X POST https://api.sume.com/v1/video-filter/check \
-H "Authorization: Bearer $SUME_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"video_url": "https://media.sume.com/artifacts/artf_demo/clip.mp4",
"filtergraph": "split[a][b];[b]hflip[c];[a]crop=w=iw/2:h=ih:x=0:y=0[l];[c]crop=w=iw/2:h=ih:x=iw/2:y=0[r];[l][r]hstack"
}'Which mirror variants exist?
Top-to-bottom symmetry uses vflip, crops on the vertical axis and vstack. All four filters are on the allowlist.
| Goal | Filters |
|---|---|
| Mirror the whole clip | hflip |
| Left half mirrored to the right | split, hflip, crop, crop, hstack |
| Top half mirrored to the bottom | same idea with vflip and vstack |
| Flip upside down | vflip |
Is mirrored footage a problem?
Mirroring flips any text in the picture, so use it on footage without lettering, and put captions on afterwards. A mirrored copy of a real person's clip is still that person's footage, so keep the disclosure rules that already apply to the original.
Sources
Related posts
More in Media tools
- Pixelate part of a video by API: a fixed-region mosaic
Hide a label or a screen area with a mosaic using one Sume video-filter graph: crop a region in 24-pixel multiples, shrink, enlarge with neighbor, overlay.
- Remix cut refused with only a start time: the 120 s budget
Why a remix media cut with start but no end fails remix_cut_too_long, how the 120 second and 20 span limits add up, and when to use video trim instead.
- Remix notes lint: FORMAT.md needs a Captions heading
What the remix media notes verb checks: a Captions heading in FORMAT.md, media.sume.com links only, the 200,000 byte cap, and why a lint failure still saves.
- Remix tile: 96 cells per call, and how to count yours
A remix media tile call is refused above 96 cells with remix_tile_too_many_cells. How each selector is counted, worked examples, and ways to split a request.
Written by Sume