How our compressor works

There is no server in the compression path. This page explains exactly what happens to a file you drop in, and how to verify every claim on it yourself.

The short version

Where encoding happens
In your browser tab, on your own device.
What we receive
Nothing. There is no upload endpoint in the compression path.
Decoder
createImageBitmap — the browser's own image decoder.
Encoder
canvas.toBlob — the browser's own image encoder.
Parallelism
A pool of Web Workers, one per core up to four.
Target-size mode
A binary search over the quality range, about eight passes.
How to verify
Disconnect from the network after the page loads. It still works.

What actually happens

Step by step, when you drop a file

  1. The file is read from your disk into the memory of the browser tab. This is a local read — the same thing that happens when you open a file in any application.
  2. createImageBitmap decodes it into raw pixels, applying the EXIF orientation so the image is the right way up.
  3. The bitmap is drawn to a canvas at the output dimensions, using high-quality resampling.
  4. canvas.toBlob encodes it at your chosen format and quality.
  5. The resulting blob is turned into a temporary URL and offered to you as a download.

Steps two to four run inside a Web Worker on a separate thread, which is why the interface stays responsive while a large batch processes. No step involves a network request.

How target-size mode finds an exact number

Encoders do not accept a file size — they accept a quality, and the size falls out of it. So hitting a specific number means searching for it.

The tool encodes at a mid-range quality, measures the result, and moves the quality up or down depending on whether it came in under or over your limit. It repeats that, halving the remaining range each time, until it finds the highest quality that still fits. That converges in about eight passes.

If nothing fits even at minimum quality and you have allowed the dimensions to change, it scales the image down by a fifth and searches again. If you have locked the dimensions, it stops and tells you the target could not be met — rather than handing you an oversized file and staying quiet about it.

How to verify all of this

You should not take our word for it. Two checks, neither requiring any technical skill:

The offline test. Load any tool page, then disconnect from the internet — Airplane Mode, or unplug the network. Now compress an image. It works. A tool that uploaded your file could not.

The network panel. Open your browser's developer tools, go to the Network tab, and compress an image while watching it. You will see no upload request, because there is nothing to upload to.

These checks work on any tool, not just this one, and they are the fastest way to tell what a compressor is actually doing.

What this architecture costs you

Being honest about the trade matters more than the claim itself.

  • No HEIC, RAW or TIFF. Browsers cannot decode them. We will not ship a tool that fails silently on the file you just chose.
  • No AVIF or JPEG XL output. Browsers cannot write them — and a canvas asked for a format it cannot produce silently returns a PNG, which would mean handing you a mislabelled file.
  • No animated GIF or WebP. A canvas decodes only the first frame, so a "GIF compressor" built this way would destroy your animation.
  • A few per cent behind MozJPEG. A server running a better encoder would produce slightly smaller JPEGs than your browser does.
  • Memory limits. Each image is held uncompressed while processed, so very large batches can exhaust a browser tab, particularly on a phone.
  • Colour space. A canvas works in sRGB, so wide-gamut images are converted. Correct for the web, wrong for print masters.

Where those matter, desktop software or a server-side service is the better tool, and we say so on the relevant pages rather than pretending the gaps do not exist.

What we do collect

The site itself is an ordinary website, and it behaves like one.

Our host records standard web server logs — IP address, timestamp, requested URL, referrer, user agent — used for security and diagnosing faults. If you send a message through the contact form, we store what you typed so we can reply. Analytics, where configured, counts page views.

None of that touches your images, because your images never arrive. The privacy policy sets it out in full.

Why it is free

Running a site that does its computing on your device is unusually cheap: we are not paying to process your images, so there is no per-image cost to recover and no reason to meter usage.

Hosting is covered by advertising placed below the tool, never above it. There is no premium tier, because adding one would mean deliberately withholding something that already works.

Try it yourself

Everything below runs in your browser, so you can test any of this on your own files without uploading them.

  • Compress JPEG

    Shrink JPG and JPEG photographs with a quality slider or an exact target size.

    Open the tool

Questions

Frequently asked questions

Every answer below is present in the page source, expanded, so it can be read without opening anything.

Do you ever see my images?

No. There is no upload endpoint in the compression path — your file is read from your own disk into the memory of the browser tab, processed there, and written back to your device. Nothing is transmitted, so there is nothing for us to see, store or hand over.

How can I prove nothing is uploaded?

Load a tool page, disconnect from the internet, and compress an image. It still works. You can also open your browser's Network tab and watch for an upload request while it runs — there will not be one.

Which encoder do you use?

Your browser's, through canvas.toBlob — usually libjpeg-turbo for JPEG and libwebp for WebP. A server running MozJPEG would produce files a few per cent smaller. We think the privacy is worth more than the difference; for a production pipeline it may not be.

How does the exact-size mode work?

A binary search. The tool encodes at a mid-range quality, measures the result, and narrows the range until it finds the highest quality that fits under your limit — about eight passes. If it cannot get there, it says so rather than handing you an oversized file.

Why does it get slow on very large batches?

Because your device is doing the work. Each image must be held uncompressed in memory while it is processed, so throughput is bound by your processor and memory rather than by a queue. Splitting a very large batch in half usually resolves it.

Why don't you support HEIC, RAW or AVIF?

Browsers cannot decode HEIC and RAW, and cannot encode AVIF. Supporting them would mean either uploading your files or shipping large WebAssembly codecs. Rather than offer tools that fail silently, we leave them out and say why on the relevant format pages.

From the blog

Related reading

Longer, more practical guides from the blog.

  • Practical Guides

    How to Compress Images for a Website Without Wrecking Them

    Resize before you compress. Measured on one photograph: half the width at quality 80 produced a 16.4 KB file, while full width at quality 40 produced 20.6 KB and looked far worse. The order of operations matters more than the settings.

    8 min read

  • Practical Guides

    How to Strip EXIF Data From Photos, and What Breaks When You Do

    A photograph from a phone can carry the coordinates of the place it was taken, the camera serial number and the exact timestamp. Removing that data is straightforward. Removing it carelessly rotates your photos sideways.

    9 min read

  • Image Compression

    JPEG Quality Settings Explained: What the Number Actually Means

    Quality 80 is not 80% of anything. It is an index into a quantisation table. Measured on one photograph: dropping from 100 to 90 removes 77% of the file and 4.2 dB of fidelity; dropping from 40 to 30 removes 17% and costs almost as much.

    8 min read