This repository contains a reference implementation of JPEG XL (encoder and
decoder), called libjxl
. This software library is
used by many applications that support JPEG XL.
JPEG XL was standardized in 2022 as ISO/IEC 18181. The core codestream is specified in 18181-1, the file format in 18181-2. Decoder conformance is defined in 18181-3, and 18181-4 is the reference software.
The library API, command line options, and tools in this repository are subject
to change, however files encoded with cjxl
conform to the JPEG XL specification
and can be decoded with current and future djxl
decoders or the libjxl
decoding library.
In most Linux distributions, installing libjxl
is just a matter of using the package management system.
For example in Debian-based distributions: apt install libjxl-tools
will install cjxl
and djxl
and other tools like benchmark_xl
are available in the package libjxl-devtools
.
On MacOS, you can use Homebrew: brew install jpeg-xl
.
From the releases page the following can be downloaded:
- Windows binaries
- Debian and Ubuntu .deb packages
Of course you can also build libjxl from sources.
To encode a source image to JPEG XL with default settings:
cjxl input.png output.jxl
The desired visual fidelity can be selected using the --distance
parameter
(in units of just-noticeable difference, where 0 is lossless and the most useful lossy range is 0.5 .. 3.0),
or using --quality
(on a scale from 0 to 100, roughly matching libjpeg).
The encode effort can be selected using the --effort
parameter.
For more settings run cjxl --help
or for a full list of options
run cjxl -v -v --help
.
To decode a JPEG XL file run:
djxl input.jxl output.png
When possible, cjxl
/djxl
are able to read/write the following image formats:
OpenEXR (.exr
), GIF (.gif
), JPEG (.jpg
/.jpeg
), NetPBM (.pam
/.pgm
/.ppm
),
Portable FloatMap (.pfm
), PGX Test Format (.pgx
), Portable Network Graphics (.png
),
Animated PNG (.png
/.apng
), and JPEG XL itself (.jxl
).
Specifically for JPEG files, the default cjxl
behavior is to apply lossless
recompression and the default djxl
behavior is to reconstruct the original
JPEG file (when the extension of the output file is .jpg
).
For speed benchmarks on single images in single or multi-threaded decoding
djxl
can print decoding speed information. See djxl --help
for details
on the decoding options and note that the output image is optional for
benchmarking purposes.
For more comprehensive benchmarking options, see the benchmarking guide.
Besides the libjxl
library API documentation,
there are example applications and plugins that can be used as a reference or
starting point for developers who wish to integrate libjxl
in their project.
This software is available under a 3-clause BSD license which can be found in the LICENSE file, with an "Additional IP Rights Grant" as outlined in the PATENTS file.
Please note that the PATENTS file only mentions Google since Google is the legal entity receiving the Contributor License Agreements (CLA) from all contributors to the JPEG XL Project, including the initial main contributors to the JPEG XL format: Cloudinary and Google.
- JPEG XL Format Overview
- Introductory paper (open-access)
- XL Overview - a brief introduction to the source code modules
- JPEG XL white paper
- JPEG XL official website
- JPEG XL community website
- More information on testing/build options
- Git guide for JPEG XL - for developers
- Fuzzing - for developers
- Building Web Assembly artifacts
- Test coverage on Codecov.io - for developers
- libjxl documentation on readthedocs.io
If you encounter a bug or other issue with the software, please open an Issue here.
There is a subreddit about JPEG XL, and
informal chatting with developers and early adopters of libjxl
can be done on the
JPEG XL Discord server.