Web assets, measured

Every guide answers with a percentage.

That percentage describes one kind of image. A photograph, a screenshot and a logo do not behave alike — and the gap between them is far wider than the gap between the formats everyone argues about. These tools measure the file you actually have.

  • Nothing leaves your browser
  • Measured, not quoted
  • Free, no account
The same question, three files

Best format for each, at quality 75

A photograph277 kB → 164 kB

WEBP saves 41%

A UI screenshot179 kB → 24 kB

WEBP saves 86%

A flat graphic68 kB → 11 kB

WEBP saves 84%

Four sources. Four answers.

Asked when a small image should be inlined as base64 rather than requested as a file, four guides give four different thresholds. Every one of them is stated as though it were the answer. None of them knows your file.

  • 4 kBone source
  • 5 kBone source
  • 10 kBone source
  • 20 kBone source

The underlying factors are not in dispute — request overhead, the 33% base64 surcharge, the lost cache entry. No tool puts them together into a sum for the file in front of you.

Measured here, 2026-09-03

The picture matters more than the format.

Three files, all encoded at quality 75 with the same library. Between the best and worst result the spread runs from 23% to 86% — and it is the kind of picture, not the format, that decides where a file lands in that range.

Hidden Lake, a mountain lake below forested slopes — a continuous-tone photograph

A photograph

Continuous tone, no hard edges, no flat areas.

jpg
180 kB−35%
webp
164 kB−41%
avif
214 kB−23%

Original 277 kB

A screenshot of this site's own image tool, showing flat panels, hard edges and text

A UI screenshot

Flat fills, hard edges, text — the opposite of a photograph.

jpg
44 kB−75%
webp
24 kB−86%
avif
31 kB−82%

Original 179 kB

A flat graphic: the assetsize wordmark on a plain field, few colours and crisp type

A flat graphic

Few colours, large uniform areas, crisp type.

jpg
24 kB−65%
webp
11 kB−84%
avif
12 kB−83%

Original 68 kB

One caveat the page owes you, because it is the same one the tool makes: a single quality number means something different in each format, so these three encodes are three slightly different pictures, not one picture at one quality. That is precisely why a decision needs the size-over-quality curve rather than a single row — and why the honest comparison is between your options on your file. Encoded with ImageMagick 7.1.2 — libjpeg, libwebp, libheif/libaom.

What the tool does

  1. 1

    You drop a file in

    It is read by the page you are already on. There is no endpoint on this site that would accept an upload, which is a stronger guarantee than a promise not to keep one.

  2. 2

    Three encoders run locally

    libwebp and MozJPEG answer in about a second. libavif is 3.3 MB of WebAssembly and arrives behind them, so two of the three answers are on screen while the third is still compiling.

  3. 3

    You get a verdict

    Not just the smallest result: what the change costs in encoding time and browser coverage, and whether the saving is worth a change to your build at all.

Why you can check this

Nothing here asks to be believed.

Encoders
libavif, libwebp and MozJPEG, compiled to WebAssembly by jSquash — the same libraries the reference implementations use.
Where it runs
In this tab. The Content-Security-Policy on this site allows exactly one external host, and it is not an upload target.
The numbers above
Produced by design/assets/samples/measure.sh on 2026-09-03 and read from a JSON file at build time, so they cannot drift away from what was measured.
What is still missing
The size-over-quality curve, which is what turns three sizes into an actual verdict. It is the next milestone, and it is not pretended to exist here.

Measure the file you actually have.

One tool today. Font subsetting, the base64 threshold and srcset breakpoints are planned — and none will be listed before it works.