id: film_sim order: 25 attributes: [tone, colour] 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.