AIDeblurA PictureEditor.com tool

The weights, in public

A page that intends to ask for 92 megabytes of somebody's data owes them the licence chain, the corpus, the host and the arithmetic before it asks. None of this is on the front page because none of it is needed to press one button.

Pixels stay in this tab; only the file you save leaves it.

What this build actually has

No published export. The loader, the byte-length check, the Cache Storage bucket, the session builder and the control that deletes the whole thing are all written and typed against a release constant, and that constant is null. Every surface that would offer a download says so instead of drawing a control that cannot complete.

What runs today on the two instrument routes is arithmetic with no download behind it: the smear is measured off your frame, a kernel of that shape is built, and the frame is walked back through it eight times under a bounded correction. It is weaker than a trained pass and it is honest about the difference. It also asks nothing of the network.

The network, and the licence chain

NetworkNAFNet, in the single-image motion-deblurring form. Fully convolutional, which is what makes a frame of any size feasible in one pass rather than a fixed square.
ExportThe ONNX conversion published as opencv/deblurring_nafnet, licensed MIT.
UpstreamThe original implementation is offered under MIT and Apache-2.0 together.
Training pairsThe GoPro set, under CC BY 4.0 — sharp and motion-blurred frames from the same hand-held sequences.
AttributionThe GoPro corpus and both upstream licences are reproduced on this page because that is where the obligation sits, not in a file nobody opens.
Precisionfp32 as exported. An int8 or fp16 conversion would halve the transfer and is the single largest improvement available, but only if the quality can be measured to hold.

The chain matters commercially rather than aesthetically. This domain carries advertising, and a corpus licensed against commercial use makes the whole property unshippable however well the network scores.

What was rejected, and on what grounds

  • MPRNet is out on licence alone. Its terms are a custom academic public licence that forbids commercial use outright, which is an absolute bar here rather than a trade-off to weigh against quality.
  • Restormer is MIT and clean, but it is a transformer with no ready ONNX export, and a transformer on single-threaded WebAssembly is near-certainly far slower than a convolutional stack of the same capability.
  • SwinIR is Apache-2.0 and clean, and fails on the same two grounds as Restormer.
  • All three are worth revisiting the day a maintained quantised export appears, and not before.

What a fetch would look like

HostThe network's own object store. Never a public model hub, because a request to one tells that hub which of this domain's visitors is deblurring something.
RuntimeThe ONNX WebAssembly build, just under 14 MB, served from this origin rather than from anywhere else. Single-threaded permanently: threads need cross-origin isolation, and that breaks the advertising this page carries.
TriggerA control naming the exact byte length. Nothing is requested before it is pressed, and Escape stops a transfer in flight and leaves nothing behind.
StorageOne Cache Storage bucket whose name carries the release, so a new set of weights is a new bucket rather than an invalidated path. Written only after a complete body of the right length has been read.
RemovalOne control under the rail. It clears the bucket, drops the session and its memory arena, and reports what it freed.
Private windowsThe Cache API is refused outright in some profiles. The pass still runs; it pays for the fetch again next session, and the rail says so rather than failing quietly.

Figures that are estimates, marked as estimates

Two numbers on this domain have been measured and the rest have not. The runtime’s length is the length of the file in this repository. The seconds quoted in the rail are timed on your own processor, running the identical loop the pass runs, which is why they are given as a band rather than as a figure.

Everything about the learned pass is an estimate until an export exists: the 92 megabytes, the ten to twenty seconds for a 1024-pixel pass, and the assumption that the published graph has dynamic spatial axes at all. If it turns out to be frozen at 512 by 512 then every frame becomes a tiled job, the overhead roughly doubles, and the ceiling has to be rethought before anything else is built on top of it.

Elsewhere on this domain