# Restore Old Photos

> Upscale and colourise an old family photo in your browser. Real-ESRGAN 4× and optional DDColor, sizes shown before download. The photo never leaves this device.

- URL: https://bytescope.dev/en/photo-restore/
- Locale: en · Also: [ja](https://bytescope.dev/ja/photo-restore.md) · [zh-Hant](https://bytescope.dev/zh-Hant/photo-restore.md)
- Runs: Your files never leave your browser — all processing is local.
- Requires: Any modern browser. Uses WebGPU where the browser has it (Chrome, Edge, Safari 26, recent Firefox) and falls back to WebAssembly on the CPU, which is several times slower on large images.
- Updated: 2026-09-08

## What it does

### The people who scan mum and dad's prints are the audience

An old photograph is not a product shot. You do not want it sitting on a server you have never heard of. This page upscales with Real-ESRGAN compact 4× (BSD-3-Clause, about 4.6 MB) and can colourise with DDColor (Apache-2.0, about 108 MB). Both files are named, sized and licensed on the page *before* anything is fetched. Colourise is off until you turn it on, so a 108 MB download is never an accident.

### 2× and 4× from one model

The compact network is 4× only. The 2× option runs that 4× pass and box-downsamples the result, rather than shipping a second artefact. Large photos are tiled with overlap so a 768 px edge does not blow the tab's memory. Drag the before/after slider when it is done — the same language as the image-diff tool. If all you want is a bigger picture, with no repair and no colour, the AI image upscaler page does just that.

### Colourise is optional and honest about hardware

DDColor is fp16. On a machine with WebGPU it runs on the graphics card. The WebAssembly path does not fully support fp16, which we already learned on the ID photo line — so if this browser has no WebGPU, the colourise checkbox tells you so and upscale still works. That is a limit, not a greyed-out mystery.

### What actually leaves the tab

The photograph does not. Model bytes come from Hugging Face when you press the button. After the first run they live in this browser's cache. There is no account and no upload endpoint.

## Limits

Does not repair torn or missing regions and cannot invent detail that is not there; it upscales and colourises with a local model.

## FAQ

### Does the photo get uploaded?

No. It is decoded, tiled, inferred and encoded in this tab. The only network traffic is the model files you asked for, and the photo is not attached to those requests.

### Why is colourise a separate, huge download?

Because it is. DDColor is about 108 MB. Hiding that behind a default-on toggle would be a trick. Upscale alone is 4.6 MB and is enough if you only wanted the print sharper.

### Will it invent faces or writing?

GAN upscalers hallucinate texture. A face can look slightly plastic; handwriting can grow extra strokes. Compare with the slider and keep the original if the 'restored' print is a worse lie than the blurry one.

### Why not 8×?

A 768 px source at 4× is already 3072 px on a side. 8× would be another model and another memory budget. 4× is the compact checkpoint we licensed and tiled; 2× is that output scaled down.

### Can I use this offline after the first run?

Yes, for whichever models you actually downloaded. Clear site data and they are gone, and the next press fetches them again.

## Related tools

- [Remove Background](https://bytescope.dev/en/remove-background.md) — Cut a subject out of a photo, same local-model idea.
- [ID Photo Maker](https://bytescope.dev/en/id-photo.md) — A passport photo at a verified size, with the background replaced here.
- [Image to Text](https://bytescope.dev/en/image-to-text.md) — Read Chinese off a phone photo of a receipt or a page.
