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.1.tar.gz (13.6 MB 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.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl (567.0 kB view details)

Uploaded PyPymusllinux: musl 1.2+ x86-64

epaper_dithering-5.0.1-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.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (357.8 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl (562.0 kB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

epaper_dithering-5.0.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (354.8 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.1-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.1-cp314-cp314-win_amd64.whl (196.0 kB view details)

Uploaded CPython 3.14Windows x86-64

epaper_dithering-5.0.1-cp314-cp314-musllinux_1_2_x86_64.whl (562.9 kB view details)

Uploaded CPython 3.14musllinux: musl 1.2+ x86-64

epaper_dithering-5.0.1-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.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (352.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (602.5 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.1-cp313-cp313t-musllinux_1_2_x86_64.whl (561.8 kB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

epaper_dithering-5.0.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (355.0 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (351.7 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.1-cp313-cp313-win_amd64.whl (196.0 kB view details)

Uploaded CPython 3.13Windows x86-64

epaper_dithering-5.0.1-cp313-cp313-musllinux_1_2_x86_64.whl (563.1 kB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

epaper_dithering-5.0.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (355.5 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (352.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.1-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.1-cp312-cp312-win_amd64.whl (196.5 kB view details)

Uploaded CPython 3.12Windows x86-64

epaper_dithering-5.0.1-cp312-cp312-musllinux_1_2_x86_64.whl (562.9 kB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

epaper_dithering-5.0.1-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.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (353.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

epaper_dithering-5.0.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (604.2 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.1-cp311-cp311-win_amd64.whl (198.4 kB view details)

Uploaded CPython 3.11Windows x86-64

epaper_dithering-5.0.1-cp311-cp311-musllinux_1_2_x86_64.whl (565.0 kB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

epaper_dithering-5.0.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (358.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARMv7l

epaper_dithering-5.0.1-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.1-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.1.tar.gz.

File metadata

  • Download URL: epaper_dithering-5.0.1.tar.gz
  • Upload date:
  • Size: 13.6 MB
  • 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.1.tar.gz
Algorithm Hash digest
SHA256 87043bd1c975aab985f7a1f1cf912899ab66738a2b0003e7b018fb603a1db8ed
MD5 14e4841eea119507b391117a1de1ec3d
BLAKE2b-256 48849df3ce19f1f1db20645716fe851d833f02f12417c2c31919913d63ee1196

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1.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.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 642d7dba0522ab17fcf659d8b4631fd3c9f728f1a929428a7d087e979539d87c
MD5 bb061833e7e009a4644365c16abf5826
BLAKE2b-256 5f432945442f9b3bd041dbb7ea9b476a2a2ca77c3bfccdd05bb6b746e30cdd3b

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 c4153451c882bd79621a672e28d99fb4fd5a7859cc1cc9b1037722753aa82741
MD5 999cbd147c31539f1a33514e329eb18e
BLAKE2b-256 d23c7c7457e31e39b7c6636460c74de4fd824e8e28bd115989151ea1325c085a

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 85641d37fee0d8d9f4e4a03b0f04b1f5fe83b233dcfe44b70474f1cf0a2c46aa
MD5 3013124a0a7ca05497a7b2f112803c69
BLAKE2b-256 17f5fe54bfa5f8d17bb214d7695356c6031768ae68a829488c86ed73780cd36a

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 d559b246bb0c8b80b2443c54988faaae043f739867a2bcbdfc6dd53c28eb6669
MD5 f5e7b2633ef1fd11885892b1993d155a
BLAKE2b-256 6b5db462fc49ae2019e1ba7b161808c7d924568b241b56dbe280c23a8aa4b45b

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 2864b6feb4c1b66a04f44b06d4b3375f638e062c17248b255589c3bd3369730d
MD5 c8d57d8ff9492206a71394b6701dcbad
BLAKE2b-256 6b3ddeaf4f5f3c535dea9f114eea9cd40ae285dd2f459363dd9d62e53a521638

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0df0e2f73d1dd5eaae71e06c41f66bd0e521ecaca1266bca430208ed6abd8ed4
MD5 593a30014491af8b1eea2c8700538c1b
BLAKE2b-256 699b145bf8c97e739c3f8010555049d9ce75949119055ef1e26f4df89e13df14

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp314-cp314-win_amd64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 eb09f709175bb72e1d4cebed5d63b35404c1ac9677a790b211f247662d705797
MD5 d2ccb3fab0e2081de99ac0c2c86dc0d8
BLAKE2b-256 b2d084d8f0420b7c4b2eae0c081654dbd8998d4cf5385f3b2afa061f5e560eef

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp314-cp314-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp314-cp314-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 179aa1c4956217475a354496a275ab20300987e89a9fef717e39561ad8c5df8a
MD5 d2d1ebee424700412f3500ee7885f605
BLAKE2b-256 b2adfa6f4f2353151ef3f503cca3678eb087065b0fa1b12be5773408ef00813c

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 31b4425f70361817154083e1f8bfe72abf1b2692677adb86a11a5f282537d4f5
MD5 cfafe69cbd7d5006c66b8af7c3e4ca62
BLAKE2b-256 5c1cdb99baca0473cb46d3ecf5191bfd05b8e29951b9dbdf3e26d4601388cafe

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e20ffe06517da839ffc96f9e0982e8292786aaa9dbd94dcfbfe832f1c81577ee
MD5 9b59984bd24930ab8522b67b10895221
BLAKE2b-256 65684ab4a94786bee1762ff7fd480e17de5bd5faf22d5e075f0c8e8035280f52

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-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.1-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 b50ba537aa3c54872f1e565872576f9ecf296edb05af17b51401f393a80d252a
MD5 0696a8cd389eb20b3c13746eb7be2acc
BLAKE2b-256 53eafc25b9ef0492bed6d00aa33b01944d7fbe074858721583cf2c9ab77ffada

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 aa6ec95bb138f5e775ca19a71534a9a01bd64c30fea9f262166e31d4621e9bfd
MD5 2f1ed2ca9adc0c8daea85f75c89a8c70
BLAKE2b-256 09b1af94194521ccc4cc6732960234e6f5e0ba05ec517116ce8984c19fb41789

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 1e5e59c20e68ea3d0a39d80452620bb841f4fcbccd71ee595566d942e76009b3
MD5 57ab0a2391f62c4f7f8541d096fec8c4
BLAKE2b-256 9df03165b91eff08a94f0d00a14b53ce36f2e7316494a3409ca681bd160d294f

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6df8f985fe032678358232ec3a3af66d6928a5efae77d35406fd1f32ac779a5f
MD5 779c52bfb4603309cedb66bcd886ec2e
BLAKE2b-256 83cb9fb4b42377e77249acb91d1a0487d264a03b9a36f2533e3fc0d1da3ac881

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 963d53f8b89ef333f0913c41272c56f4ebcce2c8fbf7a87528174ddc2c34b983
MD5 5d72c8035c6d7221482ed378e616aece
BLAKE2b-256 0a157062130bc96c166a2fa351661b15c791a2c2b1d94d9d3258788239a86264

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 8ac7be5374349ba092761fb6efcea45703bef895263c616aae03540b3b388182
MD5 1b15cc0d9d19a358b76c0563f41cdcea
BLAKE2b-256 7f600c301a947630bd8081d7078c173ca51217163778628fd0b89a5d86f970c6

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 b2ebbe2c7288c4316ab7c2f73e7fc4e077f02e24f5cba1a3d12da8f335f58060
MD5 8c83c6c362fb02dccf5fcc164e24e832
BLAKE2b-256 8576018c9d3e3da2b98dcf5e2d2555a0e194fee0430d8529b7b383690679c6a5

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ab182d4ae9fa19826c52de32eea870a9c237e4b2f09c0fe76397af28bc47b4c1
MD5 7f6d63b39b4540a665e5f4b73d577ee4
BLAKE2b-256 cb6c97ce468332fd0dd10d2a5ded2632c68be82261ecfec44f073129bb30fc1f

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-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.1-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 94cf4fcbdacf7d69598f67b57ae7c15cb888932c383b115a3bddc90119dda0db
MD5 d2250621dd1f2fc8eb93af380bf4bb06
BLAKE2b-256 61a7ad8fe7b2c84ef22e112a7db7007d426d3db8f4986104e1cf3782412ec1b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 0ad7d0e5819d5b62094d89e315a11c1d9a6c8a0b85a391f5781681f8ec4ac426
MD5 9f407c2ed6c0a87185444d9890052588
BLAKE2b-256 20db54a9287dfc4e0ab53e9be911a9a3e3b9a65f8b3f62b458c55015ad7cb866

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ee88fce9fe88cef35620b4c29e1915e5d59c35071087a7e464f9590e5e0e6951
MD5 8ccfa16a53e06e999becd5adfdfb2b5d
BLAKE2b-256 e6e5b6d6269738f98e17ccfe5cde70eaf9e3b5ed7c65ea5fc298773519d4f606

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 79254d4b93de038e59d9a138b0cd06b23746ca59684567ac3ebed082b914053d
MD5 36c6919da690f4a111951f5edaab5801
BLAKE2b-256 34237ae84f666087f44b14d56d1d55a17cf9959671b293cc8cccbc9a745f9e45

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 54c59f98e8365aa390bf3ab53911c7c5cbdcef865defe53290fa1bd8444b3ef7
MD5 979720754c2e92ab56fa4f8930499583
BLAKE2b-256 e83a6a2390c2875bbcc07cb062c169c1cc87a458577569488656cb7b3a1a568c

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-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.1-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 5ed076a44b731ee8d0e8a2d710e63674535654d471da1144f4812845800a8ed4
MD5 c47a3c92e8f87b75964f208f1363c391
BLAKE2b-256 13cbc53b582c51ffb598af0c0dd2341e239e08bd43757dcd661f4724708996e5

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 276bf3db2134a418068d24ecf23f35f5a98711739633dc6e4fc89caacc19b69e
MD5 380659129e1f6a5bc5550f02a6f0ca02
BLAKE2b-256 839d53ab345c3d814f7258bbb53a334e30a455d1b7c8efae4b0020cd28cbe527

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ff77eacf92e6fce998f24988a789b764551002e2a8c1d82978302f5ad3a9081b
MD5 7b66e2acbd3022a65f1c1e67eba1fd19
BLAKE2b-256 96d5113e4d43590710b44699c4695aed10bb7b9682a4d7fc207fe24ff7755d2b

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 fb8574a62d8ad7b4e2ef389785f3016f67a1d69d712b2ef424d14addf7b11246
MD5 2b3713f13fa54f69f1076feb20ae7fa2
BLAKE2b-256 fb9765efba4f49e3c172446fedffaca083d373e65a98b6ee4316224e0574fca0

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for epaper_dithering-5.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ca84aaaabdfa318f3653d69e5370a3fbe402e42012f593342f47a0b9199a1902
MD5 5c64094cf4a3491f95a88f097ec927f4
BLAKE2b-256 47abf61b1a51b7e98eb44e69a66906e0464b63bcb0ca056c67a23f5e407cacd9

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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.1-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.1-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 57d578666609b7d0c29312345f9287ade575a52bf9945d2fa09ea11467265c04
MD5 63757f8c57687eb340406b3a5df99d4a
BLAKE2b-256 efd7f90778701db32c305325c5a43132240fd3a378593c19b2b23fbe1aa8c704

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.1-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