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-4.1.0.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-4.1.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (359.5 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARMv7l

epaper_dithering-4.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (357.8 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARMv7l

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

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

epaper_dithering-4.1.0-cp314-cp314-win_amd64.whl (196.0 kB view details)

Uploaded CPython 3.14Windows x86-64

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

Uploaded CPython 3.14manylinux: glibc 2.17+ ARMv7l

epaper_dithering-4.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (352.9 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

epaper_dithering-4.1.0-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-4.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (355.0 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARMv7l

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

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.13manylinux: glibc 2.17+ ARMv7l

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

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.17+ ARMv7l

epaper_dithering-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (353.3 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

epaper_dithering-4.1.0-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-4.1.0-cp311-cp311-win_amd64.whl (198.3 kB view details)

Uploaded CPython 3.11Windows x86-64

epaper_dithering-4.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (357.9 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARMv7l

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

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

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

File metadata

  • Download URL: epaper_dithering-4.1.0.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-4.1.0.tar.gz
Algorithm Hash digest
SHA256 21d0db8380cb061434aaf4588f74458e985c49cf15032ae6984705bf2f9029b8
MD5 ee57591cc9b85d87e59cf146514fde89
BLAKE2b-256 00daef40fed8297bb362be7d06a1fa6ed3f01a3c406a38ff746270654e4562a3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 dd55bafb656c6804f8d77c3507ac30490823103c9c54ef76065ee31cca8741f6
MD5 ce4f602ac408294a217a4eb378df75de
BLAKE2b-256 2d6eece5d1a81ecfc6bd5190976fe23f32db329bde726a4981c79ba776acf548

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e7cb0f8596dbab375cabc18346ff6930c932d0d62f713353d393844bca2bfb8e
MD5 edce265fb5680d5b0252972a82391779
BLAKE2b-256 208231e85f1305205bc3013224fdee926e21e6ba6058b704046a9e54b2a1ae79

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 56dfe230fb7388091215d652ea37684f05e6ebc24479ba3f0c1a16b572a35d1d
MD5 6004c4b265b6199a68c885388cdef60b
BLAKE2b-256 10a2530bb347e89a949ca199c5f727f5a3a68080ef1d3a609f7b470ad79f6a7c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 836448dee8a2356545d7775bdb13f63731f365fdf2d14686eab4c39e83c2ec3a
MD5 dfc33ef58694e40c00c022c0cddec320
BLAKE2b-256 1632b9db9c7a3d766f355e740b31d045f978580caad6017109a4a92efdeffea5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 ab7b9fab717762813d439d239eafaef45b2181c1bd4c82bdb2d88deaf4586537
MD5 c5a82efa14933ec164c7b525f6a5bd31
BLAKE2b-256 15a4264dacf39af37cf262b8220d3737a40c61e863dee9a87e1914c018f2bc34

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 911f7d1995359c60eb97c157b339c6d761dbdaa5352d353dd75d632731ce1fef
MD5 fd306fdb8f255f97ccd6d026fc4853f9
BLAKE2b-256 6ae12c24c092d439c2dddacb6f8c3b016b3ba6627f02defbfec29918204cb01a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0784bb197eaf799b12c1a6d89bbeffa67048c29ae741bd99a2a53251af10cd24
MD5 0180a5092f75f2f8826af0ce7941638a
BLAKE2b-256 2caf7120b0f44e6a1c0aca7c4b8f1b2f529a0c17e32734c92e61d60b81cb2710

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-4.1.0-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-4.1.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 1e01048c29b83fa94ef88585b1392c699365a0198ccad277d00ed7617f4c573f
MD5 a387852936584a31b5fc0c008941552e
BLAKE2b-256 5a588926ce857e043bc4aec0e01c6d4c4d856faccd76b4299c8b2b092b4e799e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 09933b09fb126b7a2913cda31fd8d015d02c6dcaae18dd883fde9f82f2866ddf
MD5 bf1314f3f886fbe68e96d194a2f2e6fe
BLAKE2b-256 147c25246ade635d2ce9f4b4a7f9c77a643c2c0d238b7d1dd82646b05b791a35

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e9e29901ed8e2bc4160968f0c97e4b271e901149f7d751fa6424e7063edf87eb
MD5 e01711526e4c8546cf2596c112de9bbe
BLAKE2b-256 b66b9c755a1be8d270540903302cd0e8fd17af83cc7b38a42ab62d496507f7a8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 be145a1ac29fba06b41e7bc98d921b1f18ca7ca84c59114fd2a54860a850e4c5
MD5 b5a719a42e07c6a9f3e6fd010e181fb4
BLAKE2b-256 9c3f7ca9f7108116efc95d49acd187161e998a54445a5b10bbadfb15dbab8972

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 7e92e110ea3a645a82f86a7461a8ca80f5b1b65d8bc85b85ee5d0b523eb0e8dc
MD5 cb808fce93918e23c09a482aa6abb058
BLAKE2b-256 0765a5e72621ca64292bf6f00c078ab93d0814e501c04f46b9db3423a59d7f70

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 244ec04d478d3051ac6ec8fb49fd49af47fafd664314bb42b423343f34e8f529
MD5 7b3a49bac6ecbb6e1a47646709a25235
BLAKE2b-256 f1bf5b9c5c61b77d33363d9b1e807dabd7d2fa2e104261ba5aa22477a997ff95

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-4.1.0-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-4.1.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 ca8002800d3547e2b7f1d5b7c387a2894b90e6fff75f38cc6fb0ec2473cf525e
MD5 0a0aa28db7b2049255b3c7ae3be3ecd1
BLAKE2b-256 79b1eb11fff7513244d440d1cf486f581849dbf055ecd672766a5f6f99e0716b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 5fc7c25f2c522f32845aeaa406c301dd4fbb975982a7050d89f8891e25a09139
MD5 3794dc7258492ab2e79329cb62627805
BLAKE2b-256 48b5decc181becfc71d28daf8f389cf1ad55b7cfb7e0abf33becc07ca2cb52f6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 fc96d474d2499274a318c71a135f2b01bfa0de863e9f1bdab80681425c3415cf
MD5 b5b2c5fabec55286e305c9bb0bb56315
BLAKE2b-256 4648112d555f9c10f72ebf3b3909a57ca66154a71f5e111bff9ed591568df35e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ec312cf2cf32032888e502c8e0ace9af3adca465bf6cf72ac08d84339fb00782
MD5 2899c9dd0be5445b57dedebd6147d5b3
BLAKE2b-256 890f362e2647b74fb0adb88df9db08353134926a0a1461f0622e59a9390e57ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-4.1.0-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-4.1.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 080675a8c8e3686bf8d62d14ce007b78ccc005f1d5ff843cf89099e525f05641
MD5 ce6cde079d8f89d524df3c0d0aff8f45
BLAKE2b-256 5a7306c1564c6128f8e6cb5a30d8255d528d7739ac9fc9e1b2c98ed51e5a241c

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 1988b0277e857aa7fe2a3b72be0611dac6a7d6403693cf53125544ebee2ab372
MD5 88d5a98a4fa3aad93107a2297a9c7598
BLAKE2b-256 43abc02a0bc56bd3c1b81310f9821a573045c3eab0c557079cf5280794807bf7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 de834fe0f07bf4789db93f13ca1a7049489d06af646d199917ffa6cdb407dfe7
MD5 21cd890411b82f4b7dba9d73924bb42d
BLAKE2b-256 8ff7f883d3d4443f5e4253a09876731e680cbd3d687cbd714021e17f038e8e73

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 437050fac5bbb05149dc692be50196cb48a7e749be42cccd42f3a7d3dd3c6ed4
MD5 bd1a6ad6cc4096b9fd7cfa06d94b3029
BLAKE2b-256 c2b01b92a0fb0a2f5cf8a4b0b30bc93a0a9605335f34bad024bd5b3b7e78295c

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-4.1.0-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-4.1.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.

File metadata

File hashes

Hashes for epaper_dithering-4.1.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 2ef3210e5f8a47e911668f1e3fd4a47de0ea833b4a8f0db00bf48a23c24a0e7c
MD5 c8d340044e6a62f9259a847d5b3dfc1c
BLAKE2b-256 72a65a1332c3ab6e8137a358bca902e4658157763e49885e91983116349ff604

See more details on using hashes here.

Provenance

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