What a deblurring model actually does
Blur is not damage laid on top of a photograph. It is the photograph itself, summed along a path: every point of the scene was recorded across a short line of sensor cells instead of one, and what came back is the average. Undoing that means deciding which of the many scenes that could have produced this average is the one that did — and that is underdetermined, always, no matter how much arithmetic is thrown at it.
The classical answer chooses the scene that is most consistent with a measured smear, which is what the pass on this page does. A trained network chooses differently: it has seen several thousand pairs of sharp and smeared frames and has learned what edges, skin, brickwork and printed characters tend to look like before they were smeared, so it can commit to detail that the arithmetic will not. That is a real advantage and it is also the whole risk, because a prior is a belief about what was probably there. The word for the output is therefore reconstruction, and this page uses that word deliberately: nothing here is a recovery, because recovery is a claim about information and the information is not in the file.
Your photograph is decoded, measured and reconstructed in this browser tab and is never uploaded. The page fetches its own code, a HEIC decoder if you open a HEIC, and a face detector only when you ask for one; none of those requests carries anything about your photo.
From a failed frame to a saved reconstruction
- Open the frame that failed. Drag it in, paste it from the clipboard, or choose it from disk. JPG, PNG, WebP, AVIF, TIFF, BMP and ICO decode straight away; a HEIC from an iPhone pulls a decoder of about a megabyte and a half, and only when a HEIC actually turns up.
- Read the measurement. The frame is measured on its working copy and this processor is timed on the identical arithmetic. Auto then names the failure — movement, missed focus, a block grid or nothing much — and, when there is a smear worth undoing, the reconstruction starts on a copy no longer than 1024 pixels.
- Adjust the kernel if it is wrong. The measured smear is drawn on a dial: drag its knob round for the direction the camera moved and outward for how far, or type the angle and length. Motion and Defocus override Auto; every change is one undo step.
- Hold the reconstruction back where it hurts. Strength blends between the original and the reconstruction, the artifact guard clamps halos to what the neighbourhood allows, a painted region limits the work to part of the frame, and face ovals get their own gentler settings.
- Judge it at 100%, then save. Split, result or original on the stage; hold Space for the original. The loupe renders source pixels through the same code the export uses, beside two strengths side by side. Save renders the full frame band by band — or keep the original, byte for byte.
The download, and why it is not offered yet
The learned pass this domain exists for is NAFNet in its single-image motion-deblurring form, exported to ONNX, and no export of it is published for this build to fetch. So no control on this page offers a download, no byte figure is printed as though it had been read off a served file, and the button in the rail runs the classical pass instead. Model sizes quoted before a file exists are routinely wrong by several times, which is the whole reason an unmeasured figure is not printed as a measured one.
The licence chain, the corpus, the runtime that would execute the graph, what would be written to Cache Storage and how to clear it again are all one page away rather than four paragraphs down this one: how it works.
Where it works and where it fails
| Decodes directly | JPG, PNG, WebP, AVIF, TIFF, BMP and ICO. Orientation is settled at decode with a two-pixel probe, so a phone photograph does not end up rotated twice on Safari. |
|---|---|
| Decodes lazily | HEIC, through a WebAssembly decoder of about 1.5 MB fetched the first time a HEIC is opened and never before. |
| Caps | About 32 megapixels before a lighter working copy is offered instead, 16 on an iPhone or iPad. A hard refusal at 100 megapixels, 40 on iOS. Files above 120 MB are declined before decoding starts. |
| Working copy | The preview runs on a copy no longer than 1024 pixels. Saving renders the full frame in bands, with a time estimate for this processor shown before you press it. |
| Bit depth | Sixteen-bit sources are reduced to eight before the pass. The depth does not survive, and saying so is cheaper than letting somebody find out from a histogram. |
| Alpha | Split off before the arithmetic and re-attached byte for byte. A cut-out arrives and leaves with the same transparent surround. |
What the pass cannot do is worth more attention than what it can, because the failures are confident rather than obvious:
- Movement past roughly a tenth of the frame width is outside anything this method or a trained one has to work with. What comes back will look decided and will be wrong.
- Defocus from a wide aperture at close range is a different optical failure from a hand-held smear, and the measurement reports it as such rather than running a pass shaped for the wrong problem.
- Pixelation and mosaic are not blur. Information discarded in blocks is gone, and the block period is printed in the rail so that nobody spends a download finding out.
- A frame that is merely soft has nothing spread out to gather back up. That is a sharpening job rather than a reconstruction job, so the measurement says “nothing much to undo” instead of running a deblur it does not need, and offers the Sharpen engine instead.
- Noise and JPEG blocks are amplified alongside detail. Every round of correction is held inside a band, the artifact guard clamps what is left, and more rounds past the default mostly buy more of both.
The distinction in the fourth line decides what this page does with your photograph. A photograph you can already read properly and would like crisper is a judgement about quality, and a reconstruction would only add ringing to it. A photograph you cannot read — the sign is illegible, the face is smeared — is a frame that failed, and that is what the pass is for. Not sure which you have? Check whether the photo is blurry first; it measures and changes nothing. Soft rather than smeared? Sharpen it. A folder of them? Triage the whole folder.






















