`Attribute::Geometry` becomes `Attribute::Compose`, and `film_sim` moves from `[tone, colour]` to `[effect]`. Two categories were doing the wrong job. "Geometry" describes what crop, straighten and the quarter turns do to coordinates — but it describes lens distortion correction exactly as well, and that is not a compositional choice at all. Naming the attribute for the photographer's decision is what separates it from `Optics`: one is what the lens did, the other is what they chose. The maths the two have in common is not the thing worth filing them under. A film stock declared both `tone` and `colour`, so "Kodachrome" appeared in the Light group beside exposure and again in Colour beside white balance — two places, neither of which is where anyone looks for it. It is neither: `Effect` is defined in this same file as "applied rather than corrected — a look, not a fix", which is what a stock is. That it moves tone and colour is true of every look, and is not what the attribute is for. `from_name` still accepts "geometry" on the way in. That string is persisted in `develop.copy_attributes`, and an entry it fails to parse is not an error — `presets::scope_for` logs it and drops it — so without the alias an existing settings file would have quietly narrowed what a paste carries. `name` writes the current spelling, so the file migrates itself the first time it is saved. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
29 lines
1.4 KiB
YAML
29 lines
1.4 KiB
YAML
id: film_sim
|
|
order: 25
|
|
# Effect, not tone-and-colour. It declared both, which put "Kodachrome" in
|
|
# the Light group beside exposure and again in Colour beside white balance —
|
|
# two places, neither of which is where anyone looks for it, and both of which
|
|
# it crowded. A stock is `Effect`'s own definition: applied rather than
|
|
# corrected, a look and not a fix. That it moves tone and colour is true of
|
|
# every look and is not what the attribute is for.
|
|
attributes: [effect]
|
|
rust: FilmSim
|
|
|
|
why_rust: |
|
|
It carries a stock's measured tables — an exposure matrix, three
|
|
characteristic curves and a density lookup — which are not parameters and
|
|
which no `uniforms:` expression could produce. Its neutral is "no stock
|
|
loaded" rather than a set of values, and it is the one node that declares
|
|
`Operation::renders`, so the composer omits the camera profile's base curve
|
|
and the conversion out of camera space on its behalf.
|
|
|
|
placement: |
|
|
After white balance and exposure, and before everything else.
|
|
|
|
Those two are what the camera did — interpreting the sensor, and correcting
|
|
the amount of light that reached it — and they are only meaningful on
|
|
scene-linear values, which is what a film has to be handed. Everything below
|
|
is a decision about the picture, and a decision about the picture belongs
|
|
after the film has rendered it, exactly as it does when you scan a frame and
|
|
then work on the scan.
|