Every image compressor I tried had the same problem: they upload your photos to a server.
TinyPNG? Server upload. Compressor.io? Server upload. iLoveIMG? Server upload.
As a developer, this bothered me — especially when compressing client work, personal photos, or anything sensitive. Why should my images travel across the internet just to remove a few kilobytes?
So I built ImgPakt — an image compressor that processes everything locally in your browser. Zero uploads. Zero servers. Your files never leave your device.
How It Works (The Technical Part)
ImgPakt uses the Canvas API and Web Workers to compress images entirely client-side:
- File is read via
FileReaderas a data URL - Image is drawn onto an offscreen
<canvas> - Canvas exports the image at a target quality using
canvas.toBlob() - Web Worker handles the heavy lifting — UI stays responsive
- Compressed file is generated as a downloadable blob
// Simplified compression flow
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0);
canvas.toBlob(
(blob) => {
// blob = compressed image, never leaves the browser
const url = URL.createObjectURL(blob);
// trigger download...
},
'image/webp',
0.82 // quality: the sweet spot
);
No fetch(). No API calls. No XMLHttpRequest. There is literally no upload mechanism in the code.
Why Not Just Use Squoosh?
Google's Squoosh is excellent — but it only handles one image at a time. If you have 50 product photos to compress, that's 50 manual operations.
ImgPakt supports batch processing — drop 100 images and compress them all simultaneously with the same profile.
5 Smart Compression Profiles
Instead of a confusing quality slider, ImgPakt offers purpose-built profiles:
Profile Quality Best For
🚀 Social ~70% Instagram, Twitter, thumbnails
⚖️ Balanced ~82% Websites, blogs, general use
🎨 High Quality ~88% Portfolio, professional work
🖨️ Print ~93% Print materials, high-DPI
💎 Pixel Perfect ~97% Archival, lossless-level
Format Support
JPEG — universal compatibility
PNG — lossless with transparency
WebP — 25-35% smaller than JPEG
AVIF — 40-50% smaller than JPEG (Pro)
Pro users also get format conversion — convert any image to WebP or AVIF in one click.
The Stack
React + TypeScript — UI layer
Vite — build tooling
Canvas API — compression engine
Web Workers — non-blocking processing
Supabase — auth (optional, for Pro features)
Stripe — payments
Try It
👉 imgpakt.com — no signup required, just drag & drop.
The free tier gives you 5 images per batch with all compression profiles. Pro ($3.99/mo) unlocks unlimited batch, format conversion, and AVIF support.
If you're tired of uploading your images to random servers just to compress them, give ImgPakt a try. I'd love to hear your feedback.
What image compression tool do you currently use? Would you switch to a privacy-first alternative?
Top comments (0)