Measured baselines
AI upscaler baselines: bicubic, Lanczos and Real-ESRGAN on 12 public-domain photos
Twelve public-domain and CC0 photos reduced 4x and enlarged again by five free methods, from bicubic interpolation to Real-ESRGAN, scored against the originals with PSNR, SSIM and LPIPS, with side-by-side crops. Not a ranking of products; the yardstick commercial upscalers have to beat.
What this is. Five free, open methods for enlarging a photo 4x, measured on the same 12 photos with the same code, on 7 October 2026. They are the baseline any paid upscaler should beat: if a product can't do better than free bicubic interpolation or the open-source Real-ESRGAN models, you don't need it. It is not a ranking of products, and no commercial tool appears on this page.
How. Each photo was reduced to 2,000 px on the long side (the reference), then reduced again by exactly 4x with bicubic filtering (the input, about 500 px). Each method enlarged the input back to 2,000 px, and the result was compared with the reference. The methodology explains every step and the metrics; the scripts and data are published.
Results
Averages over the 12 photos
Higher PSNR and SSIM mean closer to the original pixel for pixel; lower LPIPS means closer as a neural network trained on human judgements sees it. Methods are listed from simplest to most complex, not ranked.
| Method | PSNR (Y), mean | SSIM (Y), mean | LPIPS, mean | Time per photo |
|---|---|---|---|---|
| Bicubic | 30.00 dB | 0.7679 | 0.386 | under 0.1 s |
| Lanczos | 30.22 dB | 0.7740 | 0.392 | 0.1 s |
| Real-ESRNet x4plus | 29.54 dB | 0.7915 | 0.351 | 37.8 s |
| Real-ESRGAN x4plus | 26.79 dB | 0.7268 | 0.226 | 35.4 s |
| Real-ESRGAN general v3 | 27.66 dB | 0.7626 | 0.312 | 2.3 s |
Time is the median per photo on an 8-core Intel Core i9 laptop CPU (no GPU), PyTorch 2.2.2. A recent GPU runs the neural networks in well under a second.
How often each method beats bicubic, photo by photo
| Method | Higher PSNR | Higher SSIM | Lower LPIPS |
|---|---|---|---|
| Lanczos | 12 of 12 | 12 of 12 | 5 of 12 |
| Real-ESRNet x4plus | 9 of 12 | 9 of 12 | 9 of 12 |
| Real-ESRGAN x4plus | 0 of 12 | 0 of 12 | 12 of 12 |
| Real-ESRGAN general v3 | 0 of 12 | 4 of 12 | 10 of 12 |
Every photo
PSNR on luma, in dB (higher is closer):
| Photo | Bicubic | Lanczos | Real-ESRNet x4plus | Real-ESRGAN x4plus | Real-ESRGAN general v3 |
|---|---|---|---|---|---|
| Guide, Little Norway (1942) | 38.65 | 39.30 | 32.71 | 31.70 | 29.99 |
| Garage mechanic (1943) | 34.19 | 34.43 | 34.83 | 32.58 | 32.46 |
| Walter White (c. 1950) | 44.52 | 44.78 | 41.04 | 37.91 | 36.81 |
| A. G. Bell (c. 1895) | 32.39 | 32.47 | 32.04 | 25.00 | 31.25 |
| Jacques-Cartier river | 24.24 | 24.33 | 24.44 | 22.21 | 23.46 |
| Mount Ida, Crete | 26.67 | 26.82 | 26.96 | 23.74 | 25.34 |
| Rio de Janeiro | 26.47 | 26.60 | 27.13 | 25.35 | 25.98 |
| Sunset Key | 26.16 | 26.25 | 26.43 | 24.23 | 25.41 |
| Hotel Post sign | 29.77 | 30.09 | 31.13 | 28.45 | 27.15 |
| "Posted" sign | 26.03 | 26.38 | 26.49 | 23.79 | 24.73 |
| Lynx | 29.55 | 29.70 | 29.63 | 26.70 | 28.55 |
| Golden Chapel | 21.40 | 21.49 | 21.70 | 19.83 | 20.82 |
SSIM on luma (higher is closer):
| Photo | Bicubic | Lanczos | Real-ESRNet x4plus | Real-ESRGAN x4plus | Real-ESRGAN general v3 |
|---|---|---|---|---|---|
| Guide, Little Norway (1942) | 0.951 | 0.954 | 0.939 | 0.918 | 0.921 |
| Garage mechanic (1943) | 0.917 | 0.919 | 0.924 | 0.894 | 0.904 |
| Walter White (c. 1950) | 0.975 | 0.976 | 0.972 | 0.959 | 0.966 |
| A. G. Bell (c. 1895) | 0.701 | 0.705 | 0.695 | 0.598 | 0.673 |
| Jacques-Cartier river | 0.504 | 0.515 | 0.552 | 0.444 | 0.502 |
| Mount Ida, Crete | 0.679 | 0.688 | 0.715 | 0.608 | 0.671 |
| Rio de Janeiro | 0.771 | 0.776 | 0.799 | 0.753 | 0.777 |
| Sunset Key | 0.683 | 0.689 | 0.714 | 0.651 | 0.680 |
| Hotel Post sign | 0.885 | 0.889 | 0.914 | 0.880 | 0.886 |
| "Posted" sign | 0.791 | 0.805 | 0.828 | 0.727 | 0.787 |
| Lynx | 0.866 | 0.870 | 0.886 | 0.834 | 0.871 |
| Golden Chapel | 0.491 | 0.503 | 0.560 | 0.456 | 0.514 |
LPIPS (lower is closer):
| Photo | Bicubic | Lanczos | Real-ESRNet x4plus | Real-ESRGAN x4plus | Real-ESRGAN general v3 |
|---|---|---|---|---|---|
| Guide, Little Norway (1942) | 0.152 | 0.151 | 0.192 | 0.143 | 0.195 |
| Garage mechanic (1943) | 0.301 | 0.298 | 0.282 | 0.217 | 0.289 |
| Walter White (c. 1950) | 0.205 | 0.203 | 0.226 | 0.123 | 0.191 |
| A. G. Bell (c. 1895) | 0.593 | 0.605 | 0.642 | 0.570 | 0.622 |
| Jacques-Cartier river | 0.662 | 0.681 | 0.603 | 0.288 | 0.484 |
| Mount Ida, Crete | 0.446 | 0.462 | 0.411 | 0.211 | 0.329 |
| Rio de Janeiro | 0.456 | 0.461 | 0.374 | 0.221 | 0.332 |
| Sunset Key | 0.393 | 0.400 | 0.350 | 0.128 | 0.277 |
| Hotel Post sign | 0.241 | 0.240 | 0.171 | 0.123 | 0.171 |
| "Posted" sign | 0.382 | 0.395 | 0.284 | 0.248 | 0.252 |
| Lynx | 0.198 | 0.197 | 0.194 | 0.120 | 0.168 |
| Golden Chapel | 0.601 | 0.608 | 0.482 | 0.321 | 0.438 |
What the numbers say
The metrics disagree, and that is the main finding. Real-ESRGAN x4plus, the generative model behind many "AI upscalers", has the best LPIPS on 12 of 12 photos, yet scores below plain bicubic on PSNR on 12 of 12 and on SSIM on 12 of 12. It draws sharp, convincing fur, foliage and edges that are not exactly where the real ones were. PSNR and SSIM count every misplaced detail as error; LPIPS, which was fitted to what people judge as similar, rewards the sharpness. So "this upscaler has lower PSNR" doesn't prove it is worse, and "it looks sharper" doesn't prove it is faithful.
The model trained without a GAN is the most faithful photo by photo. Real-ESRNet x4plus, the same network trained with pixel loss only, has the best PSNR on 8 and the best SSIM on 9 of the 12 photos, and the highest average SSIM. Its average PSNR (29.54 dB) is still below Lanczos's (30.22 dB), pulled down by a few portraits where it loses by several decibels. It looks cleaner than bicubic, but not as crisp as the GAN.
On soft originals, plain interpolation wins on PSNR. Lanczos or bicubic has the best PSNR on 4 photos: Guide, Little Norway (1942), Walter White (c. 1950), A. G. Bell (c. 1895), Lynx. Three of those are the film and studio portraits, whose references are smooth; the Real-ESRGAN models, trained to remove noise and blur from real-world photos, flatten skin and fabric texture that was really there. A model trained for degraded inputs is not the right tool for a clean small image.
The compact model is a fair trade on a CPU. Real-ESRGAN general v3 takes about 2.3 seconds per photo here against about 35.4 for x4plus, and its average LPIPS (0.312) sits between bicubic's and x4plus's.
What this test does not show. These inputs were made by clean bicubic reduction, the easy case. Real small images also carry blur, noise and JPEG compression, which the Real-ESRGAN models were trained to handle and where they should do better against bicubic; that harder test is planned (see the methodology). With 12 photos, differences of a few tenths of a dB or a few thousandths of SSIM between methods are not meaningful.
Side by side
Each figure shows the same 128 × 128 region of the reference and of every output at 2x (nearest-neighbour, so each output pixel is a 2 × 2 block), the 32 × 32 input pixels the methods started from at 8x, and where the region sits in the photo. The region is chosen by a fixed rule, the most detailed spot in the reference, not by eye. Figures are lossless.
Guide, Little Norway (1942)

Garage mechanic (1943)

Walter White (c. 1950)

A. G. Bell (c. 1895)

Jacques-Cartier river

Mount Ida, Crete

Rio de Janeiro

Sunset Key

Hotel Post sign

"Posted" sign

A second crop of this photo, chosen by hand to show the sign's small print (about 5 pixels tall in the input). Real-ESRGAN x4plus produces crisp, confident letters, but the first I of FISHING comes out misshapen and some strokes are redrawn; general v3 leaves red specks inside the letters. Bicubic and Lanczos are blurry but invent nothing.

Lynx

Golden Chapel

Data and code
- upscaler-baselines.json: every score, per photo and method, with the library versions.
- upscale-timings.json and crops.json: run times and crop positions.
- photo-samples.yaml: the photos, their licenses and hashes.
- Scripts: prepare.py, upscale_local.py, score.py.
To check a PSNR or SSIM value yourself, make the reference and input with prepare.py, upscale, and load the reference and output into the PSNR and SSIM calculator: it uses the same formulas and settings.
Licenses. Real-ESRGAN and its released weights are BSD-3-Clause (github.com/xinntao/Real-ESRGAN). The photos are public domain or CC0 (list on the methodology page), so the crops above are free to reuse.
Also available as Markdown.