How bulk compression works here
Each file is read into memory, decoded to pixels, drawn to a canvas at your chosen size, and re-encoded to JPG, PNG or WebP. Quality 10 to 95 controls the JPG and WebP encoders; PNG is lossless and ignores it. HEIC files are first decoded to bitmaps by an open-source converter running locally, then follow the same canvas path. Nothing is queued on a server and nothing waits for an email link.
Fit scales the image down so the whole picture fits inside the max box. Fill scales so the box is covered and crops the center, which suits square thumbnails and cover photos. Original keeps source dimensions and only re-encodes. Images smaller than the preset are never enlarged, because upscaling would add bytes without adding detail.
Supported formats
| Format | Input | Output | Notes |
|---|---|---|---|
| JPG | Yes | Yes | Best for photos; quality slider applies |
| PNG | Yes | Yes | Lossless; bigger than JPG for photos |
| WebP | Yes | Yes | Smallest for web; quality slider applies |
| GIF | Yes, first frame | No | Animated GIF converts to a still with a warning |
| BMP | Yes | No | Converted to your chosen output format |
| HEIC | Yes, via local decode | No | Forced to JPG when the HEIC toggle is on |
Why it beats queued converters
| Tool | Upload | Bulk | Limits | Privacy |
|---|---|---|---|---|
| This page | No, local canvas | 50 files, ZIP at once | 50 MB per file, no daily cap in code | Pixels never leave the device |
| Convertio | Yes | Queued, 2 at once free | 100 MB free tier, daily minutes cap | Files sit on a server queue |
| Zamzar | Yes | Queued one by one | 50 MB free, 2 conversions per day | Files stored for download links |
| TinyPNG | Yes | 20 files, 5 MB each | 500 free per month via API | Uploaded for processing |
Honest limits
- 50 files per batch and 50 MB per file, enforced before decoding so a bad drop fails fast with a message.
- Animated GIF keeps only its first frame; the row carries a warning badge and the log says so.
- Canvas re-encoding always strips EXIF, GPS and embedded thumbnails. Turning strip off cannot bring metadata back, because preservation would need byte passthrough instead of compression.
- Very large photos are capped by browser memory; if a tab cannot decode a file it is marked as failed rather than stalling the batch.
- PNG output is lossless and can be larger than the input for noisy photos; pick JPG or WebP for smallest size.
EXIF strip proof: run exiftool on a download and compare with the original. The original lists EXIF, GPS or thumbnail segments; the output lists none, because fresh pixels were written. The network tab agrees: zero image uploads during a run.
Frequently asked questions
How do I convert HEIC to JPG free in bulk?
Drop up to 50 HEIC files, keep HEIC to JPG on, pick JPG and quality, press Compress. Each file converts locally to JPG and you can ZIP all at once. Nothing uploads.
Is this a WebP converter with no signup?
Yes. Pick WebP as output, drop JPG PNG or HEIC files, compress, download. No account, no email, preferences stay in your browser.
How do I compress images without uploading them?
Files are read into canvas memory in this page and re-encoded here. Open the network tab: no image request leaves. Only library downloads and page-view analytics load.
Is this a Convertio or Zamzar alternative with no limits?
It replaces queued server conversion for everyday jobs: bulk up to 50 files, no per-day cap in code, private by design. Very large print jobs may still suit desktop tools.
Does resizing strip metadata and EXIF?
Yes. Canvas re-encoding writes fresh pixels and drops EXIF, GPS and thumbnails. Verify with exiftool: output shows no EXIF segment. Keeping metadata would need byte passthrough, which this tool does not do.
What happens to animated GIFs?
Only the first frame is kept. The output is a still JPG, PNG or WebP with a warning badge. Use a video tool if you need animation preserved.
What are the file size and count limits?
50 files per batch and 50 MB per file, enforced in the browser. The caps keep the DOM fast and avoid tab crashes. Split larger jobs into multiple batches.