Correct what D20 claimed the profile tables would do for colour

Measured after building them, on four of the library's 6D DNGs: Adobe
Standard's tables lower mean saturation by 3-9 % at defaults, and the
look at 200 % lowers it further. The 6D's look table scales saturation
by 0.925 in its darkest value rows; it was tuned to sit under Camera
Raw's default RGB tone curve, which DarkRoom does not apply, and the
dark-tone desaturation is what is left without it. On _MG_9080 the
Lightroom preview measures 0.49, the matrix alone 0.38, the profile
0.35.

So the spec's "that gap is most of why the same file looks flatter"
was wrong: the gap is tone. The tables stay — they put each hue where
Adobe put it — and the spec, D20 and the Vivid file now say so.
"Stronger camera look" is removed: a stronger Adobe Standard look is a
less saturated picture, the opposite of its name. The Vivid presets,
measured at 0.40-0.46 on the same frame, are what answers "more
colourful" today.
This commit is contained in:
2026-10-02 22:38:07 -04:00
parent 65c1f1a468
commit 54772f94d6
3 changed files with 35 additions and 19 deletions
+4 -10
View File
@@ -3,9 +3,10 @@ drpl 1
# Vivid: more colour than the default rendering, for the photographer used # Vivid: more colour than the default rendering, for the photographer used
# to Lightroom's richer starting point (camera-profiles.md §9). # to Lightroom's richer starting point (camera-profiles.md §9).
# #
# Most of that difference is the camera profile's look table, which D20 now # That difference is mostly Camera Raw's tone curve, not the camera
# applies where a profile exists. These go further, and work on every # profile: Adobe Standard's look table, which D20 applies, desaturates dark
# photograph — a JPEG, a body with no profile — because they lean on # tones (camera-profiles.md §1). So these do the work themselves, and work
# on every photograph — a JPEG, a body with no profile. They lean on
# vibrance before saturation: vibrance lifts muted colours most and holds # vibrance before saturation: vibrance lifts muted colours most and holds
# skin back, so a frame gets richer before anything in it looks painted. # skin back, so a frame gets richer before anything in it looks painted.
# Saturation, which moves every colour alike, is used sparingly on top. # Saturation, which moves every colour alike, is used sparingly on top.
@@ -66,10 +67,3 @@ colour_mixer.red_sat = -5
contrast.contrast = 6 contrast.contrast = 6
saturation.saturation = -5 saturation.saturation = -5
vibrance.vibrance = 25 vibrance.vibrance = 25
# The camera profile's own look, pushed: Adobe Standard's look table at
# 175 % is close to the jump from Adobe Standard to Adobe Vivid. Where the
# photograph has no profile, only the vibrance moves.
[preset Stronger camera look]
camera_profile.look = 175
vibrance.vibrance = 10
+25 -7
View File
@@ -14,13 +14,25 @@ DarkRoom already applies, plus two lookup tables indexed by hue, saturation and
- **`ProfileHueSatMap`** — a calibration. It corrects what a 3×3 cannot: a sensor whose reds and - **`ProfileHueSatMap`** — a calibration. It corrects what a 3×3 cannot: a sensor whose reds and
oranges sit in the wrong place relative to its blues, which no linear map fixes. Two copies, one oranges sit in the wrong place relative to its blues, which no linear map fixes. Two copies, one
per calibration illuminant, interpolated like the matrices. per calibration illuminant, interpolated like the matrices.
- **`ProfileLookTable`** — a rendering intent. The "Adobe Standard" look: richer blues and greens, - **`ProfileLookTable`** — a rendering intent: hue shifts of up to ±18° by hue, and saturation
warmer yellows, skin held where it is. The difference between Adobe Standard, Adobe Color and and value scales that vary with brightness. The difference between Adobe Standard, Adobe Color
Adobe Vivid is mostly this table. and Adobe Vivid is largely this table, together with each profile's tone curve.
Without them a raw renders through the matrix alone, which is accurate on a ColorChecker and reads Without them a raw renders through the matrix alone, which is accurate on a ColorChecker and is
as flat next to Lightroom. The first complaint FR-DEV-3e's rationale names is exactly this, and not what Lightroom showed for the same file.
the per-body base curves D19 retired were the cheaper stand-in for it.
**What the tables do *not* do is make a photograph more saturated.** Measured after the build
(2026-10-02), on four of the library's 6D DNGs rendered at defaults: Adobe Standard's tables
*lower* mean saturation by 3–9 %, and the look at 200 % lowers it further. The 6D's look table
scales saturation by 0.925 in its darkest value rows and by 1.0 from about a fifth of full scale
up, and its HueSatMap adds about 1 %. Adobe Standard was tuned to sit under Camera Raw's default
RGB tone curve, which raises saturation in the shadows and midtones, and the look's dark-tone
desaturation offsets it. Without that curve (§6) the offset is all that is left. On `_MG_9080`, Lightroom 6's own preview
measures 0.49 mean HSV saturation; the matrix alone renders 0.38, Adobe Standard's tables 0.35.
That preview also carries whatever was edited in Lightroom, so it is not a clean reference — but
the direction is unambiguous: **the gap to Lightroom's colour is mostly tone, not the profile's
tables.** The tables still matter for hue: they are what puts each body's reds, skin and foliage
where Adobe put them.
**What the library holds** (catalog of 2026-10-02): 17,286 of its raws are Canon EOS 6D. The **What the library holds** (catalog of 2026-10-02): 17,286 of its raws are Canon EOS 6D. The
9,348 DNGs were written by Lightroom 6.14 and every one sampled embeds *Adobe Standard* with both 9,348 DNGs were written by Lightroom 6.14 and every one sampled embeds *Adobe Standard* with both
@@ -212,7 +224,8 @@ action sits on that line.
## 9. Vivid presets ## 9. Vivid presets
Independent of the tables, and shipped in the same change: a *Vivid* section of read-only presets Independent of the tables, and — given §1's measurement — the part of this change that actually
answers "more colourful". Shipped in the same change: a *Vivid* section of read-only presets
(`presets/vivid.drpl`) for the "more colourful than the default" request. They use only operations (`presets/vivid.drpl`) for the "more colourful than the default" request. They use only operations
every photograph has — vibrance, saturation, the colour mixer, colour grading, contrast — so they every photograph has — vibrance, saturation, the colour mixer, colour grading, contrast — so they
work on JPEGs and on bodies with no profile, and change only what they name (FR-DEV-6): work on JPEGs and on bodies with no profile, and change only what they name (FR-DEV-6):
@@ -223,6 +236,11 @@ work on JPEGs and on bodies with no profile, and change only what they name (FR-
- **Vivid warm** — oranges and yellows up, a warm highlight cast: golden hour. - **Vivid warm** — oranges and yellows up, a warm highlight cast: golden hour.
- **Vivid portrait** — vibrance (which protects skin) with the orange and red bands held back. - **Vivid portrait** — vibrance (which protects skin) with the orange and red bands held back.
Measured on `_MG_9080` (mean HSV saturation; Lightroom's preview 0.49, DarkRoom's default 0.35):
Vivid 0.40, Vivid strong 0.44, Vivid landscape 0.46, Vivid warm 0.38, Vivid portrait 0.37 — the
last two move particular bands, not the whole frame. Rendered with `cargo run --release -p dr-gpu
--example develop -- FILE.dng out.ppm "preset:Vivid"`.
They are bounded by the existing `bundled.rs` tests: every key names a real parameter, every value They are bounded by the existing `bundled.rs` tests: every key names a real parameter, every value
is inside its control's range, and every preset changes something. is inside its control's range, and every preset changes something.
+6 -2
View File
@@ -2750,8 +2750,12 @@ operation at order 25, after exposure, converting into linear ProPhoto and back
fragment.** Design and the full argument: [camera-profiles.md](camera-profiles.md). fragment.** Design and the full argument: [camera-profiles.md](camera-profiles.md).
*Why now.* The library's 9,348 Canon 6D DNGs carry Adobe Standard's tables, which Lightroom *Why now.* The library's 9,348 Canon 6D DNGs carry Adobe Standard's tables, which Lightroom
rendered them through, and DarkRoom ignored them. That gap is most of why the same file looks rendered them through, and DarkRoom ignored them, so every hue on those files sat somewhere other
flatter here. than where Lightroom put it. *Measured after building it:* the tables are not why Lightroom's
rendering looks richer — at defaults they lower mean saturation by 3–9 %, because Adobe Standard's
look desaturates dark tones to sit under Camera Raw's tone curve, which DarkRoom does not apply.
The richer colour is tone, and the Vivid presets (FR-DEV-6) are what answers it today
(camera-profiles.md §1).
*Why there.* The matrix snippet stays what D19 made it, and every copy of it (masks, picker, *Why there.* The matrix snippet stays what D19 made it, and every copy of it (masks, picker,
camera-space tap) stays correct without changing. Hue and saturation are invariant under the camera-space tap) stays correct without changing. Hue and saturation are invariant under the