AVIF to JPG
Drop AVIF images here and get JPG copies back in this tab. Your browser decodes the AVIF — no library, no upload — this page paints any transparency onto a matte colour (JPEG has no alpha channel), and the pixels are re-encoded at the quality you pick.
Drop AVIF images here
or choose files · up to 30 at a time · still or animated
JPG, baseline · same pixel dimensions as the source · the thumbnail above each download is the flattened result, not the original
AVIF in, JPG out · still, animated, tiled or 10-bit AVIF · up to 30 files per batch · quality 40–100 · no upload · no account · no watermark
AVIF to JPG: The Picture Survives, the Container Does Not
Convert an AVIF here and you get the same picture at the same pixel size, in a file every editor, mail client and document opens. That is the whole trade. What does not come along is everything else the AVIF was carrying.
An AVIF is a box, not a bitmap. Inside it sit one or more AV1 images (one for colour, sometimes a second for transparency, sometimes twelve in a row for an animation), plus Exif, a colour profile, and occasionally a grid of tiles the decoder is supposed to stitch together. A JPEG is one rectangular grid of 8-bit pixels. This page decodes the box, draws frame one onto that grid, and writes it out.
The cost shows up in bytes. Nine files went through this page: every still came out larger than the AVIF it started from, from 82% larger on an ordinary photo to more than eighteen times on a flat gradient. One file shrank, and only because eleven of its twelve frames were left behind.
A decode, a canvas, an encode
Your browser has decoded AVIF natively since 2020 (Chrome 85, Firefox 93, Safari 16). No library is loaded here, no WebAssembly is fetched, nothing is unpacked in the background. The file goes to createImageBitmap, the bitmap is drawn onto a canvas filled with the matte colour, and the canvas is handed to the browser's JPEG encoder.
Three things are lost in that hand-off, and only the first is obvious.
The pixels are re-quantised: baseline JPEG divides the frame into 8 × 8 blocks, stores brightness at full resolution and colour at half, then rounds the coefficients. A second generation of loss lands on top of the first.
Transparency is mixed with a colour, because JPEG has no fourth channel to put it in.
Everything that is not a pixel stays in the original file. That includes the depth, the second frame, the tiling, the capture data and the original colour profile.
Every still got bigger; the better the AVIF, the worse the deal
| Source | Pixels | AVIF | JPG, quality 85 | Change | AVIF bytes/px | JPG bytes/px |
|---|---|---|---|---|---|---|
| Photograph | 1,920,000 | 204,487 B | 389,591 B | +91% | 0.106 | 0.203 |
| Same photo, saved small | 1,920,000 | 102,748 B | 351,495 B | +242% | 0.054 | 0.183 |
| Photograph, 12 MP | 12,192,768 | 251,240 B | 1,084,600 B | +332% | 0.021 | 0.089 |
| Photograph with Exif | 1,920,000 | 224,153 B | 408,567 B | +82% | 0.117 | 0.213 |
| Invoice render, text | 468,000 | 11,296 B | 33,759 B | +199% | 0.024 | 0.072 |
| Flat grey gradient | 327,680 | 397 B | 7,213 B | ×18.2 | 0.0012 | 0.022 |
| Transparent graphic | 240,000 | 2,257 B | 12,857 B | +470% | 0.009 | 0.054 |
| Animated, 12 frames | 129,600 | 19,566 B | 12,291 B | −37% | 0.151 | 0.095 |
The pattern is not a property of these particular files. AV1 compresses photographs better than baseline JPEG does, so decoding one and encoding the other means paying the weaker codec's price for the same pixels. The harder the source was squeezed, the more the JPG asks for: the 251 KB twelve-megapixel AVIF became a 1.03 MB JPG, while the same photo stored at 204 KB became 380 KB.
The animated row is the mirror case. Its 19,566 bytes covered twelve 480 × 270 frames; the JPG holds one, so it needs less space than the animation did. Nothing was gained in quality. A quarter of a second of movement was simply dropped.
What the quality slider is choosing
One 1.92-megapixel photo, five settings, each output compared with what the AVIF itself decoded to:
| Quality | JPG size | Bytes/px | PSNR | Largest channel difference |
|---|---|---|---|---|
| 40 | 187,715 B | 0.098 | 29.6 dB | 127 of 255 |
| 60 | 263,187 B | 0.137 | 32.8 dB | 62 |
| 75 | 325,051 B | 0.169 | 39.6 dB | 30 |
| 85 | 389,591 B | 0.203 | 41.2 dB | 27 |
| 95 | 572,008 B | 0.298 | 46.2 dB | 17 |
Read the first row against the source: at quality 40, the bottom of this page's slider, the JPG is still 187,715 bytes against the AVIF's 204,487. Matching the original size is not on offer anywhere in the range, and the cheapest setting is already damaging pixels by up to 127 levels.
The 12-megapixel file behaves the same way at scale: 828,966 bytes at quality 75 (45.4 dB), 1,933,965 at quality 95 (52.1 dB). Quality is a file-size dial, not a quality guarantee; PSNR is an average over the frame and says nothing about the ringing around a hard edge.
A 10-bit AVIF lands on an 8-bit canvas
A 1,024-step grey ramp was encoded twice from the same 16-bit source, once at 8 bits per channel and once at 10. Chrome decoded both, and the canvas was read back pixel by pixel.
The 8-bit file produced 217 distinct levels across the row. The 10-bit file produced 254. A canvas holds 256 levels per channel, so that is the ceiling: whatever the file carries above eight bits is rounded at the moment it is drawn. JPEG stores eight bits per channel, which means the ceiling follows the file out the door.
The JPG step itself is nearly transparent here: at quality 95 the output differed from the decoded AVIF by at most one level (64.4 dB on the 8-bit source, 66.5 dB on the 10-bit one). The depth was not lost in the encoder. It was lost before the encoder saw it.
The same canvas is 8-bit sRGB, so an AVIF tagged with a wide-gamut or HDR profile (BT.2020, PQ, HLG) is mapped into sRGB on the way in. This is the one conversion where the right answer may be a different tool: if the destination needs HDR, a JPEG cannot hold it.
The alpha plane has nowhere to go
JPEG stores three colour channels. It has no fourth channel for transparency, so a transparent AVIF has to become opaque somewhere, and the colour you pick is painted under every pixel that was see-through.
The 600 × 400 cut-out used here has 116,186 fully clear pixels and 22,761 partly transparent ones: 57.9% of the frame. Converting it twice, once over white and once over black, produced two files that differ in 143,458 pixels, with a maximum channel difference of 255. The extra pixels beyond the 138,947 transparent ones are the JPEG blocks around each edge picking up the new background.
Pick the colour the JPG will sit on. On a white page, white leaves no visible edge. On a dark site, a white matte leaves a pale fringe around every cut-out shape, and the reverse happens on the other side. The card under each result reports the share of transparent pixels before you download, so you know whether the matte matters at all.
An animated AVIF becomes a still
The animation flag lives in the container's brand (avis) and in its sample table, where this test file lists twelve entries. The page reads that count and says so on the card. The browser decoder, asked for an image, hands back the first frame.
The output is a 480 × 270 JPG of frame one: 12,291 bytes from a 19,566-byte animation. If the movement is the point, the destination needs GIF or WebM, and this page is the wrong tool.
What the JPG does not carry
The Exif-bearing sample had 222 bytes of capture data: camera name, model, date and a GPS position. Its JPG starts with a JFIF header and a 472-byte sRGB profile segment, and contains no Exif block at all. Camera, date and coordinates stay in the AVIF.
That is by design rather than oversight. A canvas holds pixels and nothing else, so the encoder is never given the tags to write. The colour profile is the exception: the browser attaches its own sRGB profile to the output, which is a statement about the pixels as written, not a copy of the source profile.
Tiled AVIFs (a grid item that splits the image into independently coded tiles) arrive assembled, because the decoder reassembles them before the canvas sees anything. The page reports the grid on the card; the JPG is one flat image.
Why nothing is uploaded, and why there is no library to download
The page loads one script and then works with what the browser already has. During a conversion the network panel recorded 0 requests. With the connection switched off, the same photo produced 389,591 bytes, byte-identical to the online run by SHA-256.
Speed follows the decoder and the JPEG encoder, nothing else. In a headless Chrome without GPU help, a 12-megapixel AVIF decoded and encoded in 308 ms and a 1.92-megapixel one in 72 ms. Bigger frames and high quality settings raise that; a slow laptop will too.
What each control does
JPEG quality. The range is 40 to 100, and 85 is the default because it is where photographs usually stop showing artefacts at 100%. The hint under the slider says what the current setting costs.
Transparency becomes. White, light grey, black or any colour you pick. This is the colour mixed under transparent pixels; it has no effect on a fully opaque image.
Batch and ZIP. Up to 30 files at once, 100 MB each, 100 megapixels per image. Each card carries its own download button; "Download all as ZIP" packs the finished ones in the tab.
When the AVIF should stay an AVIF
For a website, AVIF is the better file: it is smaller at the same visual quality, and every current browser reads it. Convert when the destination is older software, a document, an email attachment, a print service or a tool that refuses the extension.
If the picture has transparency that matters, JPG is the wrong target and PNG is the right one. If it moves, the target is GIF or video. If it is HDR, no JPEG will hold it.
Keep the original either way. The JPG is a copy that has been through one more encode, and re-converting it later cannot recover what the AVIF still has.
Quick answers
Will the JPG be bigger than the AVIF? Almost always. On this page a photo went from 204,487 to 389,591 bytes at quality 85, and the twelve-megapixel sample from 251,240 to 1,084,600. The only file that came out smaller was an animation, because its extra frames were dropped.
Does the picture look different? At quality 85 the average error is small (41.2 dB on the test photo) and the damage sits on hard edges and fine texture. At quality 40 the largest channel difference reaches 127 of 255, which is visible.
Can the JPG keep transparency? No. JPEG has no alpha channel. Transparent areas take the matte colour, and the result card tells you what share of the image that affects.
Is the camera data kept? No. A 222-byte Exif block with a GPS position stayed in the AVIF; the JPG has no Exif block.
What happens to an animated AVIF? The first frame is written as a still JPG, and the other frames are discarded.
Does a 10-bit or HDR AVIF convert? It converts, into 8-bit sRGB. The 10-bit gradient test kept 254 of the 256 levels a canvas can hold; anything wider or brighter is mapped into that range.
Why does the page refuse a HEIC file? HEIC is a different container with a different codec. The HEIC to JPG page handles that one, and this page tells you so instead of failing silently.
Does it work offline? Yes, once the page and its one script have loaded. The offline run produced byte-identical output.