Softwarepngdeerimage-compressionpngtinypngopen-sourceweb-development
pngdeer, a free open-source PNG compressor, makes files 8 to 12% smaller than TinyPNG in its maker's 180-image test
HeyDeer released pngdeer, an MIT-licensed Rust tool that picks a PNG's palette and quality on its own, runs in the browser without uploading anything, and beat TinyPNG and eight open-source compressors on the maker's own benchmark.

Most PNG shrinkers hand you a slider and let you guess. pngdeer does the guessing itself. For each image it “searches palette sizes from 2 to 256 colors, with and without dithering, scores each result with a perceptual metric, and keeps the smallest file that still looks right,” according to the project’s README.
The quality bar it aims for is “about what TinyPNG would give the image, never above 90 on SSIMULACRA2’s scale.” SSIMULACRA2 is a perceptual metric from Jon Sneyers at Cloudinary, and its own docs define 90 as “visually lossless,” meaning the difference isn’t noticeable to an average viewer flipping between the two at 1. So the target is “you can’t tell,” capped there, and often a little below when TinyPNG itself would land lower.
The browser version runs as WebAssembly on your machine. “Nothing is uploaded: images are compressed on your device,” the README says, and the command line on macOS and Linux runs the same Rust code and writes identical files. The browser handles images up to 40 megapixels. On a Mac it’s brew install heydeer/tap/pngdeer.
The benchmark
HeyDeer ran pngdeer, TinyPNG and eight open-source quantizers on 180 PNGs: icons, UI screenshots, illustrations, photos, cut-outs and 3D renders. TinyPNG is the yardstick at zero. “Points” is how many SSIMULACRA2 points better or worse each tool looks when its file is the same size as TinyPNG’s. “Reaches” counts the images where a tool could hit TinyPNG’s quality at all.
Each cell shows the 71-image held-out set first, then the 109-image set pngdeer was tuned on.
| Compressor | Points vs. TinyPNG | Images where it matches TinyPNG’s quality |
|---|---|---|
| pngdeer | +1.7 / +2.0 | 67 / 106 |
| TinyPNG | 0 | 71 / 109 |
| pngquant | 0.0 / +0.3 | 53 / 87 |
| quantizr | −0.1 / −1.0 | 39 / 53 |
| exoquant | −3.7 / −5.1 | 19 / 24 |
| NeuQuant | −6.5 / −9.8 | 4 / 5 |
| FFmpeg | −7.0 / −8.8 | 16 / 15 |
| quantette | −7.6 / −9.6 | 18 / 21 |
| ImageMagick | −11.3 / −14.5 | 3 / 8 |
| Pillow | −16.8 / −19.5 | 4 / 4 |
Source: pngdeer’s README, maker’s own benchmark. TinyPNG ran through its API in October 2026.
Read the right-hand column too. pngdeer couldn’t reach TinyPNG’s quality on 4 of the 71 held-out images and 3 of the 109 tuning images, so “smaller” is the median, not every file. pngquant sits about even with TinyPNG on points and can’t match its quality on 18 of the 71 held-out images, which is the gap pngdeer closes.
The held-out set is the part that makes the numbers worth reading. The README says pngdeer’s settings were tuned on 109 images, and “the other 71 were collected afterwards and never used for tuning.” The tool did better on the images it had never seen, 12% smaller versus 8%. The bench/ folder reruns everything, though a rerun covers 155 of the 180 images because some website screenshots in the set “aren’t ours to share.”
pngdeer also writes WebP if you give the output file a .webp name. On 120 images, it needed 95.0% of TinyPNG’s WebP file size on the median image to match TinyPNG’s quality. Animated PNGs stay animated, with every frame on one palette and the timing kept.
Who made it matters here. HeyDeer’s main business is AI code review, sold with the line “HeyDeer finds 78% more issues than GitHub Copilot on the same pull requests.” pngdeer is its open-source side project, the GitHub repo is days old, and the benchmark in the table is HeyDeer’s own, not an independent test.
TinyPNG ran through its API this month, so the comparison is fresh. TinyPNG can retune its encoder any time it likes, so the open question is whether pngdeer’s lead survives the next time someone reruns bench/.