1. Quick summary
- 100% local: Canvas + built‑in encoders, zero upload.
- Quality slider: 30–95 to balance size & fidelity.
- Auto format: Chooses JPEG/WebP for best bytes.
- Batch flow: Optimize N images sequentially.
- Multi download / ZIP: >5 files packed automatically.
- Side‑by‑side compare: Opens a preview window.
2. Recommended workflow
- Load images (JPG, PNG, WebP).
- Set global quality (start 80 photos, 75 illustrations).
- Keep auto unless forcing a specific format.
- Click Optimize all & inspect savings.
- If artifacts (banding, blocks) appear, raise quality by 5.
3. Internal mechanics
Each file is decoded to an <img>
, drawn on a <canvas>
and re‑encoded via canvas.toBlob()
as image/webp
or image/jpeg
. No bytes leave the browser; ObjectURL
s are revoked post‑download.
4. Format decision
Auto prefers WebP for PNG (esp. transparency) and evaluates JPEG photos; if WebP doesn’t win clearly, JPEG remains. Typical WebP savings: 20–35% vs JPEG.
5. Performance & limits
- O(n) in pixel count.
- Medium images (≤3000px longest side) in milliseconds.
- Very large (>6000px) may consume memory/time.
- On memory pressure, split into smaller batches.
6. Privacy
No transfer, ideal for confidential or NDA material. Business model: lightweight ads, not data harvesting.
7. Quick checklist
- Final weight <250KB hero / <100KB inline.
- Dimensions resized before compression.
- Modern format (WebP) when bytes saved.
- No perceptible artifacts.
8. Roadmap
Upcoming: AVIF, smart presets, local SSIM/PSNR metrics.