Repository navigation
Chromaforge v26.44.0
26.44.0
The changes since 26.43.7. (no PR) and fork numbers refer to Chromaforge's own pull requests;
Chromaforge no longer merges upstream (since 2026-10-25) and cherry-picks from it instead.
The first release of week 44 of 2026. The catalog format is unchanged.
Develop
- Lens profile status and picker: Develop ▸ Lens Corrections names the profile it applies ("(chosen)" for a
picked lens) or the file's own correction, and Make / Model menus pick a lens from the lens database for raws with
manual, adapted or misnamed lenses, with a focal length for photos that record none (lens.choose; kept in the
catalog, not written to XMP yet; issue #307). - AI Denoise: Settings ▸ AI Denoise offers the upstream project's own denoise model (MIT OR Apache-2.0, trained on CC0 raws; upstream PR 2929), downloaded from its release, else the trainer's site, and checked against its SHA-256. Without a model the panel explains plainly what to use meanwhile.
Interface
- Plug-in compatibility: a plug-in's manifest lists the host features it uses (
requires); one that needs a feature this version lacks isn't installed, and the error names each missing feature. A plug-in that stops loading after a downgrade of the app keeps itsplugins.jsonentry and data, and a plug-in that didn't load can now be removed (plugin.uninstall, a Remove button in the Plug-in Manager).versionis now required, in semver, and installing an older version needsallowDowngrade(an Install Older Version button in the dialog).plugin.listreports the host's ABI and features. (no PR)
Performance
- Nikon HE decodes in parallel: the codestream's slices (each resets its prediction) are entropy-decoded in parallel, the four components' wavelets too, and the inverse Star-Tetrix colour transform is our own row-parallel version of ISO/IEC 21122-1 Annex F, bit-exact with the one it replaces: Z f HE raw decode 1009 → 127 ms, the same samples. Thanks @Kaan88. (no PR)
- Single-strip DNGs decode in parallel: a lossless JPEG whose restart interval is whole rows is split at its restart markers and decoded on every core (bit-identical), a whole-image chunk is no longer copied sample by sample, and
GainMapopcodes run per row in parallel: a 50 MP phone DNG's raw decode 1137 → 66 ms, preview 1.6 → 0.4 s. Thanks @Kaan88. (no PR) - Samsung compressed raws decode 3x faster: finding the colour-filter layout from the camera's embedded JPEG converted every preview pixel with a power function; the 256 byte values are now converted once into a table, with the same result. NX500 raw decode 1434 → 406 ms. Thanks @Kaan88. (fork #503)
- Graphics interface setting (Windows): Settings ▸ Performance ▸ Graphics interface chooses DirectX 12 or Vulkan for GPU rendering, saved with the app's settings. On some laptops DirectX 12's shader compiler made every start take about 15 seconds with the GPU on; Vulkan starts at normal speed. The window keeps DirectX 12, and
<PREFIX>_GPU_BACKEND/WGPU_BACKENDstill win over the setting. (no PR) - Windows starts in half a second again: the GPU histogram kernel no longer asks DX12 for zeroed workgroup memory
it fills itself, which FXC compiled for about 8 seconds at every launch, and the window no longer waits for the
GPU kernels to compile before it opens. (no PR)
Updater and security
- Safer video decoding: the video codecs (H.264, HEVC, AV1, VP9, ProRes, MPEG-2, APV, DNx, Opus) and the MP4, MKV, MXF and MPEG-TS readers now pick up FilmCraft's latest hostile-input limits, so a malformed video is rejected instead of using unbounded memory or time. (no PR)
Fixes
- Histogram: on an HDR display, the second histogram and the Modern layout's histogram follow a slider drag of an
HDR edit live, as the first does, instead of standing still until the release. (no PR) - Camera model slashes:
calibrate-lightroom fitandaddaccept camera and look identifiers containing slashes (e.g. phone models such asXiaomi 17 Ultra/2512BPNDAGand film profiles), sanitising filenames and profile slugs while preserving the exact model identifier. Fork #542. (no PR)
Colour
- Calibrations matched to other editors:
calibrate-lightroom fit --editor capture-one|darktable|rawtherapee|dxo-photolabfits a camera calibration to that editor's exports. Calibration files gain aneditorfield (absent: Lightroom) and are kept as<Make>_<Model>_<editor>.json; calibrations of one camera pool their looks, and only a Lightroom calibration gives the camera its default look. (no PR) - Colour-chart calibration:
calibrate-chart --shot RAW --corners … [--light …]reads the 24 patches of an X-Rite ColorChecker Classic (any corner order, perspective allowed), fits a white-preserving forward matrix and the matching colour matrix per light (one or two lights) to X-Rite's 2016 reference values (current or pre-2014 charts) by CIEDE2000-checked Levenberg–Marquardt, and prints achartcamera-database entry, with--dcp,--previewand--report. Seedocs/chart-calibration.md. (no PR) - Compare renders from any editor:
compare REFERENCE TESTin the command-line tool registers two renders of one photo (from the app, Lightroom, Capture One, darktable or a camera) and reports CIEDE2000 overall, by tone band and by hue, with lightness, chroma and hue bias, a--jsonreport and a--diffΔE00 map. (no PR) - Camera matrices for about 550 more models: dcraw's
adobe_coefftable (free for all uses) ships in the camera database as a lower-priority source. A raw without colour data of its own gets it after a failed or missing camera-JPEG fit, instead of the neutral fallback, and Calibrated camera colour can start from it for models without spectral data. Measured and spectral data still come first. (no PR) - Kelvin white balance through dcraw's matrices: raws of the about 550 models in dcraw's table that have no spectral matrices or Kelvin presets now read their As Shot white balance in Kelvin and edit on the Kelvin scale; white balances edited before on the relative scale render as they did and convert on their next edit. (no PR)
- Export colour for other editors:
camera.exportDcp {path}writes the camera colour a raw renders with (its chosen.dcpor calibration look, the file's own matrices and profile tables, or the colour the app fits) as a DNG camera profile named as raw converters name the camera;develop.exportLut {path}writes a photo's global look (Light, tone curve, colour, mixer, grading, profile look; not white balance or local edits) as a 33³ sRGB-to-sRGB.cube. Export as DNG now embeds the photo's chosen profile instead of only filling in colour for raws without matrices. The.dcpwriter moved from the CLI intolcc-raw(lcc_raw::dcp::write). (no PR) - Probe DNGs and slider sweeps:
calibrate-lightroom probewrites synthetic probe DNGs for a camera (384 patches through camera RGB, the camera's make, model and database matrix) plus one sweep step per Lightroom slider value with the setting embedded;probe-checkreads Lightroom's exports back by position and reports the default render's ΔE00 and, for each step, the app value whose change matches Lightroom's best next to the value the import uses. The base probe pairs intofitlike any raw. (no PR) - Migration check for edited photos:
calibrate-lightroom verify --raws DIR… --exports DIR…renders edited raws through the app's own import (XMP sidecar, or thecrs:settings embedded in the export) and reports CIEDE2000 against each edited export, per photo and per group of controls used, with--report(JSON and a ΔE00 map per photo) and--json. (no PR)