anyjxl

Turn ANY image into JPEG XL. Free and private.

Drop images here
or click to select files

Conversion Settings

Presets

Presets

Pick by what the picture is, not by a number. Web balanced is the default and suits a photograph going onto a page or into a message. Archival lossless keeps every pixel and every scrap of metadata, and a JPEG put in comes back out byte for byte. Pixel art & graphics is for flat colour, text and hard edges, which Modular codes far better than the transform photographs want. Maximum compression is for a photograph that has to be small. Picking one moves only the controls it sets; anything you change afterwards stays changed, and the chip stops being highlighted.

Quality

Quality

The one dial that decides how much of the original is thrown away. It is not a percentage: libjxl works in Butteraugli distance, and this slider is a curve laid over that unit — the Distance row underneath is the same setting written in it. 90 is where most people stop seeing a difference on a photograph, and 75 to 90 is usually indistinguishable from the original.

Distance

How far the result is allowed to drift from the original. Lower is closer and larger: 0 keeps every pixel, 1.0 is where most people stop seeing a difference, 2.0 is noticeably smaller and still good. This is libjxl’s own unit — the number cjxl’s -d flag takes — so a value from a paper or a command line can be typed in exactly, as 1.0 or as d1.0.

Encoder Effort

Encoder Effort

How hard the encoder looks for a smaller file at the quality you asked for. Nothing about the picture changes — a higher effort spends more time searching and returns fewer bytes for the same result. 7 is the default and roughly where the returns flatten out; 9 is worth it for something you will keep, and every step costs that time again on every image in the batch.

Advanced Settings

You most likely do not need to touch anything below. If you get lost, reset back to the defaults anytime.

Lossy or Lossless

Lossy or Lossless

Lossy throws away what the eye is least likely to miss, and is what you want for photographs. Lossless keeps every decoded pixel exactly, which is what screenshots, diagrams and anything with text or hard edges want — and it makes the quality dial meaningless, so that dial is switched off while lossless is on.

Lossy Transform

Lossy Transform

Which of libjxl’s two lossy compressors does the work. These are not quality settings — the quality dial means the same thing with either one — they are two different ways of describing the same picture, and each is far better than the other at one particular kind of image. Open the ? beside an option to see which.

Automatic

Leaves the choice to libjxl, which in practice means VarDCT on every lossy encode: its heuristics only reach for Modular when the encode is lossless. The right setting for photographs, and for a mixed batch you would rather not sort by hand.

VarDCT (photos)

The frequency transform JPEG XL inherits from JPEG and rebuilds properly: the picture is cut into blocks of varying size, and each is described by how fast it changes rather than pixel by pixel. Gradients, texture and soft edges are what photographs are made of, and that is exactly what this is good at.

Modular (graphics)

Predicts each pixel from its neighbours and stores only the difference, which costs almost nothing across flat colour and hard edges: screenshots, diagrams, line art, pixel art, charts. Measured on a 1280×800 screenshot at the default quality it is 45% smaller than VarDCT, 42 KB against 77 KB — while on a photograph it only ties, at up to twice the time. libjxl never picks it for a lossy encode on its own, so this is the only way to ask.

Decode Speed

Decode Speed

A trade the encoder makes on behalf of whoever opens the file later. 0 produces the smallest, best-looking file and asks the most of the decoder. Higher values leave out the parts that are expensive to decode, which matters for a phone opening a very large image and for very little else. Leave it at 0 unless you are serving these files at scale.

JPEG Inputs

JPEG Inputs

A JPEG's coefficients move into JPEG XL untouched, so the picture is re-packed rather than re-encoded: identical pixels, no generation loss, and 13% to 34% smaller across the JPEGs measured here.

Use lossless transcode

The switch that decides whether a JPEG is re-packed or re-encoded, and it is on by default. Re-packed, every coefficient the JPEG already holds moves into the JXL untouched: the same picture, pixel for pixel, in 13% to 34% fewer bytes. Off, the JPEG is decoded to pixels and encoded again at the quality set above, which throws detail away a second time — a JPEG has already been through that once — and is only worth it when you want the conversion to change something, such as the size or the colour. It applies to JPEG sources and nothing else, and each result says which of the two it got.

Store exact JPEG reconstruction

Off, the transcode keeps the picture and drops the file: the original JPEG cannot be rebuilt. On, the JXL also carries what it takes to reproduce that file byte for byte — every marker, all metadata, and anything stored after the image. It usually costs under 1%, but an iPhone HDR photo, whose gain map is a second image hidden in the file, spent 24% of the output on it.

Animation

Animation

JPEG XL stores animation natively, so an animated GIF, APNG or WebP becomes one animated JXL. Every frame is a full encode, so long animations take a while.

Progressive Mode

Progressive Mode

Progressive shows a quick preview that sharpens as it loads. Useful when the file will be served over a network; it costs roughly 13% more file size and 39% more memory to encode.

Transparency

Transparency

JPEG XL stores transparency properly, so a transparent PNG or WebP comes out transparent and there is nothing to decide here. The colour below is the background for the sources that have none of their own: a PDF or an SVG page is drawn onto it, and it fills the gaps when several pages are stitched into one long image.

Grayscale

Metadata

Metadata

Every picture carries hidden notes alongside the pixels. Open the ? on any row to see what one of them is, and what changes if you switch it off.

Camera & photo info (EXIF)

The notes your camera wrote inside the photo as you took it: the date and time, the phone or camera model, the lens, the shutter speed — and, on most phones, the exact spot on Earth where you were standing. Switch this off to remove all of it. The picture itself is unchanged.

Location (GPS)

The exact spot on Earth where the photo was taken, often accurate to the street, saved automatically by most phones. Anyone you send the file to can read it. If you are posting the photo publicly, this is the one to leave off.

How the original was stored (in EXIF)

Tags inside the EXIF that describe the file you started with — how it was compressed, how its colour was laid out, how many bits a pixel used, how large it was. None of it describes the file this makes, so anything reading them is being told about a file that no longer exists. They are dropped by default; turn this on only if you need the original's technical record kept word for word.

Editing & copyright notes (XMP)

Notes added later by editing apps: a caption, keywords, star ratings, your name as the copyright holder, and sometimes the whole history of edits.

Print size (DPI)

A number telling a printer how large to print the picture — 300 DPI means 300 dots per inch of paper. It changes nothing on screen and does not alter a single pixel.

Download

Output Size

Output Size

Both are off at 0. A maximum dimension downscales oversized photos in linear light; a target size makes the encoder search for the highest quality that fits.

Measure Quality

Measure Quality

Decodes each finished JPEG XL and reports PSNR and SSIM against the pixels that were encoded. It measures the file's own coding loss, not an earlier downscale or bit-depth reduction, and roughly doubles conversion time and memory.

Rasterization

Rasterization

A PDF or an SVG holds no pixels; it holds instructions for drawing a page. This decides how finely those instructions are drawn before anything is converted, in dots per inch of the original page. 150 is comfortable on screen, 300 matches print, and every step up costs memory and time on every page.

PDF & TIFF (multi-page)


Output mode:

SVG Rasterization

How it works

libjxl runs in your browser through WebAssembly. You get compact JPEG XL files with lossy, lossless, alpha, metadata options, and support for 26 input formats.

Encoder: libjxl 0.12.0 (WebAssembly).

Nothing uploads. Your images stay in your browser.

Privacy

Your images never leave your device. Conversion happens locally in this browser.

Animated GIF, APNG and WebP

Yes, JPEG XL does animation — and so do we. An animated GIF, APNG or WebP comes back as a single animated JXL, moving at the same speed and looping the same way. Just be warned: every frame gets its own full encode, so a long animation takes a while. Only want a still? Settings has a frame limit, and a First frame only switch.

26 Input Formats We Convert to JPEG XL

JPG/JPEG: Recompress photos into JPEG XL for much smaller files, or use reversible transcode when possible.

PNG: Move screenshots, artwork, and transparent images into JPEG XL for lossless or high-quality smaller files.

WebP: Convert web images into JPEG XL when you want one efficient archive format with stronger quality controls.

AVIF: Re-encode AVIF sources to JPEG XL for fast local workflows, alpha support, and adjustable effort/quality.

HEIC: Turn iPhone photos into JPEG XL for compact storage without staying tied to Apple's container.

HEIF: Convert HEIF camera files into JPEG XL for a modern still-image format built for archival efficiency.

PDF: Rasterize pages to pixels, then encode them as JPEG XL when you want image files instead of documents.

TIFF/TIF: Replace bulky scans and archival TIFFs with JPEG XL while keeping lossless options available.

SVG: Rasterize vector art at your chosen size, then save it as a compact JPEG XL image.

SVGZ: Decode compressed SVG artwork, rasterize it, and encode the result to JPEG XL.

GIF: An animated GIF comes back as a single animated JPEG XL, at the same speed and with the same looping. A still GIF becomes a still JPEG XL.

BMP: Shrink uncompressed bitmap files dramatically by encoding them as JPEG XL.

TGA: Convert game and graphics-source TGA files into smaller JPEG XL images.

ICO/CUR: Extract icon imagery and save it as a normal JPEG XL image.

PNM: Convert portable anymap images into compact JPEG XL output.

PPM: Encode raw color portable pixmaps as much smaller JPEG XL files.

PGM: Convert grayscale portable graymaps into efficient JPEG XL images.

PBM/PAM: Turn monochrome bitmaps and arbitrary portable maps into JPEG XL files that are easier to store and share.

PSD/PSB: Convert Photoshop documents to JPEG XL without Photoshop. The flattened composite is read straight out of the file, 16-bit documents included.

Camera RAW: Convert CR2, CR3, NEF, ARW, DNG, RAF and RW2 to JPEG XL using the largest image the camera embedded, with its Exif carried across.

Re-encoding JPEGs

JPEG inputs use libjxl's coefficient-lossless transcode when settings permit, avoiding another lossy pixel re-encode. Exact original JPEG reconstruction is a separate opt-in.

Terms

Free, as-is, no warranties.