How to convert JFIF to AVIF without uploading it
Every "free" online JFIF 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 JFIF here, your browser:
- Decodes the JFIF natively — JFIF is JPEG data and every browser includes a JPEG 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. JFIF 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.
First, the honest bit: JFIF is just JPEG
A .jfif file holds ordinary JPEG image data — the extension is a leftover from older Windows apps that saved JPEGs as .jfif. Renaming a .jfif file to .jpg is free, instant, and changes nothing about the picture, and most apps open a .jfif directly. So convert to AVIF only when you need what AVIF alone offers: a smaller file for a website, faster page loads, or an app that will not accept a JFIF at all. If all you needed was a .jpg, rename the file — this tool will not pretend otherwise.
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 25–35% smaller than the JFIF. Lossy AVIF cannot recover detail the JFIF already removed when it was first saved — it can only preserve what is left. If you need every pixel exactly, convert to PNG instead, which is lossless by design. Either way, keep the JFIF as your master copy and publish the AVIF.
Why is AVIF smaller than JFIF?
JFIF 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 25–35% smaller at quality 80 with no visible difference. That is why switching a site's JFIFs to AVIF is one of the cheapest PageSpeed wins there is. The saving is real but not magic: a JFIF that was already saved at low quality has little left to squeeze, and lossless AVIF cannot beat JFIF by much.
Why won't my JFIF load fast enough on my site?
JFIF is the web's default for photos, but a JFIF 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 JFIF 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 JFIF 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 JFIF
At quality 100 the AVIF can come out bigger than the JFIF 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.
JFIF has no transparency
Every JFIF 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
AVIF works in about 94% of browsers (Chrome 85+, Firefox 93+, Safari 16.4+, Edge 121+), 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 JFIF 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.