Skip to main content



CI PyPI

Fast image dithering for Python, written in Rust. One call, sane defaults, every classic algorithm:

  • Error diffusion — Floyd–Steinberg, Jarvis–Judice–Ninke, Stucki, Atkinson, Burkes, Sierra, Two-Row Sierra, Sierra Lite, False Floyd–Steinberg — with optional serpentine scanning.
  • Ordered (Bayer) — 2×2 to 16×16 generated matrices, or bring your own threshold matrix.
  • Random (white noise) — seedable.
  • Palettes — dither straight to any color set (["#0f380f", "#306230", ...]), not just black & white.
  • Multi-level — quantize to N gray/color levels per channel, not just 2.
  • Gamma-correct mode — linear=True does the math in linear light and preserves perceived brightness (most libraries get this wrong).
  • Ergonomics — numpy in → numpy out, PIL in → PIL out, alpha channels preserved, forgiving names ("fs", "Floyd-Steinberg", "BAYER8X8" all work, and ordered_dither takes the matrix size as an int), typed stubs, helpful error messages.
  • Fast — the hot loops release the GIL; ~550 MP/s ordered and ~120 MP/s Floyd–Steinberg on an M-series laptop.

Installation

pip install dithering

Wheels are published for Linux (glibc + musl), macOS and Windows — one abi3 wheel per platform covers CPython 3.9 and everything newer. PyPy installs from the source distribution (needs a Rust toolchain).

Quickstart

from PIL import Image
import dithering

img = Image.open("photo.jpg")

# Classic black & white Floyd-Steinberg (the default):
bw = dithering.dither(img)

# Ordered dithering with an 8x8 Bayer matrix:
retro = dithering.dither(img, "bayer8x8")

# Dither to a Game Boy palette:
gameboy = dithering.dither(img, "atkinson", palette=["#0f380f", "#306230", "#8bac0f", "#9bbc0f"])

gameboy.save("gameboy.png")

Everything also works directly on numpy arrays (2-D grayscale or H×W×C uint8), and returns arrays in that case:

import numpy as np
import dithering

arr = np.asarray(Image.open("photo.jpg"))
out = dithering.error_diffusion(arr, "stucki", serpentine=True, levels=4)
Original Floyd–Steinberg Atkinson
original floyd_steinberg atkinson
Bayer 2×2 Bayer 8×8 Random
bayer2x2 bayer8x8 random
RGB Floyd–Steinberg Game Boy palette 16-color palette, Bayer 8×8
rgb gameboy retro16

API

The one-stop entry point dispatches on the method name:

dithering.dither(image, method="floyd_steinberg", *, levels=2, palette=None,
                 serpentine=False, seed=None, strength=1.0, linear=False,
                 preserve_alpha=True)

Or call the specific functions — same parameters, minus the ones that don't apply:

Function Methods
error_diffusion(image, method, ...) floyd_steinberg (alias fs), false_floyd_steinberg (ffs), jarvis_judice_ninke (jjn), stucki, atkinson, burkes, sierra (sierra3), sierra_two_row (sierra2), sierra_lite
ordered_dither(image, matrix, ...) bayer2x2 … bayer16x16, the size as an int (8), or a custom 2-D numpy matrix (integer dtype = Bayer-style indices, float dtype = thresholds in [0, 1])
random_dither(image, ...) white noise; pass seed= for reproducible output

All names are case-insensitive and -/_ are interchangeable. available_methods() and available_matrices() list the valid names at runtime.

Common parameters

Parameter Default Meaning
levels 2 Output levels per channel. 2 = black & white; 4 gives 0/85/170/255, etc.
palette None Dither to these exact colors instead of gray levels. Hex strings ("#fff", "#0f380f") or (r, g, b) tuples. Needs an RGB(A) image.
serpentine False (Error diffusion) alternate the scan direction each row; reduces directional "worm" artifacts.
strength 1.0 0.0 = plain quantization, 1.0 = full dithering.
linear False Do the math in linear light (gamma-correct). sRGB 50 % gray is only ~21 % linear light — with linear=True the dithered result keeps the perceived brightness of the original instead of coming out too bright.
preserve_alpha True For LA/RGBA inputs, pass the alpha channel through untouched instead of dithering it.

Input/output contract

  • Accepts uint8 numpy arrays — 2-D grayscale or 3-D (H, W, C) — and PIL images (any mode; exotic modes are converted to RGB first).
  • Returns a new uint8 array of the same shape, or a PIL image if you passed one. The input is never modified.
  • Float arrays are rejected with a hint ((img * 255).clip(0, 255).astype(np.uint8)), invalid names raise ValueError listing the valid ones.

Performance

2048×2048 grayscale (4.2 MP) on an Apple M-series laptop:

Operation Time Throughput
ordered_dither, Bayer 8×8 ~8 ms ~550 MP/s
random_dither ~7 ms ~570 MP/s
error_diffusion, Floyd–Steinberg ~34 ms ~120 MP/s
error_diffusion, Stucki + serpentine ~38 ms ~110 MP/s
Pillow convert("1") (Floyd–Steinberg, the only dither it has) ~18 ms ~240 MP/s

Pillow's single hard-coded binary-grayscale Floyd–Steinberg loop is still faster than our general engine — but it can't do other kernels, serpentine, levels, palettes, strength or linear light. Pure-Python libraries are typically 100–1000× slower. The hot loops release the GIL, so other Python threads keep running.

Correctness notes

  • Bayer thresholds use the mean-preserving (index + 0.5) / n² convention: a 50 % gray dithers to exactly 50 % white pixels, solid black stays black, solid white stays white.
  • Error-diffusion kernels are the canonical published coefficients; error falling off the image edge is discarded.
  • Atkinson intentionally diffuses only 6/8 of the error — deep shadows and highlights clip to solid black/white. That's the classic Mac look, not a bug.
  • The test suite (44 Rust + 82 Python tests) asserts mean preservation, palette exactness, alpha preservation and reproducibility for every algorithm.

Development

cargo test                                    # Rust unit tests
maturin develop --release                     # build into the active venv
pytest tests/ -v                              # Python end-to-end tests

Contributing

Contributions are welcome! Fork the repository, create a branch from main, make your changes (please add tests), and open a pull request.

License

MIT — see LICENSE.

Contact

Questions, suggestions, feedback: open an issue on GitHub or email patrik@tensorhead.com.

Metadata

Release files for dithering 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dithering 0.2.0
File Size Uploaded Provenance Actions
dithering-0.2.0.tar.gz 1.3 MB Without provenance Details for dithering-0.2.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for dithering 0.2.0
File Actions
dithering-0.2.0-cp314-cp314t-win_arm64.whl CPython 3.14 CPython 3.14 free-threading Windows ARM64 Details for dithering-0.2.0-cp314-cp314t-win_arm64.whl
dithering-0.2.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details for dithering-0.2.0-cp314-cp314t-win_amd64.whl
dithering-0.2.0-cp314-cp314t-win32.whl CPython 3.14 CPython 3.14 free-threading Windows x86-32 Details for dithering-0.2.0-cp314-cp314t-win32.whl
dithering-0.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64 Details for dithering-0.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl
dithering-0.2.0-cp314-cp314t-musllinux_1_2_i686.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-32 Details for dithering-0.2.0-cp314-cp314t-musllinux_1_2_i686.whl
dithering-0.2.0-cp314-cp314t-musllinux_1_2_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l Details for dithering-0.2.0-cp314-cp314t-musllinux_1_2_armv7l.whl
dithering-0.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64 Details for dithering-0.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl
dithering-0.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details for dithering-0.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
dithering-0.2.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ IBM System/390x Details for dithering-0.2.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl
dithering-0.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ PowerPC 64-le Details for dithering-0.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
dithering-0.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARMv7l Details for dithering-0.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
dithering-0.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Details for dithering-0.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
dithering-0.2.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.5+ x86-32 Details for dithering-0.2.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl
dithering-0.2.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details for dithering-0.2.0-cp314-cp314t-macosx_11_0_arm64.whl
dithering-0.2.0-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details for dithering-0.2.0-cp314-cp314t-macosx_10_12_x86_64.whl
dithering-0.2.0-cp39-abi3-win_arm64.whl CPython 3.9 abi3 Windows ARM64 Details for dithering-0.2.0-cp39-abi3-win_arm64.whl
dithering-0.2.0-cp39-abi3-win_amd64.whl CPython 3.9 abi3 Windows x86-64 Details for dithering-0.2.0-cp39-abi3-win_amd64.whl
dithering-0.2.0-cp39-abi3-win32.whl CPython 3.9 abi3 Windows x86-32 Details for dithering-0.2.0-cp39-abi3-win32.whl
dithering-0.2.0-cp39-abi3-musllinux_1_2_x86_64.whl CPython 3.9 abi3 Linux musl 1.2+ x86-64 Details for dithering-0.2.0-cp39-abi3-musllinux_1_2_x86_64.whl
dithering-0.2.0-cp39-abi3-musllinux_1_2_i686.whl CPython 3.9 abi3 Linux musl 1.2+ x86-32 Details for dithering-0.2.0-cp39-abi3-musllinux_1_2_i686.whl
dithering-0.2.0-cp39-abi3-musllinux_1_2_armv7l.whl CPython 3.9 abi3 Linux musl 1.2+ ARMv7l Details for dithering-0.2.0-cp39-abi3-musllinux_1_2_armv7l.whl
dithering-0.2.0-cp39-abi3-musllinux_1_2_aarch64.whl CPython 3.9 abi3 Linux musl 1.2+ ARM64 Details for dithering-0.2.0-cp39-abi3-musllinux_1_2_aarch64.whl
dithering-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details for dithering-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
dithering-0.2.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl CPython 3.9 abi3 Linux glibc 2.17+ IBM System/390x Details for dithering-0.2.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
dithering-0.2.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl CPython 3.9 abi3 Linux glibc 2.17+ PowerPC 64-le Details for dithering-0.2.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
dithering-0.2.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.9 abi3 Linux glibc 2.17+ ARMv7l Details for dithering-0.2.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
dithering-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details for dithering-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
dithering-0.2.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl CPython 3.9 abi3 Linux glibc 2.5+ x86-32 Details for dithering-0.2.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl
dithering-0.2.0-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details for dithering-0.2.0-cp39-abi3-macosx_11_0_arm64.whl
dithering-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl CPython 3.9 abi3 macOS 10.12+ x86-64 Details for dithering-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl

Total release size: 12.1 MB

Release files / dithering-0.2.0.tar.gz

Download URL dithering-0.2.0.tar.gz
Size 1.3 MB
Tags Source
SHA-256 checksum
How to use checksums
2b66ab0be0e408e58a6f8eab8dc8fdcda60d8a3822a5571954a4e24666948810
BLAKE2b-256 checksum
How to use checksums
c4d2bdb00d5c968bd800de9b1e0679f743a3c63ddca0ef38bdc989ed4330dc43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-win_arm64.whl

Download URL dithering-0.2.0-cp314-cp314t-win_arm64.whl
Size 189.1 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows ARM64
SHA-256 checksum
How to use checksums
6305ab257669e47f214f2db4b0fbb8b71a9cf408b54db3d5742a320d784c809e
BLAKE2b-256 checksum
How to use checksums
5739f275defee47c7b7936f949fae18e9288bf12e384485199aa0f97c9a09434
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-win_amd64.whl

Download URL dithering-0.2.0-cp314-cp314t-win_amd64.whl
Size 199.1 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
e82eb6cf88b7a51f48086e3a7fbe582858be81f115ecc4260caa233c4390321c
BLAKE2b-256 checksum
How to use checksums
f13acfa1da073e8732a5135a0226b9556532d71b2654f3a8491d1d10fb0fea73
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-win32.whl

Download URL dithering-0.2.0-cp314-cp314t-win32.whl
Size 188.9 kB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-32
SHA-256 checksum
How to use checksums
b2b372732daa435f5f4e9589e9aa3039cee44c215afac47a3bc1be766104586e
BLAKE2b-256 checksum
How to use checksums
62d028a754da4ecaf4f793756f5f88a6309a0c5368944446054e3d413a415cc3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl

Download URL dithering-0.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Size 527.9 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-64
SHA-256 checksum
How to use checksums
06c9af5a4ba29f9248e80c2a050c44a36a596e88ed57f32394b0062f29352654
BLAKE2b-256 checksum
How to use checksums
948ad6dd1f273404cd6d41aead20ec0f69cdcc7818e8e513081c6b519a32bda6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-musllinux_1_2_i686.whl

Download URL dithering-0.2.0-cp314-cp314t-musllinux_1_2_i686.whl
Size 557.0 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ x86-32
SHA-256 checksum
How to use checksums
67cb0db174ff8215a745296aad7ca7b592ca1291e58192cd9b6b14ca3440b6cf
BLAKE2b-256 checksum
How to use checksums
8669cdc11347885326a248d764b8e836f57e52f0a52d7c29a980958bffd29e17
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-musllinux_1_2_armv7l.whl

Download URL dithering-0.2.0-cp314-cp314t-musllinux_1_2_armv7l.whl
Size 596.2 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARMv7l
SHA-256 checksum
How to use checksums
aeecad6df9957dc7b1c709f48f55c9a70d9c8423897a756ab8bd9565a3f293a2
BLAKE2b-256 checksum
How to use checksums
a7e09589b775d871eed6589b48dd3a55b3be0f0e6db87593f235b8e22bc92651
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl

Download URL dithering-0.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl
Size 487.5 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux musl 1.2+ ARM64
SHA-256 checksum
How to use checksums
20170d96f02a8fcc721e08d877227b1d17b494d9f286000db453c1b6e30d9913
BLAKE2b-256 checksum
How to use checksums
2b41efe4fe07941a29543087c20b9aebf79ccf21a57704b0cdf3f7e51335f8b4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL dithering-0.2.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 316.6 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
2436789ad5ebece1ad0edcde80caf84d3c6b5bf9394f248f69f6ace080e3052a
BLAKE2b-256 checksum
How to use checksums
2c06cfd1e197703ed515ba9782c595f0076840ac1ed0f57eeae6ae2843b9c08f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl

Download URL dithering-0.2.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl
Size 353.1 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ IBM System/390x
SHA-256 checksum
How to use checksums
e16a60c21486af940085688b50be4cec5ccd4a63fc2c7944c76dc482fc641ecf
BLAKE2b-256 checksum
How to use checksums
53eff69ab873de5c5aaff9c5f81786845583f8c81c20b2dfba2836765571becd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

Download URL dithering-0.2.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Size 354.1 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ PowerPC 64-le
SHA-256 checksum
How to use checksums
1e1bd057eca26ad548ee71a33274339eb6045845f06de3a3841534cd54db4d38
BLAKE2b-256 checksum
How to use checksums
7312f960d216d0a348c043c3bc367e3eee22a5ecce0015143f783f84797ff167
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL dithering-0.2.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 321.2 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
9410964a52a730e61ae55dd4049bd992df3aecd8567dc1260c8143526cb84953
BLAKE2b-256 checksum
How to use checksums
79a1b687508c5b53eb9a62d817eb097024cc4779bca94af0d5f3bfc275e2d96c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL dithering-0.2.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 310.4 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
682eac6ba162b3dc1e07cc6a8de7691e42118c333d921b8bc6c7d4ea66e8b2fc
BLAKE2b-256 checksum
How to use checksums
3ee009df972a225e05ad7bb90f4e400e467ff8a4444ebd6e1acdd569e35737ad
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl

Download URL dithering-0.2.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl
Size 337.0 kB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.5+ x86-32
SHA-256 checksum
How to use checksums
51a91efc7c58e79e9cc6c0f3b79c1156b629d7c0d96063fecadd571e79d01456
BLAKE2b-256 checksum
How to use checksums
8bdeb83008bdaff4d4851241ef06ea4f4169a055608b1462bafe90b89afdae43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL dithering-0.2.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 288.4 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
cd4f8aa70504ffd866035a8fcc09f61f1169f7a845c1408db3f20e744e2d6ef1
BLAKE2b-256 checksum
How to use checksums
d4a96218300f854d6a2a0ee45a7157fdcb0b957893c943040ba16aaa66b6670d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp314-cp314t-macosx_10_12_x86_64.whl

Download URL dithering-0.2.0-cp314-cp314t-macosx_10_12_x86_64.whl
Size 300.4 kB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
2305e9b6f285c0d049595f310322eeea382c88e5c87807364a2bf4387ed21fec
BLAKE2b-256 checksum
How to use checksums
9693f7980d0f660769d5d2a22e3f10da8428f14e6898e4ecfc49804d3a207a35
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-win_arm64.whl

Download URL dithering-0.2.0-cp39-abi3-win_arm64.whl
Size 198.2 kB
Tags CPython 3.9 Windows ARM64 abi3
SHA-256 checksum
How to use checksums
ac8b5d48771911ae7cb1871888329bfa61985950faa1fe15da5109b9befc44ba
BLAKE2b-256 checksum
How to use checksums
4c7623629efc9c7300450f0628fcd144e27da4640c547db65673badbf858cb47
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-win_amd64.whl

Download URL dithering-0.2.0-cp39-abi3-win_amd64.whl
Size 210.2 kB
Tags CPython 3.9 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
1ecf5bfe56be991eba82060d437248b76cb832ff53a868558e8886e81b5381bc
BLAKE2b-256 checksum
How to use checksums
d1adf39f63c804faa9bc7d80d2e075e9ccb270847a282f54aae452c26173541a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-win32.whl

Download URL dithering-0.2.0-cp39-abi3-win32.whl
Size 198.8 kB
Tags CPython 3.9 Windows x86-32 abi3
SHA-256 checksum
How to use checksums
f63aa9dac61d38ae21251b757751d7d62ab76684fd223d10af1fb8da64b8dad8
BLAKE2b-256 checksum
How to use checksums
32c6a3e0da1bfcd96dc0038834f2d310c45e09a2c7bd7544897fb27b381497ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-musllinux_1_2_x86_64.whl

Download URL dithering-0.2.0-cp39-abi3-musllinux_1_2_x86_64.whl
Size 536.3 kB
Tags CPython 3.9 Linux musl 1.2+ x86-64 abi3
SHA-256 checksum
How to use checksums
1102467c73fa6ddc20eff5a92868c465bc35f91a707c4737e0157c739e964735
BLAKE2b-256 checksum
How to use checksums
1a5181d04fa81fff6c7e32e37e77e110142f32b3feb1b9234359c82ee00e906a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-musllinux_1_2_i686.whl

Download URL dithering-0.2.0-cp39-abi3-musllinux_1_2_i686.whl
Size 565.5 kB
Tags CPython 3.9 Linux musl 1.2+ x86-32 abi3
SHA-256 checksum
How to use checksums
6bcc60151a509caa7e09966bdb2bb296d4a2f257c5e7571df58c9ca865543c47
BLAKE2b-256 checksum
How to use checksums
588bbaf384d3cf7fd2351141a3fa328b4ad49330a60c9f9c659a4485189f1438
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-musllinux_1_2_armv7l.whl

Download URL dithering-0.2.0-cp39-abi3-musllinux_1_2_armv7l.whl
Size 605.8 kB
Tags CPython 3.9 Linux musl 1.2+ ARMv7l abi3
SHA-256 checksum
How to use checksums
7535e7b7a7a17dcbe0fa8ddaf2029ad630730810552db29e413ba232b8d7e576
BLAKE2b-256 checksum
How to use checksums
28bc6319de67360e6fb9cabac81de0c9c38fa5eb9144dd6852d8265dae4ce9b5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-musllinux_1_2_aarch64.whl

Download URL dithering-0.2.0-cp39-abi3-musllinux_1_2_aarch64.whl
Size 496.9 kB
Tags CPython 3.9 Linux musl 1.2+ ARM64 abi3
SHA-256 checksum
How to use checksums
2f0d7852837d7b058e0be9e43909d77a8641fe907d382f6459942a7f63291f1b
BLAKE2b-256 checksum
How to use checksums
f2a01a81235540d1ea90b03a51392932488ff4bbc8a30c2778e42a832cef998e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL dithering-0.2.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 325.4 kB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
47ce308e0f5a3014563965274f00b33968c7602966831de068ef9f6922a74507
BLAKE2b-256 checksum
How to use checksums
acb3dba06f29f82e955f2871dd6114174730700790b12d8f9291d87bc4da5ddd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl

Download URL dithering-0.2.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl
Size 360.1 kB
Tags CPython 3.9 Linux glibc 2.17+ IBM System/390x abi3
SHA-256 checksum
How to use checksums
0fd26958551dba0094da0d626706ee424643ae7bcd0bd35e760f3efde70563b1
BLAKE2b-256 checksum
How to use checksums
3f570087886d37d293b5ffa311e7fd163314b89267d00a5fd92cd8f45f363e09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl

Download URL dithering-0.2.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl
Size 364.4 kB
Tags CPython 3.9 Linux glibc 2.17+ PowerPC 64-le abi3
SHA-256 checksum
How to use checksums
d7601f3d902937b04be225888b06d3ea418449cbd85c5a156f8f3c60ba730fbe
BLAKE2b-256 checksum
How to use checksums
9077402cd942a5ae7c78a054fd7059446553f5d14afc0b6f5572ad9d3d833f9a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL dithering-0.2.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 330.7 kB
Tags CPython 3.9 Linux glibc 2.17+ ARMv7l abi3
SHA-256 checksum
How to use checksums
9bcfb2910e86246ee9b5e041b81bc60567b759d74c6e59b8a8b7ee0493c04484
BLAKE2b-256 checksum
How to use checksums
802f9fcc3028aa3dbfc67c90c6676c8dda1f94fde431f6d446d14ddf23ea3079
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL dithering-0.2.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 320.6 kB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
8369457d24db576ab06a604b3e5e60ce2270a60529e28659da60ab4a58dc87c4
BLAKE2b-256 checksum
How to use checksums
bb1c56f2e83afebeea582dfcd4cb352ec7a727ccec5f72bcd4fcfbc094263b9b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl

Download URL dithering-0.2.0-cp39-abi3-manylinux_2_5_i686.manylinux1_i686.whl
Size 348.7 kB
Tags CPython 3.9 Linux glibc 2.5+ x86-32 abi3
SHA-256 checksum
How to use checksums
5ab68efbb21e4c15eed7530e456d19c33d95c6dff1a02a493a72157298bf544e
BLAKE2b-256 checksum
How to use checksums
987b22aafb7de8c63090b9c22547762aeda193611c0dbefea553d48c9cb6a471
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-macosx_11_0_arm64.whl

Download URL dithering-0.2.0-cp39-abi3-macosx_11_0_arm64.whl
Size 299.3 kB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
026816f119e5417d932461a2ca473f1ceaafb3f4d8b3602c428514044414b7a2
BLAKE2b-256 checksum
How to use checksums
0ee85c9850af307999d6ed7a3d3facc14c2a7c6142cc20f93f0750bd05412acd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / dithering-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl

Download URL dithering-0.2.0-cp39-abi3-macosx_10_12_x86_64.whl
Size 307.0 kB
Tags CPython 3.9 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
425d529e829e7f602841f55faea9418ba98eda67d04e59d0573c73db84894f63
BLAKE2b-256 checksum
How to use checksums
3c42e353dfbd439b13bde1f840d12bd3738ab71fd90c463d46891270c14f34e5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for dithering 0.2.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page