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 enabled by default (tone="auto") and only applies when using measured ColorPalette instances:

  • "auto" (default): Analyzes the image histogram and remaps 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. 0.0 disables compression.
from epaper_dithering import dither_image, SPECTRA_7_3_6COLOR, DitherMode

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

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

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

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: auto gamut compression (activates only when image exceeds palette gamut)
result = dither_image(img, SPECTRA_7_3_6COLOR, mode=DitherMode.BURKES)

# 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=0.0)

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

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)

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

Uploaded PyPymanylinux: glibc 2.17+ ARMv7l

epaper_dithering-4.0.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (352.7 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

epaper_dithering-4.0.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (348.7 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARMv7l

epaper_dithering-4.0.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (347.8 kB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.17+ ARM64

epaper_dithering-4.0.0-cp314-cp314-win_amd64.whl (193.0 kB view details)

Uploaded CPython 3.14Windows x86-64

epaper_dithering-4.0.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (349.8 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARMv7l

epaper_dithering-4.0.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (349.5 kB view details)

Uploaded CPython 3.14manylinux: glibc 2.17+ ARM64

epaper_dithering-4.0.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (594.2 kB view details)

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

epaper_dithering-4.0.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (348.6 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARMv7l

epaper_dithering-4.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (348.0 kB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.17+ ARM64

epaper_dithering-4.0.0-cp313-cp313-win_amd64.whl (193.0 kB view details)

Uploaded CPython 3.13Windows x86-64

epaper_dithering-4.0.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (349.4 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARMv7l

epaper_dithering-4.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (349.6 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

epaper_dithering-4.0.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (594.1 kB view details)

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

epaper_dithering-4.0.0-cp312-cp312-win_amd64.whl (193.5 kB view details)

Uploaded CPython 3.12Windows x86-64

epaper_dithering-4.0.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (350.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARMv7l

epaper_dithering-4.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (349.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

epaper_dithering-4.0.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (595.0 kB view details)

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

epaper_dithering-4.0.0-cp311-cp311-win_amd64.whl (195.3 kB view details)

Uploaded CPython 3.11Windows x86-64

epaper_dithering-4.0.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (352.1 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARMv7l

epaper_dithering-4.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (351.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

epaper_dithering-4.0.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (597.4 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.0.0.tar.gz.

File metadata

  • Download URL: epaper_dithering-4.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-4.0.0.tar.gz
Algorithm Hash digest
SHA256 c1cd1f4633b3f200c047774fb14eb709a58c3f99d70d6e0463966b94bef1c625
MD5 cb5225bd3836f2475c0c1e6d741c17db
BLAKE2b-256 2c2c1ee69f74756bbcd4c3c0686dbc4bb9ea00012b5e169d38d2414f5e05eca6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 d1f0107fd79961da12242ece68f2556cb47e7fa29310fe02dc9f3bf5b20b6df9
MD5 b92404fb1c383b6864cf484bc498f34f
BLAKE2b-256 0444980c8d9632e432390390151057782325768afdd6e98d6ad23f4fbbfcaec0

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e63b1ce524967aa67d43dac153fe375306a3d0799d988b4daab899242eaa5230
MD5 fbdcfe36284f3f5a4359009f3be58337
BLAKE2b-256 417ede82be08dc2f5e7ff06e45bdafba21c1cdada11c6564575d32c064a0f8c6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 18316c1c553373c1a3e15624339c0fd5cf74a17095e05292f98bf2c89ba91132
MD5 ada4a82905c484409efb7b0295e4eae3
BLAKE2b-256 0a92035d8a8c64835990f27cd23c9b837faaf1e1a3a814a9c20b0bdacbfc2aae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bec1de4e07027a877e857f7738f468564b43de40ca9713f7de5e8f5657b56923
MD5 a2311d955470b21ea1809e9bff6db8c7
BLAKE2b-256 11dd28dd94a84bfe907cd62ad27293eb6d31370f5965028519ae989ad262e307

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp314-cp314-win_amd64.whl
Algorithm Hash digest
SHA256 2979527b66f9c19a8a8dba24e91606969a84a4fa6d418f2d8245a8e3e6e8ffba
MD5 bdef86e4da00dcca5417a8db4fa4b346
BLAKE2b-256 8b53414fe8adbacb8104cb2a7bfe87ef1b45ac26b8f4c35aed354dc9ba11c197

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 80f47ccf750d5aeab198b47214ddaeaedc47031d35db6023deadd466ce93d57e
MD5 674f13e3c34151742c56cafda887717a
BLAKE2b-256 771a9f5e4c1f3be650f46fb299d19b7ce331d7f52dbf2860adce3b022aecee5e

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4ef4cc8e543b93e3d5e50d9d7a1f04019729f43c5354c3748ef062996f243672
MD5 f405bc02ef452a95c3cfe56f51b69863
BLAKE2b-256 d980e94648c9d9848c39b7e0beeaaf9ef998150f2850ded3341bba4b31084fda

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-4.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-4.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-4.0.0-cp314-cp314-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 f74df0b124b96f968b93182a93bd5bb31ad505896792f5ae539e1c8b93425145
MD5 fb87246f9fd9c6c70d60301e6fbbf1c4
BLAKE2b-256 2b38ee46a361562f9e1b24e547f830b2d9c249741b6c2f5cf94d30279e192c42

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 b5c2018cc067d379febce12cd4c2a09c59ca1f58ba36cf9637acf6cbc6a53b84
MD5 c8525d6ae519f999ef2901544333b217
BLAKE2b-256 a280edf63bb622987b76560d9d36ad950ecf4cbc51db4b15ce81324e556e3e6a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 9c1e01816cd786e2acfb944096735b855e6436a4db3d1e946fc36dae9b3096ed
MD5 14c720b1b6ce412559719332d70b0631
BLAKE2b-256 1a2bfac535d6e92f643a43e0e08b1b955ccf60e2664d136db0be80f2d877e0ec

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 da4dd69eb3d8faf7da1de87f60c2bcb190481c3ba306c0fb84aec40d031fea23
MD5 34d646ac869f3e46f891ef0dbd2213dc
BLAKE2b-256 72ee0467ca8dd5a14c62774fcf9832e286be60b596f753c5629668f46af6bebf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 1360cea55152be20172d4745ffbd1dd02c0e5c0385434458bee0f6bde8836645
MD5 f3fa812f5b148e17a599fec3c12a0424
BLAKE2b-256 ddb9a321648ac3b41caa491a7c77928e980854f3c6fb4092d73d489bdc571976

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ec0882c96c6d996c3ae6ab63bd35e6938390824d4d5eaabaaa95d6a12b829e65
MD5 edb5336b403920ee290402536e0be04f
BLAKE2b-256 5b3730ea2260938baedb0867bb275aa97e2c1bc9058bb93ce92edee46478a965

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-4.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-4.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-4.0.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 d15849666601e0a8e4c34075f1322a51656c2382be3c2f39c870e240ca94f61c
MD5 98fad676bc25e9261c1007fdcb671be3
BLAKE2b-256 39bafd35c23f27435b923d89a63c39b8dcc998467f9cb67cd1ff57bbc66f2a06

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 974f1e7f14e932e7c8e8130bef7cd44ed342051964d86c9eb42b89b40d258107
MD5 fc969bad46a5ec9ffc0a1948f7e9624c
BLAKE2b-256 cb43539241b4eaf2bf75633a829174c4b5712045b00725058bc6fdd716a9b679

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 8b5438b945f8c7e7245121487552b8e7c787bb0234419cb14ebaf2cdc7a73a74
MD5 0bde13eb6c2e1c93aca00f6253687324
BLAKE2b-256 9309203b63b40a8a86f4e9a815765d15d46761d90a5bf6a5314cd7eb3fc759b8

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 22f3e08c954b6f6404c28b84f3d7f6717e48aa9a6689e7bee5a419c5e51e1e22
MD5 a98507fb3fd82457276bd529d24a83fa
BLAKE2b-256 39f3a4449722d317379c900b1a0dd7abe5c63309a0bd6d094ff66a486104d87d

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-4.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-4.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-4.0.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 e5641831784c5607d1cbce39d3d77f88b3d806f6b581ea3082ad1bedbdab885f
MD5 089836d798ba58f4b5dc84b7db826397
BLAKE2b-256 60d4a73d96393748ed11d98ce47d8dbb3ca7529d82c413f0d0ba8a3fb467db69

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 c027d577857d17f91448d64fafb02391cf4cf5ff32c7bd7bbfc126ce9c639648
MD5 17708c446f8dcd27d7667a5f69f0bd04
BLAKE2b-256 57fb772f0a72cd50d7ae4f112076a04db62bc35937023233ca4189e596acf9a7

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 e9c5a41a9cb336693ecd949f1e3789be3aa013ec79f4b47bdb9c871f15f14952
MD5 ac0b02f1e7f39dd156b3498ba0363a29
BLAKE2b-256 d90942e6d91f43e26b8aab55b7c4fec83b2c511759a7374afe1e3846c54a3e4b

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for epaper_dithering-4.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b140bfc50399c22c3cbfc8fc6def3fd0906f43e0dcad3572361ae5c82fe8c4f1
MD5 f86a14b2a5ef8d3f98809d15df250c4e
BLAKE2b-256 095471c7b4de9c80327f84f06efbc52c9c21a72cf3012f5039915731a8fe4582

See more details on using hashes here.

Provenance

The following attestation bundles were made for epaper_dithering-4.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-4.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-4.0.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 cbd4807fffa901e1cf444e28e8f24b31a7311a9753a3ebad5507b109799e162f
MD5 1d1c32ba5bf29e2706acd45f3122de61
BLAKE2b-256 381bd0a98ec4f077d8c46df9d9a184ebfea978130fd4beab39d529def2aefc5b

See more details on using hashes here.

Provenance

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