Adds 8 new nodes across four feature clusters. 38 -> 46 nodes.
Spectral Film Stock (1 node, 35 presets)
Pre-baked .cube LUTs from full negative->print spectral simulation via vendored JanLohse/spectral_film_lut (MIT). Each preset encodes scene light -> spectral sensitivity -> log exposure -> H&D density -> dye SDs -> printer light -> print density -> sRGB.
Presets cover: C41 Still (Portra 160/400/800, Ektar 100, Gold 200, Ultramax 500, Fuji Pro 160C/160S/400H, Superia Reala / X-Tra 400, Natura 1600, Vericolor III on Endura / Supra / Portra Endura / Fuji CA papers), Cinema (Vision3 50D/200T/250D/500T on 2383 / 2393), Reversal (Velvia 50, Provia 100F on Ilfochrome; Ektachrome 100D, Kodachrome 64 on Radiance III), Instant (FP-100C, Instax on Fujiflex), Niche (Aerocolor variants, Agfa Vista 100), B&W (Tri-X, Kodak 5222 on Polymax grades + 2302 Dev 5).
CLI baker at tools/bake_spectral_luts.py produces the library offline (13 s for all 35 at LUT_3D_SIZE=33). Edit PRESETS + rebake to extend.
Scopes (2 nodes)
- Histogram -- per-channel R/G/B / Luma / single-channel, graticule, clip warnings, log-scale
- Vectorscope -- Rec.709 YCbCr density plot, 75% + 100% saturation rings, six primary target boxes (R/Yl/G/Cy/B/Mg), 123 degree skin-tone line (I-line)
Pure numpy + PIL. No new deps. Under AKURATE/Darkroom/Scopes.
Color Match (Reference) (1 node)
Four LAB-space reference-matching methods in one dropdown:
- reinhard -- mean/std transfer, safe default (no new deps)
- wasserstein -- sliced optimal transport, handles multi-modal distributions (no new deps)
- forgy -- K-means palette matching with Gaussian-weighted soft assignment (sklearn)
- kantorovich -- closed-form Gaussian linear transport (requires POT)
Algorithms adapted from rajawski/gradia (MIT).
CMYK Print Workflow (4 nodes)
- CMYK Soft-Proof -- sRGB -> CMYK -> sRGB preview; image stays RGB
- CMYK Gamut Warning -- overlay pixels that cannot reproduce on chosen print condition
- CMYK TAC Check -- flag pixels over TAC limit (330/300/300/240 for coated/uncoated/web/newsprint presets + custom)
- CMYK Export TIFF -- 4-channel CMYK TIFF with ICC embedded, LZW-compressed, DPI metadata
20 ICC profiles auto-discovered from the OS colour-profile store on Windows (FOGRA39, GRACoL 2006, SWOP v2, FOGRA29 uncoated, SNAP 2007 newsprint, etc.) -- zero bundling required. Drop additional .icc/.icm into data/icc_profiles/ as needed. Built on PIL.ImageCms / LittleCMS -- no new dependencies.
Optional dependencies
POT-- enables Kantorovich method on Color Matchcolour-science+numba-- only needed to rebake Spectral Film Stock LUTs
Consumers receive pre-baked LUTs through Registry / git clone and never run the baker.
Upgrade notes
No breaking changes. ClarityTextureDehaze and HSLSelective gained a preset combo at the end of the optional dict (preserves widget positions in saved v1.4.0 workflows).
Category tree at v1.5.0: Film (Spectral), Raw, Grading (Color Match), Lens, Pipeline, RAW, Scopes, Print.