Skip to content

feat: map 13.3" Spectra 6 split panel to the v2 measured palette - #156

Merged
g4bri3lDev merged 1 commit into
OpenDisplay:mainfrom
davelee98:feat/spectra-13-3-palette
Aug 14, 2026
Merged

feat: map 13.3" Spectra 6 split panel to the v2 measured palette#156
g4bri3lDev merged 1 commit into
OpenDisplay:mainfrom
davelee98:feat/spectra-13-3-palette

Conversation

@davelee98

Copy link
Copy Markdown
Contributor

Adds the one missing DISPLAY_PALETTE_MAP entry for the 13.3" Spectra 6 dual-controller panel (T133A01, Seeed reTerminal E1004, panel_ic_type 66 / 0x42). Without it, get_palette_for_display() falls back to the idealized ColorScheme instead of measured data.

Why BWGBRY_SPLIT and not BWGBRY

Firmware requires a split panel's config to declare color_scheme 8 — split_panel.cpp errors out and refuses the frame otherwise — so the host always calls get_palette_for_display() with BWGBRY_SPLIT for this panel. An entry keyed on BWGBRY would never be reached.

Why the 7.3" measurement

BWGBRY_SPLIT differs from BWGBRY only in plane packing, not in ink set — encoding/images.py notes the dither output is byte-identical and only the packing order differs. So a Spectra 6 measurement transfers. This is explicitly a borrowed palette until the T133A01 is calibrated directly; the inline comment records that so it is not later mistaken for measured data.

Why v2 rather than v1

SPECTRA_7_3_6COLOR_V2 (measured 2026-03-15, DNG with linear tone curve) is the sounder calibration. SPECTRA_7_3_6COLOR (2026-02-03, iPhone RAW) shows systematic capture-pipeline artifacts: three inks clip to a hard zero channel (blue R=0, red B=0, yellow B=0), and white/black implies an 11.45:1 contrast ratio that a Spectra 6 panel cannot physically produce. V2 lifts the clipped channels (blue R 0 → 36 is the largest single change) and lands at 6.65:1. Since tone/gamut "auto" derive their compression target from the palette, an inflated gamut also causes systematic under-compression.

Scope

One row plus its comment, and the import it needs. No behavior change for any existing panel — 7.3" (panel 35) still maps to v1, and unknown panels still fall back to the idealized scheme.

Verification

  • get_palette_for_display(66, ColorScheme.BWGBRY_SPLIT) returns SPECTRA_7_3_6COLOR_V2
  • get_palette_for_display(35, ColorScheme.BWGBRY) unchanged (v1)
  • unknown panel still falls back to ColorScheme.BWGBRY_SPLIT
  • ruff, ruff-format, mypy, pylint pass (pre-commit); pytest -k palette 7 passed

Not hardware-verified on a reTerminal E1004 — this is a strictly better default than the idealized fallback, not a substitute for calibrating the panel.

Panel 66 (T133A01, Seeed reTerminal E1004) had no DISPLAY_PALETTE_MAP
entry, so get_palette_for_display() fell back to the idealized
ColorScheme instead of measured data.

Keyed on BWGBRY_SPLIT rather than BWGBRY: firmware requires config
color_scheme 8 for dual-controller panels, so a BWGBRY-keyed entry
would never be reached. The split scheme differs from BWGBRY only in
plane packing, not in ink set, so the 7.3" Spectra 6 measurement
applies until the T133A01 is calibrated directly.

Uses SPECTRA_7_3_6COLOR_V2 (2026-03-15, linear tone curve) rather than
V1, whose capture pipeline clipped three inks to a zero channel and
implies an 11.45:1 white/black contrast ratio the panel cannot produce.
@davelee98
davelee98 requested a review from g4bri3lDev as a code owner August 13, 2026 14:56
@codecov

codecov Bot commented Aug 13, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@g4bri3lDev
g4bri3lDev merged commit 42560f4 into OpenDisplay:main Aug 14, 2026
4 checks passed
@davelee98
davelee98 deleted the feat/spectra-13-3-palette branch August 14, 2026 15:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants