How to convert JPG to AVIF without uploading it
Every "free" online JPG converter you've used uploads your photos to a company server, converts them there, and — in several documented cases — keeps a copy or a live download link for days. For personal photos, client work, and anything you wouldn't post publicly, that's an unnecessary risk. The safer approach is to convert the file where it already is: on your own device.
This tool does exactly that. When you drop a JPG here, your browser:
- Decodes the JPG natively — every browser includes a JPG decoder, so there is no decoder file to download and no waiting for a library to load.
- Reads the image's EXIF orientation data and stores the output upright, so a portrait phone photo doesn't come back sideways — and says so on the file card when it did.
- Resizes it to the width you picked (800 px by default), keeping the aspect ratio. JPG has no transparency, so there is nothing to flatten onto a background.
- Encodes it as AVIF with libavif, the reference AVIF encoder, running as WebAssembly in your browser — lossy at the quality you pick. Your original file is never modified. Encoding takes roughly 5–10 seconds for a large photo, and each file card shows how long its encode took.
Why is there no lossless mode?
Because the lossless mode in this encoder is broken — and shipping a broken toggle would be worse than having none. When the vendored libavif encoder is asked for lossless output, it produces a greyscale file: a colour photo comes back without its colour (a solid red test image decodes back as grey). That was verified with two independent decoders, so it is the encoder, not the preview. Rather than offer a control that silently destroys your photos, this tool is lossy only: pick a quality (80 by default) for the image's destination — a website, a blog post, Discord or a forum — and at quality 80 the result looks identical to the original for almost every photo, typically 40–60% smaller than the JPG. If you need every pixel exactly, convert to PNG instead, which is lossless by design. Either way, keep the JPG as your master copy and publish the AVIF.
Why is AVIF smaller than JPG?
JPG compresses by throwing away detail in 8×8 blocks, a technique from 1992. AVIF's AV1 codec predicts neighbouring pixels far better and encodes the difference more efficiently, so the same photo typically comes out 40–60% smaller at quality 80 with no visible difference. That is why switching a site's JPGs to AVIF is one of the cheapest PageSpeed wins there is. The saving is real but not magic: a JPG that was already saved at low quality has little left to squeeze, and lossless AVIF cannot beat JPG by much.
Why won't my JPG load fast enough on my site?
JPG is the web's default for photos, but a JPG straight from a phone camera can weigh several megabytes, and every kilobyte is time your visitor waits — especially on a phone. AVIF keeps the picture looking the same while cutting the weight, which is what Core Web Vitals and PageSpeed measure. If the destination has a size limit, pick a destination preset and the converter will aim for it: website heroes aim for under 300 KB, blog images under 150 KB, Discord or forum uploads under 256 KB.
Why is there no canvas fallback?
With WebP, a converter can fall back to the browser's built-in canvas encoder when its own encoder fails. AVIF has no such safety net: canvas toBlob with image/avif is not reliably available — Safari cannot encode AVIF at all — so a canvas "fallback" would either fail silently or hand you a WebP file with an .avif name, which is worse than no file at all. This tool uses the vendored libavif encoder and nothing else. If that encoder cannot load, conversion is disabled and the page says so plainly, with a link to the JPG to WebP converter instead.
Honest limitations
Lossy only
The output always discards some detail. Quality 80 is visually identical to the original for most photos, but quality 100 is near-lossless, not pixel-perfect. Keep the JPG as your master copy.
No lossless mode — on purpose
This encoder's lossless option produces greyscale files, so the toggle was left out rather than ship a control that silently strips the colour from your photos. For pixel-exact output, convert to PNG instead.
Quality 100 can be larger than the JPG
At quality 100 the AVIF can come out bigger than the JPG it came from. If the file comes out bigger, the card says so — use a lower quality for publishing instead.
AVIF encoding is slow
Roughly 5–10 seconds for a large photo, because the AV1 encoder searches far more ways to pack the image into fewer bytes. The batch converts one file at a time and each card shows its encode time, so the wait is visible.
JPG has no transparency
Every JPG pixel is fully opaque, so there is no see-through area to carry over — and no background picker on this tool. If you need transparency, start from a PNG.
Not every app accepts AVIF yet
Every modern browser displays AVIF, and Discord, Slack and most forums accept it — but a few older upload forms and apps still only take JPG or PNG. Check the destination first, or convert to WebP instead.
Metadata is stripped
Camera metadata (EXIF, including location) is dropped on re-encode, and colour profiles are not carried over. Orientation is applied — the output is stored upright.
Very large images depend on your device
The encoder runs entirely on your device, so a 50-megapixel JPG needs hundreds of megabytes of memory while it converts. A desktop handles that; a low-memory phone may not. Files over 25 MB are refused outright.