From b4e2dc1de65a0624362a7e1a4bb59db9bee63db0 Mon Sep 17 00:00:00 2001 From: Tom Maiaroto Date: Sat, 15 Aug 2026 22:15:43 -0700 Subject: [PATCH] enrich all 24 presets with complete field mappings (noise_level, gamma_shift, edge_softening, spatial_resample, luminance_response) --- stochastic_noise.py | 124 +++++++++++++++++++++++++++++++- web/stochastic_noise_presets.js | 20 ++++++ 2 files changed, 142 insertions(+), 2 deletions(-) diff --git a/stochastic_noise.py b/stochastic_noise.py index 35e26d0..a7f689f 100644 --- a/stochastic_noise.py +++ b/stochastic_noise.py @@ -23,7 +23,12 @@ FILM_PRESETS = { "base_grain_size": 1.4, "base_jitter": 0.0015, "base_aberration": 0.0010, - "tone_warmth": 0.015, # subtle Portra warm tint + "tone_warmth": 0.015, + "noise_level": 0.025, + "gamma_shift": 0.98, + "edge_softening": 0.10, + "spatial_resample": 0.015, + "luminance_response": "Film (Midtone & Shadow)", }, "Kodak Ektachrome 100VS (Color Positive)": { "noise_type": "poisson", @@ -32,6 +37,11 @@ FILM_PRESETS = { "base_jitter": 0.0015, "base_aberration": 0.0012, "tone_warmth": 0.0, + "noise_level": 0.018, + "gamma_shift": 0.94, + "edge_softening": 0.08, + "spatial_resample": 0.012, + "luminance_response": "Film (Midtone & Shadow)", }, "Kodak Tri-X 400 (B&W Silver Halide)": { "noise_type": "laplacian", @@ -40,6 +50,11 @@ FILM_PRESETS = { "base_jitter": 0.0020, "base_aberration": 0.0, "tone_warmth": 0.0, + "noise_level": 0.030, + "gamma_shift": 0.96, + "edge_softening": 0.10, + "spatial_resample": 0.015, + "luminance_response": "Film (Midtone & Shadow)", }, "Fuji Velvia 50 (Fine Slide Film)": { "noise_type": "gaussian", @@ -48,6 +63,11 @@ FILM_PRESETS = { "base_jitter": 0.0015, "base_aberration": 0.0008, "tone_warmth": -0.01, + "noise_level": 0.012, + "gamma_shift": 0.92, + "edge_softening": 0.05, + "spatial_resample": 0.010, + "luminance_response": "Film (Midtone & Shadow)", }, "Ilford HP5 Plus 400 (B&W Medium Grain)": { "noise_type": "multiplicative", @@ -56,6 +76,11 @@ FILM_PRESETS = { "base_jitter": 0.0018, "base_aberration": 0.0, "tone_warmth": 0.0, + "noise_level": 0.028, + "gamma_shift": 0.97, + "edge_softening": 0.10, + "spatial_resample": 0.015, + "luminance_response": "Film (Midtone & Shadow)", }, "CineStill 800T (Tungsten Cinema)": { "noise_type": "poisson", @@ -63,7 +88,12 @@ FILM_PRESETS = { "base_grain_size": 1.5, "base_jitter": 0.0020, "base_aberration": 0.0018, - "tone_warmth": -0.015, # subtle tungsten cool tint + "tone_warmth": -0.015, + "noise_level": 0.040, + "gamma_shift": 0.96, + "edge_softening": 0.15, + "spatial_resample": 0.018, + "luminance_response": "Film (Midtone & Shadow)", }, "Kodak Kodachrome 64 (Vintage Color Reversal)": { "noise_type": "poisson", @@ -72,6 +102,11 @@ FILM_PRESETS = { "base_jitter": 0.0012, "base_aberration": 0.0008, "tone_warmth": 0.010, + "noise_level": 0.015, + "gamma_shift": 0.95, + "edge_softening": 0.12, + "spatial_resample": 0.012, + "luminance_response": "Film (Midtone & Shadow)", }, "Kodak Gold 200 (Consumer Color Negative)": { "noise_type": "gaussian", @@ -80,6 +115,11 @@ FILM_PRESETS = { "base_jitter": 0.0016, "base_aberration": 0.0012, "tone_warmth": 0.025, + "noise_level": 0.025, + "gamma_shift": 0.98, + "edge_softening": 0.10, + "spatial_resample": 0.015, + "luminance_response": "Film (Midtone & Shadow)", }, "Fuji Pro 400H (Cool Pastel Portrait)": { "noise_type": "gaussian", @@ -88,6 +128,11 @@ FILM_PRESETS = { "base_jitter": 0.0014, "base_aberration": 0.0010, "tone_warmth": -0.010, + "noise_level": 0.022, + "gamma_shift": 0.99, + "edge_softening": 0.08, + "spatial_resample": 0.012, + "luminance_response": "Film (Midtone & Shadow)", }, "Kodak Vision3 250D (Daylight Cinema)": { "noise_type": "poisson", @@ -96,6 +141,11 @@ FILM_PRESETS = { "base_jitter": 0.0016, "base_aberration": 0.0012, "tone_warmth": 0.0, + "noise_level": 0.024, + "gamma_shift": 0.97, + "edge_softening": 0.10, + "spatial_resample": 0.015, + "luminance_response": "Film (Midtone & Shadow)", }, "Kodak T-Max 3200 (High-Speed B&W)": { "noise_type": "laplacian", @@ -104,6 +154,11 @@ FILM_PRESETS = { "base_jitter": 0.0030, "base_aberration": 0.0, "tone_warmth": 0.0, + "noise_level": 0.055, + "gamma_shift": 0.95, + "edge_softening": 0.12, + "spatial_resample": 0.020, + "luminance_response": "Film (Midtone & Shadow)", }, "Ilford Delta 100 (Fine-Grain B&W)": { "noise_type": "multiplicative", @@ -112,6 +167,11 @@ FILM_PRESETS = { "base_jitter": 0.0010, "base_aberration": 0.0, "tone_warmth": 0.0, + "noise_level": 0.014, + "gamma_shift": 0.98, + "edge_softening": 0.05, + "spatial_resample": 0.010, + "luminance_response": "Film (Midtone & Shadow)", }, "Agfa Vista 200 (Vibrant Pop Color)": { "noise_type": "gaussian", @@ -120,6 +180,11 @@ FILM_PRESETS = { "base_jitter": 0.0015, "base_aberration": 0.0011, "tone_warmth": 0.015, + "noise_level": 0.024, + "gamma_shift": 0.96, + "edge_softening": 0.10, + "spatial_resample": 0.015, + "luminance_response": "Film (Midtone & Shadow)", }, "Polaroid 600 (Instant Analog Emulsion)": { "noise_type": "multiplicative", @@ -128,6 +193,11 @@ FILM_PRESETS = { "base_jitter": 0.0022, "base_aberration": 0.0022, "tone_warmth": 0.008, + "noise_level": 0.035, + "gamma_shift": 1.02, + "edge_softening": 0.20, + "spatial_resample": 0.022, + "luminance_response": "Film (Midtone & Shadow)", }, "Harman Phoenix 200 (Experimental Color)": { "noise_type": "gaussian", @@ -136,6 +206,11 @@ FILM_PRESETS = { "base_jitter": 0.0022, "base_aberration": 0.0020, "tone_warmth": 0.028, + "noise_level": 0.032, + "gamma_shift": 0.94, + "edge_softening": 0.15, + "spatial_resample": 0.018, + "luminance_response": "Film (Midtone & Shadow)", }, "Lomography Lady Grey 400 (B&W 120 Medium Format)": { "noise_type": "laplacian", @@ -144,6 +219,11 @@ FILM_PRESETS = { "base_jitter": 0.0018, "base_aberration": 0.0, "tone_warmth": 0.0, + "noise_level": 0.026, + "gamma_shift": 0.96, + "edge_softening": 0.08, + "spatial_resample": 0.014, + "luminance_response": "Film (Midtone & Shadow)", }, "Fuji Neopan Acros 100 II (Ultra-Fine B&W)": { "noise_type": "laplacian", @@ -152,6 +232,11 @@ FILM_PRESETS = { "base_jitter": 0.0010, "base_aberration": 0.0, "tone_warmth": 0.0, + "noise_level": 0.012, + "gamma_shift": 0.97, + "edge_softening": 0.03, + "spatial_resample": 0.008, + "luminance_response": "Film (Midtone & Shadow)", }, "Ilford Delta 3200 (High-Speed Gritty B&W)": { "noise_type": "laplacian", @@ -160,6 +245,11 @@ FILM_PRESETS = { "base_jitter": 0.0035, "base_aberration": 0.0, "tone_warmth": 0.0, + "noise_level": 0.058, + "gamma_shift": 0.95, + "edge_softening": 0.14, + "spatial_resample": 0.022, + "luminance_response": "Film (Midtone & Shadow)", }, "Kodak Ektar 100 (Ultra-Vivid Fine Color)": { "noise_type": "gaussian", @@ -168,6 +258,11 @@ FILM_PRESETS = { "base_jitter": 0.0010, "base_aberration": 0.0006, "tone_warmth": 0.005, + "noise_level": 0.013, + "gamma_shift": 0.95, + "edge_softening": 0.05, + "spatial_resample": 0.010, + "luminance_response": "Film (Midtone & Shadow)", }, "Kodak ColorPlus 200 (Vintage Consumer Warmth)": { "noise_type": "gaussian", @@ -176,6 +271,11 @@ FILM_PRESETS = { "base_jitter": 0.0016, "base_aberration": 0.0012, "tone_warmth": 0.022, + "noise_level": 0.025, + "gamma_shift": 0.98, + "edge_softening": 0.12, + "spatial_resample": 0.016, + "luminance_response": "Film (Midtone & Shadow)", }, "LomoChrome Metropolis (Desaturated Experimental)": { "noise_type": "multiplicative", @@ -184,6 +284,11 @@ FILM_PRESETS = { "base_jitter": 0.0020, "base_aberration": 0.0015, "tone_warmth": -0.012, + "noise_level": 0.030, + "gamma_shift": 0.93, + "edge_softening": 0.12, + "spatial_resample": 0.018, + "luminance_response": "Film (Midtone & Shadow)", }, "Ilford Pan F Plus 50 (Ultra-Fine Low-ISO B&W)": { "noise_type": "multiplicative", @@ -192,6 +297,11 @@ FILM_PRESETS = { "base_jitter": 0.0008, "base_aberration": 0.0, "tone_warmth": 0.0, + "noise_level": 0.010, + "gamma_shift": 0.96, + "edge_softening": 0.02, + "spatial_resample": 0.006, + "luminance_response": "Film (Midtone & Shadow)", }, "Lomography Earl Grey 100 (Fine B&W)": { "noise_type": "laplacian", @@ -200,6 +310,11 @@ FILM_PRESETS = { "base_jitter": 0.0012, "base_aberration": 0.0, "tone_warmth": 0.0, + "noise_level": 0.015, + "gamma_shift": 0.97, + "edge_softening": 0.06, + "spatial_resample": 0.010, + "luminance_response": "Film (Midtone & Shadow)", }, "Agfa Scala 200x (B&W Reversal Slide)": { "noise_type": "poisson", @@ -208,6 +323,11 @@ FILM_PRESETS = { "base_jitter": 0.0015, "base_aberration": 0.0, "tone_warmth": 0.0, + "noise_level": 0.020, + "gamma_shift": 0.93, + "edge_softening": 0.08, + "spatial_resample": 0.012, + "luminance_response": "Film (Midtone & Shadow)", }, } diff --git a/web/stochastic_noise_presets.js b/web/stochastic_noise_presets.js index 235fab4..085b256 100644 --- a/web/stochastic_noise_presets.js +++ b/web/stochastic_noise_presets.js @@ -32,6 +32,11 @@ app.registerExtension({ const microJitterWidget = findWidget("micro_jitter"); const aberrationWidget = findWidget("chromatic_aberration"); const warmthWidget = findWidget("tone_warmth"); + const noiseLevelWidget = findWidget("noise_level"); + const spatialResampleWidget = findWidget("spatial_resample"); + const gammaShiftWidget = findWidget("gamma_shift"); + const edgeSofteningWidget = findWidget("edge_softening"); + const luminanceResponseWidget = findWidget("luminance_response"); if (!presetWidget) return; @@ -64,6 +69,21 @@ app.registerExtension({ if (warmthWidget && cfg.tone_warmth !== undefined) { warmthWidget.value = cfg.tone_warmth; } + if (noiseLevelWidget && cfg.noise_level !== undefined) { + noiseLevelWidget.value = cfg.noise_level; + } + if (spatialResampleWidget && cfg.spatial_resample !== undefined) { + spatialResampleWidget.value = cfg.spatial_resample; + } + if (gammaShiftWidget && cfg.gamma_shift !== undefined) { + gammaShiftWidget.value = cfg.gamma_shift; + } + if (edgeSofteningWidget && cfg.edge_softening !== undefined) { + edgeSofteningWidget.value = cfg.edge_softening; + } + if (luminanceResponseWidget && cfg.luminance_response !== undefined) { + luminanceResponseWidget.value = cfg.luminance_response; + } isUpdatingFromPreset = false; app.graph.setDirtyCanvas(true, true);