TL;DR — I built Shrinkray: a free, open-source image compressor & converter that runs **100% in your browser. No uploads, no servers, no tracking. Your images never leave your device.
The problem
Most "free" online image compressors upload your photos to a server you don't control. For screenshots, IDs, receipts, or product shots, that's a privacy risk you don't need to take.
Shrinkray
Shrinkray does everything client-side using the Canvas API. Nothing is ever uploaded.
Features
- 🔒 100% local — files never leave your browser
- 🖼️ Convert between WebP / JPEG / PNG / AVIF
- 🎚️ Quality slider + optional resize
- 📦 Batch mode — drop a whole folder, download all as a zip
- 📋 Paste from clipboard
- 📊 Per-image and total savings %
- ⚡ Installable PWA, works offline
- 🆓 MIT licensed, zero build step (vanilla JS)
In my tests it gets ~85–90% size reduction on photo-like PNGs by converting to WebP, with no visible quality loss.
How it works
Drag images in → pick a format and quality → Shrinkray re-encodes each one with canvas.toBlob() and shows you exactly how much you saved. Everything happens on the main thread in plain JavaScript — no frameworks, no dependencies beyond JSZip (CDN) for the "download all" zip.
Try it
- ⭐ Code & README: https://github.com/CopilrGiiiTh/shrinkray
- 🚀 Live demo: https://copilrgiiith.github.io/shrinkray/
It's fully open source — issues, stars, and PRs welcome. Would love feedback on which formats/options you'd want next (thinking: drag-to-reorder, EXIF stripping toggle, and an AVIF quality preset).
Built with vanilla JS and a lot of canvas.toBlob(). 🦈
Top comments (1)
Local-first is a strong selling point for image tools. People often compress IDs, receipts, product photos, or private screenshots without thinking about where the file goes. Making the privacy boundary simple - nothing leaves the browser - is the kind of UX copy that actually matters.