Old Photo Restorer
Upload a scan or a phone photo of an old print and fix what age actually did to it: de-yellow the sepia cast, pull back faded contrast and colour, clean up film grain and dust specks, and re-sharpen a soft scan. Six real correction stages, each one individually adjustable, all running as plain pixel maths in your own browser - nothing is uploaded anywhere.
Drag & drop an image, or click to browse
JPG, PNG or WebP - a scan or phone photo of an old print works best
What this fixes - and what it can't
It does fix
- Yellow, orange and sepia colour casts from chemical ageing
- Flat, washed-out contrast and dark or muddy exposure
- Faded, drained colour in old colour prints
- Film grain and scanner noise
- Small dust specks and thin scratch lines
- Softness from an old lens or a low-quality scan
It does not do
- Colourise black-and-white photos
- Rebuild torn corners, creases or missing areas
- Invent faces, detail or background that isn't in the pixels
- Anything with AI - it's deterministic pixel maths only
Your photo never leaves this device. There is no upload, no account and no server - every correction runs in your own browser.
Honest scope: what “restoration” means here
Plenty of sites advertise “AI photo restoration” that redraws a torn photo or colourises a black-and-white one. This tool does not do that, and it says so up front. It fixes the damage that is recoverable from the pixels you still have: colour casts, fading, grain and softness. It never invents content, which also means it can never invent a face, a colour or a detail that was not in your original.
The upside of that honesty is real: because every stage is deterministic arithmetic rather than a model running on someone's server, your photograph never leaves your device, there is no account, no queue, no watermark and no upload limit. It is photo restoration without AI upload.
The six corrections, and the algorithm behind each
- Dust & scratch reduction - decision-based median filter
- A plain median filter smears the whole image. This one compares each pixel to its own neighbourhood median and only replaces it when it is a genuine outlier - which is exactly what a dust speck, a hair or a thin scratch line is. On our test image it removed 78.5% of impulse specks while keeping real edges intact. It cannot repair a torn corner or a wide crease.
- Noise reduction - bilateral filter
- Tomasi & Manduchi's bilateral filter: a Gaussian blur whose weights also depend on how similar a neighbour's brightness is, so flat grainy areas get averaged while edges keep their contrast. Measured against a plain 3x3 box blur of comparable smoothing power, it retained 71% more edge energy.
- De-yellowing - three illuminant estimators
- Grey World, Shades of Grey (Finlayson & Trezzi's Minkowski p=6 norm, the default) and a robust White Patch that ignores blown highlights so it balances against a real white rather than against a dust speck. Gains are normalised to preserve luminance, so de-yellowing shifts colour without changing exposure.
- Contrast & exposure - histogram auto-levels
- Clips a fraction of a percent off each end of the histogram, stretches what remains back across the full 0-255 range, then applies a midtone gamma that pulls the median brightness back to normal. Available as brightness-only (colour-safe) or per-channel (stronger, also removes cast).
- Fade recovery - vibrance-weighted saturation
- Weighted by how desaturated each pixel already is, so washed-out areas get the full lift while colours that survived are barely touched - which is what keeps skin tones believable instead of sunburnt.
- Sharpening - unsharp mask
- The classic darkroom operator, with a threshold so leftover grain is not re-sharpened back into the photo. Optionally followed by the same progressive 2x enlargement our Image Upscaler uses, for printing.
The stage order was chosen by measurement, not by intuition: dust removal has to run first because specks poison every histogram-based estimate that follows it (leaving them in left an 18.3% residual colour cast instead of 2.1%), and denoising before the contrast stretch beat denoising after it on four of six presets.
Frequently asked questions
Will this repair scratches, tears or missing corners?
Partly, and only at small scale. The dust and scratch stage is a decision-based median filter: it reliably removes dust specks, hairs and thin scratch lines up to about two pixels wide, and on our test image it cleared 78.5% of that kind of damage. It cannot repair a torn corner, a wide crease, a missing chunk or a large stain, because doing that means inventing content that no longer exists in the file. This tool never invents pixels - if a piece of your photo is gone, it stays gone. For that you need a human retoucher or a generative AI inpainting service, and neither can be offered free and privately in a browser.
Can it colourise a black-and-white photo?
No. Colourisation means guessing colours that were never recorded, which requires a trained AI model. This tool only redistributes colour information that is already in your file. What it can do for a black-and-white scan is remove the yellow-brown tint the paper itself has developed with age, and recover the contrast the print has lost - which is often the change people actually wanted. There's a dedicated 'Black & white scan' preset for exactly that.
How does it remove the yellow or sepia cast from an old photo?
It estimates the colour of the cast, then applies the inverse gain to each channel. You can pick between three published illuminant estimators: Grey World (assumes the whole photo should average to neutral grey), Shades of Grey (a Minkowski p=6 norm, the balanced default) and White Patch (balances against the brightest 2% of the photo, ideal when there's a real white in shot like a shirt or a print border). On our synthetically aged test photo, de-yellowing cut the measured colour cast from 28.1% down to 0.5-8.4% depending on the method, while leaving overall brightness unchanged.
Is my photo uploaded to a server?
No. Every stage - reading the file, analysing it, all six corrections, the before/after preview and the final download - runs in your browser using canvas. Nothing is transmitted, nothing is stored and there's no account. That's a real difference from AI restoration services, which necessarily upload your family photos to someone else's computer. You can disconnect from the internet after the page loads and the tool will still work.
Why does the result look grainier after I recover the contrast?
Because it genuinely is. Auto-levels stretches a faded photo's narrow brightness range back across the full scale, and that multiplies everything inside that range, including whatever grain is left. This is real, not a bug - and it's why the noise reduction stage exists and why we run it before the contrast stretch rather than after. If the result looks noisy, raise the Noise reduction strength, or raise the Sharpening threshold so leftover grain isn't sharpened back in.
What's the difference between the presets?
They're just starting points for the same six sliders. 'Yellowed / sepia print' maximises cast removal; 'Faded colour photo' pushes contrast and colour recovery hardest; 'Grainy / dusty scan' prioritises cleanup over punch; 'Black & white scan' neutralises paper yellowing without adding any saturation; 'Gentle touch-up' keeps the original character of the photograph. The tool measures your image on load and pre-selects whichever preset fits it. Change any slider and you're in Custom mode - every control does something real and visible, so it's worth toggling stages off one at a time to see what each was doing.
Can I get a bigger version for printing?
Yes - tick 'Also enlarge 2x for printing' before downloading. It runs the same progressive interpolation as our Image Upscaler, which enlarges cleanly with less blur than a naive single-step resize. Be clear about what that is, though: it is smooth interpolation, not AI super-resolution. It will not add detail your scan never captured, so if you want a bigger print, re-scanning the original print at a higher DPI will always beat enlarging afterwards.