From e9b3598841ff57344673b16965788e2b6454cf75 Mon Sep 17 00:00:00 2001 From: Duncan Tourolle Date: Tue, 25 Aug 2026 23:36:52 +0200 Subject: [PATCH] Add five Ilford stocks, and say plainly that they are constructed They were asked for and they are here, but not on the same footing as the Kodak profiles, and the files say so in their first line. What I had claimed, and had to withdraw: that Delta 100 is "quoted around 9" and HP5 "around 12". Ilford publish no such figures. The word granularity does not occur anywhere in their technical information -- grain is described as "fine" and "finest" and nothing more. That claim was in this crate's documentation as though it came from a datasheet; it is corrected there too. Two further traps found while looking: - Kodak colour negatives publish Print Grain Index, not RMS granularity. PGI is a perceptual scale from viewer surveys -- 25 is roughly the threshold of visibility, four units a just-noticeable difference -- and Kodak state it cannot be compared to RMS. So a Portra number cannot be dropped into the granularity field, and none has been. - RMS proper is published mostly for black-and-white, reversal and motion picture stocks. Every shipped stock therefore still carries the same default, which means grain does not yet tell one film from another. That is per-stock data, not code, and is now written down where somebody will find it. So the Ilford profiles are built rather than extracted, and each part rests on something different: speed published and exact -- ISO 400/27 for HP5 is a fact contrast ISO 6:1993's normal development, average gradient 0.62 spectral borrowed from Kodak Double-X, a *measured* panchromatic negative, shifted by the speed difference. Conventional panchromatic sensitisation is much alike across black-and-white films, and this is far better founded than reading pixels off a printed curve silver neutral, which is not an approximation: developed silver absorbs flat, and Double-X's measurement is flat granularity estimated, ordered by each film's known relative grain They render as a film of that speed and contrast. They are not a measurement of that emulsion, and the two stocks that share a speed differ only in the estimated part. `every_shipped_stock_bakes` is tightened to match, because a constructed profile fails in a way a measured one does not: the curve parses, bakes, and sits entirely off one end of its own exposure range, rendering every frame black or blown while passing a finiteness check. It now asserts mid-grey lands somewhere photographic and that the tone response runs the way the stock's kind says it should. Co-Authored-By: Claude Opus 5 --- core/dr-film/profiles/ilford_delta_100.yaml | 459 +++++++++++++++++++ core/dr-film/profiles/ilford_delta_400.yaml | 459 +++++++++++++++++++ core/dr-film/profiles/ilford_fp4_plus.yaml | 459 +++++++++++++++++++ core/dr-film/profiles/ilford_hp5_plus.yaml | 459 +++++++++++++++++++ core/dr-film/profiles/ilford_pan_f_plus.yaml | 459 +++++++++++++++++++ core/dr-film/src/built_in.rs | 20 + core/dr-film/src/grain.rs | 36 +- core/dr-film/src/lib.rs | 24 + tools/film-profiles/convert.py | 151 +++++- 9 files changed, 2517 insertions(+), 9 deletions(-) create mode 100644 core/dr-film/profiles/ilford_delta_100.yaml create mode 100644 core/dr-film/profiles/ilford_delta_400.yaml create mode 100644 core/dr-film/profiles/ilford_fp4_plus.yaml create mode 100644 core/dr-film/profiles/ilford_hp5_plus.yaml create mode 100644 core/dr-film/profiles/ilford_pan_f_plus.yaml diff --git a/core/dr-film/profiles/ilford_delta_100.yaml b/core/dr-film/profiles/ilford_delta_100.yaml new file mode 100644 index 0000000..b166cbe --- /dev/null +++ b/core/dr-film/profiles/ilford_delta_100.yaml @@ -0,0 +1,459 @@ +# Generated by tools/film-profiles/convert.py. +# +# *** CONSTRUCTED, NOT MEASURED. *** +# +# Ilford publish this film's spectral sensitivity and characteristic +# curve as graphs, and no granularity figure at all, so this profile is +# built rather than extracted. Its speed is the published ISO rating, +# and its contrast is ISO 6:1993's normal development (average gradient +# 0.62). Its spectral response is borrowed from Kodak Double-X, a +# *measured* panchromatic negative, shifted by the speed difference. +# Its granularity is an estimate, ordered against the other films here. +# +# So it renders as a film of this speed and contrast, not as a +# measurement of this emulsion. Replace it outright if anyone digitises +# the real curves. + +version: 'constructed-1' +stock: ilford_delta_100 +name: 'Ilford Delta 100' +kind: negative # negative | positive +support: film # film | paper +stage: filming # filming | printing +monochrome: true +reference_illuminant: D55 +viewing_illuminant: D50 + +rms_granularity: [6, 6, 6] + +# log10 spectral sensitivity per layer, 380-780nm at 5nm. +log_sensitivity: + - [-9, -9, -9] # 380nm + - [-9, -9, -9] # 385nm + - [-9, -9, -9] # 390nm + - [-9, -9, -9] # 395nm + - [-9, -9, -9] # 400nm + - [-9, -9, -9] # 405nm + - [-9, -9, -9] # 410nm + - [-9, -9, -9] # 415nm + - [-9, -9, -9] # 420nm + - [-1.11516, -1.11516, -1.11516] # 425nm + - [-1.1149, -1.1149, -1.1149] # 430nm + - [-1.1149, -1.1149, -1.1149] # 435nm + - [-1.11525, -1.11525, -1.11525] # 440nm + - [-1.12495, -1.12495, -1.12495] # 445nm + - [-1.13768, -1.13768, -1.13768] # 450nm + - [-1.15447, -1.15447, -1.15447] # 455nm + - [-1.17373, -1.17373, -1.17373] # 460nm + - [-1.19518, -1.19518, -1.19518] # 465nm + - [-1.21361, -1.21361, -1.21361] # 470nm + - [-1.2395, -1.2395, -1.2395] # 475nm + - [-1.26728, -1.26728, -1.26728] # 480nm + - [-1.30522, -1.30522, -1.30522] # 485nm + - [-1.34497, -1.34497, -1.34497] # 490nm + - [-1.38465, -1.38465, -1.38465] # 495nm + - [-1.41792, -1.41792, -1.41792] # 500nm + - [-1.4332, -1.4332, -1.4332] # 505nm + - [-1.43637, -1.43637, -1.43637] # 510nm + - [-1.43566, -1.43566, -1.43566] # 515nm + - [-1.42589, -1.42589, -1.42589] # 520nm + - [-1.41287, -1.41287, -1.41287] # 525nm + - [-1.3981, -1.3981, -1.3981] # 530nm + - [-1.38014, -1.38014, -1.38014] # 535nm + - [-1.36192, -1.36192, -1.36192] # 540nm + - [-1.34305, -1.34305, -1.34305] # 545nm + - [-1.32648, -1.32648, -1.32648] # 550nm + - [-1.30871, -1.30871, -1.30871] # 555nm + - [-1.29546, -1.29546, -1.29546] # 560nm + - [-1.28805, -1.28805, -1.28805] # 565nm + - [-1.28317, -1.28317, -1.28317] # 570nm + - [-1.27961, -1.27961, -1.27961] # 575nm + - [-1.28242, -1.28242, -1.28242] # 580nm + - [-1.28885, -1.28885, -1.28885] # 585nm + - [-1.29837, -1.29837, -1.29837] # 590nm + - [-1.31101, -1.31101, -1.31101] # 595nm + - [-1.32288, -1.32288, -1.32288] # 600nm + - [-1.33805, -1.33805, -1.33805] # 605nm + - [-1.35316, -1.35316, -1.35316] # 610nm + - [-1.35819, -1.35819, -1.35819] # 615nm + - [-1.34978, -1.34978, -1.34978] # 620nm + - [-1.35875, -1.35875, -1.35875] # 625nm + - [-1.38789, -1.38789, -1.38789] # 630nm + - [-1.47825, -1.47825, -1.47825] # 635nm + - [-1.66767, -1.66767, -1.66767] # 640nm + - [-1.88331, -1.88331, -1.88331] # 645nm + - [-2.13893, -2.13893, -2.13893] # 650nm + - [-2.40079, -2.40079, -2.40079] # 655nm + - [-2.66866, -2.66866, -2.66866] # 660nm + - [-9, -9, -9] # 665nm + - [-9, -9, -9] # 670nm + - [-9, -9, -9] # 675nm + - [-9, -9, -9] # 680nm + - [-9, -9, -9] # 685nm + - [-9, -9, -9] # 690nm + - [-9, -9, -9] # 695nm + - [-9, -9, -9] # 700nm + - [-9, -9, -9] # 705nm + - [-9, -9, -9] # 710nm + - [-9, -9, -9] # 715nm + - [-9, -9, -9] # 720nm + - [-9, -9, -9] # 725nm + - [-9, -9, -9] # 730nm + - [-9, -9, -9] # 735nm + - [-9, -9, -9] # 740nm + - [-9, -9, -9] # 745nm + - [-9, -9, -9] # 750nm + - [-9, -9, -9] # 755nm + - [-9, -9, -9] # 760nm + - [-9, -9, -9] # 765nm + - [-9, -9, -9] # 770nm + - [-9, -9, -9] # 775nm + - [-9, -9, -9] # 780nm + +# Developed silver: neutral across the band. +dye_density: + - [0.333333, 0.333333, 0.333333] # 380nm + - [0.333333, 0.333333, 0.333333] # 385nm + - [0.333333, 0.333333, 0.333333] # 390nm + - [0.333333, 0.333333, 0.333333] # 395nm + - [0.333333, 0.333333, 0.333333] # 400nm + - [0.333333, 0.333333, 0.333333] # 405nm + - [0.333333, 0.333333, 0.333333] # 410nm + - [0.333333, 0.333333, 0.333333] # 415nm + - [0.333333, 0.333333, 0.333333] # 420nm + - [0.333333, 0.333333, 0.333333] # 425nm + - [0.333333, 0.333333, 0.333333] # 430nm + - [0.333333, 0.333333, 0.333333] # 435nm + - [0.333333, 0.333333, 0.333333] # 440nm + - [0.333333, 0.333333, 0.333333] # 445nm + - [0.333333, 0.333333, 0.333333] # 450nm + - [0.333333, 0.333333, 0.333333] # 455nm + - [0.333333, 0.333333, 0.333333] # 460nm + - [0.333333, 0.333333, 0.333333] # 465nm + - [0.333333, 0.333333, 0.333333] # 470nm + - [0.333333, 0.333333, 0.333333] # 475nm + - [0.333333, 0.333333, 0.333333] # 480nm + - [0.333333, 0.333333, 0.333333] # 485nm + - [0.333333, 0.333333, 0.333333] # 490nm + - [0.333333, 0.333333, 0.333333] # 495nm + - [0.333333, 0.333333, 0.333333] # 500nm + - [0.333333, 0.333333, 0.333333] # 505nm + - [0.333333, 0.333333, 0.333333] # 510nm + - [0.333333, 0.333333, 0.333333] # 515nm + - [0.333333, 0.333333, 0.333333] # 520nm + - [0.333333, 0.333333, 0.333333] # 525nm + - [0.333333, 0.333333, 0.333333] # 530nm + - [0.333333, 0.333333, 0.333333] # 535nm + - [0.333333, 0.333333, 0.333333] # 540nm + - [0.333333, 0.333333, 0.333333] # 545nm + - [0.333333, 0.333333, 0.333333] # 550nm + - [0.333333, 0.333333, 0.333333] # 555nm + - [0.333333, 0.333333, 0.333333] # 560nm + - [0.333333, 0.333333, 0.333333] # 565nm + - [0.333333, 0.333333, 0.333333] # 570nm + - [0.333333, 0.333333, 0.333333] # 575nm + - [0.333333, 0.333333, 0.333333] # 580nm + - [0.333333, 0.333333, 0.333333] # 585nm + - [0.333333, 0.333333, 0.333333] # 590nm + - [0.333333, 0.333333, 0.333333] # 595nm + - [0.333333, 0.333333, 0.333333] # 600nm + - [0.333333, 0.333333, 0.333333] # 605nm + - [0.333333, 0.333333, 0.333333] # 610nm + - [0.333333, 0.333333, 0.333333] # 615nm + - [0.333333, 0.333333, 0.333333] # 620nm + - [0.333333, 0.333333, 0.333333] # 625nm + - [0.333333, 0.333333, 0.333333] # 630nm + - [0.333333, 0.333333, 0.333333] # 635nm + - [0.333333, 0.333333, 0.333333] # 640nm + - [0.333333, 0.333333, 0.333333] # 645nm + - [0.333333, 0.333333, 0.333333] # 650nm + - [0.333333, 0.333333, 0.333333] # 655nm + - [0.333333, 0.333333, 0.333333] # 660nm + - [0.333333, 0.333333, 0.333333] # 665nm + - [0.333333, 0.333333, 0.333333] # 670nm + - [0.333333, 0.333333, 0.333333] # 675nm + - [0.333333, 0.333333, 0.333333] # 680nm + - [0.333333, 0.333333, 0.333333] # 685nm + - [0.333333, 0.333333, 0.333333] # 690nm + - [0.333333, 0.333333, 0.333333] # 695nm + - [0.333333, 0.333333, 0.333333] # 700nm + - [0.333333, 0.333333, 0.333333] # 705nm + - [0.333333, 0.333333, 0.333333] # 710nm + - [0.333333, 0.333333, 0.333333] # 715nm + - [0.333333, 0.333333, 0.333333] # 720nm + - [0.333333, 0.333333, 0.333333] # 725nm + - [0.333333, 0.333333, 0.333333] # 730nm + - [0.333333, 0.333333, 0.333333] # 735nm + - [0.333333, 0.333333, 0.333333] # 740nm + - [0.333333, 0.333333, 0.333333] # 745nm + - [0.333333, 0.333333, 0.333333] # 750nm + - [0.333333, 0.333333, 0.333333] # 755nm + - [0.333333, 0.333333, 0.333333] # 760nm + - [0.333333, 0.333333, 0.333333] # 765nm + - [0.333333, 0.333333, 0.333333] # 770nm + - [0.333333, 0.333333, 0.333333] # 775nm + - [0.333333, 0.333333, 0.333333] # 780nm + +# Base plus fog. No orange mask on a black-and-white film. +base_density: [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] + +# The characteristic curve, parametric. +log_exposure_min: -3 +log_exposure_max: 4 +density_curves: + - [3.5129e-07, 3.5129e-07, 3.5129e-07] + - [4.2083e-07, 4.2083e-07, 4.2083e-07] + - [5.0412e-07, 5.0412e-07, 5.0412e-07] + - [6.039e-07, 6.039e-07, 6.039e-07] + - [7.2343e-07, 7.2343e-07, 7.2343e-07] + - [8.6662e-07, 8.6662e-07, 8.6662e-07] + - [1.0381e-06, 1.0381e-06, 1.0381e-06] + - [1.2436e-06, 1.2436e-06, 1.2436e-06] + - [1.4898e-06, 1.4898e-06, 1.4898e-06] + - [1.7846e-06, 1.7846e-06, 1.7846e-06] + - [2.1379e-06, 2.1379e-06, 2.1379e-06] + - [2.561e-06, 2.561e-06, 2.561e-06] + - [3.0679e-06, 3.0679e-06, 3.0679e-06] + - [3.6751e-06, 3.6751e-06, 3.6751e-06] + - [4.4025e-06, 4.4025e-06, 4.4025e-06] + - [5.2739e-06, 5.2739e-06, 5.2739e-06] + - [6.3177e-06, 6.3177e-06, 6.3177e-06] + - [7.5681e-06, 7.5681e-06, 7.5681e-06] + - [9.066e-06, 9.066e-06, 9.066e-06] + - [1.086e-05, 1.086e-05, 1.086e-05] + - [1.301e-05, 1.301e-05, 1.301e-05] + - [1.5585e-05, 1.5585e-05, 1.5585e-05] + - [1.8669e-05, 1.8669e-05, 1.8669e-05] + - [2.2364e-05, 2.2364e-05, 2.2364e-05] + - [2.6789e-05, 2.6789e-05, 2.6789e-05] + - [3.2091e-05, 3.2091e-05, 3.2091e-05] + - [3.8441e-05, 3.8441e-05, 3.8441e-05] + - [4.6048e-05, 4.6048e-05, 4.6048e-05] + - [5.516e-05, 5.516e-05, 5.516e-05] + - [6.6074e-05, 6.6074e-05, 6.6074e-05] + - [7.9146e-05, 7.9146e-05, 7.9146e-05] + - [9.4804e-05, 9.4804e-05, 9.4804e-05] + - [0.00011356, 0.00011356, 0.00011356] + - [0.00013602, 0.00013602, 0.00013602] + - [0.00016292, 0.00016292, 0.00016292] + - [0.00019513, 0.00019513, 0.00019513] + - [0.0002337, 0.0002337, 0.0002337] + - [0.00027989, 0.00027989, 0.00027989] + - [0.00033519, 0.00033519, 0.00033519] + - [0.00040139, 0.00040139, 0.00040139] + - [0.00048064, 0.00048064, 0.00048064] + - [0.00057548, 0.00057548, 0.00057548] + - [0.00068897, 0.00068897, 0.00068897] + - [0.00082475, 0.00082475, 0.00082475] + - [0.00098713, 0.00098713, 0.00098713] + - [0.0011813, 0.0011813, 0.0011813] + - [0.0014134, 0.0014134, 0.0014134] + - [0.0016906, 0.0016906, 0.0016906] + - [0.0020217, 0.0020217, 0.0020217] + - [0.0024167, 0.0024167, 0.0024167] + - [0.0028878, 0.0028878, 0.0028878] + - [0.0034491, 0.0034491, 0.0034491] + - [0.004117, 0.004117, 0.004117] + - [0.004911, 0.004911, 0.004911] + - [0.0058534, 0.0058534, 0.0058534] + - [0.0069701, 0.0069701, 0.0069701] + - [0.0082906, 0.0082906, 0.0082906] + - [0.0098485, 0.0098485, 0.0098485] + - [0.011681, 0.011681, 0.011681] + - [0.013831, 0.013831, 0.013831] + - [0.016344, 0.016344, 0.016344] + - [0.019268, 0.019268, 0.019268] + - [0.022655, 0.022655, 0.022655] + - [0.026559, 0.026559, 0.026559] + - [0.031032, 0.031032, 0.031032] + - [0.036126, 0.036126, 0.036126] + - [0.041886, 0.041886, 0.041886] + - [0.048352, 0.048352, 0.048352] + - [0.055556, 0.055556, 0.055556] + - [0.063518, 0.063518, 0.063518] + - [0.072247, 0.072247, 0.072247] + - [0.081739, 0.081739, 0.081739] + - [0.09198, 0.09198, 0.09198] + - [0.10294, 0.10294, 0.10294] + - [0.11459, 0.11459, 0.11459] + - [0.12687, 0.12687, 0.12687] + - [0.13975, 0.13975, 0.13975] + - [0.15317, 0.15317, 0.15317] + - [0.16707, 0.16707, 0.16707] + - [0.18141, 0.18141, 0.18141] + - [0.19613, 0.19613, 0.19613] + - [0.21119, 0.21119, 0.21119] + - [0.22653, 0.22653, 0.22653] + - [0.24214, 0.24214, 0.24214] + - [0.25796, 0.25796, 0.25796] + - [0.27396, 0.27396, 0.27396] + - [0.29013, 0.29013, 0.29013] + - [0.30643, 0.30643, 0.30643] + - [0.32284, 0.32284, 0.32284] + - [0.33935, 0.33935, 0.33935] + - [0.35595, 0.35595, 0.35595] + - [0.37261, 0.37261, 0.37261] + - [0.38933, 0.38933, 0.38933] + - [0.4061, 0.4061, 0.4061] + - [0.42291, 0.42291, 0.42291] + - [0.43975, 0.43975, 0.43975] + - [0.45663, 0.45663, 0.45663] + - [0.47352, 0.47352, 0.47352] + - [0.49044, 0.49044, 0.49044] + - [0.50737, 0.50737, 0.50737] + - [0.52432, 0.52432, 0.52432] + - [0.54128, 0.54128, 0.54128] + - [0.55825, 0.55825, 0.55825] + - [0.57523, 0.57523, 0.57523] + - [0.59222, 0.59222, 0.59222] + - [0.60921, 0.60921, 0.60921] + - [0.6262, 0.6262, 0.6262] + - [0.6432, 0.6432, 0.6432] + - [0.6602, 0.6602, 0.6602] + - [0.67721, 0.67721, 0.67721] + - [0.69422, 0.69422, 0.69422] + - [0.71123, 0.71123, 0.71123] + - [0.72824, 0.72824, 0.72824] + - [0.74525, 0.74525, 0.74525] + - [0.76226, 0.76226, 0.76226] + - [0.77928, 0.77928, 0.77928] + - [0.79629, 0.79629, 0.79629] + - [0.81331, 0.81331, 0.81331] + - [0.83033, 0.83033, 0.83033] + - [0.84734, 0.84734, 0.84734] + - [0.86436, 0.86436, 0.86436] + - [0.88138, 0.88138, 0.88138] + - [0.8984, 0.8984, 0.8984] + - [0.91542, 0.91542, 0.91542] + - [0.93244, 0.93244, 0.93244] + - [0.94945, 0.94945, 0.94945] + - [0.96647, 0.96647, 0.96647] + - [0.98349, 0.98349, 0.98349] + - [1.0005, 1.0005, 1.0005] + - [1.0175, 1.0175, 1.0175] + - [1.0345, 1.0345, 1.0345] + - [1.0516, 1.0516, 1.0516] + - [1.0686, 1.0686, 1.0686] + - [1.0856, 1.0856, 1.0856] + - [1.1026, 1.1026, 1.1026] + - [1.1196, 1.1196, 1.1196] + - [1.1367, 1.1367, 1.1367] + - [1.1537, 1.1537, 1.1537] + - [1.1707, 1.1707, 1.1707] + - [1.1877, 1.1877, 1.1877] + - [1.2047, 1.2047, 1.2047] + - [1.2218, 1.2218, 1.2218] + - [1.2388, 1.2388, 1.2388] + - [1.2558, 1.2558, 1.2558] + - [1.2728, 1.2728, 1.2728] + - [1.2898, 1.2898, 1.2898] + - [1.3068, 1.3068, 1.3068] + - [1.3239, 1.3239, 1.3239] + - [1.3409, 1.3409, 1.3409] + - [1.3579, 1.3579, 1.3579] + - [1.3749, 1.3749, 1.3749] + - [1.3919, 1.3919, 1.3919] + - [1.4089, 1.4089, 1.4089] + - [1.426, 1.426, 1.426] + - [1.443, 1.443, 1.443] + - [1.46, 1.46, 1.46] + - [1.477, 1.477, 1.477] + - [1.494, 1.494, 1.494] + - [1.511, 1.511, 1.511] + - [1.528, 1.528, 1.528] + - [1.545, 1.545, 1.545] + - [1.562, 1.562, 1.562] + - [1.579, 1.579, 1.579] + - [1.596, 1.596, 1.596] + - [1.613, 1.613, 1.613] + - [1.63, 1.63, 1.63] + - [1.647, 1.647, 1.647] + - [1.664, 1.664, 1.664] + - [1.681, 1.681, 1.681] + - [1.6979, 1.6979, 1.6979] + - [1.7149, 1.7149, 1.7149] + - [1.7319, 1.7319, 1.7319] + - [1.7488, 1.7488, 1.7488] + - [1.7657, 1.7657, 1.7657] + - [1.7827, 1.7827, 1.7827] + - [1.7996, 1.7996, 1.7996] + - [1.8165, 1.8165, 1.8165] + - [1.8333, 1.8333, 1.8333] + - [1.8502, 1.8502, 1.8502] + - [1.867, 1.867, 1.867] + - [1.8838, 1.8838, 1.8838] + - [1.9006, 1.9006, 1.9006] + - [1.9173, 1.9173, 1.9173] + - [1.934, 1.934, 1.934] + - [1.9506, 1.9506, 1.9506] + - [1.9672, 1.9672, 1.9672] + - [1.9837, 1.9837, 1.9837] + - [2.0001, 2.0001, 2.0001] + - [2.0165, 2.0165, 2.0165] + - [2.0327, 2.0327, 2.0327] + - [2.0489, 2.0489, 2.0489] + - [2.0649, 2.0649, 2.0649] + - [2.0807, 2.0807, 2.0807] + - [2.0965, 2.0965, 2.0965] + - [2.112, 2.112, 2.112] + - [2.1273, 2.1273, 2.1273] + - [2.1424, 2.1424, 2.1424] + - [2.1573, 2.1573, 2.1573] + - [2.1719, 2.1719, 2.1719] + - [2.1861, 2.1861, 2.1861] + - [2.2001, 2.2001, 2.2001] + - [2.2136, 2.2136, 2.2136] + - [2.2268, 2.2268, 2.2268] + - [2.2395, 2.2395, 2.2395] + - [2.2518, 2.2518, 2.2518] + - [2.2635, 2.2635, 2.2635] + - [2.2748, 2.2748, 2.2748] + - [2.2855, 2.2855, 2.2855] + - [2.2956, 2.2956, 2.2956] + - [2.3051, 2.3051, 2.3051] + - [2.3141, 2.3141, 2.3141] + - [2.3224, 2.3224, 2.3224] + - [2.3302, 2.3302, 2.3302] + - [2.3373, 2.3373, 2.3373] + - [2.3439, 2.3439, 2.3439] + - [2.3499, 2.3499, 2.3499] + - [2.3554, 2.3554, 2.3554] + - [2.3604, 2.3604, 2.3604] + - [2.3649, 2.3649, 2.3649] + - [2.369, 2.369, 2.369] + - [2.3726, 2.3726, 2.3726] + - [2.3759, 2.3759, 2.3759] + - [2.3788, 2.3788, 2.3788] + - [2.3814, 2.3814, 2.3814] + - [2.3836, 2.3836, 2.3836] + - [2.3857, 2.3857, 2.3857] + - [2.3875, 2.3875, 2.3875] + - [2.389, 2.389, 2.389] + - [2.3904, 2.3904, 2.3904] + - [2.3916, 2.3916, 2.3916] + - [2.3927, 2.3927, 2.3927] + - [2.3936, 2.3936, 2.3936] + - [2.3944, 2.3944, 2.3944] + - [2.3952, 2.3952, 2.3952] + - [2.3958, 2.3958, 2.3958] + - [2.3963, 2.3963, 2.3963] + - [2.3968, 2.3968, 2.3968] + - [2.3972, 2.3972, 2.3972] + - [2.3976, 2.3976, 2.3976] + - [2.3979, 2.3979, 2.3979] + - [2.3982, 2.3982, 2.3982] + - [2.3984, 2.3984, 2.3984] + - [2.3986, 2.3986, 2.3986] + - [2.3988, 2.3988, 2.3988] + - [2.3989, 2.3989, 2.3989] + - [2.3991, 2.3991, 2.3991] + - [2.3992, 2.3992, 2.3992] + - [2.3993, 2.3993, 2.3993] + - [2.3994, 2.3994, 2.3994] + - [2.3995, 2.3995, 2.3995] + - [2.3995, 2.3995, 2.3995] + - [2.3996, 2.3996, 2.3996] + - [2.3997, 2.3997, 2.3997] + - [2.3997, 2.3997, 2.3997] + - [2.3997, 2.3997, 2.3997] + - [2.3998, 2.3998, 2.3998] diff --git a/core/dr-film/profiles/ilford_delta_400.yaml b/core/dr-film/profiles/ilford_delta_400.yaml new file mode 100644 index 0000000..7694c53 --- /dev/null +++ b/core/dr-film/profiles/ilford_delta_400.yaml @@ -0,0 +1,459 @@ +# Generated by tools/film-profiles/convert.py. +# +# *** CONSTRUCTED, NOT MEASURED. *** +# +# Ilford publish this film's spectral sensitivity and characteristic +# curve as graphs, and no granularity figure at all, so this profile is +# built rather than extracted. Its speed is the published ISO rating, +# and its contrast is ISO 6:1993's normal development (average gradient +# 0.62). Its spectral response is borrowed from Kodak Double-X, a +# *measured* panchromatic negative, shifted by the speed difference. +# Its granularity is an estimate, ordered against the other films here. +# +# So it renders as a film of this speed and contrast, not as a +# measurement of this emulsion. Replace it outright if anyone digitises +# the real curves. + +version: 'constructed-1' +stock: ilford_delta_400 +name: 'Ilford Delta 400' +kind: negative # negative | positive +support: film # film | paper +stage: filming # filming | printing +monochrome: true +reference_illuminant: D55 +viewing_illuminant: D50 + +rms_granularity: [9, 9, 9] + +# log10 spectral sensitivity per layer, 380-780nm at 5nm. +log_sensitivity: + - [-9, -9, -9] # 380nm + - [-9, -9, -9] # 385nm + - [-9, -9, -9] # 390nm + - [-9, -9, -9] # 395nm + - [-9, -9, -9] # 400nm + - [-9, -9, -9] # 405nm + - [-9, -9, -9] # 410nm + - [-9, -9, -9] # 415nm + - [-9, -9, -9] # 420nm + - [-0.513098, -0.513098, -0.513098] # 425nm + - [-0.51284, -0.51284, -0.51284] # 430nm + - [-0.51284, -0.51284, -0.51284] # 435nm + - [-0.51319, -0.51319, -0.51319] # 440nm + - [-0.522893, -0.522893, -0.522893] # 445nm + - [-0.53562, -0.53562, -0.53562] # 450nm + - [-0.552412, -0.552412, -0.552412] # 455nm + - [-0.571665, -0.571665, -0.571665] # 460nm + - [-0.593122, -0.593122, -0.593122] # 465nm + - [-0.611553, -0.611553, -0.611553] # 470nm + - [-0.637438, -0.637438, -0.637438] # 475nm + - [-0.665217, -0.665217, -0.665217] # 480nm + - [-0.703161, -0.703161, -0.703161] # 485nm + - [-0.742909, -0.742909, -0.742909] # 490nm + - [-0.782594, -0.782594, -0.782594] # 495nm + - [-0.815861, -0.815861, -0.815861] # 500nm + - [-0.831143, -0.831143, -0.831143] # 505nm + - [-0.834309, -0.834309, -0.834309] # 510nm + - [-0.833599, -0.833599, -0.833599] # 515nm + - [-0.823829, -0.823829, -0.823829] # 520nm + - [-0.810809, -0.810809, -0.810809] # 525nm + - [-0.796036, -0.796036, -0.796036] # 530nm + - [-0.778081, -0.778081, -0.778081] # 535nm + - [-0.759864, -0.759864, -0.759864] # 540nm + - [-0.740987, -0.740987, -0.740987] # 545nm + - [-0.724425, -0.724425, -0.724425] # 550nm + - [-0.706653, -0.706653, -0.706653] # 555nm + - [-0.693404, -0.693404, -0.693404] # 560nm + - [-0.685993, -0.685993, -0.685993] # 565nm + - [-0.68111, -0.68111, -0.68111] # 570nm + - [-0.677547, -0.677547, -0.677547] # 575nm + - [-0.680358, -0.680358, -0.680358] # 580nm + - [-0.686794, -0.686794, -0.686794] # 585nm + - [-0.696308, -0.696308, -0.696308] # 590nm + - [-0.708955, -0.708955, -0.708955] # 595nm + - [-0.720822, -0.720822, -0.720822] # 600nm + - [-0.735995, -0.735995, -0.735995] # 605nm + - [-0.751102, -0.751102, -0.751102] # 610nm + - [-0.75613, -0.75613, -0.75613] # 615nm + - [-0.747716, -0.747716, -0.747716] # 620nm + - [-0.756689, -0.756689, -0.756689] # 625nm + - [-0.785834, -0.785834, -0.785834] # 630nm + - [-0.876194, -0.876194, -0.876194] # 635nm + - [-1.06561, -1.06561, -1.06561] # 640nm + - [-1.28125, -1.28125, -1.28125] # 645nm + - [-1.53687, -1.53687, -1.53687] # 650nm + - [-1.79873, -1.79873, -1.79873] # 655nm + - [-2.0666, -2.0666, -2.0666] # 660nm + - [-9, -9, -9] # 665nm + - [-9, -9, -9] # 670nm + - [-9, -9, -9] # 675nm + - [-9, -9, -9] # 680nm + - [-9, -9, -9] # 685nm + - [-9, -9, -9] # 690nm + - [-9, -9, -9] # 695nm + - [-9, -9, -9] # 700nm + - [-9, -9, -9] # 705nm + - [-9, -9, -9] # 710nm + - [-9, -9, -9] # 715nm + - [-9, -9, -9] # 720nm + - [-9, -9, -9] # 725nm + - [-9, -9, -9] # 730nm + - [-9, -9, -9] # 735nm + - [-9, -9, -9] # 740nm + - [-9, -9, -9] # 745nm + - [-9, -9, -9] # 750nm + - [-9, -9, -9] # 755nm + - [-9, -9, -9] # 760nm + - [-9, -9, -9] # 765nm + - [-9, -9, -9] # 770nm + - [-9, -9, -9] # 775nm + - [-9, -9, -9] # 780nm + +# Developed silver: neutral across the band. +dye_density: + - [0.333333, 0.333333, 0.333333] # 380nm + - [0.333333, 0.333333, 0.333333] # 385nm + - [0.333333, 0.333333, 0.333333] # 390nm + - [0.333333, 0.333333, 0.333333] # 395nm + - [0.333333, 0.333333, 0.333333] # 400nm + - [0.333333, 0.333333, 0.333333] # 405nm + - [0.333333, 0.333333, 0.333333] # 410nm + - [0.333333, 0.333333, 0.333333] # 415nm + - [0.333333, 0.333333, 0.333333] # 420nm + - [0.333333, 0.333333, 0.333333] # 425nm + - [0.333333, 0.333333, 0.333333] # 430nm + - [0.333333, 0.333333, 0.333333] # 435nm + - [0.333333, 0.333333, 0.333333] # 440nm + - [0.333333, 0.333333, 0.333333] # 445nm + - [0.333333, 0.333333, 0.333333] # 450nm + - [0.333333, 0.333333, 0.333333] # 455nm + - [0.333333, 0.333333, 0.333333] # 460nm + - [0.333333, 0.333333, 0.333333] # 465nm + - [0.333333, 0.333333, 0.333333] # 470nm + - [0.333333, 0.333333, 0.333333] # 475nm + - [0.333333, 0.333333, 0.333333] # 480nm + - [0.333333, 0.333333, 0.333333] # 485nm + - [0.333333, 0.333333, 0.333333] # 490nm + - [0.333333, 0.333333, 0.333333] # 495nm + - [0.333333, 0.333333, 0.333333] # 500nm + - [0.333333, 0.333333, 0.333333] # 505nm + - [0.333333, 0.333333, 0.333333] # 510nm + - [0.333333, 0.333333, 0.333333] # 515nm + - [0.333333, 0.333333, 0.333333] # 520nm + - [0.333333, 0.333333, 0.333333] # 525nm + - [0.333333, 0.333333, 0.333333] # 530nm + - [0.333333, 0.333333, 0.333333] # 535nm + - [0.333333, 0.333333, 0.333333] # 540nm + - [0.333333, 0.333333, 0.333333] # 545nm + - [0.333333, 0.333333, 0.333333] # 550nm + - [0.333333, 0.333333, 0.333333] # 555nm + - [0.333333, 0.333333, 0.333333] # 560nm + - [0.333333, 0.333333, 0.333333] # 565nm + - [0.333333, 0.333333, 0.333333] # 570nm + - [0.333333, 0.333333, 0.333333] # 575nm + - [0.333333, 0.333333, 0.333333] # 580nm + - [0.333333, 0.333333, 0.333333] # 585nm + - [0.333333, 0.333333, 0.333333] # 590nm + - [0.333333, 0.333333, 0.333333] # 595nm + - [0.333333, 0.333333, 0.333333] # 600nm + - [0.333333, 0.333333, 0.333333] # 605nm + - [0.333333, 0.333333, 0.333333] # 610nm + - [0.333333, 0.333333, 0.333333] # 615nm + - [0.333333, 0.333333, 0.333333] # 620nm + - [0.333333, 0.333333, 0.333333] # 625nm + - [0.333333, 0.333333, 0.333333] # 630nm + - [0.333333, 0.333333, 0.333333] # 635nm + - [0.333333, 0.333333, 0.333333] # 640nm + - [0.333333, 0.333333, 0.333333] # 645nm + - [0.333333, 0.333333, 0.333333] # 650nm + - [0.333333, 0.333333, 0.333333] # 655nm + - [0.333333, 0.333333, 0.333333] # 660nm + - [0.333333, 0.333333, 0.333333] # 665nm + - [0.333333, 0.333333, 0.333333] # 670nm + - [0.333333, 0.333333, 0.333333] # 675nm + - [0.333333, 0.333333, 0.333333] # 680nm + - [0.333333, 0.333333, 0.333333] # 685nm + - [0.333333, 0.333333, 0.333333] # 690nm + - [0.333333, 0.333333, 0.333333] # 695nm + - [0.333333, 0.333333, 0.333333] # 700nm + - [0.333333, 0.333333, 0.333333] # 705nm + - [0.333333, 0.333333, 0.333333] # 710nm + - [0.333333, 0.333333, 0.333333] # 715nm + - [0.333333, 0.333333, 0.333333] # 720nm + - [0.333333, 0.333333, 0.333333] # 725nm + - [0.333333, 0.333333, 0.333333] # 730nm + - [0.333333, 0.333333, 0.333333] # 735nm + - [0.333333, 0.333333, 0.333333] # 740nm + - [0.333333, 0.333333, 0.333333] # 745nm + - [0.333333, 0.333333, 0.333333] # 750nm + - [0.333333, 0.333333, 0.333333] # 755nm + - [0.333333, 0.333333, 0.333333] # 760nm + - [0.333333, 0.333333, 0.333333] # 765nm + - [0.333333, 0.333333, 0.333333] # 770nm + - [0.333333, 0.333333, 0.333333] # 775nm + - [0.333333, 0.333333, 0.333333] # 780nm + +# Base plus fog. No orange mask on a black-and-white film. +base_density: [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] + +# The characteristic curve, parametric. +log_exposure_min: -3 +log_exposure_max: 4 +density_curves: + - [3.5129e-07, 3.5129e-07, 3.5129e-07] + - [4.2083e-07, 4.2083e-07, 4.2083e-07] + - [5.0412e-07, 5.0412e-07, 5.0412e-07] + - [6.039e-07, 6.039e-07, 6.039e-07] + - [7.2343e-07, 7.2343e-07, 7.2343e-07] + - [8.6662e-07, 8.6662e-07, 8.6662e-07] + - [1.0381e-06, 1.0381e-06, 1.0381e-06] + - [1.2436e-06, 1.2436e-06, 1.2436e-06] + - [1.4898e-06, 1.4898e-06, 1.4898e-06] + - [1.7846e-06, 1.7846e-06, 1.7846e-06] + - [2.1379e-06, 2.1379e-06, 2.1379e-06] + - [2.561e-06, 2.561e-06, 2.561e-06] + - [3.0679e-06, 3.0679e-06, 3.0679e-06] + - [3.6751e-06, 3.6751e-06, 3.6751e-06] + - [4.4025e-06, 4.4025e-06, 4.4025e-06] + - [5.2739e-06, 5.2739e-06, 5.2739e-06] + - [6.3177e-06, 6.3177e-06, 6.3177e-06] + - [7.5681e-06, 7.5681e-06, 7.5681e-06] + - [9.066e-06, 9.066e-06, 9.066e-06] + - [1.086e-05, 1.086e-05, 1.086e-05] + - [1.301e-05, 1.301e-05, 1.301e-05] + - [1.5585e-05, 1.5585e-05, 1.5585e-05] + - [1.8669e-05, 1.8669e-05, 1.8669e-05] + - [2.2364e-05, 2.2364e-05, 2.2364e-05] + - [2.6789e-05, 2.6789e-05, 2.6789e-05] + - [3.2091e-05, 3.2091e-05, 3.2091e-05] + - [3.8441e-05, 3.8441e-05, 3.8441e-05] + - [4.6048e-05, 4.6048e-05, 4.6048e-05] + - [5.516e-05, 5.516e-05, 5.516e-05] + - [6.6074e-05, 6.6074e-05, 6.6074e-05] + - [7.9146e-05, 7.9146e-05, 7.9146e-05] + - [9.4804e-05, 9.4804e-05, 9.4804e-05] + - [0.00011356, 0.00011356, 0.00011356] + - [0.00013602, 0.00013602, 0.00013602] + - [0.00016292, 0.00016292, 0.00016292] + - [0.00019513, 0.00019513, 0.00019513] + - [0.0002337, 0.0002337, 0.0002337] + - [0.00027989, 0.00027989, 0.00027989] + - [0.00033519, 0.00033519, 0.00033519] + - [0.00040139, 0.00040139, 0.00040139] + - [0.00048064, 0.00048064, 0.00048064] + - [0.00057548, 0.00057548, 0.00057548] + - [0.00068897, 0.00068897, 0.00068897] + - [0.00082475, 0.00082475, 0.00082475] + - [0.00098713, 0.00098713, 0.00098713] + - [0.0011813, 0.0011813, 0.0011813] + - [0.0014134, 0.0014134, 0.0014134] + - [0.0016906, 0.0016906, 0.0016906] + - [0.0020217, 0.0020217, 0.0020217] + - [0.0024167, 0.0024167, 0.0024167] + - [0.0028878, 0.0028878, 0.0028878] + - [0.0034491, 0.0034491, 0.0034491] + - [0.004117, 0.004117, 0.004117] + - [0.004911, 0.004911, 0.004911] + - [0.0058534, 0.0058534, 0.0058534] + - [0.0069701, 0.0069701, 0.0069701] + - [0.0082906, 0.0082906, 0.0082906] + - [0.0098485, 0.0098485, 0.0098485] + - [0.011681, 0.011681, 0.011681] + - [0.013831, 0.013831, 0.013831] + - [0.016344, 0.016344, 0.016344] + - [0.019268, 0.019268, 0.019268] + - [0.022655, 0.022655, 0.022655] + - [0.026559, 0.026559, 0.026559] + - [0.031032, 0.031032, 0.031032] + - [0.036126, 0.036126, 0.036126] + - [0.041886, 0.041886, 0.041886] + - [0.048352, 0.048352, 0.048352] + - [0.055556, 0.055556, 0.055556] + - [0.063518, 0.063518, 0.063518] + - [0.072247, 0.072247, 0.072247] + - [0.081739, 0.081739, 0.081739] + - [0.09198, 0.09198, 0.09198] + - [0.10294, 0.10294, 0.10294] + - [0.11459, 0.11459, 0.11459] + - [0.12687, 0.12687, 0.12687] + - [0.13975, 0.13975, 0.13975] + - [0.15317, 0.15317, 0.15317] + - [0.16707, 0.16707, 0.16707] + - [0.18141, 0.18141, 0.18141] + - [0.19613, 0.19613, 0.19613] + - [0.21119, 0.21119, 0.21119] + - [0.22653, 0.22653, 0.22653] + - [0.24214, 0.24214, 0.24214] + - [0.25796, 0.25796, 0.25796] + - [0.27396, 0.27396, 0.27396] + - [0.29013, 0.29013, 0.29013] + - [0.30643, 0.30643, 0.30643] + - [0.32284, 0.32284, 0.32284] + - [0.33935, 0.33935, 0.33935] + - [0.35595, 0.35595, 0.35595] + - [0.37261, 0.37261, 0.37261] + - [0.38933, 0.38933, 0.38933] + - [0.4061, 0.4061, 0.4061] + - [0.42291, 0.42291, 0.42291] + - [0.43975, 0.43975, 0.43975] + - [0.45663, 0.45663, 0.45663] + - [0.47352, 0.47352, 0.47352] + - [0.49044, 0.49044, 0.49044] + - [0.50737, 0.50737, 0.50737] + - [0.52432, 0.52432, 0.52432] + - [0.54128, 0.54128, 0.54128] + - [0.55825, 0.55825, 0.55825] + - [0.57523, 0.57523, 0.57523] + - [0.59222, 0.59222, 0.59222] + - [0.60921, 0.60921, 0.60921] + - [0.6262, 0.6262, 0.6262] + - [0.6432, 0.6432, 0.6432] + - [0.6602, 0.6602, 0.6602] + - [0.67721, 0.67721, 0.67721] + - [0.69422, 0.69422, 0.69422] + - [0.71123, 0.71123, 0.71123] + - [0.72824, 0.72824, 0.72824] + - [0.74525, 0.74525, 0.74525] + - [0.76226, 0.76226, 0.76226] + - [0.77928, 0.77928, 0.77928] + - [0.79629, 0.79629, 0.79629] + - [0.81331, 0.81331, 0.81331] + - [0.83033, 0.83033, 0.83033] + - [0.84734, 0.84734, 0.84734] + - [0.86436, 0.86436, 0.86436] + - [0.88138, 0.88138, 0.88138] + - [0.8984, 0.8984, 0.8984] + - [0.91542, 0.91542, 0.91542] + - [0.93244, 0.93244, 0.93244] + - [0.94945, 0.94945, 0.94945] + - [0.96647, 0.96647, 0.96647] + - [0.98349, 0.98349, 0.98349] + - [1.0005, 1.0005, 1.0005] + - [1.0175, 1.0175, 1.0175] + - [1.0345, 1.0345, 1.0345] + - [1.0516, 1.0516, 1.0516] + - [1.0686, 1.0686, 1.0686] + - [1.0856, 1.0856, 1.0856] + - [1.1026, 1.1026, 1.1026] + - [1.1196, 1.1196, 1.1196] + - [1.1367, 1.1367, 1.1367] + - [1.1537, 1.1537, 1.1537] + - [1.1707, 1.1707, 1.1707] + - [1.1877, 1.1877, 1.1877] + - [1.2047, 1.2047, 1.2047] + - [1.2218, 1.2218, 1.2218] + - [1.2388, 1.2388, 1.2388] + - [1.2558, 1.2558, 1.2558] + - [1.2728, 1.2728, 1.2728] + - [1.2898, 1.2898, 1.2898] + - [1.3068, 1.3068, 1.3068] + - [1.3239, 1.3239, 1.3239] + - [1.3409, 1.3409, 1.3409] + - [1.3579, 1.3579, 1.3579] + - [1.3749, 1.3749, 1.3749] + - [1.3919, 1.3919, 1.3919] + - [1.4089, 1.4089, 1.4089] + - [1.426, 1.426, 1.426] + - [1.443, 1.443, 1.443] + - [1.46, 1.46, 1.46] + - [1.477, 1.477, 1.477] + - [1.494, 1.494, 1.494] + - [1.511, 1.511, 1.511] + - [1.528, 1.528, 1.528] + - [1.545, 1.545, 1.545] + - [1.562, 1.562, 1.562] + - [1.579, 1.579, 1.579] + - [1.596, 1.596, 1.596] + - [1.613, 1.613, 1.613] + - [1.63, 1.63, 1.63] + - [1.647, 1.647, 1.647] + - [1.664, 1.664, 1.664] + - [1.681, 1.681, 1.681] + - [1.6979, 1.6979, 1.6979] + - [1.7149, 1.7149, 1.7149] + - [1.7319, 1.7319, 1.7319] + - [1.7488, 1.7488, 1.7488] + - [1.7657, 1.7657, 1.7657] + - [1.7827, 1.7827, 1.7827] + - [1.7996, 1.7996, 1.7996] + - [1.8165, 1.8165, 1.8165] + - [1.8333, 1.8333, 1.8333] + - [1.8502, 1.8502, 1.8502] + - [1.867, 1.867, 1.867] + - [1.8838, 1.8838, 1.8838] + - [1.9006, 1.9006, 1.9006] + - [1.9173, 1.9173, 1.9173] + - [1.934, 1.934, 1.934] + - [1.9506, 1.9506, 1.9506] + - [1.9672, 1.9672, 1.9672] + - [1.9837, 1.9837, 1.9837] + - [2.0001, 2.0001, 2.0001] + - [2.0165, 2.0165, 2.0165] + - [2.0327, 2.0327, 2.0327] + - [2.0489, 2.0489, 2.0489] + - [2.0649, 2.0649, 2.0649] + - [2.0807, 2.0807, 2.0807] + - [2.0965, 2.0965, 2.0965] + - [2.112, 2.112, 2.112] + - [2.1273, 2.1273, 2.1273] + - [2.1424, 2.1424, 2.1424] + - [2.1573, 2.1573, 2.1573] + - [2.1719, 2.1719, 2.1719] + - [2.1861, 2.1861, 2.1861] + - [2.2001, 2.2001, 2.2001] + - [2.2136, 2.2136, 2.2136] + - [2.2268, 2.2268, 2.2268] + - [2.2395, 2.2395, 2.2395] + - [2.2518, 2.2518, 2.2518] + - [2.2635, 2.2635, 2.2635] + - [2.2748, 2.2748, 2.2748] + - [2.2855, 2.2855, 2.2855] + - [2.2956, 2.2956, 2.2956] + - [2.3051, 2.3051, 2.3051] + - [2.3141, 2.3141, 2.3141] + - [2.3224, 2.3224, 2.3224] + - [2.3302, 2.3302, 2.3302] + - [2.3373, 2.3373, 2.3373] + - [2.3439, 2.3439, 2.3439] + - [2.3499, 2.3499, 2.3499] + - [2.3554, 2.3554, 2.3554] + - [2.3604, 2.3604, 2.3604] + - [2.3649, 2.3649, 2.3649] + - [2.369, 2.369, 2.369] + - [2.3726, 2.3726, 2.3726] + - [2.3759, 2.3759, 2.3759] + - [2.3788, 2.3788, 2.3788] + - [2.3814, 2.3814, 2.3814] + - [2.3836, 2.3836, 2.3836] + - [2.3857, 2.3857, 2.3857] + - [2.3875, 2.3875, 2.3875] + - [2.389, 2.389, 2.389] + - [2.3904, 2.3904, 2.3904] + - [2.3916, 2.3916, 2.3916] + - [2.3927, 2.3927, 2.3927] + - [2.3936, 2.3936, 2.3936] + - [2.3944, 2.3944, 2.3944] + - [2.3952, 2.3952, 2.3952] + - [2.3958, 2.3958, 2.3958] + - [2.3963, 2.3963, 2.3963] + - [2.3968, 2.3968, 2.3968] + - [2.3972, 2.3972, 2.3972] + - [2.3976, 2.3976, 2.3976] + - [2.3979, 2.3979, 2.3979] + - [2.3982, 2.3982, 2.3982] + - [2.3984, 2.3984, 2.3984] + - [2.3986, 2.3986, 2.3986] + - [2.3988, 2.3988, 2.3988] + - [2.3989, 2.3989, 2.3989] + - [2.3991, 2.3991, 2.3991] + - [2.3992, 2.3992, 2.3992] + - [2.3993, 2.3993, 2.3993] + - [2.3994, 2.3994, 2.3994] + - [2.3995, 2.3995, 2.3995] + - [2.3995, 2.3995, 2.3995] + - [2.3996, 2.3996, 2.3996] + - [2.3997, 2.3997, 2.3997] + - [2.3997, 2.3997, 2.3997] + - [2.3997, 2.3997, 2.3997] + - [2.3998, 2.3998, 2.3998] diff --git a/core/dr-film/profiles/ilford_fp4_plus.yaml b/core/dr-film/profiles/ilford_fp4_plus.yaml new file mode 100644 index 0000000..c118750 --- /dev/null +++ b/core/dr-film/profiles/ilford_fp4_plus.yaml @@ -0,0 +1,459 @@ +# Generated by tools/film-profiles/convert.py. +# +# *** CONSTRUCTED, NOT MEASURED. *** +# +# Ilford publish this film's spectral sensitivity and characteristic +# curve as graphs, and no granularity figure at all, so this profile is +# built rather than extracted. Its speed is the published ISO rating, +# and its contrast is ISO 6:1993's normal development (average gradient +# 0.62). Its spectral response is borrowed from Kodak Double-X, a +# *measured* panchromatic negative, shifted by the speed difference. +# Its granularity is an estimate, ordered against the other films here. +# +# So it renders as a film of this speed and contrast, not as a +# measurement of this emulsion. Replace it outright if anyone digitises +# the real curves. + +version: 'constructed-1' +stock: ilford_fp4_plus +name: 'Ilford FP4 Plus' +kind: negative # negative | positive +support: film # film | paper +stage: filming # filming | printing +monochrome: true +reference_illuminant: D55 +viewing_illuminant: D50 + +rms_granularity: [7, 7, 7] + +# log10 spectral sensitivity per layer, 380-780nm at 5nm. +log_sensitivity: + - [-9, -9, -9] # 380nm + - [-9, -9, -9] # 385nm + - [-9, -9, -9] # 390nm + - [-9, -9, -9] # 395nm + - [-9, -9, -9] # 400nm + - [-9, -9, -9] # 405nm + - [-9, -9, -9] # 410nm + - [-9, -9, -9] # 415nm + - [-9, -9, -9] # 420nm + - [-1.01825, -1.01825, -1.01825] # 425nm + - [-1.01799, -1.01799, -1.01799] # 430nm + - [-1.01799, -1.01799, -1.01799] # 435nm + - [-1.01834, -1.01834, -1.01834] # 440nm + - [-1.02804, -1.02804, -1.02804] # 445nm + - [-1.04077, -1.04077, -1.04077] # 450nm + - [-1.05756, -1.05756, -1.05756] # 455nm + - [-1.07682, -1.07682, -1.07682] # 460nm + - [-1.09827, -1.09827, -1.09827] # 465nm + - [-1.1167, -1.1167, -1.1167] # 470nm + - [-1.14259, -1.14259, -1.14259] # 475nm + - [-1.17037, -1.17037, -1.17037] # 480nm + - [-1.20831, -1.20831, -1.20831] # 485nm + - [-1.24806, -1.24806, -1.24806] # 490nm + - [-1.28774, -1.28774, -1.28774] # 495nm + - [-1.32101, -1.32101, -1.32101] # 500nm + - [-1.33629, -1.33629, -1.33629] # 505nm + - [-1.33946, -1.33946, -1.33946] # 510nm + - [-1.33875, -1.33875, -1.33875] # 515nm + - [-1.32898, -1.32898, -1.32898] # 520nm + - [-1.31596, -1.31596, -1.31596] # 525nm + - [-1.30119, -1.30119, -1.30119] # 530nm + - [-1.28323, -1.28323, -1.28323] # 535nm + - [-1.26501, -1.26501, -1.26501] # 540nm + - [-1.24614, -1.24614, -1.24614] # 545nm + - [-1.22957, -1.22957, -1.22957] # 550nm + - [-1.2118, -1.2118, -1.2118] # 555nm + - [-1.19855, -1.19855, -1.19855] # 560nm + - [-1.19114, -1.19114, -1.19114] # 565nm + - [-1.18626, -1.18626, -1.18626] # 570nm + - [-1.1827, -1.1827, -1.1827] # 575nm + - [-1.18551, -1.18551, -1.18551] # 580nm + - [-1.19194, -1.19194, -1.19194] # 585nm + - [-1.20146, -1.20146, -1.20146] # 590nm + - [-1.2141, -1.2141, -1.2141] # 595nm + - [-1.22597, -1.22597, -1.22597] # 600nm + - [-1.24114, -1.24114, -1.24114] # 605nm + - [-1.25625, -1.25625, -1.25625] # 610nm + - [-1.26128, -1.26128, -1.26128] # 615nm + - [-1.25287, -1.25287, -1.25287] # 620nm + - [-1.26184, -1.26184, -1.26184] # 625nm + - [-1.29098, -1.29098, -1.29098] # 630nm + - [-1.38134, -1.38134, -1.38134] # 635nm + - [-1.57076, -1.57076, -1.57076] # 640nm + - [-1.7864, -1.7864, -1.7864] # 645nm + - [-2.04202, -2.04202, -2.04202] # 650nm + - [-2.30388, -2.30388, -2.30388] # 655nm + - [-2.57175, -2.57175, -2.57175] # 660nm + - [-9, -9, -9] # 665nm + - [-9, -9, -9] # 670nm + - [-9, -9, -9] # 675nm + - [-9, -9, -9] # 680nm + - [-9, -9, -9] # 685nm + - [-9, -9, -9] # 690nm + - [-9, -9, -9] # 695nm + - [-9, -9, -9] # 700nm + - [-9, -9, -9] # 705nm + - [-9, -9, -9] # 710nm + - [-9, -9, -9] # 715nm + - [-9, -9, -9] # 720nm + - [-9, -9, -9] # 725nm + - [-9, -9, -9] # 730nm + - [-9, -9, -9] # 735nm + - [-9, -9, -9] # 740nm + - [-9, -9, -9] # 745nm + - [-9, -9, -9] # 750nm + - [-9, -9, -9] # 755nm + - [-9, -9, -9] # 760nm + - [-9, -9, -9] # 765nm + - [-9, -9, -9] # 770nm + - [-9, -9, -9] # 775nm + - [-9, -9, -9] # 780nm + +# Developed silver: neutral across the band. +dye_density: + - [0.333333, 0.333333, 0.333333] # 380nm + - [0.333333, 0.333333, 0.333333] # 385nm + - [0.333333, 0.333333, 0.333333] # 390nm + - [0.333333, 0.333333, 0.333333] # 395nm + - [0.333333, 0.333333, 0.333333] # 400nm + - [0.333333, 0.333333, 0.333333] # 405nm + - [0.333333, 0.333333, 0.333333] # 410nm + - [0.333333, 0.333333, 0.333333] # 415nm + - [0.333333, 0.333333, 0.333333] # 420nm + - [0.333333, 0.333333, 0.333333] # 425nm + - [0.333333, 0.333333, 0.333333] # 430nm + - [0.333333, 0.333333, 0.333333] # 435nm + - [0.333333, 0.333333, 0.333333] # 440nm + - [0.333333, 0.333333, 0.333333] # 445nm + - [0.333333, 0.333333, 0.333333] # 450nm + - [0.333333, 0.333333, 0.333333] # 455nm + - [0.333333, 0.333333, 0.333333] # 460nm + - [0.333333, 0.333333, 0.333333] # 465nm + - [0.333333, 0.333333, 0.333333] # 470nm + - [0.333333, 0.333333, 0.333333] # 475nm + - [0.333333, 0.333333, 0.333333] # 480nm + - [0.333333, 0.333333, 0.333333] # 485nm + - [0.333333, 0.333333, 0.333333] # 490nm + - [0.333333, 0.333333, 0.333333] # 495nm + - [0.333333, 0.333333, 0.333333] # 500nm + - [0.333333, 0.333333, 0.333333] # 505nm + - [0.333333, 0.333333, 0.333333] # 510nm + - [0.333333, 0.333333, 0.333333] # 515nm + - [0.333333, 0.333333, 0.333333] # 520nm + - [0.333333, 0.333333, 0.333333] # 525nm + - [0.333333, 0.333333, 0.333333] # 530nm + - [0.333333, 0.333333, 0.333333] # 535nm + - [0.333333, 0.333333, 0.333333] # 540nm + - [0.333333, 0.333333, 0.333333] # 545nm + - [0.333333, 0.333333, 0.333333] # 550nm + - [0.333333, 0.333333, 0.333333] # 555nm + - [0.333333, 0.333333, 0.333333] # 560nm + - [0.333333, 0.333333, 0.333333] # 565nm + - [0.333333, 0.333333, 0.333333] # 570nm + - [0.333333, 0.333333, 0.333333] # 575nm + - [0.333333, 0.333333, 0.333333] # 580nm + - [0.333333, 0.333333, 0.333333] # 585nm + - [0.333333, 0.333333, 0.333333] # 590nm + - [0.333333, 0.333333, 0.333333] # 595nm + - [0.333333, 0.333333, 0.333333] # 600nm + - [0.333333, 0.333333, 0.333333] # 605nm + - [0.333333, 0.333333, 0.333333] # 610nm + - [0.333333, 0.333333, 0.333333] # 615nm + - [0.333333, 0.333333, 0.333333] # 620nm + - [0.333333, 0.333333, 0.333333] # 625nm + - [0.333333, 0.333333, 0.333333] # 630nm + - [0.333333, 0.333333, 0.333333] # 635nm + - [0.333333, 0.333333, 0.333333] # 640nm + - [0.333333, 0.333333, 0.333333] # 645nm + - [0.333333, 0.333333, 0.333333] # 650nm + - [0.333333, 0.333333, 0.333333] # 655nm + - [0.333333, 0.333333, 0.333333] # 660nm + - [0.333333, 0.333333, 0.333333] # 665nm + - [0.333333, 0.333333, 0.333333] # 670nm + - [0.333333, 0.333333, 0.333333] # 675nm + - [0.333333, 0.333333, 0.333333] # 680nm + - [0.333333, 0.333333, 0.333333] # 685nm + - [0.333333, 0.333333, 0.333333] # 690nm + - [0.333333, 0.333333, 0.333333] # 695nm + - [0.333333, 0.333333, 0.333333] # 700nm + - [0.333333, 0.333333, 0.333333] # 705nm + - [0.333333, 0.333333, 0.333333] # 710nm + - [0.333333, 0.333333, 0.333333] # 715nm + - [0.333333, 0.333333, 0.333333] # 720nm + - [0.333333, 0.333333, 0.333333] # 725nm + - [0.333333, 0.333333, 0.333333] # 730nm + - [0.333333, 0.333333, 0.333333] # 735nm + - [0.333333, 0.333333, 0.333333] # 740nm + - [0.333333, 0.333333, 0.333333] # 745nm + - [0.333333, 0.333333, 0.333333] # 750nm + - [0.333333, 0.333333, 0.333333] # 755nm + - [0.333333, 0.333333, 0.333333] # 760nm + - [0.333333, 0.333333, 0.333333] # 765nm + - [0.333333, 0.333333, 0.333333] # 770nm + - [0.333333, 0.333333, 0.333333] # 775nm + - [0.333333, 0.333333, 0.333333] # 780nm + +# Base plus fog. No orange mask on a black-and-white film. +base_density: [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] + +# The characteristic curve, parametric. +log_exposure_min: -3 +log_exposure_max: 4 +density_curves: + - [3.5129e-07, 3.5129e-07, 3.5129e-07] + - [4.2083e-07, 4.2083e-07, 4.2083e-07] + - [5.0412e-07, 5.0412e-07, 5.0412e-07] + - [6.039e-07, 6.039e-07, 6.039e-07] + - [7.2343e-07, 7.2343e-07, 7.2343e-07] + - [8.6662e-07, 8.6662e-07, 8.6662e-07] + - [1.0381e-06, 1.0381e-06, 1.0381e-06] + - [1.2436e-06, 1.2436e-06, 1.2436e-06] + - [1.4898e-06, 1.4898e-06, 1.4898e-06] + - [1.7846e-06, 1.7846e-06, 1.7846e-06] + - [2.1379e-06, 2.1379e-06, 2.1379e-06] + - [2.561e-06, 2.561e-06, 2.561e-06] + - [3.0679e-06, 3.0679e-06, 3.0679e-06] + - [3.6751e-06, 3.6751e-06, 3.6751e-06] + - [4.4025e-06, 4.4025e-06, 4.4025e-06] + - [5.2739e-06, 5.2739e-06, 5.2739e-06] + - [6.3177e-06, 6.3177e-06, 6.3177e-06] + - [7.5681e-06, 7.5681e-06, 7.5681e-06] + - [9.066e-06, 9.066e-06, 9.066e-06] + - [1.086e-05, 1.086e-05, 1.086e-05] + - [1.301e-05, 1.301e-05, 1.301e-05] + - [1.5585e-05, 1.5585e-05, 1.5585e-05] + - [1.8669e-05, 1.8669e-05, 1.8669e-05] + - [2.2364e-05, 2.2364e-05, 2.2364e-05] + - [2.6789e-05, 2.6789e-05, 2.6789e-05] + - [3.2091e-05, 3.2091e-05, 3.2091e-05] + - [3.8441e-05, 3.8441e-05, 3.8441e-05] + - [4.6048e-05, 4.6048e-05, 4.6048e-05] + - [5.516e-05, 5.516e-05, 5.516e-05] + - [6.6074e-05, 6.6074e-05, 6.6074e-05] + - [7.9146e-05, 7.9146e-05, 7.9146e-05] + - [9.4804e-05, 9.4804e-05, 9.4804e-05] + - [0.00011356, 0.00011356, 0.00011356] + - [0.00013602, 0.00013602, 0.00013602] + - [0.00016292, 0.00016292, 0.00016292] + - [0.00019513, 0.00019513, 0.00019513] + - [0.0002337, 0.0002337, 0.0002337] + - [0.00027989, 0.00027989, 0.00027989] + - [0.00033519, 0.00033519, 0.00033519] + - [0.00040139, 0.00040139, 0.00040139] + - [0.00048064, 0.00048064, 0.00048064] + - [0.00057548, 0.00057548, 0.00057548] + - [0.00068897, 0.00068897, 0.00068897] + - [0.00082475, 0.00082475, 0.00082475] + - [0.00098713, 0.00098713, 0.00098713] + - [0.0011813, 0.0011813, 0.0011813] + - [0.0014134, 0.0014134, 0.0014134] + - [0.0016906, 0.0016906, 0.0016906] + - [0.0020217, 0.0020217, 0.0020217] + - [0.0024167, 0.0024167, 0.0024167] + - [0.0028878, 0.0028878, 0.0028878] + - [0.0034491, 0.0034491, 0.0034491] + - [0.004117, 0.004117, 0.004117] + - [0.004911, 0.004911, 0.004911] + - [0.0058534, 0.0058534, 0.0058534] + - [0.0069701, 0.0069701, 0.0069701] + - [0.0082906, 0.0082906, 0.0082906] + - [0.0098485, 0.0098485, 0.0098485] + - [0.011681, 0.011681, 0.011681] + - [0.013831, 0.013831, 0.013831] + - [0.016344, 0.016344, 0.016344] + - [0.019268, 0.019268, 0.019268] + - [0.022655, 0.022655, 0.022655] + - [0.026559, 0.026559, 0.026559] + - [0.031032, 0.031032, 0.031032] + - [0.036126, 0.036126, 0.036126] + - [0.041886, 0.041886, 0.041886] + - [0.048352, 0.048352, 0.048352] + - [0.055556, 0.055556, 0.055556] + - [0.063518, 0.063518, 0.063518] + - [0.072247, 0.072247, 0.072247] + - [0.081739, 0.081739, 0.081739] + - [0.09198, 0.09198, 0.09198] + - [0.10294, 0.10294, 0.10294] + - [0.11459, 0.11459, 0.11459] + - [0.12687, 0.12687, 0.12687] + - [0.13975, 0.13975, 0.13975] + - [0.15317, 0.15317, 0.15317] + - [0.16707, 0.16707, 0.16707] + - [0.18141, 0.18141, 0.18141] + - [0.19613, 0.19613, 0.19613] + - [0.21119, 0.21119, 0.21119] + - [0.22653, 0.22653, 0.22653] + - [0.24214, 0.24214, 0.24214] + - [0.25796, 0.25796, 0.25796] + - [0.27396, 0.27396, 0.27396] + - [0.29013, 0.29013, 0.29013] + - [0.30643, 0.30643, 0.30643] + - [0.32284, 0.32284, 0.32284] + - [0.33935, 0.33935, 0.33935] + - [0.35595, 0.35595, 0.35595] + - [0.37261, 0.37261, 0.37261] + - [0.38933, 0.38933, 0.38933] + - [0.4061, 0.4061, 0.4061] + - [0.42291, 0.42291, 0.42291] + - [0.43975, 0.43975, 0.43975] + - [0.45663, 0.45663, 0.45663] + - [0.47352, 0.47352, 0.47352] + - [0.49044, 0.49044, 0.49044] + - [0.50737, 0.50737, 0.50737] + - [0.52432, 0.52432, 0.52432] + - [0.54128, 0.54128, 0.54128] + - [0.55825, 0.55825, 0.55825] + - [0.57523, 0.57523, 0.57523] + - [0.59222, 0.59222, 0.59222] + - [0.60921, 0.60921, 0.60921] + - [0.6262, 0.6262, 0.6262] + - [0.6432, 0.6432, 0.6432] + - [0.6602, 0.6602, 0.6602] + - [0.67721, 0.67721, 0.67721] + - [0.69422, 0.69422, 0.69422] + - [0.71123, 0.71123, 0.71123] + - [0.72824, 0.72824, 0.72824] + - [0.74525, 0.74525, 0.74525] + - [0.76226, 0.76226, 0.76226] + - [0.77928, 0.77928, 0.77928] + - [0.79629, 0.79629, 0.79629] + - [0.81331, 0.81331, 0.81331] + - [0.83033, 0.83033, 0.83033] + - [0.84734, 0.84734, 0.84734] + - [0.86436, 0.86436, 0.86436] + - [0.88138, 0.88138, 0.88138] + - [0.8984, 0.8984, 0.8984] + - [0.91542, 0.91542, 0.91542] + - [0.93244, 0.93244, 0.93244] + - [0.94945, 0.94945, 0.94945] + - [0.96647, 0.96647, 0.96647] + - [0.98349, 0.98349, 0.98349] + - [1.0005, 1.0005, 1.0005] + - [1.0175, 1.0175, 1.0175] + - [1.0345, 1.0345, 1.0345] + - [1.0516, 1.0516, 1.0516] + - [1.0686, 1.0686, 1.0686] + - [1.0856, 1.0856, 1.0856] + - [1.1026, 1.1026, 1.1026] + - [1.1196, 1.1196, 1.1196] + - [1.1367, 1.1367, 1.1367] + - [1.1537, 1.1537, 1.1537] + - [1.1707, 1.1707, 1.1707] + - [1.1877, 1.1877, 1.1877] + - [1.2047, 1.2047, 1.2047] + - [1.2218, 1.2218, 1.2218] + - [1.2388, 1.2388, 1.2388] + - [1.2558, 1.2558, 1.2558] + - [1.2728, 1.2728, 1.2728] + - [1.2898, 1.2898, 1.2898] + - [1.3069, 1.3069, 1.3069] + - [1.3239, 1.3239, 1.3239] + - [1.3409, 1.3409, 1.3409] + - [1.3579, 1.3579, 1.3579] + - [1.3749, 1.3749, 1.3749] + - [1.3919, 1.3919, 1.3919] + - [1.409, 1.409, 1.409] + - [1.426, 1.426, 1.426] + - [1.443, 1.443, 1.443] + - [1.46, 1.46, 1.46] + - [1.477, 1.477, 1.477] + - [1.494, 1.494, 1.494] + - [1.5111, 1.5111, 1.5111] + - [1.5281, 1.5281, 1.5281] + - [1.5451, 1.5451, 1.5451] + - [1.5621, 1.5621, 1.5621] + - [1.5791, 1.5791, 1.5791] + - [1.5961, 1.5961, 1.5961] + - [1.6131, 1.6131, 1.6131] + - [1.6301, 1.6301, 1.6301] + - [1.6471, 1.6471, 1.6471] + - [1.6642, 1.6642, 1.6642] + - [1.6812, 1.6812, 1.6812] + - [1.6982, 1.6982, 1.6982] + - [1.7151, 1.7151, 1.7151] + - [1.7321, 1.7321, 1.7321] + - [1.7491, 1.7491, 1.7491] + - [1.7661, 1.7661, 1.7661] + - [1.7831, 1.7831, 1.7831] + - [1.8001, 1.8001, 1.8001] + - [1.817, 1.817, 1.817] + - [1.834, 1.834, 1.834] + - [1.8509, 1.8509, 1.8509] + - [1.8679, 1.8679, 1.8679] + - [1.8848, 1.8848, 1.8848] + - [1.9017, 1.9017, 1.9017] + - [1.9186, 1.9186, 1.9186] + - [1.9354, 1.9354, 1.9354] + - [1.9523, 1.9523, 1.9523] + - [1.9691, 1.9691, 1.9691] + - [1.9859, 1.9859, 1.9859] + - [2.0027, 2.0027, 2.0027] + - [2.0194, 2.0194, 2.0194] + - [2.036, 2.036, 2.036] + - [2.0527, 2.0527, 2.0527] + - [2.0692, 2.0692, 2.0692] + - [2.0857, 2.0857, 2.0857] + - [2.1022, 2.1022, 2.1022] + - [2.1185, 2.1185, 2.1185] + - [2.1347, 2.1347, 2.1347] + - [2.1509, 2.1509, 2.1509] + - [2.1669, 2.1669, 2.1669] + - [2.1827, 2.1827, 2.1827] + - [2.1984, 2.1984, 2.1984] + - [2.2139, 2.2139, 2.2139] + - [2.2292, 2.2292, 2.2292] + - [2.2443, 2.2443, 2.2443] + - [2.2591, 2.2591, 2.2591] + - [2.2737, 2.2737, 2.2737] + - [2.2879, 2.2879, 2.2879] + - [2.3018, 2.3018, 2.3018] + - [2.3153, 2.3153, 2.3153] + - [2.3284, 2.3284, 2.3284] + - [2.3411, 2.3411, 2.3411] + - [2.3533, 2.3533, 2.3533] + - [2.365, 2.365, 2.365] + - [2.3761, 2.3761, 2.3761] + - [2.3867, 2.3867, 2.3867] + - [2.3968, 2.3968, 2.3968] + - [2.4063, 2.4063, 2.4063] + - [2.4151, 2.4151, 2.4151] + - [2.4234, 2.4234, 2.4234] + - [2.4311, 2.4311, 2.4311] + - [2.4382, 2.4382, 2.4382] + - [2.4447, 2.4447, 2.4447] + - [2.4507, 2.4507, 2.4507] + - [2.4561, 2.4561, 2.4561] + - [2.461, 2.461, 2.461] + - [2.4655, 2.4655, 2.4655] + - [2.4695, 2.4695, 2.4695] + - [2.4731, 2.4731, 2.4731] + - [2.4763, 2.4763, 2.4763] + - [2.4791, 2.4791, 2.4791] + - [2.4817, 2.4817, 2.4817] + - [2.4839, 2.4839, 2.4839] + - [2.4859, 2.4859, 2.4859] + - [2.4877, 2.4877, 2.4877] + - [2.4892, 2.4892, 2.4892] + - [2.4906, 2.4906, 2.4906] + - [2.4918, 2.4918, 2.4918] + - [2.4928, 2.4928, 2.4928] + - [2.4937, 2.4937, 2.4937] + - [2.4945, 2.4945, 2.4945] + - [2.4952, 2.4952, 2.4952] + - [2.4958, 2.4958, 2.4958] + - [2.4964, 2.4964, 2.4964] + - [2.4969, 2.4969, 2.4969] + - [2.4973, 2.4973, 2.4973] + - [2.4976, 2.4976, 2.4976] + - [2.4979, 2.4979, 2.4979] + - [2.4982, 2.4982, 2.4982] + - [2.4984, 2.4984, 2.4984] + - [2.4986, 2.4986, 2.4986] + - [2.4988, 2.4988, 2.4988] + - [2.499, 2.499, 2.499] + - [2.4991, 2.4991, 2.4991] + - [2.4992, 2.4992, 2.4992] + - [2.4993, 2.4993, 2.4993] + - [2.4994, 2.4994, 2.4994] + - [2.4995, 2.4995, 2.4995] diff --git a/core/dr-film/profiles/ilford_hp5_plus.yaml b/core/dr-film/profiles/ilford_hp5_plus.yaml new file mode 100644 index 0000000..7ba23c5 --- /dev/null +++ b/core/dr-film/profiles/ilford_hp5_plus.yaml @@ -0,0 +1,459 @@ +# Generated by tools/film-profiles/convert.py. +# +# *** CONSTRUCTED, NOT MEASURED. *** +# +# Ilford publish this film's spectral sensitivity and characteristic +# curve as graphs, and no granularity figure at all, so this profile is +# built rather than extracted. Its speed is the published ISO rating, +# and its contrast is ISO 6:1993's normal development (average gradient +# 0.62). Its spectral response is borrowed from Kodak Double-X, a +# *measured* panchromatic negative, shifted by the speed difference. +# Its granularity is an estimate, ordered against the other films here. +# +# So it renders as a film of this speed and contrast, not as a +# measurement of this emulsion. Replace it outright if anyone digitises +# the real curves. + +version: 'constructed-1' +stock: ilford_hp5_plus +name: 'Ilford HP5 Plus' +kind: negative # negative | positive +support: film # film | paper +stage: filming # filming | printing +monochrome: true +reference_illuminant: D55 +viewing_illuminant: D50 + +rms_granularity: [11, 11, 11] + +# log10 spectral sensitivity per layer, 380-780nm at 5nm. +log_sensitivity: + - [-9, -9, -9] # 380nm + - [-9, -9, -9] # 385nm + - [-9, -9, -9] # 390nm + - [-9, -9, -9] # 395nm + - [-9, -9, -9] # 400nm + - [-9, -9, -9] # 405nm + - [-9, -9, -9] # 410nm + - [-9, -9, -9] # 415nm + - [-9, -9, -9] # 420nm + - [-0.513098, -0.513098, -0.513098] # 425nm + - [-0.51284, -0.51284, -0.51284] # 430nm + - [-0.51284, -0.51284, -0.51284] # 435nm + - [-0.51319, -0.51319, -0.51319] # 440nm + - [-0.522893, -0.522893, -0.522893] # 445nm + - [-0.53562, -0.53562, -0.53562] # 450nm + - [-0.552412, -0.552412, -0.552412] # 455nm + - [-0.571665, -0.571665, -0.571665] # 460nm + - [-0.593122, -0.593122, -0.593122] # 465nm + - [-0.611553, -0.611553, -0.611553] # 470nm + - [-0.637438, -0.637438, -0.637438] # 475nm + - [-0.665217, -0.665217, -0.665217] # 480nm + - [-0.703161, -0.703161, -0.703161] # 485nm + - [-0.742909, -0.742909, -0.742909] # 490nm + - [-0.782594, -0.782594, -0.782594] # 495nm + - [-0.815861, -0.815861, -0.815861] # 500nm + - [-0.831143, -0.831143, -0.831143] # 505nm + - [-0.834309, -0.834309, -0.834309] # 510nm + - [-0.833599, -0.833599, -0.833599] # 515nm + - [-0.823829, -0.823829, -0.823829] # 520nm + - [-0.810809, -0.810809, -0.810809] # 525nm + - [-0.796036, -0.796036, -0.796036] # 530nm + - [-0.778081, -0.778081, -0.778081] # 535nm + - [-0.759864, -0.759864, -0.759864] # 540nm + - [-0.740987, -0.740987, -0.740987] # 545nm + - [-0.724425, -0.724425, -0.724425] # 550nm + - [-0.706653, -0.706653, -0.706653] # 555nm + - [-0.693404, -0.693404, -0.693404] # 560nm + - [-0.685993, -0.685993, -0.685993] # 565nm + - [-0.68111, -0.68111, -0.68111] # 570nm + - [-0.677547, -0.677547, -0.677547] # 575nm + - [-0.680358, -0.680358, -0.680358] # 580nm + - [-0.686794, -0.686794, -0.686794] # 585nm + - [-0.696308, -0.696308, -0.696308] # 590nm + - [-0.708955, -0.708955, -0.708955] # 595nm + - [-0.720822, -0.720822, -0.720822] # 600nm + - [-0.735995, -0.735995, -0.735995] # 605nm + - [-0.751102, -0.751102, -0.751102] # 610nm + - [-0.75613, -0.75613, -0.75613] # 615nm + - [-0.747716, -0.747716, -0.747716] # 620nm + - [-0.756689, -0.756689, -0.756689] # 625nm + - [-0.785834, -0.785834, -0.785834] # 630nm + - [-0.876194, -0.876194, -0.876194] # 635nm + - [-1.06561, -1.06561, -1.06561] # 640nm + - [-1.28125, -1.28125, -1.28125] # 645nm + - [-1.53687, -1.53687, -1.53687] # 650nm + - [-1.79873, -1.79873, -1.79873] # 655nm + - [-2.0666, -2.0666, -2.0666] # 660nm + - [-9, -9, -9] # 665nm + - [-9, -9, -9] # 670nm + - [-9, -9, -9] # 675nm + - [-9, -9, -9] # 680nm + - [-9, -9, -9] # 685nm + - [-9, -9, -9] # 690nm + - [-9, -9, -9] # 695nm + - [-9, -9, -9] # 700nm + - [-9, -9, -9] # 705nm + - [-9, -9, -9] # 710nm + - [-9, -9, -9] # 715nm + - [-9, -9, -9] # 720nm + - [-9, -9, -9] # 725nm + - [-9, -9, -9] # 730nm + - [-9, -9, -9] # 735nm + - [-9, -9, -9] # 740nm + - [-9, -9, -9] # 745nm + - [-9, -9, -9] # 750nm + - [-9, -9, -9] # 755nm + - [-9, -9, -9] # 760nm + - [-9, -9, -9] # 765nm + - [-9, -9, -9] # 770nm + - [-9, -9, -9] # 775nm + - [-9, -9, -9] # 780nm + +# Developed silver: neutral across the band. +dye_density: + - [0.333333, 0.333333, 0.333333] # 380nm + - [0.333333, 0.333333, 0.333333] # 385nm + - [0.333333, 0.333333, 0.333333] # 390nm + - [0.333333, 0.333333, 0.333333] # 395nm + - [0.333333, 0.333333, 0.333333] # 400nm + - [0.333333, 0.333333, 0.333333] # 405nm + - [0.333333, 0.333333, 0.333333] # 410nm + - [0.333333, 0.333333, 0.333333] # 415nm + - [0.333333, 0.333333, 0.333333] # 420nm + - [0.333333, 0.333333, 0.333333] # 425nm + - [0.333333, 0.333333, 0.333333] # 430nm + - [0.333333, 0.333333, 0.333333] # 435nm + - [0.333333, 0.333333, 0.333333] # 440nm + - [0.333333, 0.333333, 0.333333] # 445nm + - [0.333333, 0.333333, 0.333333] # 450nm + - [0.333333, 0.333333, 0.333333] # 455nm + - [0.333333, 0.333333, 0.333333] # 460nm + - [0.333333, 0.333333, 0.333333] # 465nm + - [0.333333, 0.333333, 0.333333] # 470nm + - [0.333333, 0.333333, 0.333333] # 475nm + - [0.333333, 0.333333, 0.333333] # 480nm + - [0.333333, 0.333333, 0.333333] # 485nm + - [0.333333, 0.333333, 0.333333] # 490nm + - [0.333333, 0.333333, 0.333333] # 495nm + - [0.333333, 0.333333, 0.333333] # 500nm + - [0.333333, 0.333333, 0.333333] # 505nm + - [0.333333, 0.333333, 0.333333] # 510nm + - [0.333333, 0.333333, 0.333333] # 515nm + - [0.333333, 0.333333, 0.333333] # 520nm + - [0.333333, 0.333333, 0.333333] # 525nm + - [0.333333, 0.333333, 0.333333] # 530nm + - [0.333333, 0.333333, 0.333333] # 535nm + - [0.333333, 0.333333, 0.333333] # 540nm + - [0.333333, 0.333333, 0.333333] # 545nm + - [0.333333, 0.333333, 0.333333] # 550nm + - [0.333333, 0.333333, 0.333333] # 555nm + - [0.333333, 0.333333, 0.333333] # 560nm + - [0.333333, 0.333333, 0.333333] # 565nm + - [0.333333, 0.333333, 0.333333] # 570nm + - [0.333333, 0.333333, 0.333333] # 575nm + - [0.333333, 0.333333, 0.333333] # 580nm + - [0.333333, 0.333333, 0.333333] # 585nm + - [0.333333, 0.333333, 0.333333] # 590nm + - [0.333333, 0.333333, 0.333333] # 595nm + - [0.333333, 0.333333, 0.333333] # 600nm + - [0.333333, 0.333333, 0.333333] # 605nm + - [0.333333, 0.333333, 0.333333] # 610nm + - [0.333333, 0.333333, 0.333333] # 615nm + - [0.333333, 0.333333, 0.333333] # 620nm + - [0.333333, 0.333333, 0.333333] # 625nm + - [0.333333, 0.333333, 0.333333] # 630nm + - [0.333333, 0.333333, 0.333333] # 635nm + - [0.333333, 0.333333, 0.333333] # 640nm + - [0.333333, 0.333333, 0.333333] # 645nm + - [0.333333, 0.333333, 0.333333] # 650nm + - [0.333333, 0.333333, 0.333333] # 655nm + - [0.333333, 0.333333, 0.333333] # 660nm + - [0.333333, 0.333333, 0.333333] # 665nm + - [0.333333, 0.333333, 0.333333] # 670nm + - [0.333333, 0.333333, 0.333333] # 675nm + - [0.333333, 0.333333, 0.333333] # 680nm + - [0.333333, 0.333333, 0.333333] # 685nm + - [0.333333, 0.333333, 0.333333] # 690nm + - [0.333333, 0.333333, 0.333333] # 695nm + - [0.333333, 0.333333, 0.333333] # 700nm + - [0.333333, 0.333333, 0.333333] # 705nm + - [0.333333, 0.333333, 0.333333] # 710nm + - [0.333333, 0.333333, 0.333333] # 715nm + - [0.333333, 0.333333, 0.333333] # 720nm + - [0.333333, 0.333333, 0.333333] # 725nm + - [0.333333, 0.333333, 0.333333] # 730nm + - [0.333333, 0.333333, 0.333333] # 735nm + - [0.333333, 0.333333, 0.333333] # 740nm + - [0.333333, 0.333333, 0.333333] # 745nm + - [0.333333, 0.333333, 0.333333] # 750nm + - [0.333333, 0.333333, 0.333333] # 755nm + - [0.333333, 0.333333, 0.333333] # 760nm + - [0.333333, 0.333333, 0.333333] # 765nm + - [0.333333, 0.333333, 0.333333] # 770nm + - [0.333333, 0.333333, 0.333333] # 775nm + - [0.333333, 0.333333, 0.333333] # 780nm + +# Base plus fog. No orange mask on a black-and-white film. +base_density: [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] + +# The characteristic curve, parametric. +log_exposure_min: -3 +log_exposure_max: 4 +density_curves: + - [3.5129e-07, 3.5129e-07, 3.5129e-07] + - [4.2083e-07, 4.2083e-07, 4.2083e-07] + - [5.0412e-07, 5.0412e-07, 5.0412e-07] + - [6.039e-07, 6.039e-07, 6.039e-07] + - [7.2343e-07, 7.2343e-07, 7.2343e-07] + - [8.6662e-07, 8.6662e-07, 8.6662e-07] + - [1.0381e-06, 1.0381e-06, 1.0381e-06] + - [1.2436e-06, 1.2436e-06, 1.2436e-06] + - [1.4898e-06, 1.4898e-06, 1.4898e-06] + - [1.7846e-06, 1.7846e-06, 1.7846e-06] + - [2.1379e-06, 2.1379e-06, 2.1379e-06] + - [2.561e-06, 2.561e-06, 2.561e-06] + - [3.0679e-06, 3.0679e-06, 3.0679e-06] + - [3.6751e-06, 3.6751e-06, 3.6751e-06] + - [4.4025e-06, 4.4025e-06, 4.4025e-06] + - [5.2739e-06, 5.2739e-06, 5.2739e-06] + - [6.3177e-06, 6.3177e-06, 6.3177e-06] + - [7.5681e-06, 7.5681e-06, 7.5681e-06] + - [9.066e-06, 9.066e-06, 9.066e-06] + - [1.086e-05, 1.086e-05, 1.086e-05] + - [1.301e-05, 1.301e-05, 1.301e-05] + - [1.5585e-05, 1.5585e-05, 1.5585e-05] + - [1.8669e-05, 1.8669e-05, 1.8669e-05] + - [2.2364e-05, 2.2364e-05, 2.2364e-05] + - [2.6789e-05, 2.6789e-05, 2.6789e-05] + - [3.2091e-05, 3.2091e-05, 3.2091e-05] + - [3.8441e-05, 3.8441e-05, 3.8441e-05] + - [4.6048e-05, 4.6048e-05, 4.6048e-05] + - [5.516e-05, 5.516e-05, 5.516e-05] + - [6.6074e-05, 6.6074e-05, 6.6074e-05] + - [7.9146e-05, 7.9146e-05, 7.9146e-05] + - [9.4804e-05, 9.4804e-05, 9.4804e-05] + - [0.00011356, 0.00011356, 0.00011356] + - [0.00013602, 0.00013602, 0.00013602] + - [0.00016292, 0.00016292, 0.00016292] + - [0.00019513, 0.00019513, 0.00019513] + - [0.0002337, 0.0002337, 0.0002337] + - [0.00027989, 0.00027989, 0.00027989] + - [0.00033519, 0.00033519, 0.00033519] + - [0.00040139, 0.00040139, 0.00040139] + - [0.00048064, 0.00048064, 0.00048064] + - [0.00057548, 0.00057548, 0.00057548] + - [0.00068897, 0.00068897, 0.00068897] + - [0.00082475, 0.00082475, 0.00082475] + - [0.00098713, 0.00098713, 0.00098713] + - [0.0011813, 0.0011813, 0.0011813] + - [0.0014134, 0.0014134, 0.0014134] + - [0.0016906, 0.0016906, 0.0016906] + - [0.0020217, 0.0020217, 0.0020217] + - [0.0024167, 0.0024167, 0.0024167] + - [0.0028878, 0.0028878, 0.0028878] + - [0.0034491, 0.0034491, 0.0034491] + - [0.004117, 0.004117, 0.004117] + - [0.004911, 0.004911, 0.004911] + - [0.0058534, 0.0058534, 0.0058534] + - [0.0069701, 0.0069701, 0.0069701] + - [0.0082906, 0.0082906, 0.0082906] + - [0.0098485, 0.0098485, 0.0098485] + - [0.011681, 0.011681, 0.011681] + - [0.013831, 0.013831, 0.013831] + - [0.016344, 0.016344, 0.016344] + - [0.019268, 0.019268, 0.019268] + - [0.022655, 0.022655, 0.022655] + - [0.026559, 0.026559, 0.026559] + - [0.031032, 0.031032, 0.031032] + - [0.036126, 0.036126, 0.036126] + - [0.041886, 0.041886, 0.041886] + - [0.048352, 0.048352, 0.048352] + - [0.055556, 0.055556, 0.055556] + - [0.063518, 0.063518, 0.063518] + - [0.072247, 0.072247, 0.072247] + - [0.081739, 0.081739, 0.081739] + - [0.09198, 0.09198, 0.09198] + - [0.10294, 0.10294, 0.10294] + - [0.11459, 0.11459, 0.11459] + - [0.12687, 0.12687, 0.12687] + - [0.13975, 0.13975, 0.13975] + - [0.15317, 0.15317, 0.15317] + - [0.16707, 0.16707, 0.16707] + - [0.18141, 0.18141, 0.18141] + - [0.19613, 0.19613, 0.19613] + - [0.21119, 0.21119, 0.21119] + - [0.22653, 0.22653, 0.22653] + - [0.24214, 0.24214, 0.24214] + - [0.25796, 0.25796, 0.25796] + - [0.27396, 0.27396, 0.27396] + - [0.29013, 0.29013, 0.29013] + - [0.30643, 0.30643, 0.30643] + - [0.32284, 0.32284, 0.32284] + - [0.33935, 0.33935, 0.33935] + - [0.35595, 0.35595, 0.35595] + - [0.37261, 0.37261, 0.37261] + - [0.38933, 0.38933, 0.38933] + - [0.4061, 0.4061, 0.4061] + - [0.42291, 0.42291, 0.42291] + - [0.43975, 0.43975, 0.43975] + - [0.45663, 0.45663, 0.45663] + - [0.47352, 0.47352, 0.47352] + - [0.49044, 0.49044, 0.49044] + - [0.50737, 0.50737, 0.50737] + - [0.52432, 0.52432, 0.52432] + - [0.54128, 0.54128, 0.54128] + - [0.55825, 0.55825, 0.55825] + - [0.57523, 0.57523, 0.57523] + - [0.59222, 0.59222, 0.59222] + - [0.60921, 0.60921, 0.60921] + - [0.6262, 0.6262, 0.6262] + - [0.6432, 0.6432, 0.6432] + - [0.6602, 0.6602, 0.6602] + - [0.67721, 0.67721, 0.67721] + - [0.69422, 0.69422, 0.69422] + - [0.71123, 0.71123, 0.71123] + - [0.72824, 0.72824, 0.72824] + - [0.74525, 0.74525, 0.74525] + - [0.76226, 0.76226, 0.76226] + - [0.77928, 0.77928, 0.77928] + - [0.79629, 0.79629, 0.79629] + - [0.81331, 0.81331, 0.81331] + - [0.83033, 0.83033, 0.83033] + - [0.84735, 0.84735, 0.84735] + - [0.86436, 0.86436, 0.86436] + - [0.88138, 0.88138, 0.88138] + - [0.8984, 0.8984, 0.8984] + - [0.91542, 0.91542, 0.91542] + - [0.93244, 0.93244, 0.93244] + - [0.94945, 0.94945, 0.94945] + - [0.96647, 0.96647, 0.96647] + - [0.98349, 0.98349, 0.98349] + - [1.0005, 1.0005, 1.0005] + - [1.0175, 1.0175, 1.0175] + - [1.0346, 1.0346, 1.0346] + - [1.0516, 1.0516, 1.0516] + - [1.0686, 1.0686, 1.0686] + - [1.0856, 1.0856, 1.0856] + - [1.1026, 1.1026, 1.1026] + - [1.1196, 1.1196, 1.1196] + - [1.1367, 1.1367, 1.1367] + - [1.1537, 1.1537, 1.1537] + - [1.1707, 1.1707, 1.1707] + - [1.1877, 1.1877, 1.1877] + - [1.2047, 1.2047, 1.2047] + - [1.2218, 1.2218, 1.2218] + - [1.2388, 1.2388, 1.2388] + - [1.2558, 1.2558, 1.2558] + - [1.2728, 1.2728, 1.2728] + - [1.2898, 1.2898, 1.2898] + - [1.3069, 1.3069, 1.3069] + - [1.3239, 1.3239, 1.3239] + - [1.3409, 1.3409, 1.3409] + - [1.3579, 1.3579, 1.3579] + - [1.3749, 1.3749, 1.3749] + - [1.392, 1.392, 1.392] + - [1.409, 1.409, 1.409] + - [1.426, 1.426, 1.426] + - [1.443, 1.443, 1.443] + - [1.46, 1.46, 1.46] + - [1.477, 1.477, 1.477] + - [1.4941, 1.4941, 1.4941] + - [1.5111, 1.5111, 1.5111] + - [1.5281, 1.5281, 1.5281] + - [1.5451, 1.5451, 1.5451] + - [1.5621, 1.5621, 1.5621] + - [1.5791, 1.5791, 1.5791] + - [1.5962, 1.5962, 1.5962] + - [1.6132, 1.6132, 1.6132] + - [1.6302, 1.6302, 1.6302] + - [1.6472, 1.6472, 1.6472] + - [1.6642, 1.6642, 1.6642] + - [1.6812, 1.6812, 1.6812] + - [1.6982, 1.6982, 1.6982] + - [1.7153, 1.7153, 1.7153] + - [1.7323, 1.7323, 1.7323] + - [1.7493, 1.7493, 1.7493] + - [1.7663, 1.7663, 1.7663] + - [1.7833, 1.7833, 1.7833] + - [1.8003, 1.8003, 1.8003] + - [1.8173, 1.8173, 1.8173] + - [1.8343, 1.8343, 1.8343] + - [1.8512, 1.8512, 1.8512] + - [1.8682, 1.8682, 1.8682] + - [1.8852, 1.8852, 1.8852] + - [1.9022, 1.9022, 1.9022] + - [1.9191, 1.9191, 1.9191] + - [1.9361, 1.9361, 1.9361] + - [1.953, 1.953, 1.953] + - [1.97, 1.97, 1.97] + - [1.9869, 1.9869, 1.9869] + - [2.0038, 2.0038, 2.0038] + - [2.0207, 2.0207, 2.0207] + - [2.0375, 2.0375, 2.0375] + - [2.0544, 2.0544, 2.0544] + - [2.0712, 2.0712, 2.0712] + - [2.088, 2.088, 2.088] + - [2.1047, 2.1047, 2.1047] + - [2.1214, 2.1214, 2.1214] + - [2.1381, 2.1381, 2.1381] + - [2.1547, 2.1547, 2.1547] + - [2.1713, 2.1713, 2.1713] + - [2.1878, 2.1878, 2.1878] + - [2.2042, 2.2042, 2.2042] + - [2.2205, 2.2205, 2.2205] + - [2.2367, 2.2367, 2.2367] + - [2.2529, 2.2529, 2.2529] + - [2.2688, 2.2688, 2.2688] + - [2.2847, 2.2847, 2.2847] + - [2.3003, 2.3003, 2.3003] + - [2.3158, 2.3158, 2.3158] + - [2.3311, 2.3311, 2.3311] + - [2.3462, 2.3462, 2.3462] + - [2.361, 2.361, 2.361] + - [2.3755, 2.3755, 2.3755] + - [2.3896, 2.3896, 2.3896] + - [2.4035, 2.4035, 2.4035] + - [2.417, 2.417, 2.417] + - [2.43, 2.43, 2.43] + - [2.4426, 2.4426, 2.4426] + - [2.4547, 2.4547, 2.4547] + - [2.4664, 2.4664, 2.4664] + - [2.4775, 2.4775, 2.4775] + - [2.488, 2.488, 2.488] + - [2.498, 2.498, 2.498] + - [2.5074, 2.5074, 2.5074] + - [2.5162, 2.5162, 2.5162] + - [2.5244, 2.5244, 2.5244] + - [2.532, 2.532, 2.532] + - [2.539, 2.539, 2.539] + - [2.5455, 2.5455, 2.5455] + - [2.5514, 2.5514, 2.5514] + - [2.5567, 2.5567, 2.5567] + - [2.5616, 2.5616, 2.5616] + - [2.566, 2.566, 2.566] + - [2.5699, 2.5699, 2.5699] + - [2.5735, 2.5735, 2.5735] + - [2.5766, 2.5766, 2.5766] + - [2.5795, 2.5795, 2.5795] + - [2.582, 2.582, 2.582] + - [2.5842, 2.5842, 2.5842] + - [2.5861, 2.5861, 2.5861] + - [2.5879, 2.5879, 2.5879] + - [2.5894, 2.5894, 2.5894] + - [2.5907, 2.5907, 2.5907] + - [2.5919, 2.5919, 2.5919] + - [2.5929, 2.5929, 2.5929] + - [2.5938, 2.5938, 2.5938] + - [2.5946, 2.5946, 2.5946] + - [2.5953, 2.5953, 2.5953] + - [2.5959, 2.5959, 2.5959] + - [2.5964, 2.5964, 2.5964] + - [2.5969, 2.5969, 2.5969] + - [2.5973, 2.5973, 2.5973] + - [2.5977, 2.5977, 2.5977] + - [2.598, 2.598, 2.598] + - [2.5982, 2.5982, 2.5982] + - [2.5985, 2.5985, 2.5985] + - [2.5987, 2.5987, 2.5987] + - [2.5988, 2.5988, 2.5988] diff --git a/core/dr-film/profiles/ilford_pan_f_plus.yaml b/core/dr-film/profiles/ilford_pan_f_plus.yaml new file mode 100644 index 0000000..ef9a178 --- /dev/null +++ b/core/dr-film/profiles/ilford_pan_f_plus.yaml @@ -0,0 +1,459 @@ +# Generated by tools/film-profiles/convert.py. +# +# *** CONSTRUCTED, NOT MEASURED. *** +# +# Ilford publish this film's spectral sensitivity and characteristic +# curve as graphs, and no granularity figure at all, so this profile is +# built rather than extracted. Its speed is the published ISO rating, +# and its contrast is ISO 6:1993's normal development (average gradient +# 0.62). Its spectral response is borrowed from Kodak Double-X, a +# *measured* panchromatic negative, shifted by the speed difference. +# Its granularity is an estimate, ordered against the other films here. +# +# So it renders as a film of this speed and contrast, not as a +# measurement of this emulsion. Replace it outright if anyone digitises +# the real curves. + +version: 'constructed-1' +stock: ilford_pan_f_plus +name: 'Ilford Pan F Plus' +kind: negative # negative | positive +support: film # film | paper +stage: filming # filming | printing +monochrome: true +reference_illuminant: D55 +viewing_illuminant: D50 + +rms_granularity: [5, 5, 5] + +# log10 spectral sensitivity per layer, 380-780nm at 5nm. +log_sensitivity: + - [-9, -9, -9] # 380nm + - [-9, -9, -9] # 385nm + - [-9, -9, -9] # 390nm + - [-9, -9, -9] # 395nm + - [-9, -9, -9] # 400nm + - [-9, -9, -9] # 405nm + - [-9, -9, -9] # 410nm + - [-9, -9, -9] # 415nm + - [-9, -9, -9] # 420nm + - [-1.41619, -1.41619, -1.41619] # 425nm + - [-1.41593, -1.41593, -1.41593] # 430nm + - [-1.41593, -1.41593, -1.41593] # 435nm + - [-1.41628, -1.41628, -1.41628] # 440nm + - [-1.42598, -1.42598, -1.42598] # 445nm + - [-1.43871, -1.43871, -1.43871] # 450nm + - [-1.4555, -1.4555, -1.4555] # 455nm + - [-1.47476, -1.47476, -1.47476] # 460nm + - [-1.49621, -1.49621, -1.49621] # 465nm + - [-1.51464, -1.51464, -1.51464] # 470nm + - [-1.54053, -1.54053, -1.54053] # 475nm + - [-1.56831, -1.56831, -1.56831] # 480nm + - [-1.60625, -1.60625, -1.60625] # 485nm + - [-1.646, -1.646, -1.646] # 490nm + - [-1.68568, -1.68568, -1.68568] # 495nm + - [-1.71895, -1.71895, -1.71895] # 500nm + - [-1.73423, -1.73423, -1.73423] # 505nm + - [-1.7374, -1.7374, -1.7374] # 510nm + - [-1.73669, -1.73669, -1.73669] # 515nm + - [-1.72692, -1.72692, -1.72692] # 520nm + - [-1.7139, -1.7139, -1.7139] # 525nm + - [-1.69913, -1.69913, -1.69913] # 530nm + - [-1.68117, -1.68117, -1.68117] # 535nm + - [-1.66295, -1.66295, -1.66295] # 540nm + - [-1.64408, -1.64408, -1.64408] # 545nm + - [-1.62751, -1.62751, -1.62751] # 550nm + - [-1.60974, -1.60974, -1.60974] # 555nm + - [-1.59649, -1.59649, -1.59649] # 560nm + - [-1.58908, -1.58908, -1.58908] # 565nm + - [-1.5842, -1.5842, -1.5842] # 570nm + - [-1.58064, -1.58064, -1.58064] # 575nm + - [-1.58345, -1.58345, -1.58345] # 580nm + - [-1.58988, -1.58988, -1.58988] # 585nm + - [-1.5994, -1.5994, -1.5994] # 590nm + - [-1.61204, -1.61204, -1.61204] # 595nm + - [-1.62391, -1.62391, -1.62391] # 600nm + - [-1.63908, -1.63908, -1.63908] # 605nm + - [-1.65419, -1.65419, -1.65419] # 610nm + - [-1.65922, -1.65922, -1.65922] # 615nm + - [-1.65081, -1.65081, -1.65081] # 620nm + - [-1.65978, -1.65978, -1.65978] # 625nm + - [-1.68892, -1.68892, -1.68892] # 630nm + - [-1.77928, -1.77928, -1.77928] # 635nm + - [-1.9687, -1.9687, -1.9687] # 640nm + - [-2.18434, -2.18434, -2.18434] # 645nm + - [-2.43996, -2.43996, -2.43996] # 650nm + - [-2.70182, -2.70182, -2.70182] # 655nm + - [-2.96969, -2.96969, -2.96969] # 660nm + - [-9, -9, -9] # 665nm + - [-9, -9, -9] # 670nm + - [-9, -9, -9] # 675nm + - [-9, -9, -9] # 680nm + - [-9, -9, -9] # 685nm + - [-9, -9, -9] # 690nm + - [-9, -9, -9] # 695nm + - [-9, -9, -9] # 700nm + - [-9, -9, -9] # 705nm + - [-9, -9, -9] # 710nm + - [-9, -9, -9] # 715nm + - [-9, -9, -9] # 720nm + - [-9, -9, -9] # 725nm + - [-9, -9, -9] # 730nm + - [-9, -9, -9] # 735nm + - [-9, -9, -9] # 740nm + - [-9, -9, -9] # 745nm + - [-9, -9, -9] # 750nm + - [-9, -9, -9] # 755nm + - [-9, -9, -9] # 760nm + - [-9, -9, -9] # 765nm + - [-9, -9, -9] # 770nm + - [-9, -9, -9] # 775nm + - [-9, -9, -9] # 780nm + +# Developed silver: neutral across the band. +dye_density: + - [0.333333, 0.333333, 0.333333] # 380nm + - [0.333333, 0.333333, 0.333333] # 385nm + - [0.333333, 0.333333, 0.333333] # 390nm + - [0.333333, 0.333333, 0.333333] # 395nm + - [0.333333, 0.333333, 0.333333] # 400nm + - [0.333333, 0.333333, 0.333333] # 405nm + - [0.333333, 0.333333, 0.333333] # 410nm + - [0.333333, 0.333333, 0.333333] # 415nm + - [0.333333, 0.333333, 0.333333] # 420nm + - [0.333333, 0.333333, 0.333333] # 425nm + - [0.333333, 0.333333, 0.333333] # 430nm + - [0.333333, 0.333333, 0.333333] # 435nm + - [0.333333, 0.333333, 0.333333] # 440nm + - [0.333333, 0.333333, 0.333333] # 445nm + - [0.333333, 0.333333, 0.333333] # 450nm + - [0.333333, 0.333333, 0.333333] # 455nm + - [0.333333, 0.333333, 0.333333] # 460nm + - [0.333333, 0.333333, 0.333333] # 465nm + - [0.333333, 0.333333, 0.333333] # 470nm + - [0.333333, 0.333333, 0.333333] # 475nm + - [0.333333, 0.333333, 0.333333] # 480nm + - [0.333333, 0.333333, 0.333333] # 485nm + - [0.333333, 0.333333, 0.333333] # 490nm + - [0.333333, 0.333333, 0.333333] # 495nm + - [0.333333, 0.333333, 0.333333] # 500nm + - [0.333333, 0.333333, 0.333333] # 505nm + - [0.333333, 0.333333, 0.333333] # 510nm + - [0.333333, 0.333333, 0.333333] # 515nm + - [0.333333, 0.333333, 0.333333] # 520nm + - [0.333333, 0.333333, 0.333333] # 525nm + - [0.333333, 0.333333, 0.333333] # 530nm + - [0.333333, 0.333333, 0.333333] # 535nm + - [0.333333, 0.333333, 0.333333] # 540nm + - [0.333333, 0.333333, 0.333333] # 545nm + - [0.333333, 0.333333, 0.333333] # 550nm + - [0.333333, 0.333333, 0.333333] # 555nm + - [0.333333, 0.333333, 0.333333] # 560nm + - [0.333333, 0.333333, 0.333333] # 565nm + - [0.333333, 0.333333, 0.333333] # 570nm + - [0.333333, 0.333333, 0.333333] # 575nm + - [0.333333, 0.333333, 0.333333] # 580nm + - [0.333333, 0.333333, 0.333333] # 585nm + - [0.333333, 0.333333, 0.333333] # 590nm + - [0.333333, 0.333333, 0.333333] # 595nm + - [0.333333, 0.333333, 0.333333] # 600nm + - [0.333333, 0.333333, 0.333333] # 605nm + - [0.333333, 0.333333, 0.333333] # 610nm + - [0.333333, 0.333333, 0.333333] # 615nm + - [0.333333, 0.333333, 0.333333] # 620nm + - [0.333333, 0.333333, 0.333333] # 625nm + - [0.333333, 0.333333, 0.333333] # 630nm + - [0.333333, 0.333333, 0.333333] # 635nm + - [0.333333, 0.333333, 0.333333] # 640nm + - [0.333333, 0.333333, 0.333333] # 645nm + - [0.333333, 0.333333, 0.333333] # 650nm + - [0.333333, 0.333333, 0.333333] # 655nm + - [0.333333, 0.333333, 0.333333] # 660nm + - [0.333333, 0.333333, 0.333333] # 665nm + - [0.333333, 0.333333, 0.333333] # 670nm + - [0.333333, 0.333333, 0.333333] # 675nm + - [0.333333, 0.333333, 0.333333] # 680nm + - [0.333333, 0.333333, 0.333333] # 685nm + - [0.333333, 0.333333, 0.333333] # 690nm + - [0.333333, 0.333333, 0.333333] # 695nm + - [0.333333, 0.333333, 0.333333] # 700nm + - [0.333333, 0.333333, 0.333333] # 705nm + - [0.333333, 0.333333, 0.333333] # 710nm + - [0.333333, 0.333333, 0.333333] # 715nm + - [0.333333, 0.333333, 0.333333] # 720nm + - [0.333333, 0.333333, 0.333333] # 725nm + - [0.333333, 0.333333, 0.333333] # 730nm + - [0.333333, 0.333333, 0.333333] # 735nm + - [0.333333, 0.333333, 0.333333] # 740nm + - [0.333333, 0.333333, 0.333333] # 745nm + - [0.333333, 0.333333, 0.333333] # 750nm + - [0.333333, 0.333333, 0.333333] # 755nm + - [0.333333, 0.333333, 0.333333] # 760nm + - [0.333333, 0.333333, 0.333333] # 765nm + - [0.333333, 0.333333, 0.333333] # 770nm + - [0.333333, 0.333333, 0.333333] # 775nm + - [0.333333, 0.333333, 0.333333] # 780nm + +# Base plus fog. No orange mask on a black-and-white film. +base_density: [0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1] + +# The characteristic curve, parametric. +log_exposure_min: -3 +log_exposure_max: 4 +density_curves: + - [3.5129e-07, 3.5129e-07, 3.5129e-07] + - [4.2083e-07, 4.2083e-07, 4.2083e-07] + - [5.0412e-07, 5.0412e-07, 5.0412e-07] + - [6.039e-07, 6.039e-07, 6.039e-07] + - [7.2343e-07, 7.2343e-07, 7.2343e-07] + - [8.6662e-07, 8.6662e-07, 8.6662e-07] + - [1.0381e-06, 1.0381e-06, 1.0381e-06] + - [1.2436e-06, 1.2436e-06, 1.2436e-06] + - [1.4898e-06, 1.4898e-06, 1.4898e-06] + - [1.7846e-06, 1.7846e-06, 1.7846e-06] + - [2.1379e-06, 2.1379e-06, 2.1379e-06] + - [2.561e-06, 2.561e-06, 2.561e-06] + - [3.0679e-06, 3.0679e-06, 3.0679e-06] + - [3.6751e-06, 3.6751e-06, 3.6751e-06] + - [4.4025e-06, 4.4025e-06, 4.4025e-06] + - [5.2739e-06, 5.2739e-06, 5.2739e-06] + - [6.3177e-06, 6.3177e-06, 6.3177e-06] + - [7.5681e-06, 7.5681e-06, 7.5681e-06] + - [9.066e-06, 9.066e-06, 9.066e-06] + - [1.086e-05, 1.086e-05, 1.086e-05] + - [1.301e-05, 1.301e-05, 1.301e-05] + - [1.5585e-05, 1.5585e-05, 1.5585e-05] + - [1.8669e-05, 1.8669e-05, 1.8669e-05] + - [2.2364e-05, 2.2364e-05, 2.2364e-05] + - [2.6789e-05, 2.6789e-05, 2.6789e-05] + - [3.2091e-05, 3.2091e-05, 3.2091e-05] + - [3.8441e-05, 3.8441e-05, 3.8441e-05] + - [4.6048e-05, 4.6048e-05, 4.6048e-05] + - [5.516e-05, 5.516e-05, 5.516e-05] + - [6.6074e-05, 6.6074e-05, 6.6074e-05] + - [7.9146e-05, 7.9146e-05, 7.9146e-05] + - [9.4804e-05, 9.4804e-05, 9.4804e-05] + - [0.00011356, 0.00011356, 0.00011356] + - [0.00013602, 0.00013602, 0.00013602] + - [0.00016292, 0.00016292, 0.00016292] + - [0.00019513, 0.00019513, 0.00019513] + - [0.0002337, 0.0002337, 0.0002337] + - [0.00027989, 0.00027989, 0.00027989] + - [0.00033519, 0.00033519, 0.00033519] + - [0.00040139, 0.00040139, 0.00040139] + - [0.00048064, 0.00048064, 0.00048064] + - [0.00057548, 0.00057548, 0.00057548] + - [0.00068897, 0.00068897, 0.00068897] + - [0.00082475, 0.00082475, 0.00082475] + - [0.00098713, 0.00098713, 0.00098713] + - [0.0011813, 0.0011813, 0.0011813] + - [0.0014134, 0.0014134, 0.0014134] + - [0.0016906, 0.0016906, 0.0016906] + - [0.0020217, 0.0020217, 0.0020217] + - [0.0024167, 0.0024167, 0.0024167] + - [0.0028878, 0.0028878, 0.0028878] + - [0.0034491, 0.0034491, 0.0034491] + - [0.004117, 0.004117, 0.004117] + - [0.004911, 0.004911, 0.004911] + - [0.0058534, 0.0058534, 0.0058534] + - [0.0069701, 0.0069701, 0.0069701] + - [0.0082906, 0.0082906, 0.0082906] + - [0.0098485, 0.0098485, 0.0098485] + - [0.011681, 0.011681, 0.011681] + - [0.013831, 0.013831, 0.013831] + - [0.016344, 0.016344, 0.016344] + - [0.019268, 0.019268, 0.019268] + - [0.022655, 0.022655, 0.022655] + - [0.026559, 0.026559, 0.026559] + - [0.031032, 0.031032, 0.031032] + - [0.036126, 0.036126, 0.036126] + - [0.041886, 0.041886, 0.041886] + - [0.048352, 0.048352, 0.048352] + - [0.055556, 0.055556, 0.055556] + - [0.063518, 0.063518, 0.063518] + - [0.072247, 0.072247, 0.072247] + - [0.081739, 0.081739, 0.081739] + - [0.09198, 0.09198, 0.09198] + - [0.10294, 0.10294, 0.10294] + - [0.11459, 0.11459, 0.11459] + - [0.12687, 0.12687, 0.12687] + - [0.13975, 0.13975, 0.13975] + - [0.15317, 0.15317, 0.15317] + - [0.16707, 0.16707, 0.16707] + - [0.18141, 0.18141, 0.18141] + - [0.19613, 0.19613, 0.19613] + - [0.21119, 0.21119, 0.21119] + - [0.22653, 0.22653, 0.22653] + - [0.24214, 0.24214, 0.24214] + - [0.25796, 0.25796, 0.25796] + - [0.27396, 0.27396, 0.27396] + - [0.29013, 0.29013, 0.29013] + - [0.30643, 0.30643, 0.30643] + - [0.32284, 0.32284, 0.32284] + - [0.33935, 0.33935, 0.33935] + - [0.35595, 0.35595, 0.35595] + - [0.37261, 0.37261, 0.37261] + - [0.38933, 0.38933, 0.38933] + - [0.4061, 0.4061, 0.4061] + - [0.42291, 0.42291, 0.42291] + - [0.43975, 0.43975, 0.43975] + - [0.45663, 0.45663, 0.45663] + - [0.47352, 0.47352, 0.47352] + - [0.49044, 0.49044, 0.49044] + - [0.50737, 0.50737, 0.50737] + - [0.52432, 0.52432, 0.52432] + - [0.54128, 0.54128, 0.54128] + - [0.55825, 0.55825, 0.55825] + - [0.57523, 0.57523, 0.57523] + - [0.59222, 0.59222, 0.59222] + - [0.60921, 0.60921, 0.60921] + - [0.6262, 0.6262, 0.6262] + - [0.6432, 0.6432, 0.6432] + - [0.6602, 0.6602, 0.6602] + - [0.67721, 0.67721, 0.67721] + - [0.69422, 0.69422, 0.69422] + - [0.71123, 0.71123, 0.71123] + - [0.72824, 0.72824, 0.72824] + - [0.74525, 0.74525, 0.74525] + - [0.76226, 0.76226, 0.76226] + - [0.77928, 0.77928, 0.77928] + - [0.79629, 0.79629, 0.79629] + - [0.81331, 0.81331, 0.81331] + - [0.83033, 0.83033, 0.83033] + - [0.84734, 0.84734, 0.84734] + - [0.86436, 0.86436, 0.86436] + - [0.88138, 0.88138, 0.88138] + - [0.8984, 0.8984, 0.8984] + - [0.91542, 0.91542, 0.91542] + - [0.93244, 0.93244, 0.93244] + - [0.94945, 0.94945, 0.94945] + - [0.96647, 0.96647, 0.96647] + - [0.98349, 0.98349, 0.98349] + - [1.0005, 1.0005, 1.0005] + - [1.0175, 1.0175, 1.0175] + - [1.0345, 1.0345, 1.0345] + - [1.0516, 1.0516, 1.0516] + - [1.0686, 1.0686, 1.0686] + - [1.0856, 1.0856, 1.0856] + - [1.1026, 1.1026, 1.1026] + - [1.1196, 1.1196, 1.1196] + - [1.1367, 1.1367, 1.1367] + - [1.1537, 1.1537, 1.1537] + - [1.1707, 1.1707, 1.1707] + - [1.1877, 1.1877, 1.1877] + - [1.2047, 1.2047, 1.2047] + - [1.2218, 1.2218, 1.2218] + - [1.2388, 1.2388, 1.2388] + - [1.2558, 1.2558, 1.2558] + - [1.2728, 1.2728, 1.2728] + - [1.2898, 1.2898, 1.2898] + - [1.3069, 1.3069, 1.3069] + - [1.3239, 1.3239, 1.3239] + - [1.3409, 1.3409, 1.3409] + - [1.3579, 1.3579, 1.3579] + - [1.3749, 1.3749, 1.3749] + - [1.3919, 1.3919, 1.3919] + - [1.409, 1.409, 1.409] + - [1.426, 1.426, 1.426] + - [1.443, 1.443, 1.443] + - [1.46, 1.46, 1.46] + - [1.477, 1.477, 1.477] + - [1.494, 1.494, 1.494] + - [1.5111, 1.5111, 1.5111] + - [1.5281, 1.5281, 1.5281] + - [1.5451, 1.5451, 1.5451] + - [1.5621, 1.5621, 1.5621] + - [1.5791, 1.5791, 1.5791] + - [1.5961, 1.5961, 1.5961] + - [1.6131, 1.6131, 1.6131] + - [1.6301, 1.6301, 1.6301] + - [1.6471, 1.6471, 1.6471] + - [1.6642, 1.6642, 1.6642] + - [1.6812, 1.6812, 1.6812] + - [1.6982, 1.6982, 1.6982] + - [1.7151, 1.7151, 1.7151] + - [1.7321, 1.7321, 1.7321] + - [1.7491, 1.7491, 1.7491] + - [1.7661, 1.7661, 1.7661] + - [1.7831, 1.7831, 1.7831] + - [1.8001, 1.8001, 1.8001] + - [1.817, 1.817, 1.817] + - [1.834, 1.834, 1.834] + - [1.8509, 1.8509, 1.8509] + - [1.8679, 1.8679, 1.8679] + - [1.8848, 1.8848, 1.8848] + - [1.9017, 1.9017, 1.9017] + - [1.9186, 1.9186, 1.9186] + - [1.9354, 1.9354, 1.9354] + - [1.9523, 1.9523, 1.9523] + - [1.9691, 1.9691, 1.9691] + - [1.9859, 1.9859, 1.9859] + - [2.0027, 2.0027, 2.0027] + - [2.0194, 2.0194, 2.0194] + - [2.036, 2.036, 2.036] + - [2.0527, 2.0527, 2.0527] + - [2.0692, 2.0692, 2.0692] + - [2.0857, 2.0857, 2.0857] + - [2.1022, 2.1022, 2.1022] + - [2.1185, 2.1185, 2.1185] + - [2.1347, 2.1347, 2.1347] + - [2.1509, 2.1509, 2.1509] + - [2.1669, 2.1669, 2.1669] + - [2.1827, 2.1827, 2.1827] + - [2.1984, 2.1984, 2.1984] + - [2.2139, 2.2139, 2.2139] + - [2.2292, 2.2292, 2.2292] + - [2.2443, 2.2443, 2.2443] + - [2.2591, 2.2591, 2.2591] + - [2.2737, 2.2737, 2.2737] + - [2.2879, 2.2879, 2.2879] + - [2.3018, 2.3018, 2.3018] + - [2.3153, 2.3153, 2.3153] + - [2.3284, 2.3284, 2.3284] + - [2.3411, 2.3411, 2.3411] + - [2.3533, 2.3533, 2.3533] + - [2.365, 2.365, 2.365] + - [2.3761, 2.3761, 2.3761] + - [2.3867, 2.3867, 2.3867] + - [2.3968, 2.3968, 2.3968] + - [2.4063, 2.4063, 2.4063] + - [2.4151, 2.4151, 2.4151] + - [2.4234, 2.4234, 2.4234] + - [2.4311, 2.4311, 2.4311] + - [2.4382, 2.4382, 2.4382] + - [2.4447, 2.4447, 2.4447] + - [2.4507, 2.4507, 2.4507] + - [2.4561, 2.4561, 2.4561] + - [2.461, 2.461, 2.461] + - [2.4655, 2.4655, 2.4655] + - [2.4695, 2.4695, 2.4695] + - [2.4731, 2.4731, 2.4731] + - [2.4763, 2.4763, 2.4763] + - [2.4791, 2.4791, 2.4791] + - [2.4817, 2.4817, 2.4817] + - [2.4839, 2.4839, 2.4839] + - [2.4859, 2.4859, 2.4859] + - [2.4877, 2.4877, 2.4877] + - [2.4892, 2.4892, 2.4892] + - [2.4906, 2.4906, 2.4906] + - [2.4918, 2.4918, 2.4918] + - [2.4928, 2.4928, 2.4928] + - [2.4937, 2.4937, 2.4937] + - [2.4945, 2.4945, 2.4945] + - [2.4952, 2.4952, 2.4952] + - [2.4958, 2.4958, 2.4958] + - [2.4964, 2.4964, 2.4964] + - [2.4969, 2.4969, 2.4969] + - [2.4973, 2.4973, 2.4973] + - [2.4976, 2.4976, 2.4976] + - [2.4979, 2.4979, 2.4979] + - [2.4982, 2.4982, 2.4982] + - [2.4984, 2.4984, 2.4984] + - [2.4986, 2.4986, 2.4986] + - [2.4988, 2.4988, 2.4988] + - [2.499, 2.499, 2.499] + - [2.4991, 2.4991, 2.4991] + - [2.4992, 2.4992, 2.4992] + - [2.4993, 2.4993, 2.4993] + - [2.4994, 2.4994, 2.4994] + - [2.4995, 2.4995, 2.4995] diff --git a/core/dr-film/src/built_in.rs b/core/dr-film/src/built_in.rs index d515f2d..b7e00e5 100644 --- a/core/dr-film/src/built_in.rs +++ b/core/dr-film/src/built_in.rs @@ -118,4 +118,24 @@ pub static BUILT_IN: &[(&str, &str)] = &[ include_str!("../profiles/kodak_doublex.yaml"), ), ("kodak_2302", include_str!("../profiles/kodak_2302.yaml")), + ( + "ilford_pan_f_plus", + include_str!("../profiles/ilford_pan_f_plus.yaml"), + ), + ( + "ilford_delta_100", + include_str!("../profiles/ilford_delta_100.yaml"), + ), + ( + "ilford_fp4_plus", + include_str!("../profiles/ilford_fp4_plus.yaml"), + ), + ( + "ilford_delta_400", + include_str!("../profiles/ilford_delta_400.yaml"), + ), + ( + "ilford_hp5_plus", + include_str!("../profiles/ilford_hp5_plus.yaml"), + ), ]; diff --git a/core/dr-film/src/grain.rs b/core/dr-film/src/grain.rs index ead2b63..be33b64 100644 --- a/core/dr-film/src/grain.rs +++ b/core/dr-film/src/grain.rs @@ -34,15 +34,35 @@ //! //! # Where crystal habit lives //! -//! In [`crate::profile::Profile::rms_granularity`], the number every datasheet -//! publishes. It is a measurement of exactly the thing that differs between a -//! traditional cubic emulsion and a tabular one: for the same speed, tabular -//! crystals present more area per unit of silver, so fewer, flatter grains -//! cover the frame and the film reads finer. Ilford Delta 100 is quoted around -//! 9 where HP5 Plus is around 12, and that gap *is* the crystal habit. +//! In [`crate::profile::Profile::rms_granularity`]. It measures exactly the +//! thing that differs between a traditional cubic emulsion and a tabular one: +//! for the same speed, tabular crystals present more area per unit of silver, +//! so fewer, flatter grains cover the frame and the film reads finer. A +//! stock's grain character therefore needs no new model and no new code — it +//! is one number in the profile. //! -//! So a stock's grain character needs no new model and no new code — it is one -//! number in the profile, taken from the manufacturer's own measurement. +//! # Getting that number is the hard part +//! +//! It is **not** simply "what the datasheet says", and assuming so is a trap +//! worth naming: +//! +//! - **Kodak colour negatives publish Print Grain Index, not RMS.** PGI is a +//! perceptual scale from viewer surveys — 25 is roughly the threshold of +//! visibility and four units is one just-noticeable difference — and Kodak +//! state it *cannot* be compared to RMS granularity. There is no published +//! conversion, so a PGI figure cannot be dropped into this field. +//! - **Ilford publish no granularity figure at all.** Their technical sheets +//! describe grain only in words ("fine grain", "finest grain"); the word +//! granularity does not appear in them. Spectral sensitivity and the +//! characteristic curves are there, but as graphs. +//! - RMS granularity proper is published mostly for black-and-white, reversal +//! and motion-picture stocks. +//! +//! So the shipped defaults are plausible rather than measured, and every stock +//! currently carries the same ones — which means **grain does not yet tell one +//! stock from another**. Fixing that is per-stock data, not code, and for the +//! films whose figures are unpublished it needs a defensible estimate rather +//! than a number copied off a page. use crate::profile::Profile; diff --git a/core/dr-film/src/lib.rs b/core/dr-film/src/lib.rs index 25335ab..d23be23 100644 --- a/core/dr-film/src/lib.rs +++ b/core/dr-film/src/lib.rs @@ -126,6 +126,30 @@ mod tests { "{} rendered mid-grey as {mid:?}", film.stock ); + + // And that it is a *photograph*. Finiteness alone passes for a + // stock that renders every frame black or blown, which is the way + // a constructed profile fails: the curve parses, bakes, and sits + // entirely off one end of its own exposure range. + let luma = (mid[0] + mid[1] + mid[2]) / 3.0; + assert!( + (0.02..0.75).contains(&luma), + "{} put mid-grey at {luma:.3}, which is not a rendering of it", + film.stock + ); + + // Monotone, too. A stock that darkens as it is exposed is either + // inverted or broken, and either way is not what the picker + // offered. + let shadow = baked.apply([0.02; 3]); + let highlight = baked.apply([0.8; 3]); + let rising = highlight[1] > shadow[1]; + let inverted = film.kind == Kind::Negative && default_print(film).is_none(); + assert_eq!( + rising, !inverted, + "{}: shadow {:.3} highlight {:.3} runs the wrong way", + film.stock, shadow[1], highlight[1] + ); } } diff --git a/tools/film-profiles/convert.py b/tools/film-profiles/convert.py index d34e2e9..efc2b2a 100644 --- a/tools/film-profiles/convert.py +++ b/tools/film-profiles/convert.py @@ -83,6 +83,56 @@ DEV_BRANCH = {"kodak_trix", "kodak_doublex", "kodak_2302"} # file and is dropped here only because nothing can yet ask for it. DEVELOPMENT_INDEX = 2 +# --------------------------------------------------------------------------- +# Constructed black-and-white stocks. +# --------------------------------------------------------------------------- +# +# **These are not measurements, and the profiles say so.** Ilford publish +# spectral sensitivity and characteristic curves as *graphs*, and no +# granularity figure at all -- the word does not appear in their technical +# information. Nobody has digitised them, so a profile has to be constructed. +# +# What each part actually rests on: +# +# speed Published and exact. ISO 400/27 for HP5 Plus is a fact. +# contrast ISO 6:1993 defines normal development as an average gradient +# of 0.62 over 1.30 log-E. A standard, not a guess. +# spectral *Borrowed* from Kodak Double-X, which is a measured +# panchromatic negative -- peak near 430nm, the dip at 500, the +# cutoff at 660 -- shifted by the speed difference. Conventional +# panchromatic sensitisation is much alike across black-and-white +# stocks, and this is far better founded than reading pixels off +# a printed curve. +# silver Neutral, which is not an approximation: developed silver +# absorbs flat across the visible band, and Double-X's measured +# density is flat 1.0. +# granularity **Estimated.** Ordered by each film's known relative grain and +# nothing more. +# +# So these render as an Ilford-*shaped* stock -- right speed, right contrast, +# right relative grain -- and not as a measurement of one. Anyone who digitises +# the real curves should replace them outright. +PARAMETRIC_BW = [ + # stock, display name, ISO, Dmax, granularity estimate + ("ilford_pan_f_plus", "Ilford Pan F Plus", 50, 2.5, 5.0), + ("ilford_delta_100", "Ilford Delta 100", 100, 2.4, 6.0), + ("ilford_fp4_plus", "Ilford FP4 Plus", 125, 2.5, 7.0), + ("ilford_delta_400", "Ilford Delta 400", 400, 2.4, 9.0), + ("ilford_hp5_plus", "Ilford HP5 Plus", 400, 2.6, 11.0), +] + +# The stock whose measured panchromatic response the constructed ones borrow. +BW_REFERENCE = "kodak_doublex" +BW_REFERENCE_ISO = 250 + +# ISO 6:1993's normal-development contrast. +BW_GAMMA = 0.62 + +# Where mid-grey sits above the speed point, in log exposure. At gamma 0.62 +# this puts an 18% card near 0.68 above fog, which is what a correctly exposed +# negative reads. +BW_SPEED_POINT = -1.1 + CACHE = pathlib.Path(__file__).parent / "upstream" @@ -239,6 +289,100 @@ def convert(stock): return "\n".join(out) + "\n" +def build_parametric_bw(stock, name, iso, density_max, granularity): + """A constructed black-and-white profile. See PARAMETRIC_BW for its basis.""" + import math + + ref = json.loads((CACHE / f"{BW_REFERENCE}.json").read_text())["data"] + wavelengths = ref["wavelengths"] + n = len(wavelengths) + + # The measured panchromatic response, moved by the speed difference. A + # faster film is more sensitive at every wavelength, which is a shift of + # the log curve rather than a change in its shape. + speed_shift = math.log10(iso / BW_REFERENCE_ISO) + sensitivity = [] + for row_in in ref["log_sensitivity"]: + v = row_in[0] + sensitivity.append(None if v is None or v != v else v + speed_shift) + + # Developed silver, which absorbs neutrally. A third each, because the + # renderer sums the three layers -- the same reason `split_dye` exists. + dye = [[1.0 / 3.0] * 3 for _ in range(n)] + base = [0.1] * n + + # A straight line of slope `gamma`, softened into a toe below and a + # shoulder above. + log_exposure = [-3.0 + 7.0 * i / 255.0 for i in range(256)] + toe, shoulder = 0.35, 0.45 + curves = [] + for x in log_exposure: + d = ( + BW_GAMMA * toe * math.log10(1 + 10 ** ((x - BW_SPEED_POINT) / toe)) + - BW_GAMMA + * shoulder + * math.log10( + 1 + 10 ** ((x - BW_SPEED_POINT - density_max / BW_GAMMA) / shoulder) + ) + ) + curves.append([d] * 3) + + g = num(granularity) + out = [ + "# Generated by tools/film-profiles/convert.py.", + "#", + "# *** CONSTRUCTED, NOT MEASURED. ***", + "#", + "# Ilford publish this film's spectral sensitivity and characteristic", + "# curve as graphs, and no granularity figure at all, so this profile is", + "# built rather than extracted. Its speed is the published ISO rating,", + "# and its contrast is ISO 6:1993's normal development (average gradient", + "# 0.62). Its spectral response is borrowed from Kodak Double-X, a", + "# *measured* panchromatic negative, shifted by the speed difference.", + "# Its granularity is an estimate, ordered against the other films here.", + "#", + "# So it renders as a film of this speed and contrast, not as a", + "# measurement of this emulsion. Replace it outright if anyone digitises", + "# the real curves.", + "", + "version: 'constructed-1'", + "stock: " + stock, + "name: '" + name + "'", + "kind: negative # negative | positive", + "support: film # film | paper", + "stage: filming # filming | printing", + "monochrome: true", + "reference_illuminant: D55", + "viewing_illuminant: D50", + "", + "rms_granularity: [" + g + ", " + g + ", " + g + "]", + "", + "# log10 spectral sensitivity per layer, 380-780nm at 5nm.", + "log_sensitivity:", + ] + for wl, v in zip(wavelengths, sensitivity): + cell = "-9" if v is None else num(v) + out.append(" - [" + cell + ", " + cell + ", " + cell + "] # %.0fnm" % wl) + + out += ["", "# Developed silver: neutral across the band.", "dye_density:"] + for wl, triple in zip(wavelengths, dye): + out.append(" - " + row(triple) + " # %.0fnm" % wl) + + out += [ + "", + "# Base plus fog. No orange mask on a black-and-white film.", + "base_density: " + row(base), + "", + "# The characteristic curve, parametric.", + "log_exposure_min: " + num(log_exposure[0]), + "log_exposure_max: " + num(log_exposure[-1]), + "density_curves:", + ] + for triple in curves: + out.append(" - " + row(triple, 5)) + return "\n".join(out) + "\n" + + TABLE_HEADER = '''//! Generated by tools/film-profiles/convert.py. Do not edit. //! //! The fixed colour science: the observer, the illuminants and the spectral @@ -345,6 +489,11 @@ def main(): dest.write_text(convert(stock)) print(f"{dest.relative_to(ROOT)} {dest.stat().st_size / 1024:.1f} kB") + for stock, name, iso, dmax, gran in PARAMETRIC_BW: + dest = PROFILE_DIR / (stock + ".yaml") + dest.write_text(build_parametric_bw(stock, name, iso, dmax, gran)) + print(f"{dest.relative_to(ROOT)} {dest.stat().st_size / 1024:.1f} kB (constructed)") + lic = CACHE / "SPEKTRAFILM_LICENSE.txt" if lic.exists(): (PROFILE_DIR / "LICENSE-PROFILES.txt").write_text(lic.read_text()) @@ -376,7 +525,7 @@ def emit_registry(dest): "/// Each stock's id and its YAML, in the order the converter ran.", "pub static BUILT_IN: &[(&str, &str)] = &[", ] - for stock in STOCKS: + for stock in STOCKS + [p[0] for p in PARAMETRIC_BW]: lines.append(f' ("{stock}", include_str!("../profiles/{stock}.yaml")),') lines.append("];") dest.write_text("\n".join(lines) + "\n")