epaper-dithering
Dithering algorithms for e-paper/e-ink displays
Decision gist · record as of 2026-08-14
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.AI-flagged interpretation of the facts on this page — verify before relying
Before you install
- Requires Python 3.11 or later; pillow must be installed as a runtime dependency.
- 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 · maintenance · safety
MIT (permissive) — MIT license permits unrestricted use, modification, and distribution in commercial and private projects with minimal obligations.
last release 2026-07-23 (22 days) · last repo commit 2026-07-23 · 10 stars
0 known vulnerabilities (OSV.dev, 2026-08-14) · 89,340 downloads/mo, #13,669 on PyPI
Alternatives
Verify before relying
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")- 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.
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 on it.
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
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.
Requires Python 3.11 or later; pillow must be installed as a runtime dependency.
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")
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 packagepillow |
| 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 |
| Classifiers | 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 |
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
Tags
Let your AI agent find packages like this
Example. Real query, live index.
You found this page by searching. An agent finds it by wishing: SkillFed indexes 14,416 PyPI packages by what they can do, searchable in plain language.
wish › “e-ink image dithering”
- epaper-ditheringConverts images to dithered output optimized for e-ink displays with…
- etcpakCompresses image data into GPU-friendly texture formats (BC1, BC3,…
- dask-imageDistributed image processing using Dask, enabling large-scale image…
Give your agent the search over MCP, or paste the wish link into any chat.
More Graphics packages
Pillow adds image processing capabilities to Python, providing file format support, efficient pixel data handling, and image manipulation operations.
Install it if you need to work with images in Python—it is the de facto standard for this task.
fonttools manipulates font files in multiple formats (TrueType, OpenType, AFM, Type 1, Mac-specific) and includes TTX, a tool to convert fonts to and from XML text format.
Install it if you need to read, write, or manipulate fonts programmatically or via the TTX command-line tool.
Enables matplotlib figures to display inline directly within Jupyter notebooks and IPython environments instead of in separate windows.
PyMuPDF extracts, renders, converts, and manipulates PDF and other document formats (XPS, EPUB, images, Office files via Pro) with high performance, providing text, tables, images, and metadata with precise layout information.
The AGPL license requires careful review if you are building proprietary software—commercial licensing is available from Artifex.
pypdfium2 is a Python binding to PDFium that enables PDF rendering, inspection, manipulation, and creation through a ctypes interface to Google's PDFium library.
Install it if you need PDF rendering, inspection, or manipulation in Python; the medium install friction is offset by comprehensive platform support.
Altair is a declarative Python library for creating interactive statistical visualizations by writing simple, readable code that compiles to Vega-Lite specifications.
See also color-operations · etcpak · pixeloe · pyoxipng · climage · brewer2mpl · colorthief · aggdraw · imgviz · kornia-rs