feat: map 13.3" Spectra 6 split panel to the v2 measured palette - #156
Merged
Merged
Conversation
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.
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds the one missing
DISPLAY_PALETTE_MAPentry for the 13.3" Spectra 6 dual-controller panel (T133A01, Seeed reTerminal E1004,panel_ic_type66 / 0x42). Without it,get_palette_for_display()falls back to the idealizedColorSchemeinstead of measured data.Why
BWGBRY_SPLITand notBWGBRYFirmware requires a split panel's config to declare
color_scheme8 —split_panel.cpperrors out and refuses the frame otherwise — so the host always callsget_palette_for_display()withBWGBRY_SPLITfor this panel. An entry keyed onBWGBRYwould never be reached.Why the 7.3" measurement
BWGBRY_SPLITdiffers fromBWGBRYonly in plane packing, not in ink set —encoding/images.pynotes 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 (blueR=0, redB=0, yellowB=0), and white/black implies an 11.45:1 contrast ratio that a Spectra 6 panel cannot physically produce. V2 lifts the clipped channels (blueR0 → 36 is the largest single change) and lands at 6.65:1. Sincetone/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)returnsSPECTRA_7_3_6COLOR_V2get_palette_for_display(35, ColorScheme.BWGBRY)unchanged (v1)ColorScheme.BWGBRY_SPLITruff,ruff-format,mypy,pylintpass (pre-commit);pytest -k palette7 passedNot hardware-verified on a reTerminal E1004 — this is a strictly better default than the idealized fallback, not a substitute for calibrating the panel.