QOI-Remix

QOIR source (Gemini .tar.gz, 47K)

QOIR sourcehut (HTTPS)

Dominic Szablewski's Quite OK Image Format (HTTPS)

QOI-Remix is Sunset's incompatible variant of Dominic Szablewski's excellent Quite OK Image Format with the aim of providing a measurable density improvement with a moderate compute penalty.

Compared to PNG, QOI-R is generally...

Compared to QOI, QOI-R is generally...

What did QOI-R change?

QOI-Remix incorporates three major changes from QOI.

What is QOI-R for?

I had a couple of days to kill and thought QOI was really cool. That's it. Most of QOI-R was designed and implemented while spending several hours in a waiting room. There's not a grand plan or use case here. It's not intended to replace PNG, and it's not intended to replace QOI - but to provide an alternative on a different part of the lossless image compression Pareto curve. It's very fast, embeddable, fairly portable, and produces dense files.

What does QOI-R include?

The QOI-R distribution includes both QOI and QOI-R support.

What is the future of QOI-R?

The QOI-R bitstream format is essentially done. There are a few things I'm working on for QOI and/or QOI-R - KImageFormats support, optimized assembly backends, and some helpful utilities. These will be released over time.

I have ideas for a lossless image format that would be a larger departure from QOI, and will probably end up being named QUAIL. This may inherit concepts from QOI and QOI-R but will be a distinct format with its own magic number, and not a new QOI-R version.

Where's the spec?

I'll upload a proper spec soon. Until then, the code is simple and I welcome questions!

Dependencies

The base qoir.h should be usable with no significant external dependencies except a "normal" system environment (a C99 compiler, 8-bit bytes, some concession to POSIX, etc.)

qoirbench depends on libpng and the presence of stb_image.h (from the "stb" library by nothings, available at https://github.com/nothings/stb). qoirconv depends on stb_image.h and stb_image_write.h, but not libpng.

Platform Support

QOI-R is very new, and has been only tested and validated on a handful of platforms. That being said, it should compile on any system with a more or less sane POSIX environment. qoirbench, in particular, has had some small portability changes to make it less Linux-dependent than upstream QOI.

QOI-R has been tested on:

In the near future, I would like to test it on:

I would welcome an email from anyone that compiles QOI-R on a platform I haven't validated.

Performance Notes

The ratio of QOI-R to QOI performance varies between systems and compilers. I'm not going to publish concrete figures, because benchmarking methodology is a whole art and vendors often get prickly about how it's done, but I will list performance ratios based on megapixels per second, with libpng as the baseline, so that users can use to project performance on their hardware of choice.

These numbers are using QOI's benchmark image set. Usual caveats regarding benchmarks apply. libpng is normalized to 1.0.

x86-64 (Tiger Lake, Linux, gcc 13.1, nonvirtualized)

         Encode    Decode
QOI      38.82     3.23
QOIR     31.89     2.98

ARM64 (Altra, Linux, gcc 8.5.0, virtualized)

         Encode    Decode
QOI      32.83     3.39
QOIR     27.70     2.93

Z (z15 T02, Linux, gcc 9.3.0, virtualized)

         Encode    Decode
QOI      30.17     2.21
QOIR     25.61     1.99

PPC64LE (Power9, Linux, gcc 9.3.0, virtualized)

         Encode    Decode
QOI      33.50     4.65
QOIR     28.06     4.15

Itanium (Itanium 95xx, HP-UX, aCC, nonvirtualized)

         Encode    Decode
QOI      24.65*    3.32
QOIR     28.50*    1.79