Every free image compressor I tried had the same problems: they upload your images to some server, limit you to 5 files a day, or force you to create an account.
I just wanted to drop images, compress, download. So I built one.
Meet MiniPx
minipx.com β a free image compressor that runs 100% in your browser. Your images never leave your device.
How it works
The compression engine uses the HTML5 Canvas API. Here's the core idea:
- Load the image into a Canvas element
- Re-encode it at a lower quality using canvas.toBlob()
- If the output is larger than the original (happens with PNGs), try progressively lower quality settings
- If WebP still can't beat the original, fall back to JPEG
- Always return the smallest successful result
Code:
// Simplified version of the multi-pass compression
async function compress(file, quality, format) {
const img = await loadImage(file);
const canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
// First pass
let blob = await canvasToBlob(canvas, format, quality);
// Smart fallback if output is larger
if (blob.size >= file.size) {
for (const q of [0.6, 0.45, 0.3, 0.2]) {
const attempt = await canvasToBlob(canvas, format, q);
if (attempt.size < file.size) {
blob = attempt;
break;
}
}
}
return blob;
}
The key insight: Canvas API quality values aren't linear. Quality 0.92 barely compresses anything. Quality 0.65 (our "Smart" preset) gives 50-70% reduction with no visible quality loss.
Features
Compress β Gentle (20-40%), Smart (50-70%), Tiny (75-90%)
Convert β WebP, JPEG, PNG in any direction
Resize β Set max width to 1920, 1280, or 800px
Batch β No file limits, process as many as you want
Private β Zero server uploads, works offline
Tech stack
Next.js 15 (static export)
React 19
Canvas API for compression
Deployed on Netlify (zero server cost)
What I learned
Canvas API quality is not what you think. I initially set the "Smart" preset to quality 0.78 thinking that's decent compression. A 3MB PNG screenshot compressed to 3.2MB β larger than the original. Turns out 0.78 is barely any compression for the Canvas encoder. Dropping to 0.65 fixed everything.
The multi-pass approach matters. A single-pass compressor will sometimes produce files larger than the original, especially with PNG screenshots. The fallback chain (try lower quality β try different format) ensures the output is always smaller.
Static sites are underrated for tools. MiniPx costs $0/month to run. No server, no database, no file storage, no bandwidth costs. The entire thing is HTML/CSS/JS served from a CDN.
Try it
minipx.com β would love your feedback. What features would you want added?
United States
NORTH AMERICA
Related News
What Does "Building in Public" Actually Mean in 2026?
19h ago
The Agentic Headless Backend: What Vibe Coders Still Need After the UI Is Done
19h ago
Why Iβm Still Learning to Code Even With AI
21h ago
I gave Claude a persistent memory for $0/month using Cloudflare
1d ago
NYT: 'Meta's Embrace of AI Is Making Its Employees Miserable'
1d ago