Skip to main content

Dithering algorithms for e-paper/e-ink displays

Project description

epaper-dithering

PyPI Python License Tests Lint Ruff mypy

Dithering algorithms optimized for e-ink/e-paper displays with limited color palettes.

Installation

# With uv
uv add epaper-dithering

# With pip
pip install epaper-dithering

Features

  • Rust Core: All dithering runs in a compiled Rust extension — fast enough for 800×480 images in ~30ms
  • Perceptually Correct: Weighted Cartesian OKLab color matching — preserves hue without the achromatic-attractor bug that plagues LCH-weighted approaches
  • 9 Dithering Algorithms: From simple ordered dithering to high-quality Jarvis-Judice-Ninke
  • 8 Color Schemes: Support for mono, 3-color, 4-color, 6-color, and grayscale e-paper displays
  • Pre-dither Adjustments: Per-image exposure, saturation, shadows, highlights, dynamic-range compression, and gamut compression — all orthogonal knobs you can mix freely
  • Serpentine Scanning: Reduces directional artifacts in error diffusion (enabled by default)
  • RGBA Support: Automatic compositing on white background for transparent images

Quick Start

from PIL import Image
from epaper_dithering import dither_image, ColorScheme, DitherMode

# Load your image
image = Image.open("photo.jpg")

# Apply dithering for a black/white/red display
dithered = dither_image(image, ColorScheme.BWR, mode=DitherMode.FLOYD_STEINBERG)

# Save result
dithered.save("output.png")

All arguments after color_scheme are keyword-only:

dither_image(
    image, palette,
    *,
    mode=DitherMode.BURKES,    # algorithm
    serpentine=True,           # alternate row scan direction
    exposure=1.0,              # linear-RGB multiplier (1.0 = no change)
    saturation=1.0,            # OKLab saturation (1.0 = no change, 0.0 = grayscale)
    shadows=0.0,               # shadow lift, S-curve lower half
    highlights=0.0,            # highlight compression, S-curve upper half
    tone="auto",               # dynamic-range compression: "auto" | 0.0–1.0
    gamut="auto",              # gamut compression: "auto" | 0.0–1.0
)

Supported Color Schemes

  • MONO - Black and white (1-bit)
  • BWR - Black, white, red (3-color)
  • BWY - Black, white, yellow (3-color)
  • BWRY - Black, white, red, yellow (4-color)
  • BWGBRY - Black, white, green, blue, red, yellow (6-color Spectra)
  • GRAYSCALE_4 - 4-level grayscale (2-bit)
  • GRAYSCALE_8 - 8-level grayscale (3-bit, e.g. Inkplate 10)
  • GRAYSCALE_16 - 16-level grayscale (4-bit, e.g. Waveshare 6" HD)

Dithering Algorithms

Algorithm Quality Speed Best For
NONE Lowest Fastest Testing, simple graphics
ORDERED Low Very Fast Patterns, textures
SIERRA_LITE Medium Fast Quick results
BURKES Good Medium General purpose (default)
FLOYD_STEINBERG Good Medium Popular standard
SIERRA High Medium Balanced quality
ATKINSON Good Medium High contrast, artistic
STUCKI Very High Slow Maximum quality
JARVIS_JUDICE_NINKE Highest Slowest Smooth gradients

Usage Examples

Basic Usage

from PIL import Image
from epaper_dithering import dither_image, ColorScheme, DitherMode

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

result = dither_image(img, ColorScheme.BWR, mode=DitherMode.FLOYD_STEINBERG)
result.save("dithered.png")

All Color Schemes

# Black and white only
dithered = dither_image(img, ColorScheme.MONO)

# Black, white, and red (common for e-paper tags)
dithered = dither_image(img, ColorScheme.BWR)

# Grayscale (4 levels)
dithered = dither_image(img, ColorScheme.GRAYSCALE_4)

# 6-color display (Spectra)
dithered = dither_image(img, ColorScheme.BWGBRY)

Advanced Options

Serpentine Scanning

By default, error diffusion algorithms use serpentine scanning (alternating scan direction per row) to reduce directional artifacts and "worm" patterns. You can disable this for raster scanning:

# Default: serpentine scanning (recommended for best quality)
result = dither_image(img, ColorScheme.BWR, mode=DitherMode.FLOYD_STEINBERG, serpentine=True)

# Disable serpentine for raster scanning (left-to-right only)
result = dither_image(img, ColorScheme.BWR, mode=DitherMode.FLOYD_STEINBERG, serpentine=False)

Note: The serpentine parameter only affects error diffusion algorithms (Floyd-Steinberg, Burkes, Atkinson, Sierra, Sierra Lite, Stucki, Jarvis-Judice-Ninke). It has no effect on NONE and ORDERED modes.

Tone Compression (Dynamic Range)

E-paper displays can't reproduce the full luminance range of digital images. Pure white on a display is much darker than (255, 255, 255), and pure black is lighter than (0, 0, 0). Without tone compression, dithering tries to represent unreachable brightness levels, causing large accumulated errors and noisy output.

Tone compression remaps image luminance to the display's actual range before dithering. Based on fast_compress_dynamic_range() from esp32-photoframe by aitjcize. It is off by default (tone=0.0) and only applies when using measured ColorPalette instances:

  • 0.0 / "off" (default): Disable tone compression.
  • "auto": Analyze the image histogram and remap its actual luminance range to the display range. Maximizes contrast by stretching only the used range.
  • 0.0-1.0: Fixed linear compression strength. 1.0 maps the full [0,1] range to the display range.
from epaper_dithering import dither_image, SPECTRA_7_3_6COLOR, DitherMode

# Default: tone compression off
result = dither_image(img, SPECTRA_7_3_6COLOR, mode=DitherMode.FLOYD_STEINBERG)

# Auto tone compression
result = dither_image(img, SPECTRA_7_3_6COLOR, mode=DitherMode.FLOYD_STEINBERG, tone="auto")

# Fixed linear compression
result = dither_image(img, SPECTRA_7_3_6COLOR, mode=DitherMode.FLOYD_STEINBERG, tone=1.0)

# Disable tone compression explicitly
result = dither_image(img, SPECTRA_7_3_6COLOR, mode=DitherMode.FLOYD_STEINBERG, tone="off")

Note: tone has no effect when using theoretical ColorScheme palettes (e.g., ColorScheme.BWR), since their black/white values already span the full range.

Gamut Compression

Some images contain highly saturated colors that a limited palette simply cannot reproduce (e.g. vivid purple on a BWGBRY display). Without gamut compression, the ditherer tries to mix palette colors to approximate the hue — often producing muddy results. Gamut compression pre-blends out-of-gamut pixels toward the nearest palette color before dithering, giving error diffusion a better starting point.

# Default: gamut compression off
result = dither_image(img, SPECTRA_7_3_6COLOR, mode=DitherMode.BURKES)

# Auto gamut compression
result = dither_image(img, SPECTRA_7_3_6COLOR, mode=DitherMode.BURKES, gamut="auto")

# Fixed strength (0.7–0.9 recommended for very saturated images)
result = dither_image(img, SPECTRA_7_3_6COLOR, mode=DitherMode.BURKES, gamut=0.8)

# Disable
result = dither_image(img, SPECTRA_7_3_6COLOR, mode=DitherMode.BURKES, gamut="off")

Note: gamut also has no effect for theoretical ColorScheme palettes.

DitherMode.NONE performs direct nearest-color mapping without error diffusion or ordered dithering. For built-in measured palettes, pure canonical display colors such as (255, 0, 0) map directly to the corresponding firmware palette index even though matching uses measured display RGB values.

For built-in measured palettes, exact canonical display colors are also protected in ordered and error-diffusion modes when pre-processing is off: an image made entirely of display colors is returned as a direct palette-index map, and exact display-color pixels inside a mixed image keep their canonical index instead of being rematched to the measured RGB palette. Pre-processing runs before that exact-pixel check, so explicit tone="auto"/gamut="auto" or other adjustments may intentionally alter those pixels first.

Per-Image Tonal Adjustments

exposure, saturation, shadows, and highlights let you tweak the image before tone/gamut compression. Each is independent — set just the ones you want. All default to identity (no effect).

# Brighten and boost saturation for vivid output
result = dither_image(img, SPECTRA_7_3_6COLOR, exposure=1.3, saturation=1.4)

# Lift shadows on a dark image
result = dither_image(img, SPECTRA_7_3_6COLOR, shadows=0.5)

# Compress highlights on an overexposed image
result = dither_image(img, SPECTRA_7_3_6COLOR, highlights=0.7)

# Combine for a "vivid photo" look
result = dither_image(img, SPECTRA_7_3_6COLOR,
                      exposure=1.1, saturation=1.3, shadows=0.3, highlights=0.5)

Pipeline order: exposure → saturation → shadows/highlights → tone → gamut → dither.

RGBA Images

Images with transparency (RGBA mode) are automatically composited on a white background, matching the typical appearance of e-paper displays:

# RGBA images are handled automatically
rgba_img = Image.open("transparent.png")  # Has alpha channel
result = dither_image(rgba_img, ColorScheme.BWR)
# Transparent areas become white

Measured Display Colors

For the most accurate dithering, use measured RGB values from your specific e-paper display instead of theoretical pure RGB colors.

Why Measure?

E-paper displays use reflective technology, making colors 30-87% darker than pure RGB:

  • Pure RGB White: (255, 255, 255) → Real display: ~(180-200, 180-200, 180-200)
  • Pure RGB Red: (255, 0, 0) → Real display: ~(115-125, 10-20, 0-10)

Using measured values ensures dithered images match your display's actual appearance.

Using Pre-defined Measured Palettes

The library includes measured palettes for common displays:

from epaper_dithering import dither_image, SPECTRA_7_3_6COLOR, DitherMode

# Use measured palette for Spectra 7.3" 6-color display
result = dither_image(img, SPECTRA_7_3_6COLOR, mode=DitherMode.FLOYD_STEINBERG)

Available measured palettes:

  • SPECTRA_7_3_6COLOR - 7.3" Spectra™ 6-color (BWGBRY), v1 measurement
  • SPECTRA_7_3_6COLOR_V2 - 7.3" Spectra™ 6-color (BWGBRY), v2 measurement (recommended)
  • MONO_4_26 - 4.26" Monochrome
  • BWRY_4_2 - 4.2" BWRY
  • BWRY_3_97 - 3.97" BWRY
  • SOLUM_BWR - Solum BWR
  • HANSHOW_BWR - Hanshow BWR
  • HANSHOW_BWY - Hanshow BWY

See CALIBRATION.md for measuring your specific display.

Creating Custom Measured Palettes

Measure your display and create a custom palette:

from epaper_dithering import dither_image, ColorPalette, DitherMode

# Your measured RGB values
my_display = ColorPalette(
    colors={
        'black': (5, 5, 5),           # Measured from your display
        'white': (185, 190, 180),     # Much darker than (255,255,255)
        'red': (120, 15, 5),          # Much darker than (255,0,0)
    },
    accent='red'
)

# Use it directly
result = dither_image(img, my_display, mode=DitherMode.FLOYD_STEINBERG)

Built-in measured palettes store the canonical firmware ColorScheme they are based on. Custom measured palettes may omit it; in that case direct mapping and exact-color bypass use the custom measured RGB values.

Measurement Quick Start

  1. Display full-screen color patches on your e-paper
  2. Photograph in consistent lighting (avoid shadows/reflections)
  3. Sample RGB values from center using photo editor
  4. Average 5+ samples per color
  5. Create ColorPalette with measured values

See docs/CALIBRATION.md for detailed measurement procedures, including camera calibration, colorimeter usage, and validation techniques.

Development

# Install dependencies (requires Rust toolchain: https://rustup.rs)
uv sync --all-extras

# Build and install the Rust extension (required before running tests)
uv run maturin develop --release

# Run tests
uv run pytest tests/ -v

# Run tests with coverage
uv run pytest tests/ --cov=src/epaper_dithering

# Lint
uv run ruff check src/ tests/

# Type check
uv run mypy src/epaper_dithering

Credits

Measured color calibration techniques and reference measurements inspired by:

  • esp32-photoframe by aitjcize - Measured palette methodology, dynamic range compression algorithm, and reference values for Waveshare 7.3" displays

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

epaper_dithering-5.0.4.tar.gz (60.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

epaper_dithering-5.0.4-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (565.3 kB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

epaper_dithering-5.0.4-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (359.5 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (357.7 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl (560.1 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

epaper_dithering-5.0.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (355.0 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (351.5 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.4-cp314-cp314-win_amd64.whl (196.9 kB view details)

Uploaded CPython 3.14Windows x86-64

epaper_dithering-5.0.4-cp314-cp314-musllinux_1_2_x86_64.whl (561.1 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

epaper_dithering-5.0.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (356.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (353.0 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (602.4 kB view details)

Uploaded CPython 3.14macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

epaper_dithering-5.0.4-cp313-cp313t-musllinux_1_2_x86_64.whl (559.8 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

epaper_dithering-5.0.4-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (354.9 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (351.6 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.4-cp313-cp313-win_amd64.whl (196.9 kB view details)

Uploaded CPython 3.13Windows x86-64

epaper_dithering-5.0.4-cp313-cp313-musllinux_1_2_x86_64.whl (561.5 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

epaper_dithering-5.0.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (355.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (353.0 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (602.3 kB view details)

Uploaded CPython 3.13macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

epaper_dithering-5.0.4-cp312-cp312-win_amd64.whl (197.4 kB view details)

Uploaded CPython 3.12Windows x86-64

epaper_dithering-5.0.4-cp312-cp312-musllinux_1_2_x86_64.whl (561.2 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

epaper_dithering-5.0.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (356.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (353.4 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (604.1 kB view details)

Uploaded CPython 3.12macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

epaper_dithering-5.0.4-cp311-cp311-win_amd64.whl (199.2 kB view details)

Uploaded CPython 3.11Windows x86-64

epaper_dithering-5.0.4-cp311-cp311-musllinux_1_2_x86_64.whl (563.6 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

epaper_dithering-5.0.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (358.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (356.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.4-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (608.3 kB view details)

Uploaded CPython 3.11macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

File details

Details for the file epaper_dithering-5.0.4.tar.gz.

File metadata

  • Download URL: epaper_dithering-5.0.4.tar.gz
  • Upload date:
  • Size: 60.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for epaper_dithering-5.0.4.tar.gz
Algorithm Hash digest
SHA256 27af87fb17bed0c041b6ba84fa83942fbba58f49887408933fc5b90c3a985c6c
MD5 ca55faec9ad1d18c1dc9dd1eb28a71f2
BLAKE2b-256 9298dcd159615ea404270349c75d4d906f39acf6d169512ae8c019dc39406342

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4.tar.gz:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 a268e792eb868bd289d1848fdda8b8d166a662de1f09fb6b53d2911e8a33c800
MD5 d430df27a48fc0ff2319804e5f92adae
BLAKE2b-256 dd3f63ccf590aee410a1f17b1fa12be987e4f748f59259e275675f5696bdb523

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 ec5c8b9e38f17a288a602b35c3e282d68d5498738a9d2848374a817a9141c717
MD5 7e02a498f171a2eee4632243c6a7e77e
BLAKE2b-256 ae68d856a78e215954c8a24cf22d8daa4e4f3a633798fb36bdd5189362c4c09d

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 20c9e2c15d3256736e46172c46775bd97dbb4fe23e0892d8cad30762c414f5d8
MD5 db3ec7beb28d6e21edac7a3c743f378d
BLAKE2b-256 ed123ed70e0392be36677a8fdcdf0405c33cc8980588fdae95fef8955386308b

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 df6756696b4bcedb08607ee232715d2dc719ec74d323feee9ba97760cd492e70
MD5 1a6f75b5e41b0af2804cb28ef17f54c3
BLAKE2b-256 12a770dcea3a977920999a58126178f97ae44eb8e39ce1c68fe993efd130dd6b

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp314-cp314t-musllinux_1_2_x86_64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 9322b30bdd127aa2b0bbbcb51eb0e71d7f281e5d877a4d8ea300a5be0d280922
MD5 b9d925ee8511ddfa7ed73bdff81cba36
BLAKE2b-256 a862d1b74b2daa5c690ce6d1c44a8a933e2e3dd7fa6a8876143c6109594c6eaa

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b055041ee30bd789b2f4303f511e607d0f7fdb4373fcca89edb418b3403f8b1d
MD5 718398f69a622dbfb0c2d2d8005ee473
BLAKE2b-256 1c404c604cf7386e8a0bf25e97433e2136bb37b36b063176b5c97806490cfcb6

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 e5e5ace54ec01316d3c208cfcfab955b153316e6170c50e249fdb527a318b66c
MD5 cd702ce6f4a69d310b210b0ee20a5737
BLAKE2b-256 880b7bbcc583e31fb78e72688772ec8b845d59b3a08eecbe8656ae88916fac6c

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp314-cp314-win_amd64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 378291abd82d87cfa056d547745ec6cd8cf04bdd26553774c09fd9f3798a2776
MD5 8b959268c09b428f5a3835770623c282
BLAKE2b-256 17d6fd2ab4b1011dbcbe3eb0fcca667eca707209778d2ec8c2c7b27df16152d1

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp314-cp314-musllinux_1_2_x86_64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 e73dde994e72957cbffafd3e50188dcc0188c2ce087c8ea934dd89b9392a6d08
MD5 857c2ab83b6c1a7306a64d370441130a
BLAKE2b-256 c3d13ac47a0d3e4ea5d7360bf10effae5fd5e4ffa1f7189aa72091c51a40d3c0

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f20f96bb15084c5ad2124abae1ff837ccb97a0151a6c89c5c9562940654f22a0
MD5 04a7540a89f4dd29d0cd329a40bc119e
BLAKE2b-256 35151aa8f8004a04442656b0238d7ba5d1f3a38c9894acec06f5ca9561c3096f

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 7e6400d96e327b1a9cde3f7d914060e157561315f0f2072774e63fea732a142d
MD5 4c4e94fb1cf24239772df9c7b1de2cd5
BLAKE2b-256 bf68654fdc737c34051662b0f4ba598ae62c2805854b3d3daa23fcefd21887ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 1767d8a9c0d305caf8f143b2ea2a1c6861414539d429782e874c561687da701b
MD5 121afa7f3852eea5d83bf5af54e45c58
BLAKE2b-256 4b21bbeb59a073b7b7183da476648d4db7ddf5428baf818b76c8d125ca37e8ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp313-cp313t-musllinux_1_2_x86_64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 15b8e387b13aae3447297a7ceada69f2b58bbb9e26bae9a51926fb8b89fe479d
MD5 8005fd859d41af4d9882a8047a2c745d
BLAKE2b-256 5e1c2c6c394b67c34a032f745f3d0b6d68f9806a1ec5520fdfefdbf2575b5b21

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 d6749cafcc6285e959d2f60f6da00333219c9b451ed12a612a04d0a62fee0314
MD5 68c892ee3c26c5d0f5d220a2f772fc72
BLAKE2b-256 1b9d3948dbb2c10c362290262378dea0299556f3ceb3adc706e93d3b1183e59b

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 86da3cfba14ba1654e0b8b773af4886861545e934c48dc2f5daa72f7a3dd756a
MD5 351164113d5f2fdf88ca911b158a8f79
BLAKE2b-256 706a77657ef82b347d11db93e6a4b8e0204d85a08582a422ba678a75ddb7a092

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp313-cp313-win_amd64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0eabb5e22f0693e534be494e1a9b79cac73d88a489229a154e1acc1810ed6334
MD5 fb80267b57ccf39e8fc8d5ea197e68ac
BLAKE2b-256 f88fea7e6027f46dbe4852ab25abc09054c4d54099cc3e21b523eccb54a3702b

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp313-cp313-musllinux_1_2_x86_64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 4474ae8d499d6c5d4706ae1410d7bd27eed2b66bbaab13b5c285cf0e417e13ac
MD5 e002898e253f41f6c15804628a1fd6fb
BLAKE2b-256 f20b7c185891e085d79f4ed0a9df46aef6ed7032128ecee34bb42d671a39b5b0

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 f1d10ddfe996bb88ef241ae91b3c66291f15f381c6adf24c3ce0f6a211e66b27
MD5 44bfa98f2d1b5493002bfe866293c134
BLAKE2b-256 0851a93996fc4c206b4b178a3b885191972db0ad98a0bf14d5a6295f4bf96e54

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 7b965404cad8d9c8d857a2a3f6efa26f740782df93b59ef8585d674b1da47048
MD5 ba43c8c9f3343ef6db242d80176acfcc
BLAKE2b-256 9e0f4aee6017de64388549883f239ffcca86395243dfe722b397d1d9e2bedd5f

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 6bfa3c346c18198c00489ecff50237838811cee961a89bfc39f19dba25b4fe6d
MD5 5eec25f823342f805720e78b14f4cb37
BLAKE2b-256 a186860c4981deaa9ea2878d570bc88b1c995ba1be3a44ef4a169498b9dc9e24

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp312-cp312-win_amd64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 f9e9ba007359325a50ba8cce7875053af068005114ad1809c3c21475889af842
MD5 940bbfbe5c7191424424f73dcf61e719
BLAKE2b-256 a709e1afb2279a04fca81277e8cd8c9a279cec533a29898a5c5720ac2e5cdd12

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp312-cp312-musllinux_1_2_x86_64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 a8a292f7bae098f841a3963b1d52c1e99beb7d33026448fb236dcba2ad3f84cb
MD5 9ed3916b0414a2cac74b59302a88ff4b
BLAKE2b-256 a1b6ae2413c59937108ea14b2e053b775aab327487bd6de5d37d28dfacb60e0c

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e1ac8c2e81435c3f88b8555d1c855a45570c6e3e12b5148712dc7d4ee95eead3
MD5 1ed7a6219d766b59f64851f3fef9b6f4
BLAKE2b-256 471cc8ec4a5038c32b57bb8df9e4c4f10ea55edee11ae22fb9bb1c5f2c461aa6

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 cd136d355a2a8ca210f0848fde7d83674506e2958a532870b3be19f84e7f2a22
MD5 73bfb6749de2783a47225afb6b0fa525
BLAKE2b-256 632601b13e26fe783ddef58383c701a3ae311ef7a3857652e2faf5034b51ae07

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 0b58bfded2f83e2ce40a86f946edd3da6064512e8999f0d2639996d70fc6cbe8
MD5 a1cabafa3e834daf47ac4aad5bb31786
BLAKE2b-256 785959a4cda54e77906a99d56eeb62139609e26f30956d8f0eed0e475883aa98

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp311-cp311-win_amd64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ede58691104afed0731bf48986ce4487c7bb8e5ceac95d6a735c6bc807ae04d3
MD5 773a786aac10cc533dfa5444d44cda47
BLAKE2b-256 d432d61ad6f24c43a999b5b8e631abb025819715463eede233feb1150a9aad89

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp311-cp311-musllinux_1_2_x86_64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 119c299470466c51d5c111a3d4a13d303ce076117a5da46462bd606cd825b747
MD5 af0c4b8874abf5b29fb2645af2aa975b
BLAKE2b-256 b1f749314c53120e2605ec77edc9b2b8204bc0c4b12c9fb997ec6ae753cf0bd5

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 44dfae40cfdb00ac3080395d114dbdb0eb5d6627ab8b521aa833aea7afd63842
MD5 81cdb6a026a0819bdb64858d876e39eb
BLAKE2b-256 a7d9bdc10ff073eb0f936716d42238a4f6254dc883551e1eebc607dcb9255b46

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file epaper_dithering-5.0.4-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.4-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 2e0cfdb419e1b4e21a1f4ee5283cb5893cc6632fe00a24a1464755cacd76d4f0
MD5 cc08730b07b95c40d9f949e2ba139b0c
BLAKE2b-256 24fd0a3582f0b8d5298bac8e41329dc6b84adcf2ea52514b11f4b5a542738738

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.4-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:

Publisher: release.yml on OpenDisplay/epaper-dithering

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page