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

Uploaded Source

Built Distributions

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

Uploaded CPython 3.12 Windows x86-64

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

Uploaded CPython 3.12 Windows x86

qoi-0.5.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.5.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.5.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.5.0-cp311-cp311-win_amd64.whl (89.7 kB view details)

Uploaded CPython 3.11 Windows x86-64

qoi-0.5.0-cp311-cp311-win32.whl (77.0 kB view details)

Uploaded CPython 3.11 Windows x86

qoi-0.5.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.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl (503.5 kB view details)

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

qoi-0.5.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.5.0-cp310-cp310-win_amd64.whl (89.7 kB view details)

Uploaded CPython 3.10 Windows x86-64

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

Uploaded CPython 3.10 Windows x86

qoi-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (488.0 kB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

qoi-0.5.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.5.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.5.0-cp39-cp39-win_amd64.whl (90.2 kB view details)

Uploaded CPython 3.9 Windows x86-64

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

Uploaded CPython 3.9 Windows x86

qoi-0.5.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.5.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.5.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.5.0-cp38-cp38-win_amd64.whl (90.3 kB view details)

Uploaded CPython 3.8 Windows x86-64

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

Uploaded CPython 3.8 Windows x86

qoi-0.5.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.5.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.5.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.5.0.tar.gz.

File metadata

  • Download URL: qoi-0.5.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.5.0.tar.gz
Algorithm Hash digest
SHA256 b18f6a9435046f98da8ff5f8079b837a91944360a8f968216b02ff1b990ce138
MD5 07dbe725a20ab27480447002202262a7
BLAKE2b-256 65f4fc7474eb9e4584650bb0b5fb154264c0119bba68fe220ef62679b132a60c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.5.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.5.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f64b02f109b8bcf4a9d35c46ad34b0318c959e8add7ce740a79aa4a3a357055a
MD5 782a839c52605547f00137fe090298ad
BLAKE2b-256 d3ec238ba8b89076be27c1f1d7618ece5cc8d5a507f91cf0464a7f982b87e368

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.5.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.5.0-cp312-cp312-win32.whl
Algorithm Hash digest
SHA256 a3671664f9a6ad6a44ef792cb5ea9721fd87d364c58cd7edbb6fad909205f180
MD5 fddc4de2949ee10fb8391521c151d023
BLAKE2b-256 68ea227d82fade84e2e4ef632841d30acd57f91086a8b5f5263a46903e5b37ea

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d810cfd76b611b8da2bf210904d6a081e23ff09cdeb7c2ad2ca0e7b58f4d3a41
MD5 fb2d1b7a8e8b2319254a3d9a324190da
BLAKE2b-256 f1d3437dc8675b0646abe6a2c940d0adf5125e6b423cf00ad625e78870c01c67

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6300354f28d451e11b37373c75b33cd3add43b3f45e4aa39f80c4a416e316870
MD5 764dffbe04aebd20d06fa2624381e5a5
BLAKE2b-256 5f0aac4b3c9a97b96f2095a8f1c9801c807826609383c65ff00fe22361869f24

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 7111f78e9b5ad43972f0a00b116c8634a07ea78d4540497c455016e859f1befd
MD5 d7f11c3f2ed40dc679f1c211805230a2
BLAKE2b-256 004e4a2fcdef3ca2d59a02f88b1ce2656ffc12c32918d1d07055f57128481920

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.5.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.5.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 47fd8f5715616be282b17088b0d5cf8e9319c7eb0f1e25b4270f8ec0d8d5528f
MD5 d9236cb530b1a025c517a69b58a2e492
BLAKE2b-256 a634481b3ae2b90e074394c7b3053861c236ab5cdf99966f2d59605f1cf74df8

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.5.0-cp311-cp311-win32.whl
  • Upload date:
  • Size: 77.0 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.5.0-cp311-cp311-win32.whl
Algorithm Hash digest
SHA256 29957f3ea1751eec11383e6dcf2a067b6fabaa5bf9eca88a44cb61f11210061c
MD5 757da1ce64c2a6b7b61a990d146e82bc
BLAKE2b-256 8be86a8144bd2f1aced56974449bafafe66836c22179d028a8f250e1b44b1b48

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a37b82aee011fb7d4fddd4fd257fc37cf26663b09603eb06e684d7b4f1c6398c
MD5 f7a5617f9878730aab33fe241c7ba6a5
BLAKE2b-256 26e5fbbfb0d261e7ee7601ba40bff6d6371c9706a2b1d1b1e75dfcefabaeb798

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 cc233f9270a25c88f3a972d8edba4bfba3d663945c5553db6eb1bfebcd25b86c
MD5 e86e3a9418c9722ca5183f8f36d87f7c
BLAKE2b-256 ce8d6bbc8e6264ced3a8aea70b9c6b03a17597fadf6ab52a6637d4e02ddd2d40

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 6b6b8c0e3d0608293011d07f07caa805494bfb64ee68726d56ee929edbd3548a
MD5 2f4b5cefe48f4eeb3370d62e4d4f8e99
BLAKE2b-256 22fed83f01559e1de3ea12b8b0afe37493dc67842464d540a95a72123b214645

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.5.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.5.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b1e199b2f751bb26da0254243255fbfdcbf43e8dbf1e9a37bd74767dc2b8c319
MD5 d49ce5e550a2e8d7f9d219b086090870
BLAKE2b-256 9ebe83eab28ac8083fec1205b41adde65f30d65a2e4b6022f9c494e7fd457c87

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.5.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.5.0-cp310-cp310-win32.whl
Algorithm Hash digest
SHA256 6325483fb324480144f2ba5990af9d9c20102932c2a557bd1fe28f5d462d5332
MD5 c3227fda7fbc4fb262fdde5e6a68dcac
BLAKE2b-256 9945120bda5d304da3f4d7777e945344ffd3c2dc5481aa4000afffe8612189e5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d2bd3c937118c42de31123ea2c76a48ec57f17bd14d594a26298dd955f70b3c3
MD5 f315947f909f3daadb77ab165684abe1
BLAKE2b-256 91d609ae9f4ae50b01aa59e3bf19e3dd8a64fb5ba112f6adff311c86869e4356

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 884eb933f6162cfe93c26d4f2b7a578b58af65bb6b7344fd436e2008cac20390
MD5 7edf8a9154ce04fde7f3b35e76b8ff9d
BLAKE2b-256 22deb3639273ed3f39872623ffa5799d9f0f78a2235487253783935a3802eef5

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 d4231bbc8669db12848988686cd014f0a7fe3c9af3b2b78e36f0552bb72782fd
MD5 ed31c91214309edfcd86bb7a3bd3faea
BLAKE2b-256 8623c5e63245ef9a573ad2fe610ffa5632401802dd549f53704846308573c493

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.5.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.5.0-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 6c68fe3b8a0aece955372b6611ac82b7310d29a45f0e720215e79bd3a63664cb
MD5 2873f63f8ef163f1f707bc8f84f0b768
BLAKE2b-256 7196fef41c5dab5ed970d2fc805aa1cfd85b0dc3366116ddf56ea674ac403e96

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.5.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.5.0-cp39-cp39-win32.whl
Algorithm Hash digest
SHA256 2f9a16740763d908cb5c8f32e2150b905c9c76b5e668aadd2db855fddb5aba9a
MD5 92e4c0df848f33828e01e88780bab06e
BLAKE2b-256 f8aaeb138276c11aef0b73d4fc3bfd4738c66001c92c561b7d2d22609bd71eef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 d3915f1eb04ccc1be927ea950cd05317bceb6673c7484971c8c3a5ec35f19361
MD5 7e5c9dca44046a30c97e9fe0f87edfa8
BLAKE2b-256 2b9c0bf6fd83a8dace65bd25156b8e2d585a235c5339d2a62683f57678e9a697

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 a17758d8aaf4cee9d32bdbcac22ae2534a59e13c32a144d6fc3798fc0eff4fb0
MD5 653c08c4bb2d0cb85e307d3dd105ed5f
BLAKE2b-256 2a6a54d7adc7c04ac330e20c7ba7189339c243d5be26f1a7999c953264c6f662

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 2b877b5316a2e2e8acf1c70305e79eab659e1d84a6b4aeee6725febcff491ddd
MD5 c1de228408eef6e33f3a8b121679d4b8
BLAKE2b-256 cebf8ba94bdbfbf6bf668f1899cb21aeb7a959e589a50ec8c006d772ca32dce3

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.5.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.5.0-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 2f8dd81f20b26b8f6a2708807518fe8fdd37602fb803724c6887e3f466c25d78
MD5 155ba6828087283918fbabecbff62efb
BLAKE2b-256 a2ad78bca03aabcf727a3f4ee6e7cbd66c1c022c47f2b53249537f5a3f95c811

See more details on using hashes here.

File details

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

File metadata

  • Download URL: qoi-0.5.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.5.0-cp38-cp38-win32.whl
Algorithm Hash digest
SHA256 c690522599e1f4dbaa7cbb571565b3549b5df1fb3659fe1d76b5eff48e9225e6
MD5 9d9329228e4fc640080692462fce7d08
BLAKE2b-256 8a3d761bdab9a27d71eb372873557baa9c554b5ba890c1f353dc86fca6a14ae9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 239be60385557b82bc21a95832c2889675a7941dae1d775b29b6f9492cf4e43e
MD5 3f1b855eede3c3ae15f788861e467bfa
BLAKE2b-256 a21f890687c7ef44c25e4489f9b40c04bace95b0dd8d17ab435c10c0954e6b2d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl
Algorithm Hash digest
SHA256 6fdbc5050b5c483c8b4d0af0d62e94703b8b66e5245801ff740baed555cf3975
MD5 ebeab9cc5d4838519dba195a490982e1
BLAKE2b-256 3cff9406fb5d5251a5b9612d06ec0c99a766f265f58e9e72dcffdf4f3f985b6a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for qoi-0.5.0-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 368b3a6ed319720f686637e14f304819851085bb5c2018eeec739df535dd1b04
MD5 16b7a5a68a650201c99147323a6954b2
BLAKE2b-256 1dd0e42abea9f9c7bd4a9387fd91ca6af42150af4888091626886f8b58564748

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