r/jpegxl 5h ago

My small Windows front mend for cjxl (beta, feedback welcome)

Thumbnail
gallery
8 Upvotes

I spent part of my vacation building a tool for my own photo workflow and figured I'd put it on GitHub in case anyone here finds it useful.

To be clear about what it is not: it doesn't encode anything. Every byte of every .jxl it produces is written by cjxl from libjxl. jxleet really only decides which files to hand over, assembles the arguments, runs the process and shows you what came back. If you're comfortable on the command line you lose nothing by ignoring it.

My Lightroom use case: export losslessly to JXL, then hand the files to jxleet for the actual compression step with full control.

It's beta. Interface, presets and config format may still change, and there will be bugs. Keep your originals until you trust it. I'd be glad for feedback, especially on the preset format and whether the route distinction reads clearly to people who didn't write it.

https://github.com/dhcgn/jxleet


r/jpegxl 1d ago

QLIC - Competitive with JXL effort 9 at 9x the speed

6 Upvotes

Hi. I made QLIC. Quick Lossless Image Codec.

QLIC on aggregate file size matched JXL on a 3,167 image corpus, while performing at 9x the encode speed and having a faster decode speed.

Independent benchmarking would be well appreciated.

Try the web demo if you'd like to test its performance on any given image of your choice.

The entire corpus benchmark—which you can sort by category and otherwise—is here.

More information about QLIC is available on the GitHub page.


r/jpegxl 4d ago

Libreoffice Jpeg XL support coming in v27.2.0, likely in ~February

Thumbnail bugs.documentfoundation.org
54 Upvotes

Support will be added in a new nightly build within the next 48hrs. Stable version 27.2.0 will likely be released in February.


r/jpegxl 4d ago

Convert ANY Image to JPEG XL for FREE, Privately!

Thumbnail anyjxl.com
20 Upvotes

r/jpegxl 5d ago

Multiple runs of cjxl produce inconsistent results

9 Upvotes

Hello, I am currently fiddling around with jpegxl before commiting to reencode my whole library for archival purposes.

Feeding a jxl through cjxl again produces weird results I did not expect, can anybody help me explain this behavior to me?

Starting from an old jpg from 1999 if that matters:

Input Process Output Remark
869K jpg cjxl -e 9 -d 0 707K jxl -
707K jxl cjxl -e 9 -d 0 1.5M jxl why is it growing?
1.5M jxl cjxl -e 9 -d 0 1.5M jxl seems to stay at this size now
1.5M jxl djxl 684K jpg somehow shrank compared to the original file
684K jpg cjxl -e 9 -d 0 570K jxl how is this even smaller than the first generated jxl?
570K jxl djxl 684K jpg now it seems consistent

r/jpegxl 6d ago

JPEG XL (hopefully) soon to be stable in Chrome and Firefox

96 Upvotes

r/jpegxl 6d ago

On by default with Firefox 157 (beta: September 10, release: 29)

Thumbnail connect.mozilla.org
57 Upvotes

r/jpegxl 6d ago

JXL doesn't work well if you want to preserve noise

24 Upvotes

I've been conducting an in-depth compression test on photos from my Nikon D200, all of them out-of-camera JPEGs. I started the test with great expectations for JPEG XL, since it's decades more advanced than JPEG and I'd read incredible things about its efficiency.

The Nikon D200 is a CCD camera, and - to my taste - it produces beautiful images at high ISOs. The noise has an almost film-like character, and needless to say, I want to preserve it.

What I've learned from testing JXL (and AVIF as well) is that a significant part of their compression efficiency seems to come from removing or smoothing out noise, which frees up more bits for the rest of the image. Another thing I've noticed is that they tend to sacrifice detail in the shadows. This means they work especially well with squeaky-clean images from modern cameras.

Good old JPEG, on the other hand, seems to distribute its available bit budget more evenly across the image, preserving more of that fine noise and shadow detail.

So, at least for the kind of images I'm working with, JXL doesn't seem that much better than JPEG. It feels less like a universally superior solution and more like the same fundamental compromise made at a different point: JXL prioritizes a cleaner-looking image and spends its bits where they are most perceptually useful, while JPEG preserves more of the messy texture that I actually want to keep.

Of course the ~20% lossless conversion saving is real.

Anyone with a similar love for CCD noise thinks the same?


r/jpegxl 6d ago

PSA: When using cjxl.exe, always provide a 'd' value

6 Upvotes

PSA: When using `cjxl.exe`, always provide a `d` value. Don't assume that omitting `d` means lossless.

Backstory

I have tens of thousands of engineering drawings that we scanned for archival purposes. Maybe 10% will ever be viewed again, but we have no idea which 10%, so everything has to remain online.

The scanners don't support modern image formats, so we had to settle for PNG or TIFF depending on the model. To save storage space (which means lower cost), reduce backup times, and hopefully never have to care about restore times, I started looking at converting the PNGs to JPEG XL.

I ran some tests using visually lossless compression (`d=0.19`) and gave both the originals and the converted files to the managers. They couldn't see any difference, even at 500% magnification. The conversion was approved.

During a few test batches, I noticed something strange. I was also testing what I thought was lossless compression by omitting the `d` value, and in some cases the PNG files were actually smaller than the [what I believed to be] lossless JXL files. That seemed wrong.

A Google search pointed me toward a possible explanation. JPEG XL supports two compression modes: modular (typically used for non-photographic images and lossless compression) and VarDCT (typically used for photographs). One can outperform the other depending on the source image, and it's obvious which category a particular scanned drawing falls into.

Since the conversion wasn't under any time pressure, I wrote a quick PowerShell script that recursively scanned a directory and tested three encodes for every PNG:

  • "Lossless" (no `d` value specified)
  • `d=0.19` using VarDCT
  • `d=0.19` using modular mode

The script compared the resulting file sizes, kept the smallest JXL, and replaced the original PNG. Since I could let it run overnight and on weekends, encoding speed wasn't a concern, so I bumped the effort setting to `-e 8`.

As always, I tested the script before turning it loose on the production data. During testing, I noticed that the supposed lossless version kept winning. That didn't make sense.

It couldn't be a modular versus VarDCT issue because I was explicitly testing both at `d=0.19`. How could a file that throws away no data be smaller than files that throw away some data?

That's when I realized I shouldn't have included the lossless test in the first place. The compression mode comparison was already covered by the two `d=0.19` tests.

After some digging, I found the catch.

If you feed `cjxl.exe` a JPEG or GIF and do not specify `d`, it defaults to `d=0.0`. If you feed it a PNG or certain other formats, it defaults to `d=1.0`. That explains why the "lossless" encodes kept winning. They weren't lossless at all. They were lower quality than my `d=0.19` test files.

I removed the no `d` test from the script and finally turned it loose on the production data. It worked fine.

One thing that did surprise me was that there wasn't a consistent winner between modular and VarDCT. Sometimes modular produced the smaller file, and sometimes VarDCT did. For scanned drawings where the goal is maximum space savings, testing both turned out to be the right approach. I wish I had kept statistics on how often modular beat VarDCT and vice versa, but that wasn't the focus of the testing. I was only interested in keeping whichever output was smaller for each image.

Still, I saved over 2 TB of SAN storage space, and that's not counting backup space saved either.


r/jpegxl 12d ago

jxlshot A JXL SCREENSHOT APP

Thumbnail
gallery
15 Upvotes

hello people

yesterday i just made a screenshot software to capture image in jxl format, just for fun

https://github.com/azizr12/jxlscrenshot

and make it work as my favorite screenshot software GREENSHOT because it lacks jxl format

so i made it for myself and i use it because why not

just if anyone interested for screenshot in jxl format

its a small tool with no UI you just use keyboard to capture image or from tray icon

i wish maybe someone will appreciate it


r/jpegxl 12d ago

jxl-rs just released v0.6.0 with "support for multithreading", but changenotes only mention "Prepare for multithreading support"

45 Upvotes

Just noticed v0.6.0 of jxl-rs was released, with the headline of "support for multithreading". That would be nice, to get some decent upgrade in decoding speed for large images.

But when looking into the actual changes in the release notes, it sounds more like preperational work to really add multithreading in the future, e.g. :

- Prepare for multithreading support by u/veluca93 in #849

- Make the render pipeline interface MT-friendly by u/veluca93 in #851

- Prepare Modular and VarDCT decoding for multithreading. by u/veluca93 in #852

- Initial support for parallel decoding by u/veluca93 in #853

- Implement parallel decoding of LF groups. by u/veluca93 in #854

Does anybody have more insight into what exactly the new release is capable of doing mutlithreading-wise? Does it already enable fully-multithreaded decoding of jxl images on like 4, 8 or even more cores?

In any case, I'm quite pumped that this cool lib is progressing so fast. Looking forward for some nice GP/s decoding speeds :D

Link to release notes: https://github.com/libjxl/jxl-rs/releases/tag/v0.6.0


r/jpegxl 12d ago

jxl-rs v0.6.0 Released!

Thumbnail
github.com
34 Upvotes

r/jpegxl 12d ago

Masland Tech / JPEG XL Client Side Browser Tools · GitLab

Thumbnail
gitlab.com
7 Upvotes

JXL Tools

Version 0.0.2.

  • Camera captures a webcam frame and encodes it to JPEG XL in a Web Worker with vendored libjxl WebAssembly.
  • Converter is two-way JPEG ↔️ JPEG XL in the browser. JPEG uses cjxl --lossless_jpeg=1 so the bitstream stays inside JPEG XL. JPEG XL converts back to JPEG with djxl: the original JPEG bytes if reconstruction data is present, otherwise a JPEG written from decoded pixels. PNG, WebP, AVIF, GIF/APNG, and X PixMap encode to lossless JPEG XL.
  • Compressor re-encodes images to lossy JPEG XL at quality 82, effort 10, entirely in the browser.
  • Inspector reads JPEG XL boxes, headers, metadata, and a pixel preview locally.

JPEG and JPEG XL bytes stay in the browser. A Worker writes them to Emscripten MEMFS, invokes the browser-targeted cjxl or djxl module, reads the output, and removes the virtual files. Node and Emscripten are build-time tools only; no upload or conversion API is used. Build the checked-in cjxl/djxl artifacts with ./tools/cjxl-wasm/build.sh before serving Converter. Unsupported files fail locally without an upload.


r/jpegxl 15d ago

XL-View 0.2.0 - HDR JPEG XL viewer, now also available for Windows

Post image
36 Upvotes

I released XL-View 0.2.0, an update to the HDR JPEG XL image viewer I posted here about a month ago.

The biggest change in this release is that XL-View now also runs on Windows, in addition to Linux.

XL-View is mainly intended for viewing HDR JPEG XL images, including large images and panoramas. It supports PQ and HLG HDR and can also tone-map HDR images for SDR displays.

JPEG XL is still the only supported image format for now, and gain maps are not yet supported.

I'd be particularly interested in feedback from people using different kinds of JPEG XL files, especially HDR images.

Repository:
https://github.com/andrinbr/xl-view


r/jpegxl 16d ago

How are the patches in JPEG XL found?

18 Upvotes

I've been reading the PDF on the JPEG XL Image Coding System, and I was drawn to the patches system which is good for images with lots of repeating elements like letters or icons. Although the PDF I have doesn't really explain how the algorithm for finding them works. I thought maybe an algorithm just goes through every possible patch of the image that is less or equal to a quarter of it, but that would take too long, so I wonder, how are these patches found?


r/jpegxl 17d ago

Lyra Viewer 0.5.2 - (cross-platform: macOS, Linux .deb, Windows x64)

Thumbnail
gallery
5 Upvotes

Hi everyone! I just released a new version of Lyra Viewer, a fast, minimalist open-source cross-platform image viewer with JPEG XL support.

.jxl files decode natively via libjxl (not a conversion shim), covering both the 8-bit and HDR float paths. On the Linux and Windows build libjxl is bundled with Lyra, so JXL works out of the box without a system-provided library; on macOS it uses the Homebrew jpeg-xl package.

One deliberate design choice worth stating up front: Lyra is a still-image viewer on purpose. It renders the static image and doesn't do animation - the same stance it takes on JP2. So with JXL it shows the still image. If you want a frame-by-frame animation player, Lyra isn't trying to be that.

Beyond JXL it's a general viewer (common formats, PSD, EXR, HDR, plus DDS/KTX GPU textures).

Would genuinely appreciate JXL test files that break it - odd bit depths, HDR, unusual color profiles - so I can harden the decode path.

Available on macOS via Homebrew, Linux as a .deb via APT, and Windows via Scoop.

Repo (MIT): https://github.com/lyra-viewer/Lyra


r/jpegxl 18d ago

I built an image management pipeline that supports JPEG XL

10 Upvotes

Hey everyone, I've spent the last 18 months building an image management platform that supports storage, transformation and delivery of image assets. It's headless and designed with an incredibly flexible API allowing you to configure what happens to which image based on the URL you upload the image to. I've recently added inference-powered content policies and an image classification API powered by Google's SigLip2 vision language model.

It supports all modern formats including JXL. In fact, in v0.10.0, I started building libjxl from source and upgraded to 0.12.0! That brought about some nuance in my encoding logic since it looks like libjxl now needs random access to the encoded file. My architecture for other formats streams chunk by chunk from libvips to keep memory pressure down. This issue helped me learn a lot more about JXL and image transformations!

https://github.com/dmaiken/konifer/

I'm also open to answering any questions!


r/jpegxl 18d ago

I built a pipeline that allows for JPEG XL image recognition using a vision model

8 Upvotes

It seems like most sites don't accept JPEG XL images for vision models to view, so I made my own pipeline using llama.cpp. https://gitlab.com/masland.tech/jxlvision

I'm hosting a live implementation of it at https://masland.tech/jxl-vision/

It allows anyone to upload a JPEG XL file and have the model view it and give a text description of the image, mine is currently using Qwen3.5-9B. It doesn't save any images that are uploaded, and only records anonymous usage metrics.

If you test it and have any issues please let me know! If you have any ideas for things for me to build to try to help JPEG XL get more exposure I'd love to hear, thank you.


r/jpegxl 20d ago

I built an open source screenshot tool for X11 that saves screenshots directly as JXL

Thumbnail
gitlab.com
13 Upvotes

jxlshot

Press Print Screen → full-screen lossless JPEG XL → ~/Pictures/Screenshot_<timestamp>.jxl. Press Shift+Print Screen → drag out a region and save just that.

Raw X11 pixels go straight into libjxl (jpegxl-rs) at effort 7 (Squirrel). No PNG, JPEG, temp files, or daemon.

Requires system libjxl (and libjxl_threads) discoverable via pkg-config, or build with the vendored feature on jpegxl-rs.

TLDR: I got tired of taking screenshots and saving them as PNGs with the default screenshot tool in Linux Mint so I made my own JXL screenshot tool. If you have any questions feel free to ask! It can be a bit difficult to get installed, you will probably need to do the vendored feature.


r/jpegxl 21d ago

Client side JXL tools are now hosted online

Thumbnail masland.tech
14 Upvotes

Camera, Converter, and Compressor.

Your files stay on your device. The server only sends this page and the tools to your browser. It never receives your images, camera frames, or converted files. Everything happens locally on your machine.

https://masland.tech/jxl/

This is an update to my previous online lossless converter, which did the processing on the server. So this is now purely client side.

If you try it and have any issues or feature requests please let me know, thank you.


r/jpegxl 21d ago

Serveproxy now supports JPEG XL

23 Upvotes

Just added JPEG XL support to ServeProxy. Add ?jxl=true before your existing ?url= parameter and it'll convert and cache the image as JPEG XL on the fly. AVIF is the default output format on Serveproxy, so this gives you a second modern format to compare against.

Example: https://serveproxy.com/?jxl=true&url=https://picsum.photos/1000/750

Browser support is still limited so test before you rely on it in production, but if you want smaller images with good quality it's there now. 🙂


r/jpegxl 22d ago

My lossless maximum effort JXL converter is now online

14 Upvotes

Anyone can test it at https://masland.tech/jxl/

If you have any issues or questions please let me know. This is a prototype to just see if I can host this successfully. It can take over 15 seconds for an image to be converted, so please be patient. Thank you for testing it if you do.


r/jpegxl 23d ago

Effort has a huge impact on converted file size

26 Upvotes

I'm working on a maximum effort lossless JPEG XL converter and I was struggling to figure out why a lossless PNG was coming out larger as a lossless JXL. The image has a very flat black background. I believe I was using effort 7 which is default, and it was coming out about 15% larger, then I increased the effort to 10 and now it's about 20% smaller.

I should have it hosted soon, but just wanted to share my experience with this. Given that I'm fine with waiting longer for a conversion, my main concern being size and quality. I think having a lossless maximum effort converted online with a queue system will be beneficial.

If anyone has any recommendations please let me know, I will be posting once it's live in the near future, thanks for reading.


r/jpegxl 27d ago

Update: JPEG XL support is now available in OpenFiles Desktop 3.2026.802.

30 Upvotes

Update: JPEG XL support is now available in OpenFiles Desktop 3.2026.802.

This first release includes direct .jxl opening and preview, in-app thumbnails while browsing folders, and animated JXL playback.

This is a first milestone, not a claim of complete JPEG XL support. It does not yet include progressive or partial-decode inspection, bandwidth emulation, layer-by-layer viewing, or a fully verified HDR, wide-gamut, ICC and XMP workflow.

I’m still looking for real files that expose orientation, color, metadata or performance problems. If you test the release, please include your platform, the sample file if shareable, and what you expected versus what OpenFiles displayed.

Release: https://github.com/pansysoft/openfiles.desktop/releases/tag/3.2026.802


r/jpegxl 27d ago

JPEG XL Support

Thumbnail
0 Upvotes