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=Truedoes 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, andordered_dithertakes 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)
Gallery
| Original | Floyd–Steinberg | Atkinson |
|---|---|---|
| Bayer 2×2 | Bayer 8×8 | Random |
|---|---|---|
| RGB Floyd–Steinberg | Game Boy palette | 16-color palette, Bayer 8×8 |
|---|---|---|
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 raiseValueErrorlisting 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)
| 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)
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.