What one press does
A photograph almost never matches the room. Your eye adjusts continuously to brightness and to the colour of the light; a sensor makes one decision for the whole frame and commits it to a file. Stand in a kitchen under warm LEDs and you see white cupboards. The camera sees amber ones, and it is not wrong — that is genuinely the light that was there. The gap between those two accounts of the same room is what this page closes.
The button is one button because the interesting work is measurement, not choice. Before anything moves, the picture is reduced to a set of numbers: a two-hundred-and-fifty-six bin histogram of its luminance, the same again for each colour channel, the level below which a thousandth of the frame sits, the level above which a two-hundredth does, how many distinct tones it uses at all, and how colourful it is on average. Every decision after that is arithmetic on those figures, and every decision is printed in the panel in the unit it was made in.
| Measurement | What it decides |
|---|---|
| 0.1st and 99.5th percentile | Black and white points |
| Median luminance | Exposure, in stops |
| Average colour vs brightest 1% | White balance, and how far to trust it |
| 5th to 95th percentile spread | Contrast, and the clarity nudge |
| Share below the bottom two stops | Shadow lift |
| Mean saturation | Vibrance |
| Count of distinct tones | Whether this is a photograph at all |
The order the pass runs in
Stages are not independent, and the order is the difference between a correction that converges and one that argues with itself. White balance is estimated first, because multiplying each colour channel by a different number moves the luminance histogram — so any brightness figure read before it describes a picture that is about to stop existing. Exposure is measured next, on the balanced frame. The black and white points come last of the three, measured on the balanced and exposed frame, which is why the range they claim is the range you actually get.
Exposure is a linear gain first and a midtone curve second. Gain alone is the honest way to add light — it is what a longer shutter would have done — but it multiplies the highlights along with everything else, so past about one and two-thirds stops it starts flattening the bright end into a single value. Past that point the rest of the work goes to gamma, which lifts the middle and leaves both ends where they were. If the frame was already clipping when it arrived, the gain is held back further still, because widening a white patch is not brightening a photograph.
Contrast, the shadow lift and the vibrance all run on luminance rather than on the three channels separately, and that is the single decision that most changes how the result looks. Push a contrast curve through red, green and blue independently and you stretch the distance between them as a side effect: every colour in the frame gains saturation nobody asked for, which is exactly why so much automatic correction comes out looking lurid. Shaping the luminance and scaling the three channels by the ratio it produced leaves the relationship between them untouched. The shadow lift is masked to the bottom half of the range and fades back to nothing at pure black, so opening the shadows does not turn the blacks grey.
What it opens
JPG, PNG, WebP, AVIF, BMP and ICO all decode through the browser’s own image pipeline. TIFF does in Safari; Chrome and Firefox do not open TIFF, so this page fetches its own small reader the first time one arrives — uncompressed, LZW, Deflate and PackBits files at 1, 8 or 16 bits, in greyscale, RGB, palette or CMYK. HEIC — what a recent iPhone writes unless you have told it otherwise — needs a WebAssembly decoder, fetched the first time one of them arrives and absent from the page until then, so nobody who never opens a HEIC ever downloads it.
Four container details change what happens rather than what is said about it. A JPEG carrying four colour components is CMYK or YCCK, converted to screen colour on the way in and named in the panel, because a histogram built from ink would make every figure after it meaningless. A file with an alpha channel keeps it: the correction runs on the colour channels and copies transparency through untouched, so a cut-out does not come back with a grey rectangle behind it. An animated GIF or WebP is declined at the door with the reason, since a browser hands back only the first frame and a corrected copy would be one still where a moving picture used to be — with an offer to open that first frame as a still, said as exactly that. A file tagged with a wide colour space (Display P3, Adobe RGB) is named in the panel, because the saved copy is sRGB. And the orientation flag is resolved into the pixels before anything is measured, which is also why it is stripped from what you save — a photograph that carries its rotation twice arrives sideways.
Past roughly thirty-two megapixels — sixteen on an iPhone or iPad, where the canvas limit is far lower and failure is silent — a lighter working copy is offered as a choice rather than an error. Past a hundred, the file is declined with its measured size named. The ceiling on the file itself is 120 MB.
Where the clarity control stops
Clarity here is large-radius local contrast: the picture is compared against a heavily blurred copy of itself and the difference is amplified, which makes texture read without touching any individual edge. The slider stops at 40 and there is no way to go further, which is a deliberate limit rather than an oversight.
The reason is that local contrast and sharpening are different operations that look alike for the first few steps and then diverge badly. Sharpening works at a radius of a pixel or two and acts on edges; pushed, it draws a visible bright rim along every roofline and a dark one beside it. Local contrast works at a radius measured in whole percents of the frame and acts on regions; pushed, it does the same thing at a scale where you cannot miss it. Doing that properly needs a radius control, an amount control, a threshold and a preview at one hundred percent — a different instrument with different controls. Forty is where this control stops being a correction and starts being that other job done badly, which is why the Detail panel keeps Sharpen as a separate control beside it, and why the image clarity enhancer opens a 1:1 loupe on the busiest patch so you can see both at full size before you save.
The light, not the skin
Everything on this page is whole-frame. There is no brush, no mask and no selection, and that is not a feature waiting to be built — it is the boundary the tool is drawn around. A global pass can tell you that the room was underexposed by a stop and lit at 3,200 K. It cannot tell you that the person in it has a shadow under one eye, because it has no idea there is a person in it.
That distinction matters most on portraits. Correcting the light on a face is this page; retouching the face itself — blemishes, skin, shape — is a different job that this site does not do, and says so rather than pretending. The vibrance stage is built around the same line: it weights its boost by how saturated each pixel already is, so a flat grey wall gets its colour back and skin, which is already well into the warm end, barely moves. That is the most this page can do about a face, and it is done by arithmetic that has never heard of one.
Two things this pass will not do
Both are limits of the operation, not gaps in this implementation.
- We can't rebuild a blown highlight. Where the sensor clipped to pure white there's no detail left in the file, and no amount of correction invents it — what we can do is stop the rest of the photo from suffering for it.
- The saved file holds pixels and nothing else. Correcting a photograph means redrawing it and encoding it again, and an embedded colour profile does not survive that — output is sRGB, so a Display-P3 original round-trips very slightly flatter than it went in. Capture settings, lens data and location tags do not survive either. If any of that matters where the picture is going, keep the original alongside the corrected copy rather than replacing it.
The questions that come up
The panel says Warmth minus 1,200 K. Minus 1,200 from what?
Why did my sunset come back looking almost the same?
I pressed nothing and it says Nothing here needs fixing. Is it broken?
Does correcting a photograph lose quality?
It made my screenshot look strange. Can I stop it doing that?
Why does the result on screen sometimes take a moment to become saveable?
Different doors into the same studio
The routes below run the identical engine on the identical measurements. What differs is the state you arrive in: which panel is open, which control is highlighted, whether the quality report or the loupe is already showing, and which starting point is selected before you have touched anything. Nothing is unlocked on one of them and missing from another, and a picture opened on any of them comes out of the automatic pass byte for byte the same.
A route only earns its place if the first thing on screen would genuinely be different. Dark, yellow and dim are different opening moves; so are a quality report, a detail check at 1:1, and an offer of local AI with its download size printed first. A route that would be the same panel with a different headline is not built, because a headline is not a feature.
- Improve image qualityA quality report first: grain, JPEG quality, blocking, edge energy, clipping and resolution, each with its fix.
- Image clarity enhancerClarity, sharpening and grain checked at 1:1 in a loupe on the busiest patch before you save.
- AI photo enhancer, on your deviceThe measured pass first, then local models for 2× detail — download size shown before anything is fetched.
- Brighten a dark photoOpens with Brightness under your hand and the shadow lift already measured.
- Take the yellow outOpens on Warmth, for tube light, warm LEDs and everything else that turns a room amber.
- Shot in a dim roomOpens on the low-light starting point: shadows well open, contrast held back.
If the panel told you something you did not expect
The inspector prints figures and units and has room for little else. Three longer pages carry the part that will not fit: what a stop of exposure is actually costing you, why indoor light lands where it does on the kelvin scale, and how to recognise the one measurement that means the picture has already lost what you were hoping to get back.
- The written pagesLonger reads on what the panel's figures mean, and where measuring a photograph stops.
- Why your photos look flatter than the room didWhat a camera throws away between the scene and the file, and why your eye noticed.
- Indoor light and the colours it inventsTube light, warm LEDs, mixed sources, and when a cast is the subject rather than a fault.
- The one thing correction cannot undoWhere a histogram stacks against the right wall, the detail is gone from the file.











