PNGSquash

Compress PNG, JPEG and WebP — free, in your browser.

Drop images here

or click to browse

Compressed on this device. Your images are never uploaded.

How it works

For each image the compressor searches palette sizes from 2 to 256 colours, with and without dithering, scores every candidate with SSIMULACRA2 — a perceptual metric where 90 is indistinguishable from the original at 1:1 — and keeps the smallest file that still looks right. There is no quality slider, because picking the quality is the part you should not have to do.

It runs as WebAssembly in a worker thread, using every core of your machine. That is why there is no upload step and no file limit: the work happens on hardware you already paid for.

Against some other compressors

180 PNGs — icons, UI screenshots, illustrations, photos, cut-outs, 3D renders — scored with SSIMULACRA2. Each other tool got its best of ten settings per image, picked after the fact. Figures are from the 71 images held out of tuning.

CompressorPoints vs TinyPNGImages reached
This site+1.767 / 71
TinyPNG071 / 71
pngquant0.053 / 71
quantizr−0.139 / 71
ImageMagick−11.33 / 71
Pillow−16.84 / 71

At the same quality, the median image comes out 8–12% smaller than TinyPNG's PNG and 12–14% smaller than its JPEG. Benchmarks and source: pngdeer, MIT licensed.

Questions

Is there a file limit? 40 megapixels per image, and 30 megapixels in total for an animated PNG. That ceiling is the browser's memory, not a quota. Everything else is unlimited and free.

Where do my images go? Nowhere. There is no server that receives them; the page has no upload code. You can watch it work with the network panel open.

What comes out? PNG stays PNG, JPEG stays JPEG, and animated PNG keeps its frames and timing. The WebP page turns either into WebP instead.

Is it really the same as the command line tool? Yes — the same Rust code compiled twice, which is why the browser and the CLI write identical bytes.