Drop JPEG photos here and get smaller JPEGs back, re-encoded at quality 85 with Google's jpegli encoder. The output is still a standard .jpg, so it works in every app, marketplace and upload form that took the original. Up to 3 files a month with no signup and 20MB per file, or 25 a month with a free account. Files are processed in memory at api.mochify.app and wiped the moment your download is ready.
Drag up to 3 files onto the box, or click it to choose them. No account is needed for your first files.
A Strip EXIF switch appears once your files are in. It is on by default, which removes GPS and camera data; turn it off to keep them. There is nothing else to set.
Each JPEG comes back in seconds. More than one file arrives as a single zip.
Plenty of places only take JPEG: eBay and Etsy listings, older content management systems, print portals, job and government forms. Switching to WebP or AVIF is not an option there, so the only way to a smaller file is a better JPEG encoder. Jpegli is that encoder. It applies adaptive quantization from JPEG XL to put bits where they show, and writes a file fully compliant with the JPEG standard.
Mochify outputs standard JPEG files, encoded with Google's jpegli library for better efficiency at high quality settings, so you get the same interoperable JPEG format with fewer wasted bytes. Nobody downstream needs new software, and nothing about how the file is opened, uploaded or printed changes.
The biggest savings come from JPEGs saved at high quality: straight out of a camera or phone, or exported from Lightroom or Photoshop at 90 and above. Those files carry bytes that a quality-85 jpegli encode can drop without a visible change. A JPEG that was already heavily compressed has little left to give, and may come back about the same size or slightly larger; keep the original when that happens.
Recompressing is a new lossy encode, so run each photo through once rather than repeatedly, and keep your originals if you might edit them later. Our jpegli vs MozJPEG guide covers the numbers and the trade-offs, and jpegli for Shopify product images applies them to a store.
| Encoder | Quality per byte | Opens in | Best for |
|---|---|---|---|
| jpegli (this page) | About 20% fewer bits than MozJPEG and 26% fewer than libjpeg-turbo at high quality | Universal | Photos that must stay JPEG, high-quality exports |
| MozJPEG | Better than libjpeg-turbo, close to jpegli at medium quality | Universal | General web delivery, most optimization plugins |
| libjpeg-turbo | The baseline | Universal | Speed above all, the default in most software |
Figures from Google's rater study at high quality on photographs. At medium quality the encoders are close and MozJPEG wins on some images.
Seller and Pro accounts compress up to 25 files per batch at up to 75MB each, and a Day Pass gives you 100 uploads in 24 hours for $2 with no account. The same encode runs from the terminal with the Mochify CLI (mochify, sign in once with mochify auth login), from an AI agent through the hosted or local MCP server, and from the REST API:
curl -X POST "https://api.mochify.app/v1/squish?type=jpg&quality=85" \
-H "Authorization: Bearer $MOCHIFY_KEY" \
--data-binary @photo.jpg \
-o photo-small.jpg Every route encodes at api.mochify.app in memory and keeps nothing. Full parameter reference in the API documentation. Need the file under a size limit rather than at a quality? Add &targetBytes= with a ceiling in bytes and the API measures its way under it.
Also available