Each look is a folder holding its color grade and effect doses. The shared pipeline turns NEFs into finished JPEGs through a lossless intermediate:
RawTherapee grade → lossless TIFF → halation → grain → JPEG
Grain is deterministic for each source/look/variant, so rerunning an unchanged
photo preserves the same grain pattern. Pass --random-grain when variation is
wanted.
./bin/process.sh <folder-of-NEFs> # boardwalk, all 4 variants
./bin/process.sh <folder> 01 # boardwalk Classic only
./bin/process.sh <folder> all --web # + 2048px web copies
./bin/process.sh <folder> <look> all --web # a different look
./bin/process.sh <folder> <look> 02 --random-grain # deliberately fresh grain
Output lands next to the photos, in a per-look subfolder:
<folder>/renders/<look>/DSC_xxxx_NN.jpg— full-res finished images<folder>/renders/<look>/contact/— labeled comparison sheets for multi-variant runs<folder>/renders/<look>/web/— 2048px sharpened copies (with--web)
Originals are never modified. Finished files are replaced atomically only after
the new render succeeds. Contact sheets are built only from the current run, so
old variants cannot leak into a new comparison. Running without --web removes
an affected stale web copy if one exists.
Boardwalk variants: 00 Color Only (grade without exposure/tone changes,
for already-well-exposed shots) · 01 Classic (balanced) · 02 Punchy (more contrast,
deeper teal) · 03 Faded (soft pastel, heavy grain).
CLUT-based looks (HaldCLUT film emulations from the RawTherapee Film Simulation Collection plus separately downloaded Fuji X-Trans samples):
fuji—01Classic Chrome ·02Velvia ·03Astia ·04Acros (B&W)portra—01160 ·02400 ·03800 (warm, soft negative film)kodachrome—0125 ·0264 ·03200 (vintage slide film)polaroid—01669 ·02PX-680 ·03Lomo X-Pro (instant / lo-fi)bw—01Tri-X 400 ·02HP5 Plus ·03Delta 3200 (classic B&W)
Curve-based (like boardwalk):
cinema—01Soft ·02Classic ·03Deep (dark cinematic teal/sage with warm amber accents, matte blacks, film grain — moody museum / available-light aesthetic) ·04Bleach Bypass (retained for compatibility; use the standalone family below for a choice of intensities)postcard—01Cream ·02Sunfade ·03Candy (bright vintage pastel: cream highlights, flat gentle contrast, milky sage skies, salmon/mustard accents — faded-60s-postcard, inspired by a certain symmetrical filmmaker)night—01Tungsten ·02Neon ·03Sodium (mixed-light night color, protected practicals, stronger grain and halation)editorial—01Clean ·02Warm ·03Cool (restrained fashion and portrait finishing with protected skin tones)flash—01Disposable ·02Afterparty ·03Gloss (grades for images made with direct flash; these do not synthesize flash lighting)bleach-bypass—01Half ·02Silver ·03Grit (progressively stronger silver-retention treatments, from restrained color to hard olive near-mono)landscape—01Golden ·02Alpine ·03Forest (season- and environment-oriented color with controlled highlights)
bin/ shared pipeline, validation, setup checks, and GUI export
cluts/ vendored HaldCLUT PNGs used by the looks
boardwalk/, cinema/, postcard/, night/, editorial/, flash/, bleach-bypass/, landscape/,
fuji/, portra/, kodachrome/, polaroid/, bw/ one folder per look:
rawtherapee/ portable source .pp3 color grades
fx.conf per-variant grain strength/size + halation dose
Copy boardwalk/ to a new folder, edit the .pp3 files and fx.conf, then:
python3 bin/validate.py
./bin/process.sh <photos> <new-folder-name>
Profile filenames must contain NN - Label.pp3; fx.conf must have one
matching NN grain_strength grain_size halation line per profile. Missing,
duplicate, malformed, and orphan variants are rejected before rendering.
- Grain / halation: numbers in
<look>/fx.conf - Vignette:
[PCVignette] Strengthin each .pp3 (scale −6…6; currently mild) - Color/tone: everything else in the .pp3 files (plain text)
The supplied launcher and setup notes target macOS. Install Python dependencies and check the checkout before processing photos:
python3 -m pip install -r requirements.txt
python3 bin/doctor.py
Five machine/local assets are deliberately not in the repo:
bin/rtcli— machine-specific binary; recreate it (see Notes below).- The four
cluts/Fuji XTrans III - *.pngCLUTs used by thefujilook — author allows free use but grants no redistribution license, so download them yourself from https://blog.sowerby.me/fuji-film-simulation-profiles/ and drop them intocluts/with those exact names. All other looks work without them.
The committed CLUT profiles use portable cluts/<filename> references. The
pipeline materializes temporary profiles with absolute paths at runtime, so the
repository can be moved without changing tracked files.
To load profiles in RawTherapee’s GUI, export machine-ready copies and load them through Processing Profiles → load from file:
python3 bin/export_gui_profiles.py ~/Desktop/rawtherapee-gui-profiles
Curve-only profiles are also directly loadable from their source folders.
-
bin/rtcliis a re-signed copy of RawTherapee's CLI (the one inside /Applications crashes when launched from a terminal because of its App Sandbox entitlement). After a RawTherapee update, recreate it: copyrawtherapee-cliout of the app bundle, thencodesign --remove-signature <copy>andcodesign --force --sign - <copy>. -
Set
RAWTHERAPEE_CLI=/path/to/rawtherapee-clito use a different executable. -
RawTherapee diagnostics are preserved when a render fails.
-
Validate the repository at any time with
python3 bin/validate.py; use--strict-assetsto require the locally downloaded Fuji CLUTs. -
Run the automated checks with
python3 -m unittest discover -s tests -v. -
Requires: RawTherapee 5.12, Python 3.8+, numpy, and Pillow.
-
See
cluts/CREDITS.mdbefore redistributing the CLUT files. -
See
docs/LOOK-RESEARCH.mdfor the visual targets, source material, and current calibration limits of the original curve-based looks.a