FreeToolio

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

    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.

    An AVIF container holding a colour frame, an optional alpha plane and up to twelve samples, and the single 8-bit grid a JPG keeps. The same 1,920,000-pixel photograph weighs 204,487 bytes as AVIF and 389,591 bytes as JPG at quality 85, 91% more; 10 bits become 8, alpha becomes a matte colour, twelve frames become one, and the 222-byte Exif block does not come along.
    The same 1,920,000 pixels on both sides of the arrow. The AVIF keeps a colour frame, and can also carry an alpha plane, a sequence of frames and an Exif block; the JPG keeps one grid of 8-bit values. The file that holds less came out 91% larger, because AV1 compresses a photograph better than baseline JPEG does.

    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.