Skip to main content

A simpler wrapper around qoi (https://github.com/phoboslab/qoi)

Project description

PyPI version fury.io

QOI

A simple Python wrapper around qoi, the "Quite OK Image" image format. It's

  • Lossless with comparable compression to PNG, but fast! It encodes 10x faster and decodes around 5x faster than PNG in OpenCV or PIL.
  • You can make it lossy with a simple trick, and then you can get similar compression to JPEG but a whole lot faster. (These number vary a lot depending on how "lossy" you make JPEG or QOI). That's cool.
  • Multi-threaded - no GIL hold-ups here.

Install

pip install qoi

Example

import numpy as np
import qoi

# Get your image as a numpy array (OpenCV, Pillow, etc. but here we just create a bunch of noise)
rgb = np.random.randint(low=0, high=255, size=(224, 244, 3)).astype(np.uint8)

# Write it:
_ = qoi.write("/tmp/img.qoi", rgb)

# Read it and check it matches (it should, as we're lossless)
rgb_read = qoi.read("/tmp/img.qoi")
assert np.array_equal(rgb, rgb_read)

# Likewise for encode/decode to/from bytes:
bites = qoi.encode(rgb)
rgb_decoded = qoi.decode(bites)
assert np.array_equal(rgb, rgb_decoded)

# Benchmarking
from qoi.benchmark import benchmark
benchmark()  # Check out the arguments if you're interested

If you want to really max out your CPU:

from concurrent.futures import ThreadPoolExecutor, wait
import numpy as np
import qoi

RGB = np.random.randint(low=0, high=255, size=(224, 244, 3)).astype(np.uint8)

def worker():
    bites = bytearray(qoi.encode(RGB))
    img_decoded = qoi.decode(bites)

print("Go watch your CPU utilization ...")
with ThreadPoolExecutor(8) as pool:
    futures = [pool.submit(worker) for _ in range(10000)]
    wait(futures)

(Single-threaded) Benchmarks

If we consider lossless, then we're generally comparing with PNG. Yup, there are others, but they're not as common. Benchmarks:

Test image Method Format Input (kb) Encode (ms) Encode (kb) Decode (ms) SSIM
all black ('best' case) PIL png 6075.0 37.75 6.0 16.04 1.00
all black ('best' case) opencv png 6075.0 23.82 7.7 17.93 1.00
all black ('best' case) qoi qoi 6075.0 4.13 32.7 2.67 1.00
koi photo PIL png 6075.0 849.07 2821.5 85.46 1.00
koi photo opencv png 6075.0 95.24 3121.5 44.34 1.00
koi photo qoi qoi 6075.0 28.37 3489.0 17.19 1.00
random noise (worst case) PIL png 6075.0 300.37 6084.5 46.30 1.00
random noise (worst case) opencv png 6075.0 63.72 6086.9 14.01 1.00
random noise (worst case) qoi qoi 6075.0 16.16 8096.1 7.67 1.00

So qoi isn't far off PNG in terms of compression, but 4x-20x faster to encode and 1.5x-6x faster to decode.

NB:

  1. There's additional overhead here with PIL images being converted back to an array as the return type, to be consistent. In some sense, this isn't fair, as PIL will be faster if you're dealing with PIL images. On the other hand, if your common use case involves arrays (e.g. for computer vision) then it's reasonable.
  2. Produced with python src/qoi/benchmark.py --implementations=qoi,opencv,pil --formats=png,qoi on an i7-9750H. Not going to the point of optimised OpenCV/PIL (e.g. SIMD, or pillow-simd) as the results are clear enough for this 'normal' scenario. If you want to dig further, go for it! You can easily run these tests yourself.

If we consider lossy compression, again, JPEG is usually what we're comparing with. Normally, it'd be unfair to compare QOI with JPEG as QOI is lossless, however we can do a slight trick to make QOI lossy - downscale the image, then encode it, then upsample it by the same amount after decoding. You can see we've implemented that below with a downscaling to 40% and JPEG quality of 80 (which results in them having the same visual compression i.e. SSIM). So, results (only on koi photo as the rest are less meaningful/fair for lossy):

Test image Method Format Input (kb) Encode (ms) Encode (kb) Decode (ms) SSIM
koi photo PIL jpg @ 80 6075.0 47.67 275.2 24.01 0.94
koi photo opencv jpg @ 80 6075.0 24.03 275.3 19.58 0.94
koi photo qoi qoi 6075.0 23.17 3489.0 12.94 1.00
koi photo qoi-lossy-0.40x0.40 qoi 6075.0 4.38 667.5 2.96 0.94

Here we see that lossless qoi is losing out considerably in compression, as expected for lossy vs lossless. Also, qoi is only 1x-2x faster of encoding, and 1.5x-2x faster for decoding. However, it's important to note that this varies a lot depending on the jpeg quality specified - here it's 80 but the default for OpenCV is actually 95 which is 3x worse compression and a bit slower.

However, that's still lossy vs lossless! If you look at qoi-lossy-0.40x0.40 where we downscale as above, you can see that it can perform really well. The compression ratio is now only 3x that of JPEG (and 5x better than lossless QOI, and also the same as the default OpenCV JPEG encoding at a quality of 95), but it's so fast - 5x-10x faster encoding, and 7x-8x faster decoding.

Anyway, there are definitely use cases where qoi may still make sense over JPEG. Even lossless QOI can be worth it if size isn't an issue, as it's a bit faster. But if you use the "lossy" QOI, you're getting "comparable" (depending on JPEG quality) compression but much faster.

NB:

  1. See above re additional PIL overhead.
  2. Produced with python src/qoi/benchmark.py --images=koi --implementations=qoi,qoi-lossy,opencv,pil --formats=jpg,qoi --qoi-lossy-scale=0.4 --jpeg-quality=0.8 on an i7-9750H. Not going to the point of optimised OpenCV/PIL (e.g. SIMD, or pillow-simd, libjpeg-turbo, different JPEG qualities, etc.) as the results are clear enough for this 'normal' scenario. If you want to dig further, go for it! You can easily run these tests yourself.

Developing

git clone --recursive https://github.com/kodonnell/qoi/
USE_CYTHON=1 pip install -e .[dev]
pytest .

We use cibuildwheel to build all the wheels, which runs in a Github action. If you want to check this succeeds locally, you can try (untested):

cibuildwheel --platform linux .

Finally, when you're happy, submit a PR.

Publishing

When you're on main on your local, git tag vX.X.X then git push origin vX.X.X. This pushes the tag which triggers the full GitHub Action and:

  • Builds source distribution and wheels (for various platforms)
  • Pushes to PyPI
  • Creates a new release with the appropriate artifacts attached.

TODO

  • Make benchmark.py a CLI in setup.py
  • Create a qoi CLI
  • Benchmarks - add real images, and also compare performance with QOI to see overhead of python wrapper.
  • setuptools_scm_git_archive?
  • Code completion?

Discussion

Wrap or rewrite?

For now, this is just a simple wrapper. We'll leave the original project to do all the hard work on performance etc., and also maintaining (or not) compatibility or adding new features etc. We make no claims to do any more than that - we're basically just porting that C functionality to (C)Python.

On the name

For now, let's rock with qoi because

  • We're already in python, and the py in pyqoi seems redundant. For what it's worth, 3 < 5.
  • pyqoi seems like a good name for a python-only version of QOI (useful for pypy etc.), which this isn't.
  • qoi is generally new so let's not overthink it for now. We can always rename later if needed.

What's up with ./src?

See here and here. I didn't read all of it, but yeh, import qoi is annoying when there's also a folder called qoi.

USE_CYTHON=1?

See here. Fair point.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qoi-0.4.0.tar.gz (3.3 MB view details)

Uploaded Source

Built Distributions

qoi-0.4.0-cp312-cp312-win_amd64.whl (90.6 kB view details)

Uploaded CPython 3.12 Windows x86-64

qoi-0.4.0-cp312-cp312-win32.whl (77.7 kB view details)

Uploaded CPython 3.12 Windows x86

qoi-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (519.1 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ x86-64

qoi-0.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (492.0 kB view details)

Uploaded CPython 3.12 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

qoi-0.4.0-cp312-cp312-macosx_10_9_x86_64.whl (102.0 kB view details)

Uploaded CPython 3.12 macOS 10.9+ x86-64

qoi-0.4.0-cp311-cp311-win_amd64.whl (89.7 kB view details)

Uploaded CPython 3.11 Windows x86-64

qoi-0.4.0-cp311-cp311-win32.whl (76.9 kB view details)

Uploaded CPython 3.11 Windows x86

qoi-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (526.3 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

qoi-0.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (503.4 kB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

qoi-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl (100.6 kB view details)

Uploaded CPython 3.11 macOS 10.9+ x86-64

qoi-0.4.0-cp310-cp310-win_amd64.whl (89.7 kB view details)

Uploaded CPython 3.10 Windows x86-64

qoi-0.4.0-cp310-cp310-win32.whl (77.1 kB view details)

Uploaded CPython 3.10 Windows x86

qoi-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (488.1 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

qoi-0.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (468.3 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

qoi-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl (100.7 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

qoi-0.4.0-cp39-cp39-win_amd64.whl (90.2 kB view details)

Uploaded CPython 3.9 Windows x86-64

qoi-0.4.0-cp39-cp39-win32.whl (77.8 kB view details)

Uploaded CPython 3.9 Windows x86

qoi-0.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (490.6 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

qoi-0.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (470.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

qoi-0.4.0-cp39-cp39-macosx_10_9_x86_64.whl (101.3 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

qoi-0.4.0-cp38-cp38-win_amd64.whl (90.3 kB view details)

Uploaded CPython 3.8 Windows x86-64

qoi-0.4.0-cp38-cp38-win32.whl (77.8 kB view details)

Uploaded CPython 3.8 Windows x86

qoi-0.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (498.9 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

qoi-0.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (477.5 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

qoi-0.4.0-cp38-cp38-macosx_10_9_x86_64.whl (100.5 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

File details

Details for the file qoi-0.4.0.tar.gz.

File metadata

  • Download URL: qoi-0.4.0.tar.gz
  • Upload date:
  • Size: 3.3 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0.tar.gz
Algorithm Hash digest
SHA256 f0715587e57944a4c0b9c3c7c54b45f7e4da29ef666ffcf75d26e286167f2266
MD5 332a8a7f4bc63d25227c5c19c640d12e
BLAKE2b-256 4f609818b97b0517e197c9149cc35eb0767d188b8c9e811c4ac6684a7e9a6288

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: qoi-0.4.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 90.6 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 05dc29e5e0035ed0075a771eca8f9ee58fe417feae652b6ee2326ce98d7cb9a9
MD5 30f0f17b1dd65b99742767762cb49d55
BLAKE2b-256 e05ef98e244e244573f2a291cbcb310a0890c19e364227b4fc0c96759aa8426f

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp312-cp312-win32.whl.

File metadata

  • Download URL: qoi-0.4.0-cp312-cp312-win32.whl
  • Upload date:
  • Size: 77.7 kB
  • Tags: CPython 3.12, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 35dd657168dec69ccda4b0257fee078d5b3d305d759367ac8bff361f7d76e59b
MD5 ffda41ecbafe3621a431ee2ef6bd79e0
BLAKE2b-256 abde6041f8c2d166d3c1eaf900ae000406630e1756de6cb93e3d38076d435db6

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8c85517211fcf7e9f30740fe2395d4c3db51ced84c85479b2aeee4204bb057b2
MD5 ef8e3d401b9f0e429514d6b49ffcdfa3
BLAKE2b-256 c8530eafad01f8b2a474ea30718dc84f21b4a6639cdba683ac06129657fc241d

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 712574054e76fd5dc49436392f4682c76b3bbcda242d12e1dda2f2fe4eb77127
MD5 08bb5cd581ee1a0e040ac901b86ba218
BLAKE2b-256 22f2a480f9d594453f92d7c13924fcb4cc0ac3e34f4a05455581e01652849f83

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4489e0f864e28a81d30d0825492db9b3a5c1087d0dfc1556921b0815bb210561
MD5 1a2482d0de57d5699ca9d030850eb8e7
BLAKE2b-256 1b432a48599321a216f1de6f5375ec56db74c7a67f9d1beff04db56cf4fe540a

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: qoi-0.4.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 89.7 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 6f34b0432e56842183a9863cc01f851a52fbe2fe41c4ea47e9ee7e9d6710933b
MD5 294c276e5dbcefa3df2e70e85f2d2f9c
BLAKE2b-256 f84a0b45806b009a3950b006af0ee9e1e12af896c0e22a8183c59323925148c2

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp311-cp311-win32.whl.

File metadata

  • Download URL: qoi-0.4.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 76.9 kB
  • Tags: CPython 3.11, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 9ca4d6e1ba09d5d5c90e8e79a665c0da21f8b0b4b0017a55beef42f797d437f8
MD5 f96c9141cee5fbb0acbc3496aa13c5ba
BLAKE2b-256 97d3e3fed648a05bdc786ca863c52c7e992b327c2734f288d4ab697ce9262adf

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b21f5812f8f4c2b46c79efc3f6320f24d575bf7007527a2a6d9c3b7e1278c27c
MD5 356cdf58b4aa492926ae2eae7117a09c
BLAKE2b-256 93e88dac78b8479a4835eed58150195aa22e25859acc2a517d08237db586d451

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 c44e6ca04be9fc4c8e2d6ad29677062dd8bd7c2f86b48ef9ff2aa1f8b6665b8f
MD5 7cfe21c904d93ff3c6324add20056308
BLAKE2b-256 8bcfd592190eb004d9f2a37d361f1f3562946e5505f39962247e4b3e876ed717

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4be84dbcfd76f3f074f0372e13ddee19c9b8766ada619cabc393b5ff3ef39db5
MD5 05bb3405d71fd8e5677ad3a1f2be1212
BLAKE2b-256 ee946446ebd0758a67dea886fadf21be6c195937bbd1ed0239a1dc6c9ca179a3

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: qoi-0.4.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 89.7 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 c09922d4326920d1ebf2a6556880b72c6822d6b7ec1ca5bf3c3c5b3aca771b6d
MD5 d63231e82272580fbb20f24e2ac62eee
BLAKE2b-256 93658b5caf44397fb71c38311904ae894ac03b0e93be40e53eb8f99034d093b3

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp310-cp310-win32.whl.

File metadata

  • Download URL: qoi-0.4.0-cp310-cp310-win32.whl
  • Upload date:
  • Size: 77.1 kB
  • Tags: CPython 3.10, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 c3e33d4545a99c5ecf10e36c2579406a4360c2065dc23515fd1ae11641e1dabd
MD5 4fb3c71e1af942dccedb45c25c7d1246
BLAKE2b-256 5b8c3ecf0cb596e944d15e852d844f10e2f140a408a12b7840c15638ceb23dfe

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2bac10f296a370a2d0830c437f67f525b5a02342db3116028f8026738f7907a5
MD5 34fcb1c86b85d40d8d8b2916c0f60218
BLAKE2b-256 460cb557cced499b6fe5ce956ceded9bdd1e80cc514974f22e96757d49133db0

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5020cb86b88fac1222d594dd8ad1738c0bae358ae1d565fee79e522d1c195bc9
MD5 716cf1b0249d046d7d809d9c83ccf005
BLAKE2b-256 68772134a19afc6dc1fa81bf6357c3a0ac6904245b426a5bca5790de06e7bd0e

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fd850a71eebc56654bb71ae3aa8053b28ced2f29b2a9e3873c9d77663d94473b
MD5 1030260223373c85665dc91afc82db34
BLAKE2b-256 42448115a7623b34e03e418ebf8b7e799eb210309eac6b749e7eb794fc187cfa

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: qoi-0.4.0-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 90.2 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 59aa6817c7b77f84d2b9cbb95efdd7939a3768a4b851bffb410149010669e788
MD5 c7825b488e8983cc57da523f0fb32032
BLAKE2b-256 cde1ec972cdd74a9988e0671f3d2491bb67944ee429dbe667804b30af06b6fd8

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp39-cp39-win32.whl.

File metadata

  • Download URL: qoi-0.4.0-cp39-cp39-win32.whl
  • Upload date:
  • Size: 77.8 kB
  • Tags: CPython 3.9, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 ef6d76c98c69a74b9087a0ead600832fb293978de989337d3dbd5b3a7488f429
MD5 6e9fb123c4b6d6f6fdcd7b6b2a1b2166
BLAKE2b-256 b8d6b6cb7ee11f9f1f95b8322c1ff5f5c041ccee75321ae9e73376d783487493

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 11a1c647b273e9f1fa181d2687ca282a3aa1f38206eecfe179b08f70a9b7d60e
MD5 6787eac7145473194f962378df3d0e3a
BLAKE2b-256 23328a66e4fe4d69f77f0feb54db42e27b67b1bb674e1265f942ec3d6b17d999

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 41d43e45997188d9976791623ef5d79bfc3fb40249fb52a021f3d3ef5999625b
MD5 07848517dafaa380dbc09e830df7a559
BLAKE2b-256 a7a353789d3a8f47af9d353166f2a0400369ef1f84be9b8083135f72057a715b

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 29b6f1e55e950408e0cd16d71ce8a4e1e401755bf92c89e305bd7c6e16ad2ebd
MD5 dca05aa6499b4fe01a2e6fd3c0ffdb74
BLAKE2b-256 0c9e79232091998554d3e8892b74dfd9a71e12d9b32c51b0a7bbf746322f78fa

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: qoi-0.4.0-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 90.3 kB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 43815d72c29f51e209143d5cefde5eada850a0341e70f57f0cddc61533227036
MD5 032b2fbfb823ce1fd05de4284eecf2fe
BLAKE2b-256 d171d4f3a480b8cc7be10f89f4b1f417bdaeabba3c7f1337c042e6c3507bdd6f

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp38-cp38-win32.whl.

File metadata

  • Download URL: qoi-0.4.0-cp38-cp38-win32.whl
  • Upload date:
  • Size: 77.8 kB
  • Tags: CPython 3.8, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.18

File hashes

Hashes for qoi-0.4.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 7f189cf1605f447b22c23d8747a4726d458b67b3237256df0ce7da0020fdec41
MD5 6f371609b1be1ea8a95b96547cc2ff9a
BLAKE2b-256 7aeb6ef3905523e7ff83c115ceb91fb66252a1865a61156522cfd60dca6be942

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 17cca33c02811f3974c8757b7702de1e7afbf916e9bdc99d7dfdd19123799e26
MD5 11cfc55a8df66113ed94190ca7cd8de3
BLAKE2b-256 24305cc9d67b776669386dda73a3d9ae8c9df3fd2a8c27466751bdf8a153f188

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 5ae1d935e7e8d60abcafd3951f1dd7b70a8cf165f38a825ee95af566f786cae8
MD5 3551eabf0c19af25d650932d0817b28c
BLAKE2b-256 e2e2060b3bebf114bd1001b4993250698a5ca0cabf30689148e4f165d9d92197

See more details on using hashes here.

File details

Details for the file qoi-0.4.0-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.4.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1911239f05ab9c1b1081d80f40ea671618c1c3dd576b69486e44065c2562b7bc
MD5 0240d8ecb36c337fa3c83bbbd46a4013
BLAKE2b-256 2e5f20c2682554393d38cf5542f5358ffbd5f743ec223ea2dee40ec98996cf95

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page