Method: how the styles are built
Interpretations, not calibrated emulations. The Grain Archive styles are built from manufacturers’ datasheets and from published descriptions of each film, then checked on digital RAW files. No film was shot, scanned or measured to tune them, and no style was matched to a color target. A style gives the direction of a film’s look (its contrast, color bias, grain and, in black and white, its color sensitivity), not a colorimetric copy of it.
This page describes the method shared by all the film styles. Each film has its own page, with its sources, and each style its own page, with its settings and measurements.
1. Research: the datasheet first
For each film we collect three kinds of information.
- The manufacturer’s datasheet (marked DS in the sources). It gives the speed, the grain as RMS granularity or Print Grain Index, the characteristic curve (toe, slope, shoulder) and the spectral sensitivity curves. Film pages link the manufacturer’s PDF; The Grain Archive does not host datasheets.
- Published descriptions (marked C): reviews and tests by Casual Photophile, 35mmc, Emulsive, Analog.cafe, The Darkroom, Kosmo Foto and others. These are opinions, not measurements. When they disagree with each other or with the datasheet, the film page says so; the saturation of Kodak Portra 400 is one example.
- An existing reference. The free t3mujinpack styles for darktable [7], rendered on the same photos, show whether our direction agrees with another interpretation (more or less saturated, warmer or cooler skin). They are a point of comparison, not a target.
2. Translation into native darktable 5.6 modules
The styles only contain “look” modules. They do not touch exposure, the tone mapper (sigmoid or filmic) or white balance, except in black and white (section 4). They sit on top of the base edit of each photo. There is no LUT in any style.
| Film characteristic | darktable module | Notes |
|---|---|---|
| Characteristic curve: contrast, toe, shoulder | tone curve, “RGB, linked channels”, preserve colors: none | The nodes are in perceptual lightness (0.5 is about middle gray). Applied channel by channel, the curve raises saturation along with contrast, as film does |
| Rendering of the primaries | rgb primaries | Hue rotation and purity of red, green and blue |
| Color casts by tonal range, saturation | color balance rgb, instance named “film” | Shadows, midtones and highlights |
| Specific colors: skin, sky, foliage | color equalizer | Saturation, hue and brightness on 8 hues |
| Black-and-white spectral sensitivity | color calibration in gray mode | See section 4 |
| Grain | grain | Sized from the RMS granularity or the Print Grain Index |
Conventions we measured
We measured these on test renders of our RAW files [8].
- Hue direction in rgb primaries and color equalizer: a positive value turns the hue toward higher angles (red → orange → yellow → green → cyan → blue → violet → magenta). For example, red primary +0.3 rad moved a pink from 359° to 13°; blue primary +0.4 rad moved the sky from 273° to 307°; color equalizer blue +30° moved it from 274° to 298°.
- The four wheels of color balance rgb, as Lab hues: 0° gives a reddish orange (about 32°), 90° a yellow-green (about 132°), 180° a blue (about 255°) and 270° a violet (about 303°).
- No global offset for warmth. The global offset of color balance rgb is additive: even at a chroma of 0.008 it gave the shadows a strong brownish-orange cast. The styles use the midtones and highlights wheels for color casts.
3. How darktable applies a style
- No module order. The style files carry no module order list, so they do not impose a pipeline order on your image.
- In the lighttable or the darkroom (append mode), each module of the style takes over the instance of that module with the same name on the image, if there is one; otherwise darktable creates a new instance [2]. It also reuses a switched-off instance, or one still at its default settings, before creating a new one [3]. The color balance rgb instance of the styles is named “film”, so a color balance rgb you set up yourself is left alone. The styles’ unnamed instances (tone curve, grain, rgb primaries, color equalizer) replace yours if your edit already uses those modules. The installation guide gives the details [9].
- At export or with darktable-cli (append mode), each module of the style that is switched on becomes a separate new instance, on top of the existing ones [1] [10]. Our test renders use this path. On a photo with only darktable’s default processing, both paths end with the same modules, since none of the styles’ modules is in use yet.
- A switched-off module in a style replaces the matching instance on the image and switches it off, in both cases [3]. The black-and-white styles rely on this.
- Why there is no exposure in the styles. An exposure module in a style would be added to your own exposure at export, or replace it in the lighttable. Neither is what a film look should do.
4. Black and white from spectral sensitivity
The calculation
A film’s spectral sensitivity decides which colors come out light or dark in black and white. We use the construction of darktable’s own black-and-white presets for color calibration (“monochrome | ILFORD HP5+” and others) [4]. The sensitivity curve from the datasheet is integrated against the CIE 1931 color matching functions:
XYZ += S_film(λ) · CMF_xyz(λ) / light_datasheet(λ) · D50(λ) then normalized to a sum of 1
The gray value is then x·X + y·Y + z·Z in color calibration, with XYZ adaptation to the pipeline illuminant [4].
- Documented approximations. The CIE 1931 functions come from the multi-lobe Gaussian fit of Wyman, Sloan and Shirley [5]. The light sources are Planck spectra: 2856 K for tungsten (illuminant A) and 5003 K for D50. Values read from Kodak’s graphs are treated as log₁₀ sensitivity. Ilford, Harman and Foma publish spectrograms made under tungsten light, which are divided by the tungsten spectrum to get an equal-energy curve.
- Check against darktable. Read by this procedure, the curve of the Ilford HP5 Plus datasheet [6] gives weights of 0.2557, 0.2555 and 0.4888. darktable’s HP5+ preset uses 0.2530, 0.2596 and 0.4874 [4]. The largest difference is 0.004. With darktable’s weights, our module generator writes a module identical, byte for byte, to darktable’s preset [8].
Why the black-and-white styles switch off your main color calibration
In our test renders, the black-and-white instance added by a style ran before the existing color calibration. Chromatic adaptation was then applied to the gray image and tinted it: we measured a blue cast of b* −4 to −8 [8].
So each black-and-white style also contains a switched-off color calibration, which replaces the main instance on the image and switches it off. It is set like darktable’s default (“as shot in camera”, CAT16), so it can be switched back on. With it, the gray is neutral: C* = 0.0 on all four test photos [8]. darktable’s built-in black-and-white presets also bypass chromatic adaptation [4], and film itself does no white balancing.
The effect of the spectral sensitivity alone
Weights only, without tone curve or grain. Lightness L* measured on our test photos [8]:
| Zone | Luminance Y | Kodak Tri-X 400 | Fomapan 100 | Ilford HP5+ (darktable preset) |
|---|---|---|---|---|
| Sky, photo 0775 | 55.2 | 58.4 | 58.6 | 59.3 |
| Sea, photo 0775 | 37.9 | 39.8 | 39.9 | 40.5 |
| Skin, photo 0989 | 79.3 | 75.5 | 75.1 | 73.6 |
| Pink T-shirt, photo 1014 | 47.8 | 46.6 | 46.3 | 45.2 |
These panchromatic films are more sensitive to blue than the eye: compared with a luminance conversion, they lighten skies and darken skin and reds.
5. Testing on RAW files
Each style is rendered with darktable-cli 5.6.0 on four test RAW files, then measured in CIELab on fixed zones [8]:
| Zone | Photo | Rectangle (fractions of width × height) |
|---|---|---|
| Sky | 0775 | 0 to 1 × 0 to 0.35 |
| Sea | 0775 | 0 to 1 × 0.8 to 1 |
| Skin | 0989 | 0.2 to 0.5 × 0.5 to 0.7 |
| Pink T-shirt | 1014 | 0.04 to 0.14 × 0.52 to 0.68 |
The measurements are compared with:
- the base rendering, which is darktable’s default processing of the same file;
- t3mujinpack, when it has the same film [7];
- what the sources say about the film.
The settings are adjusted until the directions agree: a lighter sky, warmer highlights, more contrast, and so on. Each style page gives the final table. The measures are:
- L: mean lightness;
- Lsd: standard deviation of L, a simple indicator of contrast;
- L5 / L95: the 5th and 95th percentiles of L, for the depth of the blacks and the brightness of the highlights;
- C: chroma;
- h: hue angle.
6. What the styles do not do
- They are not calibrated. The measurements check directions against the sources. They do not show that a render matches a scan of the real film.
- They do not replace your edit. Exposure, tone mapping, white balance (except in black and white), lens corrections and crop remain yours.
- The curve is drawn by hand. The tone curve follows the shape of the datasheet’s characteristic curve (toe, slope, shoulder); it is not fitted to densities.
- The lab is not modeled. How a film looks also depends on the lab, the scanner and, in black and white, the developer. A style aims at one plausible rendering, described on its page.
- The grain is an imitation. darktable’s grain is procedural noise. It is sized from the datasheet figures and imitates the texture of film grain, not the shape of silver grains or dye clouds. It also shows less on small exports than on large ones.
- Test photos are digital. Every before/after image on this site is a simulation made with a style on a digital RAW file, never a film scan.
Sources
- 1M darktable 5.6 user manual: export (style applied at export) Accessed September 29, 2026.
- 2M darktable 5.6 user manual: history stack (lighttable module) Accessed September 29, 2026.
- 3M darktable 5.6.0 source code: src/common/history.c (merging a module into the history) Accessed September 29, 2026.
- 4M darktable 5.6.0 source code: src/iop/channelmixerrgb.c (built-in black-and-white presets) Accessed September 29, 2026.
- 5C Wyman, Sloan and Shirley: Simple analytic approximations to the CIE XYZ color matching functions, Journal of Computer Graphics Techniques 2(2), 2013 Accessed September 29, 2026.
- 6DS Harman Technology: Ilford HP5 Plus technical information (November 2018) Accessed September 29, 2026.
- 7C t3mujinpack: film emulation styles for darktable (MIT license) Accessed September 29, 2026.
- 8B The Grain Archive test renders: darktable-cli 5.6.0 on four RAW files, measured in CIELab (September 2026); results on each style page
- 9B The Grain Archive: Install and apply darktable styles
- 10M darktable 5.6.0 source code: src/imageio/imageio.c (style applied at export) Accessed September 29, 2026.
DS: datasheet · M: manufacturer · C: review or community · B: Grain Archive measurement