Rapier could not start
Reload this file. Your document has not been opened or changed.
Convert PNG, JPG, GIF and video to JPEG XL (JXL), free. Files are made on your device, offline; nothing is uploaded. Choose the quality: Lossless, High or Medium. Under Lossless a JPEG gets smaller and the original restores exactly.
Also: Paint online for free · Free drawing app online · Private notes app
Yes. Free and open source. Works offline with no install. No account, no tracking, no ads.
No. Files are converted on your device.
Yes. The encoder is inside Rapier. Videos and animations need JPEG XL complete, a one-time download; after that they convert offline too.
Lossless is. High and Medium are lossy and much smaller. A JPEG converted under Lossless restores exactly.
An exact JPEG: usually 10 to 20% smaller. A 710 KB PNG painting: 428 KB lossless, 73 KB at High, 35 KB at Medium.
Transparency, 16-bit PNG (Lossless), color profiles such as Display P3 and Adobe RGB, and HDR PNGs (PQ or HLG). Video sound is dropped.
Any number. Rapier converts a few at a time; Cancel stops it. If the device runs out of memory, finished files are kept.
Chrome 155, Firefox 158 and Safari 17 and later. Safari does not play animated JPEG XL. Any browser can make the files here.
Tap animated, then choose or drop a GIF, APNG, animated WebP, a video or several pictures. Order the frames, set their delays, then Make JPEG XL and download the .jxl file.
Some viewers and image libraries decode only the first frame of a JPEG XL. Open the file in a browser that plays it, or in a viewer built on libjxl with animation turned on.
Yes. Lossless keeps every frame of a GIF exactly and the file is smaller. High and Medium are smaller still.
The JPEG XL encoder is part of Rapier, which is one offline HTML file. Your browser reads each picture, or plays each video frame by frame, and the encoder writes the JPEG XL file on your device. Nothing is uploaded. A JPEG is carried into JPEG XL without decoding it, then restored and checked against the original before you download.
In Lossless mode a JPEG converts to a smaller file and restores the exact original. Other pictures come out smaller at the same quality. JPEG XL also holds transparency, high dynamic range and animation.
This page turns your pictures, GIFs and videos into JPEG XL files that are smaller, and still look as good as a high-quality JPEG. It runs on your device. Nothing is uploaded. Lossless keeps every pixel. High and Medium make a smaller file; start with High if you want it to look as good as possible. For a JPEG, Lossless can shrink the file and still restore the original exactly. The upload encoder is about 224 KB, over twice as fast as libvips in the browser, and uses about half the memory for a 12-megapixel picture. Measured against wasm-vips 0.0.19.
A WebGL scene saved as JPEG XL while it keeps drawing, on this device: the view on screen or the whole world as a 4096 by 2048 panorama, exact, fast or smallest. Each file is opened again and compared with the scene. With a VR headset, the panorama surrounds you.
With the full encoder, firstRegion puts a chosen rectangle earlier in the file so it can appear sooner. Use it for the first view of a large picture or panorama. It does not track the viewer or stream separate tiles.
The full encoder accepts floating-point image data, keeping bright lighting values for later rendering instead of flattening them into an 8-bit screenshot. Describe the color space correctly. Showing HDR brightness still needs a compatible display and viewer.
Pass a supported WebGPU texture and its device to the full encoder; the texture needs COPY_SRC usage. This avoids an intermediate PNG or JPEG, not GPU readback. Keep the texture alive until encoding finishes. The upload module does not accept GPU textures.
rapier-jxl is the JPEG XL encoder inside Rapier: JavaScript and WebAssembly, WebGPU at high efforts, MIT licensed, no dependencies. It encodes lossless and lossy pictures and animations, carries a JPEG exactly, and keeps alpha and HDR. The upload encoder is about 182 KB gzipped; the full encoder about 294 KB. Run npm install rapier-jxl, then import {encode} from rapier-jxl/upload: encode(file) returns the JPEG XL bytes.
rapier-jxl on GitHub · rapier-jxl on npm · SnapDOM JPEG XL plugin · EmDash JPEG XL plugin
Rapier could not start
Reload this file. Your document has not been opened or changed.