Back to floatbird
Live · browser · on-device

enhance

Revive an old photo. Drop one in and it comes back 4× larger and clean, JPEG mush gone, real detail rebuilt, in a before/after slider you can drag. Flip on Colorize and a faded black-and-white shot comes back in colour too. Both models run right in the tab, on a built-in sample the moment the page loads or on your own photo. Nothing is ever uploaded.

Why it exists

The photos you want to upscale, a family picture, a scanned ID, a screenshot with someone’s face, an old thumbnail that’s the only copy left, are exactly the ones you don’t want to hand to a stranger’s server. The web upscalers all upload your image, then watermark it, cap the output, or gate it behind an account, and the colorizers do the same. enhance does the whole thing in the browser tab instead: both the restoration and the colorization model are on-device, so you get the “enhance” moment, and an old photo back in colour, for real, and your photo never leaves your machine.

How upscaling works

Upscale runs Real-ESRGAN (the compact realesr-general-x4v3 model, about 5 MB) through ONNX Runtime Web, with a WebGPU fast path and a WebAssembly fallback. It is a real restoration model trained on real-world degradation, so it rebuilds plausible texture instead of just resampling. That is what separates it from a plain bilinear enlargement, and what makes the before/after land.

The model takes a fixed 128×128 patch, so the photo is cut into overlapping tiles, each upscaled 4×, and the seams are feathered away as the tiles are stitched back together. That keeps memory bounded even on a large image. The result is shown against a plain enlargement of the original so you can drag the divider and judge it yourself, and a one-click download gives you the full-resolution PNG.

How colorizing works

Colorize runs the Zhang et al. colorization network (the siggraph17 model) through the same ONNX Runtime Web stack. The model only ever sees the brightness of your photo; from that alone it predicts the two colour channels of CIE‑Lab. Because colour is low-frequency, the network runs once on a 256×256 version of the image, and the predicted colour is then laid back over the original brightness at full resolution, so every detail stays exactly as sharp as it was and only the colour is invented. When both passes are on, the photo is colorized first and upscaled second.

The colours are a plausible guess, not a record of the real ones: a learned prior over what skies, skin, foliage, and fabric usually look like, not a recovery of the original pigment. It is best at exactly the thing it looks built for: bringing a faded family photo back to life.

On-device, nothing uploaded

Each model’s weights download once and are cached, served from this site’s own origin. Upscale loads the first time you enhance a photo; the colorizer loads only the first time you switch Colorize on, so upscale-only visitors carry zero extra weight. The built-in samples are baked from the exact same pipeline, so they are interactive instantly with nothing to download. No backend, no account, no API key. Enhancement is best on small, compressed, or lightly blurry photos; on severe blur there is only so much any model can invent.