Correct a photograph in one press

Your picture comes back looking like the room looked. The panel on the right prints what it changed, in stops and kelvin, so you can disagree with any of it.

Corrected on your own machine — we never get a copy.
Drop a dull photo here and we'll take a first pass at it.JPG, PNG, WebP, AVIF, BMP and TIFF decode straight away. A HEIC from a recent iPhone fetches its decoder the first time it meets one.

Nothing to hand?

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.

The figures the pass reads before it changes anything
MeasurementWhat it decides
0.1st and 99.5th percentileBlack and white points
Median luminanceExposure, in stops
Average colour vs brightest 1%White balance, and how far to trust it
5th to 95th percentile spreadContrast, and the clarity nudge
Share below the bottom two stopsShadow lift
Mean saturationVibrance
Count of distinct tonesWhether 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, TIFF and ICO all decode through the browser’s own image pipeline. 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. 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, which is sharpenpicture.com. Forty is where this control stops being a correction and starts being that other job done badly.

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; correcting the face is retouchpicture.com. 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?
From daylight. The pass estimates the colour of the light the scene was lit by, and prints the difference between that estimate and a 6,500 K white — so minus 1,200 means it decided the room was lit at about 5,300 K and pulled the picture back toward neutral by that much. The number describes the illuminant it removed, not a slider position, and it only ever reports the part of its estimate it actually applied. Where the two estimates behind it disagreed, the correction was weakened and the number shrinks with it.
Why did my sunset come back looking almost the same?
Because a sunset is a scene that is genuinely orange, not a photograph with an orange fault, and there is no measurement that tells the two apart on its own. What the pass does instead is ask two questions — what colour is the average of this frame, and what colour are its brightest few percent — and compare the answers. On an indoor photograph under warm light the two agree closely and the correction runs at full confidence. On a sunset they disagree badly, the correction is weakened in proportion, and most of the orange survives. If you wanted it neutral anyway, Warmth is the control.
I pressed nothing and it says Nothing here needs fixing. Is it broken?
No, it has read the picture and found no stage worth running. That happens with files that have already been corrected somewhere else, and with photographs that were simply taken well: the histogram already reaches both ends, the median already sits near the middle, and the average colour is already neutral. Inventing a quarter-stop of exposure so the panel has something to print would be the dishonest option. The manual controls still work, and Strength still does nothing, because there is nothing under it to scale.
Does correcting a photograph lose quality?
Two different things get called that, and only one of them is true here. The arithmetic itself does not throw information away that mattered: it reads eight-bit values, works in floating point, and writes eight-bit values back. What does cost you is re-encoding — a JPEG saved again is a JPEG compressed twice, and that is why the quality control defaults to 92 rather than something lower, and why PNG is there for anyone who would rather pay in file size than in artefacts. The other real cost is that a pass which opens the shadows also opens whatever noise was hiding in them.
It made my screenshot look strange. Can I stop it doing that?
It should already have mostly stopped itself. A screenshot uses a handful of luminance values where a photograph uses most of two hundred and fifty-six, and when the count comes in low the pass runs at a third of its usual strength and says so in the panel. A third of very little is still something, though, so if a flat graphic still moved more than you wanted, pull Strength to zero — that gives you the picture exactly as it arrived, with the seven manual controls still live on top of it.
Why does the result on screen sometimes take a moment to become saveable?
Because the preview and the file are two different sizes of the same arithmetic. Dragging a control corrects a copy no larger than 2,048 pixels on the long edge, which is what keeps a drag smooth on a twenty-four megapixel photograph. Letting go runs the identical numbers over every pixel of the original in a background thread, and that is the version Save writes. On a large file that second pass takes about a second, and the panel says so while it is happening rather than handing you a file that quietly differs from what you approved.

Three doors into the same pass

The routes below run the identical engine on the identical measurements. What differs is the state you arrive in: which of the seven controls is already highlighted, 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.

There are three of them rather than thirty because a route only earns its place if the first thing on screen would genuinely be different. Dark, yellow and dim are three different opening moves. A route for “old photo” or “food” would be the same panel with a different headline, and a headline is not a feature.

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.