Fernando Voltolini de Azambuja

Reflective display · color science · software

Renderer design and comparisons

An offline route from source image color to native pixel states, with explicit mapping and halftoning choices.

One source, two sets of display pixels

The completed offline renderer turns an ordinary image into the six native states and a display-ready file. The comparison below uses its current default, not the feedback alternative that performed worse in the fixed software comparison.

Hokusai's Great Wave, interpreted as sRGB and fitted to the display frame
Shared source · interpreted and fitted
Native pixel states chosen by the Pimoroni route for the same Great Wave source
Pimoroni route · six-state preview
Native pixel states chosen by the project renderer for the same Great Wave source
Project renderer · six-state preview

Software previews, not panel photographs. Both pixel maps are recolored with the same visualization palette: the measured native-state colors used for the ICC artwork previews, scaled so the panel's white appears white. This palette is only for comparing pixel choices; it is not the renderer's endpoint-reference table and does not predict panel appearance or optical improvement. Both renderers receive the same interpreted, fitted source; this is not Pimoroni's untouched image-intake workflow.

Katsushika Hokusai, Under the Wave off Kanagawa (The Great Wave), ca. 1830–32. The Metropolitan Museum of Art, JP1847. Public domain. Only the frame's side padding is hidden here; the artwork is not cropped.

Pimoroni's route selects from a nominal six-color RGB palette and uses Pillow's Floyd–Steinberg dithering in RGB code values. The project route interprets the source as sRGB, converts it to D50 XYZ, brings unreachable colors inside the numerical range spanned by six measured native-state references, and diffuses XYZ error with Floyd–Steinberg. No device ICC profile or learned spatial predictor is applied in this comparison.

From an image to exact display pixels

The offline implementation converts ordinary images to the six native pixel states without depending on a learned spatial predictor. It uses measured native colors as references for its numerical choices. Those references do not, by themselves, predict the optical color of every mixture.

  1. Interpret the imageRead its source profile, or use explicitly declared sRGB.
  2. Work in color coordinatesConvert to D50 XYZ and bring unreachable colors inside the native-reference range.
  3. Choose and arrange statesUse measured native-state references with nearest-state selection or error diffusion.
  4. Pack the display fileProduce the exact state plane and the packed file the display controller accepts.

reference-hull means that source colors outside the numerical range spanned by the six measured references are brought inside it before pixel selection. The E673 payload is the packed file the display controller accepts. The implementation is currently in a private development repository.

Software decisions in the tested rendering routes
DecisionPimoroni baselineProject renderer
Interpret source colorColor-profile conversion is handled upstream.Explicit source-profile handling or declared sRGB.
Choose native statesNearest entries in Pimoroni's blended RGB palette, using saturation 0.5.Measured native references with declared color-coordinate calculations.
Distribute quantization errorPillow Floyd–Steinberg dithering.Selectable nearest-state mapping or serpentine XYZ error diffusion.
Inspect the resultNative-state display buffer.Native-state plane, packed payload, measured-reference preview and recorded settings.

The feedback alternative did not improve the fixed comparison

Error diffusion passes the error from choosing one native state on to later pixels. I tested one alternative rule for that feedback across 114 software conditions covering images, flat-color patches and tone patterns. The table summarizes the eight equally weighted development images for each diffusion method.

Computed mean software reference error, ΔE00. Lower is closer to the source reference.
Diffusion methodExisting baselineFeedback alternative
Floyd–Steinberg (FS)11.13411.243
Jarvis–Judice–Ninke (JJN)11.11911.329

The alternative improved some images but worsened the equal-weighted mean across the eight development images. Across the broader 114-condition comparison, it also regressed individual cases: a flat dark-gray field rose from 8.11 to 14.73 ΔE00, and several tone and detail checks worsened. The default therefore remains serpentine_xyz with reference-hull. JJN spreads error over more neighbors. Its baseline differed from Floyd–Steinberg by only 0.015 ΔE00, and this comparison tested the feedback rule rather than choosing a kernel, so the kernel stayed unchanged.

What the software metric means: software reference error is the mean ΔE00 across complete 16 × 16 source-image tiles. Each tile compares the original source color, averaged in D50 XYZ before gamut mapping, with an area-weighted average of the measured native-state references selected for that tile. The metric includes gamut-mapping and pixel-selection error and assumes additive area mixing, which the pattern measurements show does not always hold.

These are not measured screen errors, and the renderer score is not comparable with the 11.20 measured on the ICC grid. The 114 conditions form a fixed development comparison, not an unseen validation set. Better physical image reproduction remains unproven.

A working renderer does not require a general display model

The implemented route can select and pack pixels with prediction disabled. A dependable spatial model could inform those decisions, but its absence does not prevent a reproducible renderer with explicit choices and tradeoffs.

An ICC profile has a different job: it describes a specified rendering-and-display process for color management. It does not replace the pixel-selection algorithm or automatically account for presentation history and image surroundings.