Benchmark · measured 5 and 9 October 2026
Image compressor benchmark: Smol’s AVIF was 22 to 26% smaller than JPEG at the same quality
This image compressor benchmark ran Smol 1.0.35, ImageOptim, Apple’s sips, Squoosh and Caesium on the 24 Kodak test images, each tuned to the same SSIMULACRA2 quality score. Smol’s AVIF needed 15 to 21% fewer bytes than Apple’s AVIF encoder and 20 to 22% fewer than ImageOptim’s lossy JPEG. It was not the fastest tool, it has no lossless mode, and it lost several comparisons, listed below.
Image compressor benchmark results at a glance
| Comparison | Result |
|---|---|
| Smol AVIF against Smol JPEG | AVIF 22 to 26% smaller |
| Smol AVIF against Smol WebP | AVIF 21 to 24% smaller |
| Smol WebP against Smol JPEG | WebP from 3% larger to 6% smaller |
| Smol AVIF against Apple sips AVIF | Smol 15 to 21% smaller |
| Smol AVIF against Squoosh AVIF | Smol 15.2% smaller by SSIMULACRA2; Squoosh 4.2% smaller by SSIM |
| Smol JPEG and WebP against Squoosh | Level: the same bytes for the same score |
| Smol AVIF against ImageOptim lossy JPEG | Smol 20 to 22% smaller |
| Smol JPEG against ImageOptim lossy JPEG | Level: Smol 1% smaller to ImageOptim 4% smaller |
| Speed | A sips loop was about 13 times faster; ImageOptim about 8 times faster on JPEGs |
| Lossless | ImageOptim has one; Smol does not |
Smol made this benchmark, so do not take our word for it: the raw data and scripts are on this page, the test images are public, and every tool except Smol is free.
Bytes needed for the same quality, all 24 Kodak images
Shorter is better. Every encoder tuned to the same SSIMULACRA2 score of 70 on each image.
- AVIF
- WebP
- JPEG
| Format and tool | Total bytes |
|---|---|
| AVIF · Smol | 922 KB |
| AVIF · sips (Apple) | 1,161 KB |
| JPEG · Smol | 1,189 KB |
| WebP · Smol | 1,220 KB |
| JPEG · sips (Apple) | 1,327 KB |
| JPEG · Caesium | 1,349 KB |
AVIF vs WebP vs JPEG: which format is smallest at the same quality?
AVIF, by a wide margin. Smol’s AVIF was 21 to 24% smaller than its WebP and 22 to 26% smaller than its JPEG at the same score. WebP against JPEG was close: from 3% larger to 6% smaller, depending on the score.
| Comparison | Score 70 | Score 75 | Score 80 |
|---|---|---|---|
| AVIF against JPEG | AVIF 22.5% smaller | AVIF 24.1% smaller | AVIF 26.4% smaller |
| AVIF against WebP | AVIF 24.5% smaller | AVIF 23.2% smaller | AVIF 21.4% smaller |
| WebP against JPEG | WebP 2.6% larger | WebP 1.2% smaller | WebP 6.3% smaller |
These are one encoder’s three formats on film scans. Browser support, editing apps and upload limits decide which format you can ship; the full encoder-by-encoder table is below.
How many bytes does each image compressor need for the same quality?
A compressor can always make a smaller file by keeping less of the picture, so file size alone says nothing. Each encoder was run at several settings on every image, each output was scored against its original, and we then worked out how many bytes each encoder needs to reach the same score. Totals are bytes for all 24 images; the percentage is the gap to Smol’s AVIF.
| Encoder | Score 70 | Score 75 | Score 80 | Score 85 |
|---|---|---|---|---|
| Smol, AVIF | 921,550 | 1,141,216 | 1,491,137 | n/a (2 of 24) |
| sips (Apple), AVIF | 1,160,621 (+26%) | 1,398,567 (+23%) | 1,760,869 (+18%) | n/a (12 of 24) |
| Smol, JPEG | 1,188,611 (+29%) | 1,503,919 (+32%) | 2,026,085 (+36%) | 3,040,283 |
| Smol, WebP | 1,219,939 (+32%) | 1,485,640 (+30%) | 1,897,776 (+27%) | n/a (19 of 24) |
| Caesium, WebP | 1,218,859 (+32%) | 1,473,826 (+29%) | 1,875,732 (+26%) | 2,599,531 |
| sips (Apple), JPEG | 1,326,624 (+44%) | 1,619,680 (+42%) | 2,069,111 (+39%) | 2,864,112 |
| Caesium, JPEG | 1,348,596 (+46%) | n/a (2 of 24) | n/a (24 of 24) | n/a (24 of 24) |
SSIMULACRA2 is a perceptual quality metric from Cloudinary that ships with the JPEG XL reference software; its authors’ README describes a score of 70 as high quality, 80 as very high quality and 90 as visually lossless. “n/a (2 of 24)” means none of the settings we ran reached that score on 2 of the 24 images, so no fair total exists. Caesium’s WebP is level with Smol’s; its totals differ slightly because we ran it at more settings, which gives the interpolation more points and a wider range.
The older SSIM metric tells a flatter story. By SSIM the two AVIF encoders are 2% apart, and Apple’s JPEG encoder beats Smol’s:
| Encoder | Score 0.95 | Score 0.96 |
|---|---|---|
| Smol, AVIF | 1,292,833 | 1,579,742 |
| sips (Apple), AVIF | 1,318,673 (+2%) | 1,611,629 (+2%) |
| Smol, JPEG | 2,185,464 (+69%) | 2,771,104 (+75%) |
| Smol, WebP | 1,499,206 (+16%) | n/a (2 of 24) |
| Caesium, WebP | 1,488,156 (+15%) | 1,806,224 (+14%) |
| sips (Apple), JPEG | 2,102,574 (+63%) | 2,540,271 (+61%) |
| Caesium, JPEG | n/a (23 of 24) | n/a (23 of 24) |
Smol vs Squoosh: which makes smaller files?
Squoosh is the free reference most people compare against, and for two of three formats there is nothing to separate them: on JPEG and on WebP the two need the same bytes for the same score. Smol is not ahead of Squoosh on either. What it adds is a whole folder at once.
AVIF differs. We ran Squoosh’s AVIF at its default setting only, then found the bytes Smol’s AVIF needs to match each file’s score:
| Matched on | Images comparable | Squoosh AVIF | Smol AVIF | Result |
|---|---|---|---|---|
| SSIMULACRA2 | 17 of 24 | 666,265 | 565,101 | Smol 15.2% smaller, on 17 of 17 |
| SSIM | 23 of 24 | 779,699 | 813,952 | Squoosh 4.2% smaller, on 23 of 23 |
The two metrics disagree, and we report both. An image is “comparable” when Squoosh’s score falls inside the range of settings we ran for Smol.
Smol vs ImageOptim: which makes smaller files?
Added 9 October 2026. ImageOptim is the free Mac optimizer most lists still recommend first, so it gets its own test. It keeps whatever format it is given and writes neither AVIF nor WebP, so we ran version 1.9.3 from two starting points: the 24 original PNGs (15,394,305 bytes) and the same images saved as JPEG with sips at quality 90 (4,082,179 bytes). Its default is lossless; its lossy mode is a switch in Preferences with quality 80 as the default. Scores are against the original PNG in every case.
| Tool and setting | Total bytes | Saved | Mean score | Time |
|---|---|---|---|---|
| JPEG in: ImageOptim, default (lossless) | 3,718,374 | 8.9% | Unchanged | 0.9 s |
| JPEG in: ImageOptim, lossy on at 80 | 1,477,762 | 63.8% | 74.3 | 0.9 s |
| JPEG in: Smol, default (JPEG at 75) | 1,252,716 | 69.3% | 71.1 | 7.1 s |
| JPEG in: Smol, AVIF at 65 | 1,229,671 | 69.9% | 75.6 | 7.2 s |
| PNG in: ImageOptim, default (lossless) | 14,727,205 | 4.3% | Unchanged | 21.4 s |
| PNG in: ImageOptim, lossy on at 80 | 5,470,861 | 64.5% | 81.8 | 16.9 s |
| PNG in: Smol, default (PNG at 75) | 4,745,994 | 69.2% | 77.6 | 9.5 s |
| PNG in: Smol, AVIF at 65 | 1,218,465 | 92.1% | 76.6 | 8.7 s |
“Unchanged” means lossless: a pixel comparison found no differences in any of the 48 files. Left at its defaults ImageOptim took 8.9% off the JPEGs and 4.3% off the PNGs. Times are the mean of three runs, listed in the README.
Fixed settings do not say which tool is more efficient, so here is the same-quality comparison, with ImageOptim’s lossy mode on and both tools run at several settings:
| Input and score | Smol output | Images comparable | ImageOptim | Smol | Result |
|---|---|---|---|---|---|
| JPEG in, score 65 | Smol AVIF | 22 of 24 | 967,767 | 753,881 | Smol 22.1% smaller |
| JPEG in, score 70 | Smol AVIF | 24 of 24 | 1,239,182 | 961,632 | Smol 22.4% smaller |
| JPEG in, score 75 | Smol AVIF | 24 of 24 | 1,557,542 | 1,210,605 | Smol 22.3% smaller |
| JPEG in, score 80 | Smol AVIF | 21 of 24 | 1,790,690 | 1,425,458 | Smol 20.4% smaller |
| JPEG in, score 65 | Smol JPEG | 22 of 24 | 967,767 | 967,330 | Level |
| JPEG in, score 70 | Smol JPEG | 24 of 24 | 1,239,182 | 1,222,985 | Smol 1.3% smaller |
| JPEG in, score 75 | Smol JPEG | 24 of 24 | 1,557,542 | 1,573,959 | ImageOptim 1.0% smaller |
| JPEG in, score 80 | Smol JPEG | 21 of 24 | 1,790,690 | 1,863,615 | ImageOptim 3.9% smaller |
| JPEG in, score 65 | Smol WebP | 15 of 24 | 587,773 | 623,163 | ImageOptim 5.7% smaller |
| JPEG in, score 70 | Smol WebP | 24 of 24 | 1,239,182 | 1,291,763 | ImageOptim 4.1% smaller |
| JPEG in, score 75 | Smol WebP | 24 of 24 | 1,557,542 | 1,633,849 | ImageOptim 4.7% smaller |
| JPEG in, score 80 | Smol WebP | 17 of 24 | 1,533,440 | 1,611,325 | ImageOptim 4.8% smaller |
| PNG in, score 75 | Smol AVIF | 14 of 24 | 2,403,961 | 575,635 | Smol 76.1% smaller |
| PNG in, score 80 | Smol AVIF | 20 of 24 | 4,351,547 | 1,254,773 | Smol 71.2% smaller |
| PNG in, score 75 | Smol JPEG | 14 of 24 | 2,403,961 | 759,960 | Smol 68.4% smaller |
| PNG in, score 80 | Smol JPEG | 20 of 24 | 4,351,547 | 1,695,522 | Smol 61.0% smaller |
| PNG in, score 75 | Smol PNG | 13 of 24 | 2,237,955 | 2,248,093 | ImageOptim 0.5% smaller |
| PNG in, score 80 | Smol PNG | 14 of 24 | 2,912,346 | 2,900,592 | Smol 0.4% smaller |
Kept in the same format, the two are level: JPEG to JPEG runs from Smol 1% smaller to ImageOptim 4% smaller, and lossy PNG to lossy PNG is within 0.5%. The gap is the format. Smol’s AVIF needed 20 to 22% fewer bytes than ImageOptim’s JPEG and 71 to 76% fewer than its PNG, and ImageOptim cannot write AVIF. By SSIM the AVIF gap from JPEG is 34 to 35%, and JPEG to JPEG tilts to ImageOptim, whose files are 1 to 8% smaller. Smol’s WebP was 4 to 6% larger than ImageOptim’s JPEG at the same SSIMULACRA2 score.
On speed the result splits. ImageOptim finished the JPEGs about 8 times faster than Smol. On PNGs, Smol at the setting that matches ImageOptim’s lossy output in size and score (PNG at 90, 5,444,974 bytes at 81.7) took about 10.4 seconds, which is 1.6 times faster than ImageOptim’s lossy mode. ImageOptim’s own pull request #466, merged in July 2026 and not yet released, describes the shipping app pinning its work to Apple Silicon efficiency cores; we tested the released build and not the fix. What this means when choosing between the two is on the ImageOptim alternative page.
Is Smol faster than sips, Caesium or ImageOptim?
Wall-clock time to convert all 24 PNGs to one format, on an M2 Pro.
| Tool | Job | Runs (seconds) | Mean |
|---|---|---|---|
| Smol | JPEG, quality 75 | 7.2, 7.2, 7.5 | 7.3 s |
| Smol | JPEG, quality 80 | 7.3, 7.4 | 7.3 s |
| Smol | AVIF, quality 65 | 8.2, 7.4 | 7.8 s |
| Smol | WebP, quality 82 | 6.7, 6.5 | 6.6 s |
| sips | JPEG, formatOptions 50, shell loop | 0.63, 0.54, 0.54 | 0.57 s |
| caesiumclt | JPEG, quality 90 | 0.21, 0.19, 0.19 | 0.20 s |
Smol is the slowest of the three by a wide margin, and we did not measure where the time goes. Squoosh is not in this table because it has no batch mode. ImageOptim’s times are in its own section, because it was run on a different day and on two kinds of input.
Does Smol have a lossless mode?
The 24 source PNGs are 15,394,305 bytes. Smol has no lossless mode, so it is absent here. ImageOptim’s row is from the 9 October test.
| Tool | Total bytes | Saved |
|---|---|---|
| Caesium, lossless PNG | 14,709,218 | 4.5% |
| Squoosh, OxiPNG default | 14,768,017 | 4.1% |
| ImageOptim 1.9.3, default | 14,727,205 | 4.3% |
Where Smol did not win
- Speed. A sips loop was about 13 times faster and caesiumclt about 37 times faster.
- JPEG at high quality. At a SSIMULACRA2 score of 85, Apple’s JPEG encoder needed 5.8% fewer bytes than Smol’s. By SSIM, Apple’s JPEG was smaller at both scores we matched.
- AVIF, by SSIM. Squoosh’s default AVIF was 4.2% smaller than Smol’s at the same SSIM, on every comparable image.
- Lossless. Smol always re-encodes. For pixel-identical output use ImageOptim, OxiPNG or Caesium’s lossless mode.
- JPEG and WebP against Squoosh. A tie, not a win: the same bytes for the same score.
- JPEG speed against ImageOptim. ImageOptim processed 24 JPEGs in about 0.9 seconds; Smol took about 7.1.
- Same format against ImageOptim. By SSIMULACRA2, JPEG to JPEG and PNG to PNG are ties, with ImageOptim’s JPEG 4% smaller at a score of 80, and Smol’s WebP was 4 to 6% larger than ImageOptim’s JPEG at the same score. By SSIM, ImageOptim’s JPEG was 1 to 8% smaller than Smol’s.
Method
- Images. The 24 images of the Kodak Lossless True Color Image Suite, 768 × 512 pixels each, 15,394,305 bytes of PNG in total. They are public, so anyone can repeat this.
- Machine. Apple M2 Pro, 16 GB, macOS 27.0.
- Tools. Smol 1.0.35 driven through its MCP server; sips-316 (built into macOS); caesiumclt 1.5.0; squoosh.app in headless Chrome 154; Zipic 1.10.2 on its free tier, which allowed three images and no AVIF.
- Settings. Each encoder at four to ten quality settings per format, except Squoosh’s AVIF (default only). 1,335 output files in all.
- Scoring. Every output against its original PNG with SSIMULACRA2 (libjxl 0.11.2) and SSIM (11-tap Gaussian window, sigma 1.5, mean of the red, green and blue channels).
- Matching. For each image and encoder, the bytes needed to hit a target score are interpolated in log-bytes between the two nearest settings measured, then summed over the 24 images. If any image cannot reach the score, no total is reported.
- Timing. Wall-clock seconds for the whole folder, two or three runs each, all listed above.
- ImageOptim, 9 October 2026. ImageOptim 1.9.3 run from its command-line binary on copies of the files, on the same machine under macOS 27.0.1, at its defaults and with lossy mode on at JPEG quality 60, 70, 80 and 90 and PNG quality 60, 80 and 90. Smol 1.0.35 was run on the same inputs; its JPEG, WebP and AVIF curves from the PNG originals are the 5 October rows, made with the same version. 696 more output files, scored and matched the same way, over the images both tools reach at each score. ImageOptim’s times include launching the app; Smol’s run from the job being accepted, with the app already open.
Limits of this test
- Twenty-four small film scans are not your photo library. Phone photos, screenshots and product shots on white will give different numbers.
- A quality metric is a model of what people see, not people. SSIMULACRA2 and SSIM disagree in places, which is why both are shown.
- One machine, one version of each tool, one day. Smol’s JPEG output changed between versions 1.0.34 and 1.0.35, and other tools change too.
- Squoosh’s AVIF was measured at one setting and Zipic on three images, so those comparisons are narrower than the rest.
- ImageOptim was tested four days after the other tools, and its JPEG inputs were made by us from the PNG originals. A camera’s own JPEGs will behave differently in detail.
- We make one of the products tested. The data and scripts below exist so the result does not depend on trusting us.
Raw data and scripts
- results.json and results.csv: one row per scored file (image, tool, format, setting, bytes, SSIM, SSIMULACRA2), 1,335 rows.
- ssim_lib.py, harvest2.py and match2.py: the scoring and matching code.
- smol-run.mjs and squoosh.mjs: how Smol and Squoosh were driven. README.txt explains the rest.
- ImageOptim test: results.json and results.csv (696 rows, with a column for the input format), io-run.sh, smol-run2.mjs, harvest-io.py, match-io.py and a README.
For what the numbers mean when you are choosing a tool, including four compressors we assessed without measuring, read the best image compressors for Mac. Found a mistake? Tell us and we will correct it.
What to read next
- ImageOptim alternative for Mac: when to switch, and when to keep ImageOptim.
- The best image compressors for Mac: what these numbers mean when you choose a tool.
- AVIF converter for Mac and compressing images for the web.
- Image file size and page speed, image optimization for web agencies and client delivery for photographers.
Questions this answers
Is Smol the best image compressor for Mac?
It depends on what you measure. For the smallest file at a given quality, Smol's AVIF output was the smallest we measured: 15 to 21% fewer bytes than Apple's AVIF encoder, 22 to 26% fewer than the best JPEG encoder and 20 to 22% fewer than ImageOptim's lossy JPEG, at the same SSIMULACRA2 score on the 24 Kodak images. For raw speed a sips or Caesium script is more than ten times faster, and for lossless optimization ImageOptim is the right tool, because Smol has no lossless mode.
Is Smol better than ImageOptim?
For file size at the same quality, yes, because Smol writes AVIF and ImageOptim does not. Measured on 9 October 2026 with ImageOptim 1.9.3 and its lossy mode on, Smol's AVIF needed 20 to 22% fewer bytes than ImageOptim's JPEG output and 71 to 76% fewer than its PNG output at the same SSIMULACRA2 score. Kept in the same format the two are level. ImageOptim was about 8 times faster on JPEGs, and it has a lossless mode, which Smol does not.
Is Smol better than Squoosh?
For JPEG and WebP there is nothing between them: the two need the same bytes for the same quality score. The difference is that Smol does a whole folder at once and Squoosh does one image at a time. For AVIF, Smol's files were 15.2% smaller than Squoosh's default AVIF at the same SSIMULACRA2 score, and 4.4% larger at the same SSIM.
How much smaller is AVIF than JPEG at the same quality?
In this test, 22 to 26% smaller: Smol's AVIF against the best JPEG output we measured, at SSIMULACRA2 scores of 70, 75 and 80, summed over 24 images.
Is Smol faster than sips?
No. Converting the 24 test images took Smol about 7.3 seconds, a sips shell loop 0.6 seconds and caesiumclt 0.2 seconds on the same M2 Pro.
AVIF vs WebP vs JPEG: which gives the smallest file at the same quality?
AVIF. At SSIMULACRA2 scores of 70, 75 and 80, Smol's AVIF was 21 to 24% smaller than Smol's WebP and 22 to 26% smaller than its JPEG. WebP against JPEG was close, from 3% larger to 6% smaller depending on the score. Totals are for 24 Kodak images.
What is the best AVIF encoder?
Of the three we measured, Smol's was smallest by SSIMULACRA2: 15 to 21% fewer bytes than Apple's sips and 15.2% fewer than Squoosh's default. By SSIM the result flips against Squoosh, whose files were 4.2% smaller, and the Apple gap shrinks to 2%. Pick the metric you trust.
ImageOptim vs Squoosh: which compresses better?
We did not run them against each other. Each was measured against Smol. Squoosh's JPEG and WebP need the same bytes as Smol's. ImageOptim's lossy JPEG is level with Smol's JPEG, but it writes neither AVIF nor WebP. Squoosh writes AVIF but handles one image at a time, and ImageOptim handles a folder.