Try it: https://getnegs.com/try/
Code (GPLv3): https://github.com/noahhaasis/negs
There are also native apps on the same engine: SwiftUI on macOS, GTK4 on Linux, and Windows.
Spektrafilm (it started life as agx-emulsion) isn't a LUT or a preset. It simulates the whole analog chain, negative and then print, using only the manufacturers' published datasheets. Andrea's original write-up on discuss.pixls.us is worth reading in full: https://discuss.pixls.us/t/spectral-film-simulations-from-sc.... Roughly, it goes like this:
- Your RGB image is turned back into a light spectrum and exposed onto the film's three dye layers through their published spectral sensitivity curves. - Each layer builds up density along its characteristic curve. Datasheet curves are measured with densitometers that see all three dyes at once, so they're first separated into a curve for each layer. - DIR couplers: where one layer develops a lot of density, it releases inhibitors that hold back development nearby, in the same layer and the ones next to it. This is where film's saturation and its edge sharpness come from. - Grain is simulated per layer, with fast and slow sub-layers, as random silver halide particles that become dye clouds. It depends on the density at each spot instead of being laid over the image. - Halation: light passes through the emulsion, bounces off the film base and exposes the red layer again (it's at the back), which gives the red glow around highlights. - The negative's dye spectra are then projected through a virtual enlarger with Y/M filtration onto print paper, which has its own sensitivities and curves, and the print is scanned back to RGB.
Because it's a model, the controls are physical: camera exposure, print exposure, enlarger filters, how much DIR coupling, grain particle size, halation strength. Push them too far and the image breaks the way film does, with colour crossovers when it's badly over- or underexposed. And you can experimentw with each control. There are about 50 stocks: Portra, Ektar, Gold, Pro 400H, Superia, Kodachrome, Velvia and Provia slide film, Aerochrome and some B&W (HP5, FP4...). There are 9 papers and print films too, such as Endura, Crystal Archive and Vision 2383. The paper choice has a huge impact on the final look.
Negs implements the entire chain and is orders of magnitudes faster than the original python Spektrafilm implementation, so you can play around with sliders and get live feedback.
Feedback is very welcome, especially from people who have actually shot these stocks: tell me which ones look wrong to you.