Upscale and sharpen an old or low-resolution photo, without AI

Sharper, larger, nothing invented

Drop an old or small photo anywhere on this page. It is enlarged with Lanczos resampling and its real edges are sharpened, here in this tab. No AI rewrites a face or a line of text, and nothing is uploaded.

  • JPEG
  • PNG
  • WebP
  • AVIF
Or drop a photo anywhere on this page
01No invented detail
Every output pixel is a weighted mix of real input pixels. Faces, text and numbers stay what they were.
02Crisp, not haloed
Lanczos overshoot is clamped away and sharpening is capped at a few levels beyond the local range.
03No upload
Decoding, enlarging, sharpening and encoding run in a background thread of this tab.
How the enhancer works

Upscaling without AI, done carefully

Upscaling an image without AI: what actually happens

A photo 800 pixels wide holds exactly 800 samples per row. To make it 1,600 pixels wide, something has to decide what goes in the 800 new places. There are two honest ways to do that and one dishonest one. The honest ways calculate new pixels from the real pixels around them, then raise the contrast of edges that are already there. The dishonest way, dressed up as “AI enhance”, generates detail that looks plausible. This tool does only the first, in four steps, entirely in your browser: optional noise reduction, Lanczos3 enlargement, a de-ringing pass, and a thresholded unsharp mask.

Resampling: nearest, bilinear, bicubic and Lanczos

Every enlargement method is a rule for weighting the source pixels near each new pixel.

  • Nearest neighbour copies the closest source pixel. Nothing is blurred, but every pixel becomes a visible block and diagonal edges turn into stairs.
  • Bilinear blends the 2×2 pixels around each new position. Blocks disappear, but so does edge contrast: the result looks out of focus.
  • Bicubic fits a curve through a 4×4 neighbourhood. It is noticeably crisper than bilinear and is the default in most image editors.
  • Lanczos3 weights a 6×6 neighbourhood with a windowed sinc function, three source pixels on each side along each axis. The sinc is the mathematically ideal reconstruction filter for a sampled signal; the window keeps it finite. It preserves the steepest edge transitions of the classical filters, which is why it is used here.

Beyond 4× none of them adds apparent sharpness, only size, so the tool stops there.

Ringing, halos, and the de-ring pass

Lanczos is sharp because its weighting has negative lobes: pixels a little further away are subtracted. On a hard edge that subtraction overshoots, leaving a thin bright line on the light side and a dark line on the dark side. Measured on a step from level 64 to level 192, the Lanczos3 enlargement used here left halos of 10–12% of the step at every scale from 1.5× to 4×. That is the “outlined text” look people associate with over-processed photos.

The fix is simple and exact. For every output pixel, the tool looks at the four source pixels that surround its position and clamps each colour channel into their minimum and maximum. In smooth areas the value is already inside that range and nothing changes. At an edge only the overshoot is removed, while Lanczos’ steeper transition, the part bilinear lacks, is kept. Video players call the same idea anti-ringing.

The unsharp mask: amount, radius and threshold

Enlargement spreads every edge over more pixels, so the result looks softer than the original at the same viewing size. An unsharp mask restores that contrast. It blurs a copy of the image, subtracts the blur from the original to isolate edges (the high-pass), and adds a multiple of that difference back. Three numbers control it:

  • Amount is how much of the difference is added back, in percent: 100 adds it once.
  • Radius is the width of the blur, in pixels. It decides which edges count. Here it is set per source pixel and multiplied by the scale, because a 4× enlargement spreads an edge four times wider than a 1× one; the floor is 0.5 pixels.
  • Threshold is subtracted from every difference before it is amplified, in 8-bit levels. Grain and JPEG speckle are typically 2–4 levels, so a threshold of 3 leaves them almost untouched while a real edge, tens of levels high, is sharpened. It is applied softly rather than as an on/off switch, so a smooth gradient never shows a boundary where it crosses the threshold.

The presets are the engine’s exact values, with the change measured on a 2× enlargement of a test edge and a flat field of grain:

  • Gentle: amount 60, radius 0.5 per source pixel, threshold 2, halo limit 2. Edge contrast +23%, grain +18%.
  • Standard (default): amount 100, radius 0.6, threshold 3, halo limit 4. Edge contrast +42%, grain +22%.
  • Strong: amount 150, radius 0.8, threshold 5, halo limit 6. Edge contrast +69%, grain +16%, because the higher threshold pays for the higher amount.

Two safeguards make these numbers safe. The halo limit caps how far a sharpened pixel may go beyond the brightest or darkest pixel of its 3×3 neighbourhood: 2 to 6 levels on a 128-level edge is under 5%, below what reads as an outline. And sharpening works on brightness only: all three colour channels are scaled by the same ratio, so hue and saturation cannot shift and no coloured fringes appear.

Why noise reduction comes before sharpening

A sharpener cannot tell grain from detail; it amplifies whatever high frequencies it is given. In an old JPEG many of those are block edges and mosquito noise around contrast, and sharpening them is the single biggest source of visible damage. So the optional noise reduction runs first, at the original resolution, before anything is enlarged.

It is a light bilateral filter: a 5×5 window, spatial sigma 1.2 pixels, range sigma 5 levels. A neighbour 3 levels away counts at 84% weight and is averaged in; one 15 levels away counts at 1% and is ignored, so edges survive. Measured, grain with a standard deviation of 4 levels keeps about 31% of its variance, while a fine texture of ±20 levels keeps about 87%. A stronger setting removed more grain but flattened texture to the plastic look of a beauty filter, which counts as distortion. It is on by default for JPEG sources and worth leaving on for scans.

Why this is not AI upscaling, and when AI is the better choice

Neural super-resolution models are trained on millions of images and predict what the missing detail probably looked like. On a small, clean photo of a common subject the result can be startlingly sharp. It is also a guess: a model will draw eyelashes, brick texture or legible-looking letters whether or not the photo contained them, and it can change a face, a digit or a signature without any sign that it did.

That makes the choice straightforward. For a family photo, an old document, evidence, or anything used as a record, use a method whose every output pixel is derived from real input pixels: the same file and settings always give the same result. When you want a picture that simply looks good, such as a tiny image enlarged for a poster or artwork where invented texture is welcome, an AI upscaler will usually look better, and this tool will not match it.

Output formats

  • JPEG, quality 92: opens everywhere and keeps the sharpening intact. The default. Transparency becomes white.
  • WebP, quality 90: usually smaller than JPEG at similar quality and supported by every current browser.
  • AVIF: the smallest files, but the slowest to encode, noticeably so at 3× and 4×.
  • PNG: lossless and the largest, often several times the JPEG. Choose it when the image will be edited again.

Limits and speed

The result can be at most 24 megapixels, because every stage holds several full-size copies of the image in the tab’s memory; scales that would exceed it are disabled before you run, with the reason. Sources over 40 megapixels are reduced during decoding. Measured on a laptop, a 640×480 photo enlarged 2× with standard sharpening and noise reduction took about 1.5 seconds; 4× with strong sharpening took about 5.3 seconds, most of it encoding the JPEG. At the 24 megapixel ceiling, a 3000×2000 photo enlarged 2× took about 38 seconds.

Questions

Can it recover detail that is not in the photo?
No, and nothing honest can. A photo 600 pixels wide holds 600 samples per row; enlarging it calculates new pixels between them, and sharpening raises the contrast of edges that are already there. A face or a line of text that was never resolved stays unreadable. Tools that appear to recover it are generating plausible detail, which may not be what was there.
Why not use AI?
Because an AI upscaler guesses. For a family photo, a scanned document or anything used as a record, a guess can quietly change a face, a number or a signature. Resampling and sharpening are deterministic: the same file and settings give the same result every time, and every output pixel is a weighted mix of real input pixels.
What is Lanczos resampling?
A windowed-sinc filter that computes each new pixel from the source pixels around it — three on each side, along each axis, for Lanczos3. It keeps edges noticeably crisper than bilinear or bicubic enlargement. Its known side effect is a faint light or dark halo beside very hard edges, which is why the sharpening after it is adjustable.
What does the threshold do?
An unsharp mask compares the image with a blurred copy and exaggerates the difference. Without a threshold it exaggerates every difference, including film grain, sensor noise and JPEG blocking. The threshold ignores differences below a set level — built into each sharpening preset, from gentle to strong — so real edges are sharpened and smooth skin, sky and noise are left alone.
Will it fix blur, scratches or compression blocks?
Sharpening helps a slightly soft photo look crisper, but it cannot undo motion blur or a missed focus, and it does not remove scratches, dust or faded colour. Heavy JPEG blocking can become more visible when sharpened; for those files keep Reduce noise on and choose the gentle preset.
How large can the result be?
Up to 4x the original, and at most 24 megapixels out. Beyond 4x, Lanczos adds size but no apparent sharpness, and every stage holds several full-size copies of the image in the tab’s memory, so the ceiling is what keeps it from crashing a phone.

Other local image tools

All tools

Start processing

Drop a photo in, choose a scale and a sharpening strength, and compare the result with the original at 100%.