Drop PNG files here and get JPEG XL (JXL) files back. By default each file gets one high-quality encode tuned for PNG content, which makes the smallest file; switch Lossless on after uploading and the JXL reproduces your PNG pixel for pixel, usually still smaller than 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.
The default is a high-quality encode that makes the smallest file and looks the same on screen. Switch Lossless on if the JXL must match the PNG exactly, for archives, masters or graphics you will keep editing; it takes longer on large files. There is nothing else to set.
Each JXL comes back in seconds, a little longer for big files in lossless mode.
Lossless gives you the PNG's pixels back exactly, in a JXL that is typically smaller than the PNG, because JPEG XL's lossless coder handles flat color, sharp edges and text very efficiently. Pick it for logos, icons, design assets, screenshots you will keep editing, and anything you would otherwise archive as PNG. It is the slower path and the difference shows on large files. Sixteen-bit PNGs stay 16-bit.
Compressed (the default) re-encodes the pixels with one high-quality setting chosen for PNG content. The result looks the same on screen and is a good deal smaller again than lossless, which is what you want for screenshots and UI exports you only need to look at, or photos that happen to be saved as PNG. It is not a pixel-exact copy, so keep the PNG if you might need one later.
Transparency is carried through in both modes: a PNG with a transparent background comes back as a JXL with the same alpha channel, so icons and cut-outs keep their edges.
Metadata is stripped by default, GPS included, with nothing to set for it on this page. If you need the file's metadata kept, the Mochify web app has a Strip EXIF switch and the API takes stripExif=false.
Most visitors, from October 2026. Chrome 155 and Firefox 158 decode JPEG XL by default and Safari has since version 17, so a JXL can be the first source on a public page; keep an AVIF or WebP fallback for Edge and for browsers that have not updated yet. Our guide to JPEG XL in Chrome and what changes now has the dated browser table, and the practical JPEG XL guide covers the PNG path and the fallback pattern. JXL is also the right format for image pipelines and tools that read it, internal archives, and anywhere you control the viewer. JPEG remains the format that opens everywhere, including email and chat.
| Format | Transparency | Lossless on Mochify | Browser support | Best for |
|---|---|---|---|---|
| JXL (this page) | Yes | Yes, with the Lossless switch (compressed by default) | Chrome 155+, Firefox 158+, Safari (stills) | Smaller PNG replacements, lossless masters, first source on the web with a fallback |
| AVIF | Yes | No | Broad | Live web delivery, best compression |
| WebP | Yes | No | Broad | CMSes, email, social, wide compatibility |
| PNG | Yes | It is lossless | Universal | Pixel-exact masters, print, legacy tools |
Seller and Pro accounts convert 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 conversion 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=jxl" \
-H "Authorization: Bearer $MOCHIFY_KEY" \
--data-binary @screenshot.png \
-o screenshot.jxl The CLI, MCP and API are clients over the same encoder as this page: files travel over HTTPS to api.mochify.app, are converted in memory and discarded. Full parameter reference in the API documentation. Lossless is available there too: add &lossless=1 to the same request. Coming from a JPEG instead? The JPG to JXL converter is the better starting point; from AVIF, use AVIF to JXL.
Also available