Check for yourself that nothing is uploaded
Every tool that compresses images in a browser says your files stay on your machine. There is no way to tell the honest ones from the rest by reading the homepage — which is why this page exists. Three checks, easiest first.
1. Turn off the network
Load the page, then disconnect: airplane mode, or unplug the cable, or quit your Wi-Fi. Now drop in a folder and compress it.
It works. Everything — reading the files, decoding, re-encoding, building the ZIP — happens in the tab. Nothing to upload to, nothing to wait for.
This is the check that cannot be faked. A tool that sends your images somewhere cannot work with the network off. Ten seconds, no developer tools, and it settles the question.
2. Read the network panel
Open your browser's developer tools and find the Network tab (Cmd+Option+I on a Mac, F12 elsewhere), then reload and use the tool normally.
You will see the page load itself: the HTML, one stylesheet, one script, one worker, the fonts, the icon. Then nothing. No request carries your images, because there is no endpoint to carry them to.
Worth knowing what you will not see: any third-party domain. The fonts are served from this site, not from Google, so no outside company learns that you were here. That was a deliberate change — loading fonts from a CDN would have meant telling someone else about every visitor, which is a strange thing to do on a page about privacy.
3. Make the meter move
The sidebar shows sent out: 0 B. A gauge that only ever reads zero is indistinguishable from a broken one, so here is how to prove it is neither.
Open the browser console and run this. It sends 2 KB back to this same page — nothing leaves for anywhere else, and the server rejects it — but the bytes do leave the thread, which is what the meter counts.
fetch(location.href, { method: 'POST', body: 'x'.repeat(2048) })
The counter jumps to 2.0 KB and requests to 1. Reload to reset it. That figure is measured, not typed: the page wraps fetch and XMLHttpRequest and counts the bytes of every request body it sends. If code here ever started sending something, that number would say so.
Why any of this is possible
Browsers can decode and re-encode images on their own, in a worker, with no server involved. That is the whole trick. It also explains the shape of the product: there is no account to create and no file limit, because there is no cost per user to recover.
The trade is that your machine does the work. That is why the tool reports how long decoding and encoding take — it is spending your CPU, and it should tell you how much.