About this site
One kind of transform, done carefully, with the edges written down.
What it is
FlipPicture reflects a picture across the upright axis, the horizontal axis or both, turns it into any of the eight orientations a rectangle can take, builds a symmetrical frame from one half, and makes three mirror effects from the same engine: a reflection cast off one edge, a kaleidoscope, and the original beside its own mirror. Around that engine sit the same reversal in other forms — a JPEG flipped by moving its compressed blocks, PDF pages mirrored as vectors, typed text set and mirrored, colours inverted exactly, and a live camera shown un-mirrored. Every one of them is a reversal, and that is the entire product. There is no account, no queue, no gallery and no upload; the file is decoded by the browser, redrawn onto a canvas, and handed back as a download.
The narrowness is deliberate rather than a stage on the way to something larger. A reflection has a small number of parameters and a surprising number of ways to be got subtly wrong — orientation flags that are themselves mirrored, a re-encode that costs quality the transform did not, a preview that does not match the export — and a page that only has to get one operation right can afford to get those details right.
What it will not do
It turns pictures only in the quarter steps that combine with a reflection — the eight orientations a rectangle can take — and never by an arbitrary angle. It does not crop, straighten against a reference, or repair an orientation flag as a feature in its own right. Its effects stay inside the mirror: a reflection cast off one edge, symmetry built from a half or a quarter, and the original beside its own mirror in one file. It does not blend layers or reverse a text layer; each of those is a different product.
The rule the whole site is built on is that a feature does not get added because the engine happens to make it cheap. A reflection tool with six unrelated buttons on it is worse at reflecting than one without them.
How it is built
A statically exported Next.js site on a content delivery network, with no server behind it and no interface that could accept a file if one were offered. The image work is a canvas transform, a small orientation reader, an encoder call and a byte-level metadata copier, all of it running in the tab. Heavier pieces — the HEIC decoder in particular — are fetched only at the moment a file needs them, so opening the page does not download a codec on the chance you might.
The build refuses to ship if any module that touches an image buffer contains a network call, if a colour is written outside the token file, or if the promise about local processing is missing from a page. Those are automated checks rather than intentions, because an intention is not a guarantee.
Open-source notices
The site is built with code other people wrote and licensed for anyone to use. Everything below runs in your browser; nothing is fetched from anyone else’s server.
- Next.js and React — MIT licence.
- clsx — MIT licence.
- libheif-js (the HEIC reader, loaded as a separate file only when a HEIC is opened) — LGPL-3.0; its source is published by its authors.
- Anybody and Karla typefaces, served from this site — SIL Open Font License 1.1.
The JPEG block flip, the PDF mirroring, the proof-sheet writer and the metadata copier are this site’s own code, written for it, and use no third-party library.
What it costs
Nothing to use, and there is no account or paid tier behind it. The site carries no advertising.