Colorize a black and white photo
Drop a scan in. The colors are predicted on your own computer — the file never leaves this page — and painted onto the original at full resolution.
checking this machine…
Choose a photo
First run downloads a {mb} model once, then it stays in your browser cache and works offline.
On a phone this model often runs out of memory — it needs roughly 400 MB of free RAM while it works. It is worth a try, but a laptop or desktop is the safe bet.
Or try one of these
Both are public-domain FSA/OWI negatives. They are colorized live, in front of you — nothing here is a pre-rendered before/after.
Result
This session
Colors the model chose
Hue and how much of the frame it covers. Skin, sky, grass and wood are usually close to right; painted objects, clothing and signs are guesses.
How it works
- The photo stays hereIt is decoded in the page and turned into a 512 × 512 grayscale tensor. No request is made to any server with your image in it.
- The model predicts chroma onlyDDColor-tiny outputs two channels — a and b in CIE-Lab — at 512 × 512. It never outputs brightness.
- Color is painted on the originalThose two channels are scaled back up to your full resolution and combined with the lightness of your own scan, so grain and fine detail survive untouched.
That last step is why the output is not soft: the model works at 512 × 512, but every pixel of luminance in the file you download comes from your original photo. A 1 MP scan takes about 6 seconds here on a recent Mac, where WebAssembly runs on one CPU thread, and longer on an older laptop; the model time does not change with resolution, only the final painting pass does.
The model on this page
- License
- Apache-2.0 · full text
- Download
- 135 MB
- Runs on
- Your CPU, one WebAssembly thread
DDColor (ICCV 2023) by Xiaoyang Kang and colleagues, tiny variant, exported to ONNX by edgetools with fp16 weights and float32 input/output. Apache-2.0, which allows commercial use; the full license text ships with this page. The 512 × 512 input size is fixed by the export, which is why every photo takes about the same time regardless of how big it is.
Questions
Is my photo uploaded anywhere?
No. The only thing downloaded is the model file itself (about 129 MB, once). Your photo is decoded, colorized and saved entirely inside this tab — you can check the network panel, or turn off your Wi-Fi after the model has loaded and keep working.
Are the colors real?
No. They are a guess based on what the model saw in its training photos. Skin, sky, foliage, wood and skin-adjacent fabrics come out believable most of the time. Painted surfaces, clothing dyes, cars, flags and signage are genuinely unknowable from a grayscale negative — the model will pick something plausible, not something true. If you need a specific colour for a uniform or a dress, treat the output as a base layer and correct it by hand.
Is there a watermark, a queue or a daily limit?
No watermark, no account, no queue. The free page does three photos at a time, up to 12 megapixels and 20 MB each, as often as you like — the work happens on your own processor, so there is nothing for us to ration.
Why is the result still sharp?
Because the model only decides colour. It reads a 512 × 512 version of your photo and returns the two chroma channels of CIE-Lab; the lightness channel is taken from your original file at full resolution and never touched. Colour can be blurry at the edges of an object without anyone noticing, which is why this trick works so well on scans.
Can it colorize a black and white video?
Not here. Frame-by-frame colorization has no memory between frames, so the colours flicker and the result looks worse than the original footage. Doing it properly needs temporal consistency, which this model does not have.
How is this different from Palette.fm or MyHeritage In Color?
Those upload your photo to a server and then meter what you get back: MyHeritage limits how many photos you can colorize before asking for a subscription and stamps the free ones, and Palette caps free output resolution and watermarks it. This page gives you the full resolution of whatever you put in, with no mark on it, because the computation is yours. What they have that this does not is a bigger model and hand-tuned filters — for a difficult portrait, they may still win.
Why does it say CPU? My machine has a GPU.
The published ONNX export of this model hits a bug in ONNX Runtime's WebGPU backend: a leftover spectral-norm computation in the decoder is passed to a GPU kernel that cannot handle it, and the run fails outright. Rather than show you an error, the page pins this model to the CPU path, which is correct on every machine and takes about six seconds per photo on a recent Mac. A float32 re-export fixes it and runs in under 0.2 s; when that is published we will switch.