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.3.0.tar.gz (3.3 MB view details)

Uploaded Source

Built Distributions

qoi-0.3.0-cp310-cp310-win_amd64.whl (85.2 kB view details)

Uploaded CPython 3.10 Windows x86-64

qoi-0.3.0-cp310-cp310-win32.whl (71.4 kB view details)

Uploaded CPython 3.10 Windows x86

qoi-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (431.2 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

qoi-0.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (419.0 kB view details)

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

qoi-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl (87.2 kB view details)

Uploaded CPython 3.10 macOS 10.9+ x86-64

qoi-0.3.0-cp39-cp39-win_amd64.whl (86.3 kB view details)

Uploaded CPython 3.9 Windows x86-64

qoi-0.3.0-cp39-cp39-win32.whl (72.2 kB view details)

Uploaded CPython 3.9 Windows x86

qoi-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (438.9 kB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

qoi-0.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (424.6 kB view details)

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

qoi-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl (87.8 kB view details)

Uploaded CPython 3.9 macOS 10.9+ x86-64

qoi-0.3.0-cp38-cp38-win_amd64.whl (86.3 kB view details)

Uploaded CPython 3.8 Windows x86-64

qoi-0.3.0-cp38-cp38-win32.whl (72.1 kB view details)

Uploaded CPython 3.8 Windows x86

qoi-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (440.1 kB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

qoi-0.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (427.0 kB view details)

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

qoi-0.3.0-cp38-cp38-macosx_10_9_x86_64.whl (85.0 kB view details)

Uploaded CPython 3.8 macOS 10.9+ x86-64

qoi-0.3.0-cp37-cp37m-win_amd64.whl (84.8 kB view details)

Uploaded CPython 3.7m Windows x86-64

qoi-0.3.0-cp37-cp37m-win32.whl (70.8 kB view details)

Uploaded CPython 3.7m Windows x86

qoi-0.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (408.2 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ x86-64

qoi-0.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (396.4 kB view details)

Uploaded CPython 3.7m manylinux: glibc 2.17+ i686 manylinux: glibc 2.5+ i686

qoi-0.3.0-cp37-cp37m-macosx_10_9_x86_64.whl (85.2 kB view details)

Uploaded CPython 3.7m macOS 10.9+ x86-64

File details

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

File metadata

  • Download URL: qoi-0.3.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.16

File hashes

Hashes for qoi-0.3.0.tar.gz
Algorithm Hash digest
SHA256 c4f350098797dbb324b7e0a4f0964c0ddca63ce12e4fc5b1abd26a2f76cf3e38
MD5 7d7994068eb4249b4ad779cce6cec4f9
BLAKE2b-256 aea68b5abc465d6f3fd7f8bff545ab18d0cf15f9be24e0171dcf3178f97ae2d2

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for qoi-0.3.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6db9c56c4747ca34bd461c1cd07fa83b32446c2ede9119f8d7b3f8a663aaf628
MD5 1413edc795dc11283f84424d20e383b3
BLAKE2b-256 2b9690d250bc881ae9a2eb1935fe4fe5cae0783aef43d6ec42647bbe10d153cf

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for qoi-0.3.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 0dd0d6a08ccbb4fd0c50dd88f873adf7e295ae29cbb3c7260527cb8bd089c597
MD5 42951ceb0fe1932131abff2baf92e199
BLAKE2b-256 151646cc3eb238a08cc98fff36da4bfc720b0c11fa5338f322fa6ed77cc187d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ad7138e59c6ef35295984f5ecf075c82e96525794cbc2904945c81d439965357
MD5 bcf64dcdac84b2536aae3cfdec544a67
BLAKE2b-256 244522a8437845761453c6814cda451155e6de009d074c91dafc0730442500a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 8ee8b32529f60ce1568c865c98d72bf66eabf0cdfb08b3063196827fe019f5d5
MD5 d3ffe20e586095a07fc3c05fafc15437
BLAKE2b-256 169801620ad3c4cfebe9564d8f84abeb003db978d6b737cf3dddf825123b84c3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8ffbbf8bf07d7a3c8250b95d8fa11fb9acda1878dd858983743f805dc32e00c3
MD5 5ba1e5c304b12c3312849ee79c813cf9
BLAKE2b-256 203fb2cbe5e7e50d0a1640f88f14a85b51322d487248c3b3a1a216f022299931

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for qoi-0.3.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 e4cdf981a927712ca123fdae1167a434638b9145a6177798556f8ad9c0a06487
MD5 f90e61bd56680125cd2d61219865ad26
BLAKE2b-256 c3284a69346b91003366717074f0145cd2f5b09bc30368b4893da65e19c8a72d

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for qoi-0.3.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 a92e8eb0d1f2dd60bbddca27bbe42d9ff06139dd4c4a2c05da5765df07b40e8c
MD5 179921998affc347e81532a5244092df
BLAKE2b-256 46ffdbeb27e93c8183eb7a17ceb2da88630d59a32242c7b4f77076b9cacdaeec

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9c70aa605909e434be66651de925579b54fd6364b5a2a6031806b136a72260b6
MD5 62ac9fcb410d0600da67650ae22af7d0
BLAKE2b-256 116e20cdfb8795b82294e1dcc3a85e54636255ade4e1b047cd156702305450dc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 2ffadd61dcb0bfe1680faa471d39b7fd4e1469ca3c9370eebfcea4215c8f365c
MD5 9f6be90a0249fae91df2607c04e69cb6
BLAKE2b-256 f463cbb7680a665bdff53c3d56fe16c6347b32bfda7ec329095d8b5a2cfb6789

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 420d19ff032b53369d5a0563c7455dae4503ef7088d1f0d0635935214f850edd
MD5 9f0b3264000e453f9e59585d9a55ea39
BLAKE2b-256 d2314ab471a420c4db3e10731eccc9619335d44b627a2ec7e84536dc0def0a4f

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for qoi-0.3.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 e746462acb26f8ead1d4b1dec48093848cca60847b83c53a93a98dd8cdafe9e9
MD5 9175622c2d17a2409167719617f0c64e
BLAKE2b-256 0ab662c9d6d3e99042a4001dd0e033eac44b02f7c9e59b609f26965daa26211f

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for qoi-0.3.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 68a88819075dee1146ceff6630061d14f43437123820da01c96ee11f0f780050
MD5 a398d5f767131e9ea6fd671d0a97e96a
BLAKE2b-256 68882130a111e77820e06f1b86e5efc2c577403cdf0f90db348d31929023e6ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 98681beca5ff4029145f1bb83aebb5c5c78254ce079ba50190f1ba5624af8268
MD5 337cfe55ce15aba9d0f29d3cb911ac07
BLAKE2b-256 830918fb962dc9ac37c7bc78a66c8bc82c0a36334caa24c9c37c4c5f5edb1bb0

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 35dba2991451c649252610379091650cc641eb38a00088b0db6113039741463c
MD5 1043ee39aff2c47b3ea006ad5e299273
BLAKE2b-256 3e6f3fd2bd7d05b663cf274a6ff4c35ea611da9d7eb280fcd0fb85043da8c4de

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 4777be46258f081a4526cc4b1117e5ff152a4cedc399b60a40ff0283c0319f1a
MD5 f3966bf29a17021e0a2e043b405d7e65
BLAKE2b-256 d8aa31486cb30e8618583918e9ba20872c3175a499f2cf02c248fe4eec5e5c8a

See more details on using hashes here.

File details

Details for the file qoi-0.3.0-cp37-cp37m-win_amd64.whl.

File metadata

  • Download URL: qoi-0.3.0-cp37-cp37m-win_amd64.whl
  • Upload date:
  • Size: 84.8 kB
  • Tags: CPython 3.7m, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for qoi-0.3.0-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 c6bbd41ef78c96fa8815b3bda372d886827fbc56b3c0f2fdfab979e93a3e78c6
MD5 6830861906e8097750a1e3f52bffc184
BLAKE2b-256 0b05a7d677f7751f040f5a64ea8a1eb0f4e191b9a80a5da0b8f179ea3126152f

See more details on using hashes here.

File details

Details for the file qoi-0.3.0-cp37-cp37m-win32.whl.

File metadata

  • Download URL: qoi-0.3.0-cp37-cp37m-win32.whl
  • Upload date:
  • Size: 70.8 kB
  • Tags: CPython 3.7m, Windows x86
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.9.16

File hashes

Hashes for qoi-0.3.0-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 bb9cfd134d036190803a90e9dab800fe007ac81cf8c654dd976b781f7dfe05bb
MD5 83174e6392386d22563a0518eb430cf3
BLAKE2b-256 d526cd153eee9e532eebe076e43e8bd8d59a0ef959340017a48c7d5303f11c32

See more details on using hashes here.

File details

Details for the file qoi-0.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 50c2d2074a1b7f5bedc3adef45a0c8c67a8362f3669a053c8ddb49d29abc1c67
MD5 35a5466a1c050e0854eb68aa23c27f13
BLAKE2b-256 dbebd7782425d1c166d7a3a66fb41713264a469c0ce723c932647cb1ac5dade0

See more details on using hashes here.

File details

Details for the file qoi-0.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl.

File metadata

File hashes

Hashes for qoi-0.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a2b6bc89eee23e1368a92c98e33af6b3b873345705b86d31a74b84a5406ee9f8
MD5 efaea36d17b046e4774b765024dbbb37
BLAKE2b-256 32ba8bd62f703a5a170d614004f00af19962af825e55b2978f83bbc2871897a9

See more details on using hashes here.

File details

Details for the file qoi-0.3.0-cp37-cp37m-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for qoi-0.3.0-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 73b277e36bdeb8dd6ff0d1e18d9c400f6050b2f929befaece507e865372f6ae6
MD5 3176c01fab4019ba2ec0cb402ae6cf29
BLAKE2b-256 8c441b2cdcde7dc1604205b1d890c467b334664aed41997e0011a36c0d58ba63

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