skillfed

epaper-dithering

Dithering algorithms for e-paper/e-ink displays

epaper-dithering v6.0.0 89.3K downloads/30d#13,669 on PyPI10
Permissive license MIT Active released

What it is and what it does

epaper-dithering is a Python library that dithers images for e-ink and e-paper displays with limited color palettes. It wraps a Rust core to apply one of ten dithering algorithms (from simple ordered dithering to Jarvis-Judice-Ninke) across ten color schemes ranging from monochrome to 7-color Spectra displays. The library uses perceptually weighted OKLab color matching to preserve hue and includes pre-dithering adjustments for exposure, saturation, shadows, highlights, dynamic-range compression, and gamut compression.

Typical use is loading an image with pillow, calling dither_image() with a chosen color scheme and algorithm, and saving the result. The library handles RGBA compositing automatically and supports serpentine scanning to reduce directional artifacts. It targets developers building e-paper display applications who need fast, high-quality image conversion without manual color space tuning.

Use it for:

  • Convert photographs for e-ink price tags or shelf displays that support 3–7 color palettes.
  • Batch-process images for e-paper photo frames with grayscale or limited-color output.
  • Prototype dithering results across multiple algorithms and color schemes to find the best visual match for a specific display.
  • Apply tone and gamut compression to images before dithering to compensate for e-paper's limited luminance range.
  • Generate monochrome or 3-color dithered previews for testing e-ink display firmware or hardware designs.

Worth the install?

AI-flagged interpretation of the facts on this page — verify before relying

Converts images to dithered output optimized for e-ink displays with limited color palettes, using compiled Rust algorithms for fast processing.

Yes, if you are building e-paper or e-ink display applications. The library is actively maintained, has no known vulnerabilities, uses a permissive MIT license, and provides a well-documented API with pre-built wheels for modern Python versions. Install friction is moderate but manageable. Not relevant for general image processing or non-display use cases.

Install

epaper-dithering on PyPI

pip

pip install epaper-dithering

uv

uv add epaper-dithering

poetry

poetry add epaper-dithering

Installing epaper-dithering

Before you install

Medium install friction due to compiled Rust extension requiring platform-specific wheels, but wheels are pre-built for Python 3.11–3.13 across macOS, Linux (x86_64, aarch64, armv7l), Windows, and musl systems. Active maintenance with recent release.

License in practice

MIT license permits unrestricted use, modification, and distribution in commercial and private projects with minimal obligations.

Quickstart

from epaper_dithering import dither_image, ColorScheme, DitherMode
import pillow

image = pillow.Image.open("photo.jpg")
dithered = dither_image(image, ColorScheme.BWR, mode=DitherMode.FLOYD_STEINBERG)
dithered.save("output.png")

Requires Python 3.11 or later; pillow must be installed as a runtime dependency.

Verify before relying

  • Whether the ~30ms performance claim for 800×480 images holds across all supported platforms and dithering modes.
  • Whether OKLab color matching actually eliminates the achromatic-attractor bug mentioned, or if this is a relative improvement.
  • Exact behavior and visual quality differences across the ten dithering algorithms in practice.

Package facts

License MIT (permissive)
Python support supports the current Python release (>=3.11)
Install friction medium — platform-specific wheel
Runtime dependencies 1 — pillow
Maintenance actively maintained — 22 days since the last release
Last repo commit
First released
Downloads 89,340/month — #13,669 on PyPI (30-day window, as of 2026-08-14)
Known vulnerabilities none known (OSV.dev, checked 2026-08-14)

Evidence: epaper_dithering-6.0.0-cp311-cp311-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl; epaper_dithering-6.0.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; epaper_dithering-6.0.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl; epaper_dithering-6.0.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; epaper_dithering-6.0.0-cp311-cp311-musllinux_1_2_aarch64.whl; epaper_dithering-6.0.0-cp311-cp311-musllinux_1_2_x86_64.whl; epaper_dithering-6.0.0-cp311-cp311-win_amd64.whl; epaper_dithering-6.0.0-cp312-cp312-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl; epaper_dithering-6.0.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; epaper_dithering-6.0.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl; epaper_dithering-6.0.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; epaper_dithering-6.0.0-cp312-cp312-musllinux_1_2_aarch64.whl; epaper_dithering-6.0.0-cp312-cp312-musllinux_1_2_x86_64.whl; epaper_dithering-6.0.0-cp312-cp312-win_amd64.whl; epaper_dithering-6.0.0-cp313-cp313-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl; epaper_dithering-6.0.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; epaper_dithering-6.0.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl; epaper_dithering-6.0.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; epaper_dithering-6.0.0-cp313-cp313-musllinux_1_2_aarch64.whl; epaper_dithering-6.0.0-cp313-cp313-musllinux_1_2_x86_64.whl

Keywords: epaper, eink, dithering, image-processing, display

Development Status :: 5 - Production/StableIntended Audience :: DevelopersLicense :: OSI Approved :: MIT LicenseProgramming Language :: Python :: 3Programming Language :: Python :: 3.11Programming Language :: Python :: 3.12Programming Language :: Python :: 3.13Topic :: Multimedia :: GraphicsTyping :: Typed

Tags

e-ink image ditheringepaper display conversionlimited palette quantizationerror diffusion ditheringe-paper color schemes
e-ink-displayimage-quantizationrust-extension

More Graphics packages