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.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-5.0.0-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.0-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.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-5.0.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-5.0.0-cp314-cp314-win_amd64.whl (196.0 kB view details)

Uploaded CPython 3.14Windows x86-64

epaper_dithering-5.0.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-5.0.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-5.0.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-5.0.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-5.0.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-5.0.0-cp313-cp313-win_amd64.whl (196.0 kB view details)

Uploaded CPython 3.13Windows x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.11Windows x86-64

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

File metadata

  • Download URL: epaper_dithering-5.0.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-5.0.0.tar.gz
Algorithm Hash digest
SHA256 d5715e9a2ebbfc25cb8e970cde00969f9da2f500a5e01fb81f9ac64f8dafae4f
MD5 bbbc1ffbc447fe1a12d63ac77fc309e6
BLAKE2b-256 cf9fae809958f1cd908a615673088eb6b6ade3da0995c803f3b72442f14cdf00

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 ef60babc7b4eaa2f1f3edae0b49a3c42744e5052a154cb21869ea11d7fde48ed
MD5 27cefe33abfdca97c14503a63d1306e0
BLAKE2b-256 a866c403534b51d18cb485de8a4ed41c6e3981f5397cf7a726a520012dff6db8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4b4a3f883f6261f95813c53b82d15b312dfbca23c92ea38b522c7c953e514b95
MD5 2807026ea79bb2d550a59daa5c19577b
BLAKE2b-256 b326e2fe071ac3d5a7541e93eaf57b6db138ff5aa9b5547bdd90852badc15f56

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 5369f20dcce87260acdf939ea4eabea4b55b9f92263b5800ffde757aa9b1fa40
MD5 4a6b33943be5bea08e8a98ae12d16c34
BLAKE2b-256 396ae204b7d0758e82d2dd4645abddc7a2d44974ac7da235c8e00e885de3f779

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 c7eea09bab48e1166027ee1c11fc2f787dac5bcc2f39f039fc95c11832b13516
MD5 b685e2354d95cbe6a1e03376f00b64cc
BLAKE2b-256 b59d30c73c039500b275a47e5eab020d924027e8e4ec39047c02261e97430170

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 8e8a7d7f065f6f3cb2709aa8f7589f3af56d5151b4541ff9ae7c675e6e03080f
MD5 2f8432ff845c95a0ed3cf83c43642ef6
BLAKE2b-256 09dde371e0a279a4232406d5d49a199cfec2562bcb4905cb684c3f553ecd762d

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 970169eda6930db2b5fe53d8ae785148b32ebec247055e1cd188bc8a38c05487
MD5 8fff79a06279a1c327f52aac11c6e977
BLAKE2b-256 181b8a90e10bb639461db77b2c9faedd7500c68708c3d44a21d64d9a8da746b2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 41dd0bf7d89bfe4e538db3d7a6559d049fefd3e71acc5a656259a12c4fda7374
MD5 af6312bcec8f02038dd2808c9f80f2e5
BLAKE2b-256 3925bd241c2dc8bd748ee27bc61301fe3cc88e90035a6b64fc7a97faf6ee5e43

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.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-5.0.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-5.0.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 431aaf72e4c0d6962d2f9a94254e55ea89d7eb62489401b06e624babe271c9af
MD5 f17b9c8bd19970e08dc18bf101295445
BLAKE2b-256 7208e417d844080d6841aa9f1147090dde1df1289e95f29af928e176f5ce36ba

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 02e097005f063930e1bfc9fbab6625adc322962cff4db0665b21638fa4357572
MD5 8583059ce901d0ac9d9d89d4edce2099
BLAKE2b-256 2affc97cd110dfa6f58356437a8d300e71f475b23743ae7f20cc55846b1521a3

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 3e3624d9b617b3bff3f4c6aa2300a2f5fa90e0457917fb840a646881d8e1c9c9
MD5 97f638a57fac90fd6c5d17a53fe37510
BLAKE2b-256 04eef9da92a1ce61505d8c3a1222edecdfa7898d277cc9d7f67c4671939fcaae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 40f1d6ca0bc4a6d0e3d4c2579eac97eef271244129b1e13b95f3c61c8e0d7002
MD5 22c867cc79c6fbff81deb4341b9e6a05
BLAKE2b-256 2dd4c9b5f978d02fcdcb68259a2345486eb4594258e5cd8bf2ba14cf5dceb551

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 f04708ef06f0b955b81a35b1a6c2ba2fb0fff87e50fe4c8325f27ea75d2f07a9
MD5 ff6d340486eb30479ad7699e8eac80fd
BLAKE2b-256 52e3c50279ed9e4a861204aa89a7f8685939a76e0f35ee92a2dcba4fd7ea2627

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 df9e0146abb05a8eecf8cbe7003162d93ad525d14d0aa05df60bc841bc4611c5
MD5 c58d918fb52eae72757a37defaab2f93
BLAKE2b-256 73b32b0e66227c006cf080fc28c125b8b3713a5c338f233154adde8c0144faf6

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.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-5.0.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-5.0.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 be3d2f6da679d3ceafe58294d65a767f57adf168e4d507e0567e23cfd9384227
MD5 4d3a93704e99b553afbf0d2b45e9fcd8
BLAKE2b-256 85cb59075412f0360bc65912534a315d8c7b6d4904112ee6e1ec06c240cef6d2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ae038842ab87b739c5ec176acdfdee2325474925e6505d5cb66bbd166a1cbd08
MD5 39c7cfe50c18bbfae4bd26aeab9ab4fa
BLAKE2b-256 7b866c0bf227b5318d674e196cb4dfe7207a17b2fb5dc55015324345ca14f447

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 14916492c0f973abd09aa39e996a9da07110d0595eab87ad047b0db4794ccff3
MD5 1358935988a5f0596737e418d13c4559
BLAKE2b-256 4e72b6cef85acfa477110f2af041fecb1fbbad4a9626a8a2844ecbf34ee18fee

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 173d584a423b96b6f375dfe21994b5016e059ee979eeeb07aedc73c9b28c8277
MD5 118e8a437e33e8d77766494f5050ff4f
BLAKE2b-256 36abf0e596e74f7b61628376cee41369c49e7f4872687cfc2c73ad0ada8afa1a

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.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-5.0.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-5.0.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 df271dc32f056f8fde069bada3a9d77b3e4b0f11f9a488f79a8d1bce90fa6062
MD5 4512a1b937520ff9de0f02fd96066cbb
BLAKE2b-256 85235fa9bdadbb0c8c5ef8c59e4ba24f86f63069d21b960d8eb079b492269c68

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c946da88066ec53f606c8c2a118a79ccbdc24020a37042ad8827aad5f35d60bd
MD5 c132afaf99bab87e3021622f393aeb73
BLAKE2b-256 7c1a4dc2cfe6984d65fccfcd07a419b18747b679c8ab7edbbad735025acc7992

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d6900ca34f7943413508deb4a4b376c4bfd15ad7eb2c8b181de3124c7e4211ec
MD5 7905455519cc511bc1160cd6745c435d
BLAKE2b-256 1691b624aa83fcaebf5c8c09a67c15d38a86396fd438a40325aa411823549767

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-5.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 43bb0d4dbd7707bf5c8636c83e032070fbb3caa6480dd9ecffd89147310f613f
MD5 e629ab6dd80c39697fa0e868f956ce5e
BLAKE2b-256 825a792e8b7aae9082c5676ac0e57fa8ed5d114e088dcc5143c5111013102149

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-5.0.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-5.0.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-5.0.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 b703dd2f9548db5618ee6e2d9499da1a404ab6969561cbf2a90bdfc56f46cccb
MD5 ce5d32b685a8f731f4da337e0951a0ca
BLAKE2b-256 d9f5571ae0f04af94b17a4d1e3b33657b2abe82beed119b8810f0442042a2b46

See more details on using hashes here.

Provenance

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