Why AI upscaling can't rescue a shot that missed focus
It can't, and the reason is physical: an out-of-focus lens never records the detail, so there is nothing in the file to restore. An upscaler predicts detail from detail that survived; where none survived it invents plausible texture, which is not the texture that was there. Resolution, compression damage and noise do respond. Focus doesn't. Crisp will still run the job — it has no focus measurement — so the check is yours.
People try this constantly, and it's worth explaining why it disappoints. You have a shot that matters, it's slightly out of focus, and an AI upscaler seems like exactly the tool. You run it, the result looks sharper at a glance, and something about it is wrong.
What an upscaler is actually doing
An upscaler is a prediction engine. It was trained on millions of pairs of images, each pair being a high-quality original and a degraded copy, and it learned the statistical relationship between them. When you feed it a low-resolution frame, it predicts what the high-resolution version probably looked like.
That works because degradation is usually partial. A 480p frame still contains edges, and the model has seen enough edges to know what a sharper one looks like. Compression damage leaves the underlying structure intact. Sensor noise sits on top of a real signal. In each case there's something genuine to reason from.
Focus is different in kind
An out-of-focus lens doesn't degrade detail, it never records it. Light from a single point in the scene lands as a disc rather than a point, so information from neighbouring parts of the subject is physically averaged together before it ever reaches the sensor. There's no encoding of the original arrangement anywhere in the file.
Ask a model to sharpen that and it does the only thing it can. It generates plausible detail where the training data suggests detail belongs. On a stranger's footage that's often fine, because nobody can check. On a face you know, it isn't, because the invented detail is not that person's face. The eyes come back subtly wrong, and the effect is unsettling in a way that's hard to name.
The same reasoning covers heavy motion blur from too slow a shutter, and blown highlights, where every pixel in a clipped region holds the identical maximum value and nothing distinguishes a bright sky from a brighter one.
What does respond well
| Problem | Recoverable? | Why |
|---|---|---|
| Low resolution, in focus | Yes, genuinely | Real structure survives; the model has something to reason from. |
| Compression blocking | Yes | Damage sits on top of intact underlying detail. |
| Sensor noise, low light | Yes | Signal is present, just buried. |
| Soft focus | No | The detail was never recorded. |
| Heavy motion blur | No | Same reason: averaged before capture. |
| Blown highlights | No | Clipped pixels are all identical. |
What to do with a soft shot instead
Be honest about what you're doing. If the shot is precious and slightly soft, a gentle sharpening pass and good grading will make it read better without pretending to recover anything. Cropping in less, keeping it on screen for less time, and cutting to a sharper angle all do more than any amount of processing.
If the softness is uniform across the whole frame rather than just the subject, check whether it is actually focus at all. A dirty lens, a cheap filter, heavy denoising applied in-camera or a bad transfer all produce something that resembles soft focus and some of those do respond to restoration.
Crisp will run any of this on-device. What it will not do is claim a result it did not get: nothing in the app reports that a soft shot came back sharp. Knowing which of your footage is worth the render time saves more than a faster renderer would.
What Crisp does when it can't do the thing you asked
The house pattern in Crisp, when a request cannot be honoured, is to say so in words rather than run something that looks like work. Three of those refusals sit in intent.py. Ask it to soften or defocus a picture and it answers "Crisp sharpens and cleans footage up; it has no way to soften or defocus a picture" rather than falling into the enhance lane, which would have sharpened — the opposite of the ask, at full GPU cost. Ask it to blur or pixelate a face and it says it has no blur or pixelate tool. Ask it to sharpen without enlarging and it says there is no such mode: "Crisp sharpens by running the frames back through the upscaler, so it always enlarges — there’s no same-size sharpen."
The stabiliser goes one step further and measures before it decides. stabilize.py::_would_help samples several windows of your clip, runs ffmpeg's deshake against a plain re-encode, and compares frame-to-frame motion. If stabilising would not improve this clip it declines outright: "Stabilising wouldn’t improve this clip — Crisp measured the motion and its stabiliser would add wobble rather than take it out." That refusal exists because the measurement was unflattering. Against a plain re-encode control, deshake made a tripod shot 92% wobblier, a locked-off shot from a moving car 128% wobblier, and a deliberate pan 24% worse because it fights the move. Violent hand-held jitter, at 39% better, was the only case that improved. Rather than guess what "shaky" means, the code measures the question the button actually asks. The same reasoning is why shaky phone video is not one problem but several.
There is no equivalent for focus, and that is the honest gap on this page. Crisp does not measure focus anywhere in the engine. It will not stop you upscaling a shot that missed it, and it has no pre-flight that says this one won't come back. It will queue the job, spend the render time, and hand you a file. The judgement about whether the result is your subject's face or a plausible stranger's is still made by looking at it.
The number this page does not have
We have no measurement of focus recovery, ours or anyone's, and we are not going to borrow one that measured something else. Crisp's published metrics — the PSNR, SSIM and VMAF numbers on the denoise page — score resolution loss and added noise against a clean original. None of those clips was defocused. Using them here would be dressing one experiment up as another.
The one sharpness-like figure the codebase ever computed is a cautionary tale in its own right. A mean absolute Laplacian was used to compare two restore output sizes, and the claim it produced was pulled back out of the app because the measure is size-dependent: it scores the smaller image as sharper whatever its actual quality, which made the faster, smaller render come out 16.6% "better" when the two were compared at equal size. A sharpness proxy that confident and that wrong is worth remembering the next time a product quotes you a focus-recovery percentage.
Turning the denoise dial up will not do it either
A reasonable guess is that the restoration settings must have something in them for this. They do not. In Crisp the denoise value routes the job to a different upscaling model, and above 0.5 it additionally adds an hqdn3d temporal and spatial pre-pass that runs before the upscale. At 0.5 and below there is no separate filter at all, and the Enhance preset carries 0.4, so the ordinary job is model-only.
What that pre-pass removes is noise, and noise is a signal sitting on top of real detail. Defocus is the absence of the detail. There is nothing for a denoiser to lift away here, and at strength it costs you what fine texture did survive — the engine's own comments record exactly that, a flat 0.6 denoise floor having over-denoised moderately dim footage into detail loss until it was split into two tiers. If you want the full routing table, it is on the denoise page, along with the cells where a model beats a plain resize and the cells where it doesn't.
Soft footage, in detail
Can any tool fix out-of-focus video?
Nothing recovers the original detail, because it was never recorded. Tools that claim otherwise are generating plausible detail rather than restoring real detail. That can look acceptable on unfamiliar subjects and tends to look wrong on faces you know.
Why does the sharpened version look strange rather than just sharp?
Because the fine detail is invented. Your eye is very good at faces specifically, so small errors in the arrangement of features read as uncanny even when you can't articulate what changed. On landscapes or textures the same invention usually passes unnoticed.
Is a slightly soft shot worth upscaling at all?
Often yes, if the softness is mild and the resolution is genuinely low. Upscaling addresses resolution, not focus, and a low-resolution in-focus shot has real structure to work from. Just don't expect the upscale to change how sharply focused it looks.
Does shooting at a higher resolution protect against this?
It protects against resolution problems, not focus problems. A 4K shot that missed focus contains four times as many pixels of the same blur. Nail focus first; resolution is the easier thing to fix afterwards.
Does Crisp check whether a shot is in focus before upscaling it?
No. Crisp refuses several things it genuinely cannot do — softening or defocusing a picture, blurring a face, sharpening without enlarging — and its stabiliser measures your clip and declines when deshaking would make it worse. There is no equivalent check for focus anywhere in the engine. The upscale will run, take the render time and produce a file. Deciding whether the invented detail is acceptable on that particular shot is left to you.
Related
- What the denoise setting does
- When AI upscaling beats a plain resize
- Why phone video looks shaky
- Why VHS tapes degrade
- Why your video looks worse after you upload it
Download Crisp for Mac Free to try, one-time $129 to remove the watermark. Runs entirely on your Mac.