Complete Guide · PhotoChemist

Every control, the whole film chain.

The authoritative reference for PhotoChemist, a physically-based spectral film-emulation plugin for DaVinci Resolve. It explains what every on-screen control group does, how the simulated film chain flows through them, and how to make grading decisions with them. New here? Read the Quick Start first for a five-minute path to a look. This is the deep reference.

43-bandspectral engine
17+stage film chain
2factories in the bundle
Contents
On this page
  1. What PhotoChemist is
  2. Spectral, not a LUT
  3. The film chain, mapped
  4. Applying it in Resolve
  5. Quick Processing
  6. Printer Calibration
  7. Input Condition
  8. Film Development
  9. Textures
  10. Preset Manager
  11. Negative & Print Film Stock
  12. Input/Output Config
  13. LUT Export
  14. The Film Stock Editor
  15. The Textures Editor
  16. Printer Lights (feeder)
  17. Diagnostic view modes
  18. Workflow & best practices
  19. Troubleshooting & FAQ
01

What PhotoChemist is

PhotoChemist is a physically-based, spectral simulation of the analog film photochemistry chain, running as a per-pixel OpenFX render inside DaVinci Resolve. It does not approximate the film look with a 3D LUT, an S-curve, or a channel-mixer matrix. Instead it reconstructs the actual chemical and optical events that happen when light exposes a negative, that negative is developed into subtractive cyan/magenta/yellow (CMY) dye, the negative is printed onto a print stock, and the print is shone through a projector bulb.

Internally it works in a 43-band spectral representation (360–780 nm at 10 nm steps): your image becomes spectra, those spectra drive real physical events, and only at the very ends does it return to RGB. The film look you want emerges from physics, overlapping curves talking to each other, rather than being baked into a fixed transfer.

The plugin ships as a bundle with two factories:

  • PhotoChemist, the main film-emulation effect (this whole guide, except the feeder section).
  • PhotoChemist Printer Lights, a companion generator/trim node that produces per-pixel printer-light maps, wired into PhotoChemist's optional Printer Link input. See that section.
02

Spectral, not a LUT, why it matters

A film-look LUT is a recording of an outcome. Someone shot a chart on a stock, scanned it, and froze the RGB-in → RGB-out relationship into a cube. It is fast and often looks good because the destination is real, but it is a photograph of a result, not the process that made it. A LUT only knows the one illuminant, one exposure, and one print condition it was baked under. Push outside that operating point and it has nothing to fall back on.

PhotoChemist simulates the chemistry instead, so the look re-derives whenever you change anything:

LUT / curve emulationPhotoChemist
Maps RGB → RGB through a fixed transferMaps RGB → spectrum → physical events → spectrum → RGB
The look is baked, static, single-illuminantThe look emerges from sensitivity curves, dye densities, H&D curves, printer lights
Channel crosstalk is faked with a matrixCrosstalk is real, it falls out of spectral overlap of dye absorptions and layer sensitivities
Halation / grain / sharpness are post effects bolted onThey act in the physically correct space and pipeline order
Cannot answer "what if the print stock were different?"Negative stock and print stock are independent spectral objects you can swap or edit

Concretely: a red apple vs. skin tone

A red apple's reflected light is not "255 red", it is a spectral curve, mostly energy past ~600 nm with a long tail. PhotoChemist dots that spectrum against three layer sensitivities: the red-sensitive (cyan-forming) layer lights up hard, but green and blue sensitivity haven't fully died at those wavelengths, so they catch a little too. Skin is not "less apple", it is a broad, smooth reflectance with strong long-wavelength content plus real green energy and a notch in the blues. It loads all three layers in a completely different ratio, and the dyes that form overlap spectrally on the way back out (cyan dye absorbs into the greens, magenta bleeds toward red). That wavelength-specific overlap is the crosstalk, and it colors the apple and the skin differently even where their RGB would land close.

The buy

A 3D matrix or cube applies the same fixed cross-channel mixing to every pixel by its RGB address. It cannot know the apple and the skin arrived via different spectra. The spectral sim does, because it never collapsed to RGB in the middle. Shift a printer light or the print dye and both the apple and the skin re-derive correctly, with skin staying believable while saturated reds bloom the way real stock does.

03

The film chain, mapped to the controls

The full Neg to Print path, in plain language, with the control group that governs each step:

  1. Exposure, your RGB is converted to spectra and projected onto the negative's three spectral layer sensitivities, giving three real exposures. (Input Condition rescales the scene into the stock's exposure window first; Negative Film Stock defines the sensitivities.)
  2. Latent image, silver forms by the law P = 1 − exp(−k·H) (exposure H, per-layer rate k).
  3. Grain (pre-curve), grain is injected into the latent signal before the characteristic curve, in density space, because real grain is a property of the developed silver, not a post overlay. (Textures → Grain.)
  4. H&D characteristic curve, the latent fraction is shaped into dye concentration; this is the stock's contrast personality (toe, gamma, shoulder), run per layer. (Neg HD Curve.)
  5. Dye formation + spectral integration, the three layers drive subtractive CMY dye; densities combine via Beer–Lambert. (Negative dye colors.)
  6. Developer competition / interimage, real cross-channel coupling from shared developer. (Film Development → Negative.)
  7. Negative halation, bright sources bloom around themselves, in density space. (Textures → Halation.)
  8. Scan, the negative is digitized under scanner illumination. (Neg Scan mode stops here.)
  9. Print, the scanned negative is re-exposed onto the print stock (its own sensitivities, grain, H&D curve returning transmittance), with its own interimage and halation. (Print Film Stock, Film Development → Print, Print grain/halation.)
  10. Projection, the projector bulb shines through the developed print against the print base (Dmin), producing the final viewed image. (Quick Processing → Projector Bulb / Power, Theater Screen Sim.)
Two things riding the chain

Sharpness (MTF) is applied as a resolution-dependent blur in exposure space, per format, on both the negative and print stages (Textures → MTF). The printer lights ride between the negative and print, they are the lab's exposure/balance control for how the negative is printed onto the print stock.

Top-level groups, in on-screen order

  1. Quick Processing (open by default), printer lights, projector, screen sim, stock presets, editor launches. Contains the Printer Calibration subgroup.
  2. Input Condition, dynamic-range rescaling into the stock's window.
  3. Film Development, push/pull, bleach bypass, developer competition, enhanced interimage, negative and print.
  4. Textures, Grain, Halation, MTF/Film Resolution, Film Breath, Gate Weave.
  5. Preset Manager, save/import/export readable JSON presets. (Hidden in demo builds.)
  6. Negative Film Stock, direct spectral model authoring (hidden in the default build; the FSE owns it).
  7. Print Film Stock, same, for the print stock.
  8. Input/Output Config, color-space I/O, processing mode, diagnostic views.
  9. LUT Export, bake the color transform to a .cube. (Hidden in demo builds.)

Plus two page buttons at the bottom: Learn how to use this plugin and Check for updates & more tools.

04

Applying PhotoChemist in Resolve

Add PhotoChemist on a serial node after your basic balance, treat it as the film stage, not a primary corrector. Find it in the OpenFX / effects library under Film Look Tools - Dec. 18 Studios.

Two setup controls (both in Input/Output Config, mirrored conceptually at the top of your workflow):

  • Input Mode, DaVinci Intermediate for a DWG/Intermediate timeline, Linear for scene-referred linear.
  • Processing Mode, Neg to Print (full chain, start here), Neg Scan (stops at the scanned negative), or Print Only (treats the input as an already-scanned negative).
05

Quick Processing

The main grading surface: printer lights, calibration, projector lamp, screen sim, the film-stock preset dropdowns, and the two editor-launch buttons. Open by default.

Printer-light currency

25 = neutral and ±1 point ≈ 1/12 stop. The lab convention is counter-intuitive: more light = more print exposure = a denser (darker) print, so you lower a printer light to print brighter. Because the per-layer print curves intentionally cross, printer-light balance shifts with tonal position; this is lab timing, not a simple brightness slider.

Printer lights & projection

ControlRangeDefaultWhat it does
Printer Light0–5025Overall printer light for all three channels, applied equally. Lower it to print brighter.
Red / Green / Blue Printer Points0–5025Per-channel printer light, your color balance / timing knob. 25 = calibrated baseline.
Projector BulbpresetNeutralPicks a calibrated R/G/B triplet for the projector color sliders (Neutral, Carbon Arc, Xenon, etc.). Editing any projector color slider flips it back to Custom. Does not touch Projector Power.
Projector Power0–101.0Overall projector intensity, the light through the emulsions onto the screen.
Projector R / G / B Light0–51.0Per-channel projector intensity (the viewing-lamp color).
Theater Screen Sim0.01–0.20.040Print base density (Dmin), the black-point floor. Higher = lifted, milkier blacks; lower = deeper blacks. The label is cosmetic; not a screen-reflectance model.

Stock presets

These dropdowns pick the physical stock models. Full Preset is the fast path, it loads sensitivity, dye formation, and both HD curves together.

ControlWhat it does
Full PresetCombined preset: loads Silver Sensitivity, Dye Formation, and HD Curves together (negative + print). Default Seneca Cine. This is ~80% of a look.
Neg Sensitivity PresetNegative-stock silver sensitivity (emulsion spectral response).
Print Sensitivity PresetPrint-stock silver sensitivity (independent from the negative).
Neg Dye PresetNegative-stock dye-formation (spectral dye absorption).
Print Dye PresetPrint-stock dye-formation (includes coordinated printer/projector power).
Neg HD CurveCharacteristic (D-log E) curve for the negative, contrast/toe/shoulder.
Print HD CurveCharacteristic curve for the print stock (independent from the negative).

Texture master toggles & editors

ControlWhat it does
Grain (checkbox)Master On/Off for film grain (negative + print). Off by default; tune the look in the Textures Editor.
Halation (checkbox)Master On/Off for halation.
MTF (checkbox)Master On/Off for MTF / softness.
Film Stock Editor…Opens the FSE panel to draw custom sensitivity and dye curves.
Textures Editor…Opens the Textures Editor (Grain/Halation/MTF; macOS).
Note

The three master texture checkboxes are the on/off gates; every enable inside the Textures group is AND-gated by them. New nodes come up with textures off because these masters default off.

06

Printer Calibration

A subgroup of Quick Processing (closed by default). A calibration layer separate from the grading printer lights: the calibration offsets ride additively on the printer lights (effective = light + (calib − 25)), so you balance mid-grey once per stock without spending grading points.

ControlRangeDefaultWhat it does
Mid-Grey Test Patternon/offoffOverrides the input with a pristine neutral 3-band patch (−1 stop / 0.18 mid-grey / +1 stop) that runs the whole pipeline. Read it on a waveform, then balance the R/G/B Calibration until the centre band is neutral.
Red / Green / Blue Calibration0–5025Mid-grey calibration offset per channel; rides additively on the corresponding Printer Points.
Lamp Ceiling20–8050How high a single printer light can shine before it rolls back toward white (50 = valve full open; 25 = ceiling pinned at neutral white). Models one white lamp split into R/G/B valves.
Ceiling Softness0–0.90.5How gently light rolls into the Lamp Ceiling (0 = hard clip at white; higher = softer/earlier roll).
Workflow

Enable the test pattern → read the centre band on a waveform/parade → adjust R/G/B Calibration until neutral → disable the pattern. Your grading printer lights are now free for timing, starting from a truly neutral base.

07

Input Condition

Technicolor-style dynamic-range rescaling that maps the scene's stops into the film stock's optimal exposure window before the spectral pipeline. Closed by default.

ControlRangeDefaultWhat it does
Enable Dynamic Rescaling0–11 (on)Turn the rescaler on/off.
Input Range (stops)8–2016Scene dynamic range in stops (typical HDR 12–16).
Target Range (stops)4–126Film-stock optimal exposure range in stops (typical 6–8).
Rescaling Pivot0.01–1.00.18Pivot point for rescaling (18% grey = 0.18).
Exposure Offset (stops)−15–150Additional exposure offset in stops.
Saturation Awareness0–11Preserve color relationships during rescaling (0 = off, 1 = full).

Use this when your source has a much wider dynamic range than the stock can hold gracefully, it compresses the scene into the film's sweet spot before exposure so highlights and shadows land where the H&D curve expects them.

08

Film Development

Push/pull, bleach bypass, developer competition/inhibition, and enhanced interimage saturation effects, negative and print stages independently.

Negative Development

ControlRangeDefaultWhat it does
Push/Pull−2–20Negative development push/pull, in stops.
Bleach Bypass0–20.10Bleach-bypass strength (retained silver → denser, desaturated, contrastier neg).
Developer Competition0–20.1Silver-halide developer competition strength.
Dye Inhibition0–20.05Cross-channel dye inhibition strength.

Enhanced Effects (Negative)

ControlRangeDefaultWhat it does
Midtone Expansion0–10Per-channel midtone boost (stronger for green).
Chroma Expansion0–20Opponent-space saturation expansion (hue-preserving).
Weak Channel Protection0–10Additive floor for weak channels (prevents color loss).
Spectral Sharpening0–1043-band spectral peak tightening (reduces hue bleed).
nRed / nGreen / nBlue Bias0–20Per-layer retained-silver weight for the bleach-bypass look. Fine-tunes how much silver each layer adds to the neutral-density crossover. Builds on top of Negative Bleach Bypass. Advanced.

Print Development

ControlRangeDefaultWhat it does
Push/Pull−2–20Print development push/pull, in stops.
Bleach Bypass0–20Bleach-bypass strength on the print.
Developer Competition0–20.1Silver-halide competition strength.
Dye Inhibition0–20.05Cross-channel dye inhibition strength.

Enhanced Effects (Print)

ControlRangeDefaultWhat it does
Midtone Expansion0–10Per-channel midtone boost.
Chroma Expansion0–20Opponent-space saturation expansion.
Weak Channel Protection0–10Additive floor for weak channels.
Spectral Sharpening0–1043-band spectral peak tightening.
pRed / pGreen / pBlue Bias0–20Per-layer retained-silver weight on the print stage, same mechanism as the negative Bias controls, building on top of Print Bleach Bypass. Advanced.
On the Bias controls

These six sliders scale how much each emulsion layer's retained silver contributes to the broadband neutral density of the bleach-bypass look, and the stage's Bleach Bypass value is added on top. They let you tint the neutral-density crossover per layer. Leave them at 0 unless you are deliberately sculpting a bleach-bypass look.

09

Textures

The master container for Grain, Halation, MTF, Film Breath, and Gate Weave. Closed by default. The three master on/off checkboxes (Grain / Halation / MTF) live up in Quick Processing; the per-format dropdowns are driven from the Textures Editor.

Group switchDefaultWhat it does
Make LUT-ReadyoffTemporarily disables the texture-effect master toggles so the remaining color transform stays LUT-export friendly. Your toggle choices are preserved while enabled.
Enable Film BreathoffMaster switch for Film Breath (organic frame-to-frame variation).
Enable Gate WeaveoffMaster switch for mechanical gate-weave position wobble.

Grain

Film-grain simulation based on published granularity curves, injected before the H&D curve in density space, so it rides the curve like real emulsion (living mostly in midtones and toe) rather than sitting flat on top. It uses a two-sublayer silver-crystal model (a coarse population and a fine population, with selectable crystal shape). Negative and Print have full independent trees. Per-side enables: Neg Grain Enable / Print Grain Enable (both default on, AND-gated by the master Grain toggle).

Main grain controls (per stage)

ControlRangeDefaultWhat it does
Amount0–150.5Grain intensity, scales the grain RMS linearly. The slider reaches 15, but the useful working range is ≈0–2: 0.5 = subtle/natural, 1 = pronounced, above ~3 = stylized/heavy.
Size0.5–21.0Grain size relative to the ISO-100 baseline.
ISO100–3200400ISO used for the granularity curve.
Color / Mono0–10.70 = chromatic (independent RGB grain), 1 = monochromatic (shared luma grain).
Seed0–10000 / 500Random seed offset (neg / print).
Density Falloff0.1–20.8How fast grain decays into density.

Chromatic Distribution (per stage)

ControlRangeDefaultWhat it does
Red / Green / Blue Layer0–30.85 / 1.00 / 1.15Per-layer grain amount multiplier (red finest, blue coarsest).
Red / Green / Blue Falloff0.1–20.8Per-layer density falloff.
Red / Green / Blue Shadow Lift0–10Shadow-grain lift (0 = toe rolloff, 1 = full grain into deepest shadows).
Red / Green / Blue Shadow Reach0.02–10.35Shadow-grain reach / toe width.

Crystal Structure (per stage)

ControlRangeDefaultWhat it does
Size Variance0–41.5Ratio between coarse and fine crystal populations (0 = single population; 1.5 ≈ coarse 2.5× fine).
Speed Bias0–10.4Energy balance between populations (0 = fine/slow dominant, 1 = coarse/fast dominant).
Layer Correlation0–10.35How much coarse activation clusters fine crystals together.
Crystal ShapeR / Sq / TSquareCrystal morphology: Round (globular), Square (cubic), T-Grain (flat tabular platelet).
Tell that grain is overdone

It stops looking like structure and starts looking like video noise sitting on top of the picture, especially crawling into the blacks. Back off Amount toward 0.5–1.

Halation

Backscatter light haloing around bright areas, the characteristic red-orange bloom around highlights. Applied in density/transmission space after dye formation, where scatter physically happens. Negative and print stages independently. Radius is a master reach; per-channel spread multipliers set each layer's halo reach and per-channel boost sets each layer's strength.

Negative side (Neg Halation Enable, default on)

ControlRangeDefaultWhat it does
Remjet Strength0–10.5Anti-halation remjet layer (0 = no remjet/full scatter, 1 = full remjet/halation suppressed).
Neg Radius1–207.0Negative backscatter radius in pixels (master reach).
Neg Threshold0–10.85Brightness threshold above which halation kicks in.
Neg R / G / B Boost0–31.2 / 0.6 / 0.2Per-channel halation strength (red dominant = the classic red halo).
Neg R / G / B Spread0–20.88 / 1.0 / 1.18Per-channel halo reach (× Neg Radius).

Print side (Print Halation Enable, default on)

ControlRangeDefaultWhat it does
Print Anti-Halation0–10.3Print anti-halation backing (0 = full scatter, 1 = fully suppressed).
Print Radius1–205.0Print backscatter radius in pixels.
Print Threshold0–10.85Brightness threshold for print halation.
Print R / G / B Boost0–31.0 / 0.5 / 0.1Per-channel strength.
Print R / G / B Spread0–20.88 / 1.0 / 1.18Per-channel halo reach (× Print Radius).

Show Halation Map overrides the view to display the halation source/brightness map for debugging.

Tell that halation is overdone

The glow detaches from its source and everything bright wears a uniform red halo, it reads like a filter, not light scattering. Lower the boosts, radius, or raise the threshold.

MTF / Film Resolution

Film resolving-power (Modulation Transfer Function) simulation, how faithfully the stock reproduces fine detail, and the edge "bite" (acutance) that makes film look crisp without looking digitally over-sharpened. Negative and print stages independently. Real film MTF rises above 100% in the mid-frequencies (the adjacency/Eberhard edge overshoot) before rolling off at the high end; this module reproduces both the overshoot and the roll-off together. A single master Pressure scales the whole effect without moving the datasheet-shaped per-channel knees.

ControlRangeDefaultWhat it does
MTF Pressure0–31.0Master strength of the whole MTF effect (1 = as drawn, 0 = off, 3 = strong). Scales acutance and roll-off depth.
R / G / B Resolving Power10–300 lp/mm120 / 80 / 60Layer resolving power. Lower lp/mm = softer (blurs sooner).
ISO Coupling0–10.7Links resolving power to the grain ISO (0 = fixed, 1 = full coupling).
R / G / B Acutance0–10.9Edge enhancement from developer diffusion (height of the above-100% mid-frequency bump).
R / G / B Bump Width1.5–63.0Adjacency bump width (tight spike 1.5 → broad hump 6; 3 = film).
R / G / B Fine Crispness0–0.50Fine-detail bite on top of the roll-off (0 = pure datasheet roll-off to zero).
Acutance default 0.9 is the deliberate look

0.5 would be neutral; below 0.5 actively softens. Do not "correct" it downward, that reintroduces the "MTF does nothing" problem. Print-side acutance is internally gentler than the negative at the same slider value, matching real film. Tell that MTF is overdone: hard, ringing edges, the electronic over-sharpened halo that screams digital.

Film Breath

Organic frame-to-frame variation for motion: printer/projector bulb flicker, chemical timing drift, dye spectral drift. Gated by the Enable Film Breath master switch. Off by default; keep amounts low.

ControlRangeDefaultWhat it does
Global Strength0–10.3Overall film-breath intensity.
Frequency (Hz)0.1–20.6Breath cycle frequency (0.1 = slow, 2 = fast).
Coherence0–10.6Inter-channel sync (0 = chaotic, 1 = unified pulse).
Enable Negative Mechanicalon/offonPrinter-bulb flicker during negative exposure.
Enable Print Mechanicalon/offonProjector-bulb flicker during print exposure.
Enable Chemical Variationson/offonDeveloper/bleach timing drift.
Enable Emulsion Drifton/offonSpectral-peak drift per dye layer.

Sub-controls: Mechanical (Neg / Print) give per-channel bulb-flicker amounts (0–1); Chemical Development gives Developer Variation and Bleach-Fix Variation (0–1, default 0); Emulsion Spectral Drift gives Cyan / Magenta / Yellow peak drift (0–1 = 0–2 nm, default 0).

Gate Weave

Mechanical position wobble from the film gate. Gated by the Enable Gate Weave master switch. All default 0.

ControlRangeDefaultWhat it does
Horizontal Wobble0–10Left/right position wobble (0–1 = 0–2 px).
Vertical Wobble0–10Up/down wobble (0–1 = 0–2 px).
Rotation Wobble0–10Rotational wobble (0–1 = 0–0.5°).
Scale Pump0–10Zoom wobble from film tension (0–1 = 0–0.3%).
10

Preset Manager

Save, update, rename, delete, import, and export readable JSON preset files. Closed by default (and hidden in demo builds).

ControlWhat it does
Preset FamilyWhich family the manager acts on: Silver Sensitivity / Dye Formation / HD Curves / Full Preset / Neg Sensitivity / Print Sensitivity / Neg Dye / Print Dye. Default Full Preset.
Preset NameName used when saving or renaming a user preset.
Save New PresetSave current family values as a new JSON preset, appended to the family selector.
Update Current PresetOverwrite the selected user preset with live values.
Rename Current PresetRename the selected user preset.
Delete Current PresetDelete the selected user preset.
Import ParametersImport a JSON preset for the selected family (or migrate a legacy text export).
Export ParametersExport the selected family to a readable JSON preset file.

Presets are plain JSON, so you can share stock definitions between machines or hand them off to collaborators.

11

Negative & Print Film Stock

Direct spectral-model authoring for the negative and print stocks. In the shipping build these controls are hidden and non-persistent, the Film Stock Editor owns them, and you should author stocks there rather than dialing raw doubles. This section documents them at reference altitude so you understand what the FSE is manipulating under the hood.

Each stock (negative and print) has three model layers:

  • Silver Sensitivity, the spectral response of each emulsion layer, as an asymmetric Gaussian (K, peak wavelength, Sigma Left / Sigma Right widths, spectral height). Plus a Master Exposure (stops) trim that multiplies all three layer speeds by 2^stops while preserving the R/G/B ratio. Red-cyan peaks near 645 nm, green-magenta near 525 nm, blue-yellow near 460 nm.
  • HD Curves, the characteristic (D-log E) curve per layer: Gamma (slope/contrast), H0 (midpoint / speed point), Toe and Shoulder (shadow/highlight roll-off), and Dmin / Dmax. There are global offset sliders and per-channel values. The negative curve returns dye concentration; the print curve returns transmittance; the two cascade, total contrast is the negative printed through the print.
  • Dye Colors, the subtractive CMY dye absorption per layer, again as an asymmetric Gaussian (peak nm, amplitude, sigma left/right, baseline). Their spectral overlap is the source of the crosstalk that makes film color behave the way it does.

The full per-band double values are numerous; you do not dial them individually in normal use. Use the Film Stock Editor to sculpt these as curves and pucks with live feedback. The legacy Show Stock Creator direct-authoring UI is retired in the FSE build.

12

Input/Output Config

Color-space I/O, workflow mode, and diagnostic views.

ControlOptionsDefaultWhat it does
Input ModeDaVinci Int. / LinearDaVinci Int.Input color-space mode. DaVinci Intermediate for a DWG/Intermediate timeline; Linear for scene-referred.
Processing ModeNeg to Print / Neg Scan / Print OnlyNeg to PrintFilm processing workflow: full neg→print, negative-scan look, or print-only.
View Mode9 optionsFinal PrintWhich stage of the spectral simulation to display, see Diagnostic view modes.
Diagnostic ModeOff / HD / Dye / Sensitivity (neg & print)OffOverlays a diagnostic plot of the chosen model over the image.
FSE Activation ModelOriginal / Wiener × 2 / Mallett 2019OriginalHow an FSE-sculpted sensitivity curve's shape drives the image, see below.

FSE Activation Model

This controls how a custom sensitivity curve is compared with the input RGB values to determine a silver activation value:

  • Original Method (default), the shipping behavior. This option puts more weight on the overall peak position and spectral height, minimizing metameric errors that can occur.
  • Wiener, Smoothness Prior / Wiener, Measured Covariance / Mallett 2019, Three-Basis, these make the curve's shape actually drive the image, using a linear estimator that stays in XYZ color (so it introduces limited metamerism artifacts). You can switch modes without the picture jumping. Wiener Smoothness assumes smooth reflectances; Wiener Measured uses a real ColorChecker statistical prior; Mallett 2019 upsamples via three fixed energy-conserving sRGB basis functions.

Leave this on Original unless you want to increase how sensitive the system is to dynamic lobe shaping.

13

LUT Export

Bake the current effective color transform to a .cube 3D LUT. Closed by default (hidden in demo builds).

ControlOptionsDefaultWhat it does
Resolution17 / 33 / 65333D LUT lattice size (higher = more accurate, larger file).
Export LUT…button, Exports the current color transform as a .cube.
What a LUT can't carry

Grain, halation, MTF, motion effects, and diagnostic overlays are omitted from the LUT, a LUT is a static color transform and cannot carry spatial or temporal texture. Use Make LUT-Ready (in Textures) first to temporarily disable the texture masters so the exported transform matches what a downstream LUT will actually reproduce. Apply the exported grain/halation/MTF as separate texture passes downstream if you need them.

14

The Film Stock Editor (FSE)

An external, non-modal panel (native on Mac, with a Windows/Linux equivalent) launched from the Film Stock Editor… button. It draws the spectral model directly as curves, your scalpel for sculpting a stock's character. A user-drawn curve here becomes the highest-priority override for that stock.

The Film Stock Editor panel: Neg Sensitivity, Neg Dye, Neg HD Curve, and datasheet reference The Film Stock Editor, sensitivity, dye, and HD curves with a datasheet reference
Mode tabWhat it edits
Neg SensitivityR/G/B spectral sensitivity curves for the negative stock.
Print SensitivityR/G/B spectral sensitivity curves for the print stock.
Neg DyeR/G/B dye absorption curves for the negative (R = cyan, G = magenta, B = yellow).
Print DyeR/G/B dye absorption curves for the print stock.
Neg HD CurveD-log E characteristic curve for the negative, parametric sliders + canvas preview.
Print HD CurveD-log E characteristic curve for the print stock.

Curve editing. In the sensitivity/dye modes each channel is a draggable spline of 9 control points (wavelength, value) across 360–780 nm; the plugin interpolates them to the 43 internal bands and re-renders live as you drag.

Sliders alongside the curves (mirror the OFX params)

  • Sensitivity modes, three Height sliders per stage plus a Master Exposure (stops) slider.
  • Dye modes, three Amplitude sliders per stage.
  • HD Curve modes, six scalars per channel (Gamma, H0, Dmin, Dmax, Toe, Shoulder), plotted on the canvas.
  • Print HD Curve mode, the print-stage Printer Lights (R/G/B, 0–50, 25 = neutral) and Printer Power anchor are editable live, so you can slide tones along the print curve while you shape it.

Stock dropdowns. Each mode has a stock selector populated with stocks that have measured spectral data; loading one seeds the curves for that mode. Save to Preset… runs the standard managed-preset save for the active mode's family, appending the curve control points. Closing the panel just clears the "editor open" flag, the curves were always live.

Earn the FSE

Let the presets and printer lights teach you the model's personality first; then the FSE becomes a scalpel instead of a hammer. Redrawing a stock's character before you know what "correct" looks like is the classic way to blame the model for your own curve. Remember, too, that these are my interpretations of idealized stocks. Feel free to make them your own.

15

The Textures Editor

An external, non-modal panel (macOS) launched from the Textures Editor… button. It is a live front-end for the same Grain / Halation / MTF params documented in the Textures section, not a separate parameter set. It edits the three subsystems three-columns-across, each with a Negative and a Print side.

The Textures Editor panel: Grain, Halation, and MTF columns with live loupes The Textures Editor, Grain, Halation, and MTF columns with live loupes
  • Header, a Neg/Print side toggle; master and per-subsystem Format dropdowns (Off / 65mm / 35mm / 16mm). Setting a format seeds grain, halation, and MTF at physically sensible ratios for that gauge. Smaller gauge = grainier, softer, more halation.
  • Per-column enables, Grain / Halation / MTF, each Neg and Print.
  • Per-column Sync toggle, when on, the Neg and Print sides move together.
  • Grain column, Amount, Size, ISO, Correlation, Seed, Falloff; per-layer Mix and Falloff; per-layer Shadow Lift + Shadow Reach (twin-puck box); Size Variance, Speed Bias, Layer Correlation; Crystal Shape.
  • Halation column, Strength, Radius, Threshold; per-channel tint boost and per-channel Spread (pucks).
  • MTF column, per-channel Resolving Power, ISO Coupling, per-channel Acutance; a Character puck (Bump Width + Fine Crispness); plus the master MTF Pressure slider.
  • Live loupes, each column shows a downscaled whole-frame thumbnail plus a full-res crop centred on that column's puck, and the panel draws the live neg/print HD curves behind the grain datasheet chart so you can see the same D-log E curves as the FSE.

Reach for the Textures Editor once you can hear the difference between gauges and want to mix them deliberately (e.g. a 35mm negative printed to a 16mm-flavored print).

16

PhotoChemist Printer Lights (feeder factory)

A second factory in the same bundle, labelled PhotoChemist Printer Lights, under the same Film Look Tools - Dec. 18 Studios group. It is a companion generator/trim node whose output feeds PhotoChemist's optional Printer Link input, letting you make printer-light maps that vary spatially across the frame, windows, qualifiers, and masks become local printer-light adjustments.

How it wires in

  1. Add a PhotoChemist Printer Lights node.
  2. On your PhotoChemist node, connect that node's output to PhotoChemist's Printer Link input.
  3. PhotoChemist decodes each pixel of the Printer Link input as printer points: a flat 0.5 = neutral (0 points), one stop of gain on the feeder = +12 printer points. So a Resolve window or qualifier feeding the node paints printer-light offsets exactly where you want them.

Controls

ControlRangeDefaultWhat it does
Generate Feedon/offonOn: replace the input with a flat printer-point frame (a generator). Off: trim mode, the input passes through multiplied by the per-channel gain; at neutral it is an exact passthrough, and with sliders moved it stacks additively on top of an upstream feeder (node masks limit where the trim lands).
Master Printer Points0–5025Base printer points for all three channels (25 = neutral, 1 point = 1/12 stop). Same currency and lab direction as PhotoChemist's Printer Light: more points = darker print.
Red / Green / Blue Printer Points0–5025Base per-channel printer points.

Supported contexts: Filter, General, and Generator. In Generator context there is no source clip; in Filter/General the source is optional.

17

Diagnostic view modes

The View Mode dropdown (Input/Output Config) shows any stage of the spectral simulation instead of the final image, invaluable for understanding what a control is doing and for troubleshooting.

#LabelShows
0Scanned NegativeThe developed/scanned negative image.
1Final Print (default)The complete neg→print positive, your normal view.
2Negative Developed DensityA 2×2 split of the negative's cyan/magenta/yellow layer densities plus the final.
3Print Developed DensityThe same 2×2 split for the print stage.
4Negative Dye AbsorptionThe negative's per-dye spectral absorption.
5Negative Dye TransmissionThe negative's per-dye transmission.
6Print Dye AbsorptionThe print's per-dye absorption.
7Print Dye TransmissionThe print's per-dye transmission.
8Halation Brightness MapThe halation source/brightness map (which areas seed the bloom).

The separate Diagnostic Mode dropdown overlays a plot of a chosen model (HD curves, dye colors, or silver sensitivity, neg or print) on top of the image without switching the view.

18

Workflow & best practices

A first session, using only the safe controls:

  1. Processing Mode → Neg to Print. Confirm you are running the full chemical chain before you judge anything.
  2. Full Preset. Step through a handful and land on one near your intent (Seneca Cine is the friendly default). This is ~80% of your look. Watch the color re-derive with each preset, not just shift, that is the spectral model talking.
  3. Printer Lights. Nudge gently, a few points at a time. Watch how balance shifts with tonal position, not just overall brightness. Remember 25 = neutral, 1 point = 1/12 stop, more light = darker. This is your real fine-tune.
  4. Textures Editor → master format 65 / 35 / 16mm. Pick the gauge that fits the story; it sets grain, halation, and MTF together. Smaller gauge = grainier, softer, more halation.

That is a finished, defensible look using only safe controls.

Start here vs. leave for later

Start here (safe, teaches the model)Leave for later (deep / can wreck the chain)
Full Preset, sets the whole chainFilm Stock Editor, redraws 43-band dye & sensitivity curves and reshapes HD curves per channel
Processing Mode, Neg to PrintParametric peak / sigma / K sensitivity controls, easy to push into nonsense
Printer Lights, balance, 1 pt = 1/12 stopPer-channel HD curve dots, until you know what "correct" looks like
Textures master, 65 / 35 / 16mmHand-dialing grain / halation / MTF past the format presets
Projector Bulb presetPrinter Calibration offsets, for neutralizing casts once you understand the model

Other habits

  • Grade gross exposure and white balance before the PhotoChemist node; let printer lights do color timing, not brightness rescue.
  • Use Printer Calibration + Mid-Grey Test Pattern once per stock to neutralize its base, then leave grading printer lights free for timing.
  • For a LUT deliverable, enable Make LUT-Ready, export at 33 or 65, and re-apply textures downstream.
  • Use the diagnostic view modes to see what a control changes rather than guessing.
19

Troubleshooting & FAQ

One printer-light tweak won't neutralize across daylight and tungsten

By design, the per-layer print curves cross, so balance depends on tonal position. This is film behaving like film, not a bug. Balance the base with Printer Calibration, then time with printer lights.

Printer lights feel like the wrong direction

Correct: the lab convention is more light = denser (darker) print. Lower a printer light to print brighter.

Grain looks like video noise on top of the image, crawling in the blacks

Grain Amount is too high, bring it back to ≈0.5–1, and prefer the format preset over hand-dialing.

Halation reads like a red filter over everything bright

Boosts/radius too high, or threshold too low. Lower the boosts, shrink the radius, or raise the threshold so only true highlights bloom.

Edges look hard and ringing

Over-sharpened MTF. Lower MTF Pressure or acutance, but don't drop acutance below ~0.9 chasing "realism"; below 0.5 it actively softens and the effect appears to do nothing.

Blacks are milky / lifted

Lower Theater Screen Sim (print base density) toward 0.01 for deeper blacks; raise it for a milkier, lifted look.

The image barely looks like film

Confirm Processing Mode = Neg to Print and that a Full Preset is actually loaded, the factory defaults are deliberately neutral.

I drew a custom sensitivity curve in the FSE and the shape does nothing

That's expected on FSE Activation Model = Original (only height/position matters). Switch to a Wiener or Mallett mode to make the shape drive the image; it's a no-op at the factory curve, so switching won't jump the picture.

Can I export this as a LUT?

Yes, LUT Export bakes the color transform, but grain/halation/MTF/motion are omitted (a LUT is spatial-blind). Use Make LUT-Ready first and re-apply textures downstream.

Do the editors work on Windows/Linux?

The FSE has a native Mac panel and a Windows/Linux equivalent. The Textures Editor is macOS.

Common beginner mistakes

Treating printer lights as an exposure slider (they are lab balance). Opening the FSE too early and redrawing a stock before you know what correct looks like. Hand-dialing grain/acutance past the format presets until "film" tips into video noise or ringing edges. Fighting the spectral model with extreme parametric perturbations instead of choosing a stock close to intent and nudging.

The guide series