This page shows very large JPEG XL images without downloading them in full. It first reads the file's header and table of contents, then only the 1:8 “LF” layer as a preview. The file is progressive: the detail of every 256 px group is stored in several passes, and the header says after which pass the image is complete at 1:4 and at 1:2. As you zoom in, the page reads, for the visible groups only, just the passes that the zoom level needs. It uses HTTP range requests or, for a local file, direct reads from disk. Decoding runs in your browser in WebAssembly worker threads.
Drag to pan. Scroll, pinch, or drag the bar on the zoom track to zoom; click a tick to jump to that level. Double-click zooms in at a point, the arrow keys pan, + and − zoom, and 0 shows the whole image. Click or drag in the overview map to jump there.
Currently showing:
Open a different JPEG XL file from this computer:
(A local file is read piece by piece straight from disk. A file on the web is read with HTTP range requests,
so any static host works that answers them and allows this page's origin through CORS, for example Cloudflare R2.
Use ?src=URL to show another file.)
(The file has to be a single-frame VarDCT (lossy) JPEG XL without an embedded ICC profile or separate
LF frames. Encode it with cjxl in.png out.jxl -d 0.15 --progressive_ac --progressive_dc=0.)
The decoder is jxl-oxide 0.12.6, compiled to WebAssembly with a small wrapper. For each region it assembles a tiny JPEG XL codestream from the original headers, a rewritten table of contents, and only the needed sections.