Image Load Lab

Guides Formats & Compression Tested Sep 29, 2026 28 images · libwebp 1.6.0

Which WebP Quality to Use for Photos, Screenshots and Graphics

Across 28 images, the lowest WebP quality reaching SSIMULACRA2 70 ranged from 30 for flat graphics to 95 for a screenshot. One setting does not fit all.

Most tools ship one WebP quality setting for everything, usually 75 or 80. Is one number right for photographs, screenshots and flat graphics alike? We encoded 28 images of three kinds at ten WebP quality settings and looked for the lowest setting that reaches a fixed visual quality for each one. The answer is no: the right setting ranged from 30 to above 95 depending on what was in the picture.

What we tested

  • 20 photographs from our CC0 corpus (landscapes, food, fur, feathers, night scenes, text on a sign, dunes and more), each resized to a 1600-pixel long edge.
  • 4 real screenshots of this website captured by Chrome at 1280 × 800: the home page, a guide, the srcset tool and the methodology page. They mix small text, flat backgrounds and a few colour accents.
  • 4 synthetic graphics generated by code: a smooth gradient, a flat vector illustration, dense line art and a bar chart.

Every image was encoded with libwebp 1.6.0 through sharp at quality 30, 40, 50, 60, 70, 75, 80, 85, 90 and 95 (effort 4), and every output was scored with SSIMULACRA2 against its lossless source, following our methodology. Our target is a score of 70, which libjxl describes as “high quality”: artefacts are hard to notice without comparing with the original.

Lowest WebP quality that reached SSIMULACRA2 70

Grouped bar chart: synthetic graphics reached the target at quality 30 or 40, photos between 60 and 85, screenshots between 80 and 95
How many images first reached SSIMULACRA2 70 at each WebP quality setting. Chart generated from the linked CSV.
WebP (libwebp 1.6.0, effort 4) quality ladder results per image
Image Type Lowest q for score ≥ 70 KB at that q Lowest q for score ≥ 80 Score at q75 KB at q75
animal-fur photo 80 210.7 90 66.807 158.8
architecture photo 80 108.5 90 67.212 90.1
beach-sky photo 85 260.0 95 67.265 165.1
bicycle photo 75 117.6 90 70.688 117.6
bird photo 85 332.9 >95 63.564 228.3
car photo 75 222.3 85 70.59 222.3
city-night photo 80 192.1 95 66.011 156.6
coffee photo 80 55.7 90 69.78 45.8
desert photo 85 117.0 90 62.363 70.0
flower photo 75 37.0 90 71.327 37.0
food photo 75 117.3 90 70.45 117.3
forest photo 80 112.8 90 68.09 85.4
interior photo 70 410.5 85 73.464 427.8
landscape photo 85 141.3 95 63.167 86.1
market photo 70 71.6 90 71.456 75.6
snow photo 70 464.5 90 72.465 497.9
street-sign photo 70 519.2 85 74.682 536.7
sunset photo 80 180.8 90 66.4 145.0
texture-rock photo 60 384.7 80 76.391 471.3
waterfall photo 60 528.6 85 75.262 608.3
guide screenshot 85 65.4 >95 67.192 49.5
home screenshot 95 77.5 >95 65.63 36.3
methodology screenshot 85 43.6 >95 67.143 32.6
srcset-tool screenshot 80 33.5 >95 69.491 29.5
chart-ui synthetic 30 12.0 70 81.471 15.7
flat-illustration synthetic 30 12.0 70 81.861 17.2
gradient synthetic 40 8.2 90 75.635 10.6
line-art synthetic 30 156.6 70 81.625 222.3
  • Photographs needed anything from quality 60 to 85. The most common answer was 80 (6 of 20 photos). At the popular default of 75, the median photo scored 70.1, just on the line, with a range from 62.4 (the dunes, whose smooth sand gradients band) to 76.4 (the stone texture, where noise hides artefacts).
  • Screenshots needed quality 80 to 95. At quality 75 none of the four reached 70; the median score was 67.2. Small anti-aliased text is where lossy WebP’s colour subsampling and smoothing show first.
  • Synthetic flat graphics reached 70 at quality 30 or 40, the bottom of our ladder. Flat areas compress almost perfectly; at quality 75 their median score was already 81.5.

At a stricter target the categories split further

With a target of SSIMULACRA2 80, photos mostly needed quality 90 (11 of 20); three needed 95 and one, the duck feather macro, never got there within the ladder. None of the four screenshots reached 80 even at quality 95. For screenshots that must stay crisp, lossy WebP is the wrong tool. Lossless WebP or PNG is, and we measured that trade-off in a separate screenshot test.

What the choice costs in bytes

Line chart: photo file size climbs steeply above quality 80, while screenshots and synthetic graphics stay small at every setting
Median file size per WebP quality setting for each image type. Chart generated from the linked CSV.

For photos, going from quality 75 to 90 roughly doubled the median file (150.8 KB to 299.4 KB) to lift the median score from 70.1 to 82.3. For synthetic graphics, the same step cost only 8 KB (16.5 KB to 24.5 KB). The expensive mistake is not using a quality that is slightly too low for graphics. It is using a quality that is too high for every photograph “to be safe”.

Practical settings from this run

Image type Starting WebP quality Why
Photographs, general 75–80 Median photo reached 70 at 75; 80 covered 16 of 20
Photos with smooth gradients (sky, sand, water reflections) 85 The dunes, beach, lake and feather photos needed 85
Busy, detailed photos (stone texture, waterfall, street scenes, interiors) 60–70 Texture masks artefacts; 60 or 70 was enough for these six
Flat illustrations, charts, diagrams Lossless, or lossy 50–70 Reached 70 at 30–40; files stay tiny either way
Screenshots with text Lossless WebP (or lossy ≥ 90) Lossy never reached 80; needed 80–95 to reach 70

If your pipeline can only use one number, 80 is the most defensible single setting for photos in this run, but a per-category setting is better, and a per-image target (encode until a metric threshold is reached) is better still.

Repeat this test on your own images

To pick a setting for your own site, choose three or four images of each type you publish, encode each at a few WebP qualities, and score them against the originals:

for q in 60 70 75 80 85 90; do
  cwebp -q $q -m 4 shot.png -o shot-q$q.webp
  dwebp shot-q$q.webp -o d.png && ssimulacra2 shot.png d.png
done

The lowest setting that clears your target for every image of a type is that type’s setting. Our scripts run_codecs.py and analyze_codecs.py do the same for the 28 images used here.

Limitations

These are results for libwebp 1.6.0 at effort 4 with default settings. The “sharp YUV” conversion option improved screenshot scores considerably, which we measured separately in our chroma subsampling test. SSIMULACRA2 thresholds are a proxy for human judgement, and our screenshots come from a dark-themed site with light text, which is harder than black text on white.

Data and files

Download webp-by-type.csv (28 rows, 1.6 KB) · Download codecs.csv (1036 rows, 105.3 KB) · Method: testing methodology. Photos: image credits.