Unblur an image

Drop in a photo that came out shaky. A deblurring model downloads once and then runs on your own machine — the picture never leaves this tab.

Deblurring workbench

Drop a blurry photo here

Or paste with Ctrl/⌘+V. JPEG, PNG, WebP — up to 4 megapixels and 20 MB, three at a time.

No photo handy?
Photos in this batch

Nothing is uploaded. Open your browser's network panel and watch: after the model file, this page makes no further requests.

What this actually fixes

The model behind this page was trained on pairs of sharp and motion-blurred frames from a high-speed camera. That training set decides what it can undo — and being honest about it saves you the disappointment.

Good candidates

  • Camera shake: a handheld shot at 1/15 s where every edge is smeared in the same direction.
  • A subject that moved during the exposure — a passing car, a child, a hand holding a page.
  • Text that is blurred but still has visible stroke shapes: price tags, signs, whiteboards, receipts.

Poor candidates

  • Missed focus. Out-of-focus blur has a different shape and the model was never shown any. Try the upscaler instead.
  • Photos that are simply small. Blowing up a 300-pixel-wide thumbnail is a resolution problem, not a blur problem.
  • Text that has dissolved into a grey smear. If no stroke survives the blur, nothing in the file can bring it back — the model invents plausible edges, and invented text is worse than none.

How it works

  1. The model arrives onceA 263 MB ONNX file downloads on your first run and is kept in the browser's cache. Every visit after that starts in about two seconds, online or not.
  2. Your photo goes to the GPU, not to a serverThe picture is decoded into a canvas, handed to a Web Worker, and run through the network with WebGPU where available and WebAssembly on a single CPU thread everywhere else. Both paths produce the same pixels.
  3. You decide how much of it to keepThe strength slider blends the result back toward the original. At 0% the download is byte-for-byte your input; at 100% it is the raw model output. Most photos look right somewhere in between.

Model and licence

Network
NAFNet-GoPro-width64
Download
263 MB (275,371,113 bytes), fp32, one file
Licence
MIT
Authors
Chu, Chen, Chen & Lu (Megvii Research), 2022
Trained on
GoPro: 3,214 blurred/sharp pairs from 240 fps video
Measured here
1024 × 768 in 2.0 s on WebGPU, 41 s on one CPU thread (Apple M2 Max)

NAFNet — “Simple Baselines for Image Restoration”, arXiv:2204.04676. The ONNX export comes from the deepghs/image_restoration repository; weights and code are MIT, with parts of the training framework under Apache 2.0. The full text of both licences ships with this page.

Questions

Does my photo get uploaded anywhere?
No. The only thing this page fetches from the network is the model file itself, and that is served from a CDN before your photo is ever opened. Everything after that — decoding, tiling, inference, the comparison view — happens inside the tab. You can verify it: open the developer tools, switch to the Network panel, and run a photo through. After the model there are no further requests. Pull the network cable and it still works.
Which kinds of blur can it undo?
Motion blur — the kind caused by the camera or the subject moving while the shutter was open. It was trained on the GoPro dataset, which builds blurred frames by averaging runs of 240 fps video, so directional smear is exactly what it has seen thousands of times. Out-of-focus softness, haze, compression mush and low resolution are different problems with different fixes, and the model will mostly leave them alone or make them look plasticky.
Can it make blurry text readable?
Sometimes, and it depends on how much of the letter shape survived. If you can tell there are strokes but not which strokes, the odds are decent — price tags, street signs, slide decks photographed from the back of a room. If the text has collapsed into an even grey band, no tool can recover it, because the information is no longer in the file. Be careful with numbers: a restoration model produces the most plausible edges, not the true ones, so never read a serial number or an amount off a deblurred picture and treat it as fact.
Why is the free limit 4 megapixels?
Because of memory and patience, not billing. The network keeps 64-channel feature maps at full resolution, so a 4 MP picture needs a couple of gigabytes of working memory; past that, WebAssembly runs out of heap and the tab dies. Four megapixels is the largest size that finished reliably in testing — about 10 seconds on WebGPU and roughly four minutes on the CPU path. Above that the page offers to resize rather than silently doing it behind your back.
What if my browser has no WebGPU?
It still works. The same model runs through WebAssembly on a single CPU thread, and the output is identical — we checked pixel by pixel against a reference run, and the largest difference anywhere was 2 levels out of 255. The only thing you lose is speed: roughly 52 seconds per megapixel instead of 2.5 on this test machine, so keep pictures small if you are in a hurry. Safari and older Firefox releases take this path today.
Can I deblur a video?
Not here. A minute of 30 fps footage is 1,800 frames, which on the CPU path would take close to a full day even at 1024 × 768 and would flicker, because each frame would be restored without any knowledge of its neighbours. Video deblurring needs a model that looks at several frames at once, plus a way to keep the browser tab alive for hours. If you only need one moment out of a clip, export that frame as a still and bring it here.