# A hand-written node. `rust:` names the type in `crate::ops` that implements # `Operation`; everything else about it — its descriptor, its parameters, its # WGSL — comes from that type rather than from this file. # # It appears here anyway so that `ops/` lists the whole pipeline in order. # A chain half-declared here and half-ordered in Rust would be worse than # either alone: the order is the one thing a reader comes to this directory # to learn. id: tone_curve order: 60 rust: ToneCurve why_rust: | Five control points presented as one curve widget, with an interpolator and a monotonicity guarantee behind it. Its neutral is a *relationship* between parameters rather than a set of values — the identity diagonal — which is not something the declarative `active:` rule can express, and its `presentation()` spans parameters rather than describing one. placement: | After the fixed-weight region controls, so the curve is the final word on tone: a photographer reaches for it to fix what those controls could not place exactly.