Skip to content

March 20: From Signal Fading to Palette Lerping

The big multi-instrument compositing push. Started with per-channel feathering that couldn't fix the MIRI color palette shift, evolved to instrument-level blending, then realized signal fading destroys detail and invented color-contribution feathering — lerping between palette interpretations instead of fading signals.

Developer Journal

The MIRI boundary problem

Multi-instrument composites (MIRI + NIRCAM) had a visible color palette shift at the MIRI FOV boundary. All MIRI channels share the same field of view footprint, so per-channel feathering produced identical masks for all of them — they all faded in lockstep. The result was an abrupt 6-channel to 4-channel palette change regardless of feather strength.

Instrument-level blending (attempt 1)

The first fix grouped channels by instrument, produced per-group RGB images, and blended them with equal weight using instrument-level coverage masks. This worked for the yellow/green channels (F770W) — smooth transitions, no hard edge. But the red (F1500W) transition to background remained sharp, and cranking up the feather width just washed out detail in the transition zone.

The insight: feather the color, not the signal

The key realization came from looking at what feathering actually does — it fades the entire signal (structure + color) to zero. But what you actually want is to preserve all structural detail and only transition the color palette. The fix: compute two RGB images (full 6-channel palette and NIRCAM-only palette) and lerp between them using the MIRI coverage mask. NIRCAM structure exists in both images, so nothing is lost in the transition.

CEO review auto-progression

Also improved the workflow tooling — the CEO review skill now automatically progresses to the engineering review when the verdict is "proceed," eliminating the manual handoff that was slowing down the implementation pipeline.

What shipped

PR Title
#890 fix: color-contribution feathering for multi-instrument composites
#888 fix: instrument-level blending for multi-instrument composites
#887 chore: process improvements — trim AGENTS.md, add skills, docs audit
#886 fix: use line content as React key instead of array index
#884 fix: auto-enable feathering for multi-instrument composites
#881 fix: resolution blur, per-channel feathering, and instrument-aware stretch
#880 fix: exclude background/calibration targets from recipe generation