FR-MRG-3: the composite is a RAW at the source's native scale

Camera-linear u16 samples on the first source's black-subtracted scale
with its white level, never rescaled to fill 16 bits, with its body,
matrices, illuminants and as-shot neutral carried — so the panorama is
developed afterwards as one photograph from the sensor's own numbers.
The only thing a warp cannot preserve is the colour filter array, and
the clause says so.
This commit is contained in:
2026-09-19 15:24:10 +02:00
parent 7e6b25b21b
commit f9510405c3
2 changed files with 31 additions and 10 deletions
+13 -8
View File
@@ -1712,15 +1712,20 @@ White balance sits below it because the sensor saw the same light in every frame
camera RGB agrees across the overlaps whether or not the camera's auto white balance drifted, and
the balanced values would not.
**FR-MRG-3 — The output file.** *(general to any merge)* Scene-linear, at least 16 bits per
channel, in a wide gamut with the colour transform resolved or the profile carried, with capture
metadata from the first source. Named from the first source with a stated suffix and placed
beside it. Where the sources' folder is not writable — a remote-only tier, a read-only mount —
it goes where an export goes (FR-EXP-6) and the interface says so before the merge starts.
**FR-MRG-3 — The output file.** *(general to any merge)* A RAW, in every sense that survives a
warp: camera-linear samples at the **source's native scale** — integers on the first source's
black-subtracted scale with its white level, never rescaled to fill 16 bits — with the first
source's body, colour matrices, illuminants and as-shot neutral carried, and its capture
metadata. What a merge cannot preserve is the colour filter array: a warped image has no sensor
grid to re-mosaic onto, so the composite is three samples per pixel. Named from the first source
with a stated suffix and placed beside it. Where the sources' folder is not writable — a
remote-only tier, a read-only mount — it goes where an export goes (FR-EXP-6) and the interface
says so before the merge starts.
The container is a spike result (S15), not a requirement: a linear DNG if rawler reads back what
the application writes, else a float TIFF with a decode path of its own. The choice is invisible
to everything above the decoder.
The container is a linear DNG (S15.1, decided 2026-09-19): rawler reads back what the application
writes, and the composite re-enters as `Format::Dng` through the decoder every camera DNG uses.
The point of the whole clause is that the panorama is *developed afterwards* — white balance,
profile, exposure, everything in §3.3 — as one photograph, from the sensor's own numbers.
**FR-MRG-4 — Projection and framing.** Cylindrical, spherical or perspective, chosen from the
field of view and overridable; the horizon levelled from the estimated rotations, overridable by a