First, a common question: Fotufilm is independent of spektrafilm and developed as a separate effort. I recently compared the two against a real roll of Kodak Gold 200.
Fotufilm runs a full spectral film simulation. It models the whole chain, from scene light through the negative to the print. Halation, grain and interlayer effects spread across neighbouring pixels and grain changes every frame, so no single static 3D LUT can reproduce the result.
How the pipeline works:
Spectral exposure: the film's response is computed across 81 wavelengths (380–780 nm) and stored in precomputed tables. Every frame then runs through the film's characteristic curves, development, interlayer effects, halation and grain.
Colour handling: RGB can't uniquely define a spectrum, so each colour is matched to its most likely reflectance spectrum, using a statistical model fitted to open libraries of measured real-world reflectances (USGS Spectral Library, the ACES rawtoaces training spectra, and datasets of natural objects, flowers and foliage). This is an estimate, not a recovery: colours the camera recorded identically (metamers) stay identical. The print renders to linear P3 before converting to your chosen output space.
Development: per-layer characteristic curves, push/pull, bleach bypass, and interlayer (DIR) effects where the stock's data supports them. All 46 film profiles are digitised from manufacturer datasheets. The interlayer effects of Gold 200, Portra 400, UltraMax 400, Ektar 100 and CineStill 800T are fitted to ColorChecker charts shot on real film. CineStill 400D and Vision3 250D are calibrated on a ColorChecker exposure series.
Print and scan stage: Kodak Vision 2383/2393 and Fujifilm ETERNA-CP 3513DI across all three colour records, timed to the published Status A LAD aims (1.09/1.06/1.03 for 2383/2393) through a non-negative tungsten additive head. For a negative-to-positive conversion without a print, Digital Reference inverts the negative through a shared spectral receiver, and its Auto Levels mode re-times each frame the way a lab scanner does.
Spatial effects: halation models light reflecting back through the film base. Grain varies with the stock's granularity and density. Both are sized in physical film dimensions and scale with the film gauge and frame coverage.
Platforms: GPU-accelerated with Metal on macOS, CUDA or Vulkan on Linux, and WebGPU in the browser.
It's available as:
Plugins: DaVinci Resolve (OFX) and Final Cut Pro / Motion (FxPlug)
Standalone apps: macOS, and Linux as a beta AppImage. I'd love to offer a Windows build, but I don't have a Windows machine to test it on yet.
Browser editor: fotufilm.com/demo,
Source code: https://github.com/DhaliwalX/fotufilm-engine
How it's funded: the engine, the Mac and Linux apps, the Resolve and Final Cut plugins, and all 46 film profiles are free and open source. I also maintain a paid, closed-source iOS app that runs the same simulation engine. Its sales help cover development costs (including AI coding tools such as Claude, which I use to build it) and the film, cameras and lab processing I need to test against real film. This is a passion project.
Edit: Added information for the RGB to spectrum upsampling technique.