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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.10 Windows x86-64

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

Uploaded CPython 3.10 Windows x86

qoi-0.3.1-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.1-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.1-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.1-cp39-cp39-win_amd64.whl (86.3 kB view details)

Uploaded CPython 3.9 Windows x86-64

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

Uploaded CPython 3.9 Windows x86

qoi-0.3.1-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.1-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.1-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.1-cp38-cp38-win_amd64.whl (86.3 kB view details)

Uploaded CPython 3.8 Windows x86-64

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

Uploaded CPython 3.8 Windows x86

qoi-0.3.1-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.1-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.1-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.1-cp37-cp37m-win_amd64.whl (84.8 kB view details)

Uploaded CPython 3.7m Windows x86-64

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

Uploaded CPython 3.7m Windows x86

qoi-0.3.1-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.1-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.1-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.1.tar.gz.

File metadata

  • Download URL: qoi-0.3.1.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.1.tar.gz
Algorithm Hash digest
SHA256 c8d44b05baa9c36fd85f56eb74085d4d48f5bfbec5ae0d99d73445df142815fe
MD5 748f5f503deb7be83edbf501960c0aa8
BLAKE2b-256 cce82136e7b3299429cd593573a58d540458fb128bb73851bca44bfd5db2693f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.3.1-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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8b50d28c298e57fa41b1538e9bb9a897caf8bcbb39755cb4e9d6281021bb7b01
MD5 de037a99bbff02f7e118201f4be92c45
BLAKE2b-256 ed3514a4c355bd8d5e7e5ceb2b957a7bcade7b4a70b63f56bee97faa4c074589

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.3.1-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.1-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 776b8b61166126e700a708a3c4f1c181744e6c1029f52ec6ebdd1f973c79eb20
MD5 7dab4cd52b2181b09f67968dad854cdf
BLAKE2b-256 65cc50008d497aeb3c6d27061c8eae20882367722678e595b2bfbdf3a8b6498d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d46c139b4d2cb30ddd33bae59895d3e9d2224e36f160da21cacb8d678d87cee2
MD5 cc462ad7044603d12d9e1f3e3b2f0ad0
BLAKE2b-256 410efda1dfb2789a04e22b660980d45b1cf98e0606695494c1da4dedaeda6b6a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 03fdda5805db242fa7d3ba1d1dedbd6faab0de49a34fa60f574a3fe72c0c7df0
MD5 089d87475be8fe4fb465c1cef38668c2
BLAKE2b-256 48ec997dc32a9ada4db94b5c340bcf9f1f515a30910cfa2fc47ca12c29c360a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 fcba9d7dc0a873f4150eadf6c1facc452c2b0692985b12c7c0ee639f9368cb3f
MD5 f251c6ec1ad996cf0b97e0997721b660
BLAKE2b-256 1e5e0e0281a990241ce37154014a7d27c9c169a60ec241d6a03216381822880f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.3.1-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.1-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 415c329b541cce8c87006fb7485192f89a105fb2e98ad71f0225011ac1299ea5
MD5 9853ce2e3a0f45b81a3ad56443b395fb
BLAKE2b-256 daa117b7e889586734c6032a66f8440504b9cec9d8ff945ed69ca9939a8af71a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.3.1-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.1-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 6d76e2306b9364cd2dfeaf37c0be29525589aa16f46f0b655fb4b06d1e474d0d
MD5 4daa0537825cd09dea5ae23fd23d1667
BLAKE2b-256 ebd93d5a71dfd404044bc451be3536c06e1d5089d2e451dbb61ab72298bb6720

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9d085cfac2bdb4269a176a72d8d5d91f646fa2fe48669e01f10cdae2d4dcef6a
MD5 e4eeee1505d97ae355386076bb86bd87
BLAKE2b-256 8e87cfc133c4d370cc3b9a6d5075b7b1df5f63de21bd0e1428d609338c65539b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 dfb18573816546b83ce52664c1178aea0a1c7546a4433625cb6a82f9e6ffc0d9
MD5 7f8ef0e0d852d4d110c6cc7c88f5b5cd
BLAKE2b-256 44afbe59a059ddea97a6b8123cdd4c1bdb662a92f67ffce0211934015c391883

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 980022ddf228c0f664075e0dc4370e820b125f64c24ba096b2399b886da20e00
MD5 6d266047c9ea7af15fbfe274320c9c19
BLAKE2b-256 a2bd4f906ea976f841a313b63c7aa43a9de75799c63455a18d358fefbfbc5313

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.3.1-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.1-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 b125bc98200bd797f810ac7bdf60da73c08993592f139cd82d400db291ffab9d
MD5 71dfeae5b782292036a660b8bd085635
BLAKE2b-256 47582ea3d3c7e83e5e53f3ee5db766a8b6288b5ac89b12c2b019ce39eb1db166

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.3.1-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.1-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 af70b6d4595a5a40e3e1ae04dee5beba348fa1daad8aa7a3cebc126e281807b3
MD5 6a51afc8e7aec91ee06388e10d942506
BLAKE2b-256 680f11457f00a89f2efed538078ef5ab99f2fa28d402b2c666df5c0917fbd74b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 8f4395f1550fc2fa771a89e2f47e1a67d97b67d967949f8f288f9925aaa43b09
MD5 b9148dc27e4146ab71f2c3fe33349c0d
BLAKE2b-256 d019a5db38faa98d76aff433c9679a605f2b43806d2fbf93a94aebeda80c8a42

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 8ad53a9491d375dd22e9f170600d27e47545f0b3683b65f8ef54646de8257edf
MD5 4767da3671b14e9572a55e858a579657
BLAKE2b-256 7fbff04bac7283d4d304cea9d57a817bf3e8ac8ec90aec98c59db4005817d05c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 db0434c4df813bc26f0dfd2a0a6a3a80709ffe0e4e90f18e68d60aaaa8d3ef1f
MD5 4998c8d82acdddd7c639c8d95455abb2
BLAKE2b-256 84e54f329d984d32e59cdca9253f2d175d7347a754604705ba4a337310d8beae

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.3.1-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.1-cp37-cp37m-win_amd64.whl
Algorithm Hash digest
SHA256 84e56e9008881c9ce5caf008532c77d7f26c4c767ded805c0f87aa8059b039fc
MD5 94e82fff6533b5070be01b83ca708f6b
BLAKE2b-256 7e17a5d16f7303022d55c57d8c201e48086191832a09377090385b9856898ff9

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.3.1-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.1-cp37-cp37m-win32.whl
Algorithm Hash digest
SHA256 d88344eb716a5159e0a2d3b4dda56dfba94a2b4ec291d9171be20cf8b66eeb13
MD5 59e231b2bc0bfc0dd4ca9ab3df86ba17
BLAKE2b-256 87ce071c37ca10fe31773e0343bb75582d5d8d37c0e53ff5227e48340dc4d0c1

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 879ad11cbb66953d2e210367bd969fd1d3dddc1a3b6a0ecb3ee7f141e1b1e284
MD5 a2b849038b0ccfdcb5ebbcc226aa605b
BLAKE2b-256 e6e6d2d9eb2fe0410ee953d6a613a13302f85b2d12a1089d0c1b487c664c2367

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 3a14436652b2691fe45efb105030bce25d35de933ef33eed560f550dae9de631
MD5 c1ef16d69a4bfba344d2a4c30d38dfe4
BLAKE2b-256 133a5d9fb5ad61d61bee22c4cc829e4247c87aaf74587d599047b32f4f3f6088

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.3.1-cp37-cp37m-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 347bd322180345e78c44efe69a69be77ed5a4f6bab036b70a1b8725ce878b710
MD5 4682aab37e3656ec45ebe9b42015af6f
BLAKE2b-256 2b61f2ced4583d3a2595a3445c0aaeab108b273312f785e506a5d95802b4b253

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