100% client-side. Zero uploads. Everything stays in your RAM.
A private, local-first batch image compressor that processes everything in your browser. No sketchy online converter websites — just drag, drop, compress, and download as ZIP.
- Batch processing — Drop multiple images at once (or add more later). Process them all with one click.
- Gallery grid — See all loaded images with thumbnails, sizes, and per-card status.
- Drag & drop — Drop PNG, JPEG, WebP, AVIF, BMP, or GIF images onto the zone (or click to browse, multi-select supported)
- Quality slider — 1% to 100% with live file size comparison per image
- Format conversion — Convert between JPEG, PNG, WebP, AVIF, and BMP on the fly
- Broad input support — Accepts PNG, JPEG, WebP, AVIF, BMP, and GIF (GIF decodes the first frame)
- Resize controls — Set max width/height with aspect-ratio lock (scales down only)
- Download all as ZIP — One click downloads all compressed images in a single ZIP file, built entirely client-side with no dependencies
- Individual download — Download each compressed image separately from its card
- Progress bar — Batch progress shows real-time
X / Ywith a visual fill bar - Smart filenames — Preserves original filenames with swapped extensions. ZIP handles duplicate filenames gracefully.
- Privacy first — No uploads, no servers, no third-party APIs. Everything runs on
<canvas>in your browser's memory.
- Open the live site or open
index.htmllocally - Drag one or more images onto the drop zone (or click to browse, select multiple)
- Adjust quality and output format — settings apply to all images
- Optionally set max width / height to downscale large images
- Click ⚡ Compress All — watch each card update with compressed sizes and savings
- Click 📦 Download All as ZIP to grab everything, or click individual ⬇ buttons
Single .html file — zero dependencies, zero build tools, zero frameworks.
- Encoding: HTML5 Canvas API (
canvas.toBlob()) for JPEG, PNG, WebP, AVIF, and BMP - ZIP generation: Hand-rolled from scratch — CRC32 table,
CompressionStream(deflate-raw), local file headers (0x04034b50), central directory (0x02014b50), EOCD record (0x06054b50) - Gallery: Pure CSS grid with
object-fit: containthumbnails
# Just serve the file — any static host works
npx serve .
# Or open directly in your browser
start index.html