✓ EXIF, GPS and all other metadata are removed from the output.
Drop images here
or click to browse — PNG, JPEG, WebP, GIF, HEIC, AVIF, SVG — you can also paste images (Ctrl+V) anywhere on this page
Turn a lossless PNG into a much smaller WebP that still carries every transparent pixel — and every frame, if the PNG was animated.
Your files never leave your browser — all processing is local.
✓ EXIF, GPS and all other metadata are removed from the output.
Drop images here
or click to browse — PNG, JPEG, WebP, GIF, HEIC, AVIF, SVG — you can also paste images (Ctrl+V) anywhere on this page
Two of the things people expect to lose here survive. WebP carries a full 8-bit alpha channel, so transparent pixels are never flattened onto a background color the way the JPG route forces. An animated PNG survives too: the converter opens the file with the browser's ImageDecoder, and when it finds more than one frame and WebP is the target, it re-encodes each frame and assembles an animated WebP with the original frame delays and loop count. If that assembly fails it falls back to a single static frame and says so in a warning rather than silently dropping the motion.
What does go is everything outside the pixels. The source is decoded, drawn onto a canvas and encoded again, so ancillary chunks are not carried across: an embedded ICC profile, a gAMA or cHRM description of the source color space, text chunks, and any EXIF block a camera or an editor attached. A wide-gamut file tagged Display P3 therefore arrives as untagged pixel values, and a viewer will read them as sRGB. Bit depth is the other casualty. PNG can store 16 bits per channel; the canvas the converter draws into is 8-bit RGBA, so a 48-bit master is quantized before the encoder ever sees it, and that precision cannot be recovered from the result.
The last loss is optional rather than structural. At the default setting the output is lossy, so fine texture, dithered gradients and the crisp one-pixel edges typical of screenshots and UI exports are approximated. The lossless toggle in the settings above switches to the WASM encoder and keeps every pixel exactly, usually still landing under the original size for flat graphics — the choice is yours, and it is the only item on this list you can turn off.
On 2026-09-12, apps/web/scripts/measurePairs.ts took a 1280 × 854 PNG produced from the commit-pinned libheif example photo and written with "optimize (oxipng)" on: 1,689,485 bytes. This tool leaves that option off by default, so an unoptimized PNG of the same picture would start larger. Encoding it at quality 85 with @jsquash/webp gave 319,834 bytes, about 81% smaller for this one photographic sample. Treat that as a data point, not a rule. A photograph is the case where lossy WebP wins by the largest margin; a flat logo, a screenshot with large uniform areas, or a source that was already palette-reduced compresses well on its own, and the gap narrows sharply — occasionally to nothing, if you also switch the target to lossless.
Keep the original when it is the master you edit and re-export from, because each lossy pass at quality 85 is a fresh approximation and they accumulate. Keep it for anything that must stay pixel-exact for comparison or automated screenshot testing, unless you turn lossless on. Keep it when the destination sits outside the modern web: email clients are still uneven, some print and prepress workflows reject the format outright, and favicon and app-icon pipelines usually want PNG or ICO. A 16-bit file used as a height map, a depth pass or a scientific image should not be routed through here at all — the 8-bit canvas step is the problem, not the encoder. For the ordinary case, a photo or a screenshot headed for a web page, this is one of the cheapest size wins available.
Conversion happens entirely in your browser — no upload, no queue, no watermark. Drop in as many files as you like and download them individually or as a zip.
Yes. WebP stores a full 8-bit alpha channel, so semi-transparent pixels, soft shadows and antialiased edges come through unchanged, and no background color is applied anywhere. That is the main reason to pick this target over JPG when the source has anything transparent in it.
It will. The converter detects the extra frames and builds an animated WebP with the original delays and loop count instead of keeping only the first one. If that encode fails for any reason it falls back to a single static frame and shows a warning, so you always know which of the two you received.
No. In the measured photographic sample it was about 81% smaller, but a flat-color graphic, a small icon or an already palette-reduced source can land close to the original, and the lossless mode occasionally ends up larger. Compare the size readout after conversion instead of assuming the win.
No. Conversion happens inside your browser using the canvas API and a Web Worker — files never leave your device. There is no upload step, no queue and no file size limit beyond your machine's memory.
No — and that's a feature. Re-encoding through the canvas strips all metadata: GPS location, camera model, timestamps and color profiles. The output contains pixels only, which is usually what you want before sharing an image publicly.
Yes. Drop or paste any number of files; each is converted in the background with its own progress and download button, and you can grab everything at once as a .zip archive.
It depends on the target. The converter always decodes to raw pixels and re-encodes, whichever formats are involved, which is also how metadata gets stripped. For lossless targets (PNG, and GIF within its 256-color limit) the pixels stay identical to what was decoded; for JPEG, WebP and AVIF the quality slider controls the trade-off, and converting a file that is already lossy adds one more generation of loss.