Repository navigation
Releases: emmertex/chromaforge
Release list
Chromaforge v26.45.1
What's Changed
Full Changelog: v26.45.0...v26.45.1
Chromaforge v26.45.0
What's Changed
- Locale catalogs: keep the fork catalogs sorted, so PRs that add strings stop conflicting by @clydecbrown in #729
- Lightroom import gives the photos it adds the catalog's settings and history, not their file's XMP by @clydecbrown in #731
- Plug-in Manager fixes: window width, one install at a time, reinstalls, a stale Settings tab, one spelling by @clydecbrown in #733
- Issue #725: recognize renamed repository during update check and clarify status by @deunderscorepaul in #726
- Keep a capture date of just a year or a month as stated by @clydecbrown in #737
- Brand: finish the Chromaforge changeover by @emmertex in #739
- IMM-SIDECARS: push and pull XMP sidecars with Immich by @emmertex in #744
- Port upstream full scan 2026-11-01: 17 fixes by @emmertex in #747
- Denoise: Make the cancelled-job test wait in the model loader by @endthestart in #756
- Dates: Use chrono for the remaining calendar math by @endthestart in #757
- Web: Log in to the server before rendering a gallery upload by @endthestart in #758
- Clock: Run the app's clock on local time by @endthestart in #759
- Tests: Trim three slow lcc-engine tests by @endthestart in #760
- Issue #451: pin the Sony a1 tungsten white-balance path with tests by @emmertex in #746
- Issue #671: lens database matching for lenses whose lensfun name carries a maker designation code by @emmertex in #748
- Issue #724: add the NIKON Z6_3 Lightroom-matched camera calibration by @emmertex in #745
- Issue #679: colour NR pulls in chroma speckle (green spots at high ISO) by @emmertex in #749
- Default camera profile per model (issue #723) by @emmertex in #750
- Issue #448: catalog compaction and thumbnail decode failures no longer stall the UI thread by @emmertex in #753
- Add the IPTC Content fields (headline, caption writer, category, subject codes) by @emmertex in #754
- Raw: Take AHD's Lab cube roots without libm cbrt by @endthestart in #761
- Tone sliders: match Lightroom's tonal response (storytold#1371) by @emmertex in #738
- Process V6: AI Denoise amount eases in by @emmertex in #699
- LR-MERGE-HDRPANO: Merged JPEGs keep their colour on a profiled camera (#752) by @endthestart in #755
- Issue #683: AND / OR operator for the Library Filter Bar's metadata columns by @emmertex in #751
- LRC-LIB-LIBFOLDERS: Add Folder… picks and scans off the UI thread (#734) by @endthestart in #735
- Fix #692: Delete from Disk lists each folder once for all its files by @endthestart in #706
- Fixes #694: Masking Panel UI Ergonomics, Typography Consistency, and Overlay Menu Refinement by @deunderscorepaul in #713
- LRC-LIB-LIBFOLDERS: Folders + menu on Android, Add Folder… follow-ups (#734) by @emmertex in #764
- docs: upstream PR intake runbook, ledger and tooling by @emmertex in #765
- Library: the grid's thumbnail badges no longer name a sidecar per cell, per frame (#742) by @emmertex in #766
- Upstream intake 2026-11-02: 3 PRs, 0 commits by @emmertex in #767
- Release 26.45.0: version and changelog by @emmertex in #768
- Release 26.45.0: fix tests the full CI caught by @emmertex in #770
Full Changelog: v26.44.4...v26.45.0
Chromaforge v26.44.4
What's Changed
- Port upstream storytold#3380: CR2 opens with the camera's aspect crop by @emmertex in #704
- Port upstream batch: storytold#3385, storytold#3386, storytold#3384, storytold#3390 by @emmertex in #707
- Port upstream storytold#3392: settling waits for the Missing Photos count, no panic on spawn by @emmertex in #708
- Port upstream batch: storytold#3400, storytold#3398, storytold#3396 by @emmertex in #709
- Port upstream batch: storytold#3413, storytold#3408, storytold#3410, storytold#3409 by @emmertex in #710
- Port upstream storytold#3366: reject mismatched XML closing tags by @emmertex in #711
- #705: rotate and flip in the Crop & Straighten panel by @emmertex in #712
- Port upstream batch: storytold#3424 by @emmertex in #714
- Port upstream batch: storytold#3427, storytold#3428 by @emmertex in #715
- Port upstream storytold#3380: CR2 opens with the camera's aspect crop (#704) by @emmertex in #718
- Port upstream batch: storytold#3433, storytold#3431 by @emmertex in #720
- Plug-in Manager: rework the window (file picker, a page per plug-in, filters apart) by @clydecbrown in #717
- Release 26.44.4: version and changelog by @emmertex in #721
- Fix the full-CI failures before 26.44.4 by @emmertex in #722
Full Changelog: v26.44.3...v26.44.4
Chromaforge v26.44.3
26.44.3
Develop
- Overexposed blues and magentas go white (Process V5): bright blue, violet and magenta highlights pushed past white now fade to white as reds, oranges and yellows do, instead of staying purple up to two stops over. Photos on an older process keep their look until Update to Current Process.
- Previews as sharp as the export: a full-quality preview that shows the photo at half its size or less now shrinks it with the same Lanczos filter as an export, so sharpening judged in the loupe matches the exported file. Drafts while dragging are unchanged.
- Smoother slider drags on HDR edits and heavy photos: the live HDR histogram renders at draft grade while dragging instead of two extra full-quality renders per update; with "High quality adjustment previews" on, a heavy photo falls back to drafts after at most two slow updates and remembers that across its sliders.
- GPU fixes: HDR soft proofs map to the proof gamut at the real HDR peak (and now run on the GPU), and the GPU highlight clip handles non-finite colours as the CPU does.
Import, export and formats
- Import folders and subfolders: clicking Import now opens the Import review dialog, offering folder and file selection with a toggle to include or exclude subfolders.
- Even output sharpening in every format: floating-point exports (32-bit TIFF, EXR) are sharpened as much as 8- and 16-bit ones, and output sharpening weighs red, green and blue by the export's own colour space.
- Videos keep their capture date: MP4 clips that record their date only in the movie header are dated by it (issue #672); Nikon clips take the camera's date and time zone; a clip with no date takes its file's date.
- Undated files keep your clock time: files with no date of their own are dated by their modification time in your time zone, not UTC.
From upstream
- Fixes ported from the weekly upstream review: Samsung panoramas with a trailing SEF block import whole, compressed Fujifilm RAF decodes 13–17 % faster, malformed base64 refused, model downloads survive "103 Early Hints", oversized render requests capped at 512 MP, mouse Back/Forward buttons change photo, a custom thumbnail cache size, per-rating Select by entries, a "Rendering…" cue for slow renders, loading dots on pending thumbnails, pins for Object and Describe masks, and imported Lightroom brush masks keep their soft edges.
Chromaforge v26.44.2
What's Changed
- CI: check that every crate comes from crates.io or a listed git repository by @endthestart in #670
- Plug-ins: add a tool's files to the library, stacked on their source photo or in the album the command ran from by @clydecbrown in #674
- Filter bar: keep the camera, lens and keyword lists across ratings and edits (#538) by @endthestart in #665
- Export: retain unprefixed Lightroom Classic .lrtemplate settings and surface unsupported ones by @deunderscorepaul in #678
- lensdb: built-in-lens compacts match again (spec-only DNGs, Optics status) by @Kaan88 in #668
- Upstream review r6: raw, DNG, fetch and catalog fixes by @emmertex in #680
- MENU-HELP-UPDATES: Windows zip copies update themselves and restart by @Kaan88 in #641
- Release 26.44.2: version and changelog by @emmertex in #681
- Lock tests: the owner-note swap test is Unix only by @emmertex in #682
Full Changelog: v26.44.1...v26.44.2
Chromaforge v26.44.1
What's Changed
- LR-VIEW-HDR-DISPLAY: on Wayland, SDR white follows the compositor by @Kaan88 in #631
- LR-VIEW-ZOOM, LR-VIEW-HDR-DISPLAY: faster high quality previews, next photo and 1:1 release by @Kaan88 in #506
- LR-IMP-FORMATS: HEIC decoding on by default in the app and CLI by @emmertex in #615
- Plug-ins: a settings screen, settings kept for the whole app, dialogs that remember, and a prepare step by @clydecbrown in #621
- LR-IMP-FORMATS: Canon CR3 decodes its streams in parallel by @Kaan88 in #623
- LR-IMP-FORMATS: Samsung NX1, NX500, NX3000 and NX mini raws are raws by @Kaan88 in #624
- LR-IMP-FORMATS: Canon CRW decodes without an allocation per sample by @Kaan88 in #625
- LR-IMP-FORMATS: hot-pixel noise bins take their median by selection by @Kaan88 in #626
- Docs: CONTRIBUTING.md, AGENTS.md as the one instruction file, PR template in line by @clydecbrown in #628
- SMB share: use the fsync fallback for imports, moves and sidecar backups by @endthestart in #636
- Move: sync the copy's folder before removing the original by @endthestart in #637
- Lightroom import: decode compressed history steps and snapshots by @clydecbrown in #634
- Upstream review r4: 10 ports from open PRs storytold#3038–storytold#3118 by @emmertex in #635
- test(codecs): test the no-pixels decode guard directly by @emmertex in #638
- security(raster): try_vec fills without invoking Clone by @emmertex in #639
- Plug-ins: start a program the user approved, and hear back when it exits by @emmertex in #640
- Library: search boxes in the Metadata columns and the People view (carries #643) by @emmertex in #645
- Upstream storytold#3020 follow-ups: Windows file identity compares lengths first, and index 0 matches nothing by @emmertex in #646
- Upstream storytold#3165, storytold#3124, storytold#3122: refuse signed control indexes, non-UTF-8 arguments and non-object script params; review r5 by @emmertex in #647
- Upstream storytold#3168 (part): exports skip the render copy when nothing changes it; faster JPEG band encoding by @emmertex in #648
- Plug-ins: a prepare step can't start a program by @clydecbrown in #650
- Calibrations: remove the Nikon Z6III calibration, it turns skies purple by @endthestart in #651
- LR-EDIT-COLOR-WB-PICKER: White Balance Selector loupe and sample size by @emmertex in #660
- #471: mask Amount slider under the mask-creation tiles by @emmertex in #653
- Presets: option to list User Presets first by @emmertex in #654
- People: assign or reject selected suggestions on a person's page by @emmertex in #655
- #538: smooth grid scrolling with the Filter Bar shown by @emmertex in #656
- #642: Masking: folding slider sections, Color Grading in masks, bin on mask rows by @emmertex in #657
- #618: a Develop tool's drawer takes the panels' place by @emmertex in #658
- LR-LIB-CAPTURETIME: capture time from file names (#619) by @emmertex in #659
- #491: shared AI backend: device choice with CPU fallback, job queue, activity row by @emmertex in #661
- Develop tool row: Edit button and applied-tool dots (#617) by @emmertex in #662
- #616: Edit In asks which file to edit by @emmertex in #663
- Release 26.44.1: version and changelog by @emmertex in #664
- Release 26.44.1: full-CI fixes by @emmertex in #666
- Release 26.44.1: full-CI fixes (2) by @emmertex in #669
Full Changelog: v26.44.0...v26.44.1
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)
Chromaforge v26.43.7
26.43.7
The changes since 26.43.6. After each item, the matching upstream pull request: (↑ #n) means the
maintainer of this fork opened it upstream, (⇠ #n) means it was ported or merged from an upstream PR, and
(no PR) means there is none (the change is in the fork's own layout, the fork's own tools, or a fork issue with no
upstream counterpart).
The seventh release of week 43 of 2026. The catalog format is unchanged (version 13).
Interface
- Modern – Simple layout (Settings ▸ General ▸ Layout), replacing the touch layout: a photo-first Develop with a
dock of adjustment groups and tools (bottom or side), cards of pill sliders, a ☰ menu bar with Shortcuts, and a
floating histogram with two sizes. Every develop setting is reachable from it, the chrome fades away while an
adjustment is dragged, the Library gets an Info card and a search pill, Import and Export open as full-window
screens, dialogs are rounded cards (bottom sheets on a phone). Classic is now called Classic – Advanced.
Fork #464, #483. (no PR) - Pill sliders (Settings ▸ Interface ▸ Sliders): the name and value inside one bar you drag anywhere. Fork #464.
(no PR)
Develop
- Camera calibration matched to Lightroom (
calibrate-lightroomin the command-line tool): contributors fit a
camera's colour model and one look per Lightroom profile (Adobe Standard, Color, Vivid, Landscape, Portrait,
Monochrome…) to Lightroom's exports of their own raws (preset,fit), and send the resulting file of aggregate
numbers; developers add it withadd, andlistshows the built-in ones. A calibrated camera's looks appear in the
Camera Profile menu under our names (e.g. Eboda Colour), and photos imported from Lightroom sidecars and
catalogues pick the look matching their Lightroom profile. The guide covers running the tool on Windows, macOS and
Linux. No camera is calibrated yet. Fork #485. (no PR) - Preset folders: create folders and nested subfolders in the Presets panel, with drag-and-drop organization, renaming, and folder deletion. Thanks @deunderscorepaul. Fork #468, #470, #496. (no PR)
- Preset import: importing presets keeps the Presets panel in the left column instead of displacing the Edit panel to the right. Fork #469. (no PR)
Library
- Import metadata presets: apply metadata presets directly in the Import Photos dialog with an always-visible
preset selector, preselecting the default from Settings, and create new metadata presets inline or import preset
files; the picker is on the new Import screen too. Thanks @deunderscorepaul. Fork #467, #472. (no PR)
Display
- HDR adjustment previews, follow-up: dragging a slider on an HDR edit redraws only the views of the photo being
edited and no 8-bit previews under the HDR picture; zoomed in, parts the HDR picture can't cover show sharp; a crop
or rotation never shows the old shape, and a preview that fails to render no longer leaves an outdated one on
screen. Thanks @Kaan88. Fork #423 follow-up, #474, #482. (no PR)
Performance
- Faster HDR zoom and drags: HDR previews are prepared for the display off the interface thread, zoomed views
keep their last few HDR windows (a pan back or a zoom back in is sharp at once, a pan keeps the part already sharp),
and no unseen 8-bit tiles are rendered under them; a 1:1 HDR drag's frames take ~2 ms of interface time instead of
~15 ms. The kept windows are freed from graphics memory as soon as they go, and Settings ▸ Display & Speed offers
them only where the graphics card has room (at most a quarter of its memory; greyed out with the reason
elsewhere). Thanks @Kaan88. Fork #475, #484. (no PR)
Updater and security
- Linux package installs update through their package manager: a copy installed from a
.deb,.rpm, Flatpak,
Nix or Snap package no longer offers to download the update itself; the update dialog says how to update and opens
the release page. Fork #462, #497. (no PR) - Edit In uses the editors you set up: over MCP, the control channel and in actions,
photo.editIn,
photo.openAsLayersandeditIn.savePresetno longer take a program (app,args,control), the Edit In menu
commands no longer takeapp, andui.setcan't change the editors in Settings ▸ External Editing; a saved Edit In
preset or the editor in Settings opens instead. The command line (runwithout--connect) and the Edit In Presets
dialog still choose one. On Windows, the system's default editor is started through Explorer rather than the command
prompt (cmd). Thanks @clydecbrown. Fork #479, #480. (no PR)
Fixes
- Histogram: an RGB Parade shown beside a Waveform keeps its own pictures instead of showing the Waveform's.
(no PR) - Connections: an Immich server's buttons wrap instead of running off a narrow Settings window. (no PR)
- Navigator: a cropped photo shows in its cropped shape instead of stretched to the original's. Fork #455, #456.
(no PR)
From upstream
Upstream's main (281 commits) merged in fork #486, with names following the fork's brand. Kept from upstream:
- Parametric curve drags fixed; histogram clipping buttons; Visualize Spots; crop aspect lock.
(⇠ upstream main) - Launch library list at start-up. (⇠ storytold#1290)
- Lightroom catalogue import says where the imported photos go. (⇠ storytold#2672)
- Catalogue robustness: stricter capture-time shift (⇠ storytold#2505), failed operations leave nothing behind and torn
batches make a revision, bounded keyword and repair work and a refused planted link atcatalog.log(⇠ storytold#2763),
folder location fixes (⇠ storytold#1112). - Dialogs close on a click outside them (a setting); a frame-rate overlay; a drop overlay, and drops are refused
while an import runs; unreadable capture times handled; GPU soft-proof and dehaze fixes. (⇠ upstream main)
Left out, as the fork's own design replaces them: upstream's Settings window rework, menu label renames, Shift+P for
Presets, Presets Favorites, the old Info panel and the denoise queue rows.
Chromaforge v26.43.6
26.43.6
The changes since 26.43.5. After each item, the matching upstream pull request: (↑ #n) means the
maintainer of this fork opened it upstream, (⇠ #n) means it was ported or merged from an upstream PR, and
(no PR) means there is none (the change is in the fork's own layout, the fork's Android app, or a fork issue with no
upstream counterpart).
The sixth release of week 43 of 2026. The catalog format is unchanged (version 13).
Develop
- High quality adjustment previews: an optional setting (Settings ▸ Performance) keeps slider adjustments at the
settled render's quality, size and display fit, including zoomed views, Before/After and HDR. When an edit is too
slow for it, the moving slider falls back to the faster previews and full quality returns as soon as the slider
holds still. The faster adaptive previews stay the default. Thanks @Kaan88. Fork #426, #458. (no PR) - HDR while dragging: adjustment previews stay on the HDR display path while a slider moves, and stale
asynchronous results are dropped. Thanks @Kaan88. Fork #423. (no PR) - Preview for SDR Display: with HDR editing on, a box under Visualize HDR shows an HDR edit's SDR rendition on an
HDR display (the same switch as View ▸ HDR Preview); the SDR Rendition sliders are greyed out while the screen
shows HDR. Fork #459. (no PR) - Plugins: a filter can be measured on the cropped photo (
analyzeArea), a Source filter can turn off a raw's
base tone (baseTone), and choice parameters can group their options. Thanks @nwh212. Fork #444, #452, #454.
(no PR)
Library
- Grid stays put: the selected photo holds still through side-panel resizes and filter changes, and the top
photo keeps its place when panels resize. Fork #447, #460. (no PR)
From upstream
Upstream's integration batch 43 (storytold#2744) and three upstream fixes, merged in fork #457:
- Multi-select metadata editing in the Metadata panel. (⇠ storytold#2622)
- Enable Filters on Cmd+L / Ctrl+L; Find Similar turns filtering on, and a put-aside filter follows renamed
keywords, people and folders. (⇠ storytold#2709) - All-masks overlay outlines every visible mask. (⇠ storytold#2210)
- Auto straighten turns at most 10°, needs at least 3 lines and says when it finds nothing. (⇠ storytold#2688)
- PSD / PSB metadata is read from the file. (⇠ storytold#2546)
- Highlights / Shadows about 2× faster on the CPU, with identical results. (⇠ storytold#2694)
- Library: Synchronize Folder takes removed photos out of their stacks (⇠ storytold#2543); Find Similar with no matches
shows an empty view (⇠ storytold#2109); smart album ≥ / ≤ match equal f-number and focal length (⇠ storytold#2728); Find Missing
Photos matches Windows paths by name on macOS and Linux (⇠ storytold#2618); the library lock never writes through a link
(⇠ storytold#2596). - Interface: the macOS menu gives its keys up to text fields and the shortcut recorder (⇠ storytold#2621); Tab leaves the
name field of New Album and similar prompts (⇠ storytold#2727). - XMP: namespaces are owned by URI, so foreign prefix collisions are preserved. (⇠ storytold#2526)
- Automation: colour-range samples are capped (⇠ storytold#2670),
view.maskOverlayColorrefuses signed hex digits
(⇠ storytold#2626), the command list is sorted by id (⇠ storytold#2665), and the command sweep no longer starts a GeoNames download
(⇠ storytold#2702). - Hardening and tests: dev-tool path validation (⇠ storytold#2494), a documented thread-teardown buffer (⇠ storytold#2700), corpus
tests for Nikon Z 8 / Z 6II and Hasselblad TIFF (⇠ storytold#2620), and test fixes (⇠ storytold#2612, storytold#2630). The README shows the
app icon (⇠ storytold#2548).
Release builds and CI
- Play Store build:
cargo xtask android package --aabbuilds the Play variant without All files access (Play
refused the bundle); the GitHub APKs keep it (--store github|play). The camera roll handles Android 14's
selected-photos access.--version-codeoverrides the Android version code. Fork #442, #445, #446. (no PR) - Windows clippy fix in an engine test. Fork #461. (no PR)
Upstream pull requests
Merged from upstream: integration batch 43 (storytold#2744, 21 community PRs) plus storytold#2494, storytold#2548 and storytold#2700. No upstream PR was
opened for this release.
Chromaforge v26.43.5
26.43.5
The changes since 26.43.4. After each item, the matching upstream pull request: (↑ #n) means the
maintainer of this fork opened it upstream, (⇠ #n) means it was ported or merged from an upstream PR, and
(no PR) means there is none (the change is in the fork's own Classic layout, the fork's Android app, or a fork
issue with no upstream counterpart).
The fifth release of week 43 of 2026. The catalog format is unchanged (version 13). Raws from Sony bodies with DRO,
and Canon, Panasonic, Leica and Pentax raws now edited in Kelvin, may look slightly different after the update (see
From upstream).
Highlights: the touch layout and the Android app
-
Touch layout: a photo-first layout for tablets, foldables and phones, on by default on Android and available
everywhere, the web app included, through Settings ▸ General ▸ Layout (Touch / Desktop; remembered, and the same row switches back).
Develop shows the photo alone; a tap brings a slim top bar and a tool strip. The slider tools (Basic with white
balance and tone, Colour with presence, Tone with the parametric curve, Detail, Optics, Effects with vignette and grain) adjust one
setting at a time by dragging on the photo, with Done / Cancel; hold the photo to see the original; the full Edit
panel opens beside or under the photo. Fork #439. (no PR) -
Gestures and Back: swipe scrolling with momentum, long-press multi-select, and Android Back (including
predictive back) one step at a time: it closes the Export sheet, steps out of a Settings page, leaves adjust mode,
then the module. The layout keeps clear of the camera cutout and the system bars, and the histogram can be pinned
or float over the photo. Fork #439. (no PR) -
Touch Settings and Export: a touch Settings page with the Layout row, and an Export sheet that saves to
Pictures or shares the exported photo to another app. Fork #439. (no PR) -
Touch Library: a slim Library bar; Import offers photos, a folder or the camera roll, and an empty library
shows big Import Photos / Import Folder / Camera Roll buttons instead of desktop hints. Fork #439. (no PR) -
Android folder import and camera roll: File ▸ Import from Folder… works on Android. A folder on the device is
read in place with "All files access"; without it the folder is copied and stays linked. On the first start the
app offers to add the camera roll (DCIM/Camera, through the photo permission); the answer is remembered and
Settings ▸ Folders offers it again. Fork #421, #439. (no PR) -
Android fixes: photos picked from the system picker import again (opened through MediaStore when the media
provider refuses the document); the app no longer freezes on first start when sent to the background while it
asks for All files access; a touch tap clicks. Fork #429, #436, #439. (no PR) -
Privacy policy:
PRIVACY.mdsays what the app collects (nothing), every feature that goes online and how to
avoid it, and what each Android permission is for. Fork #441. (no PR)
Develop
- Develop panel no longer jumps: the Calibrated camera colour and Camera local tone mapping options stay shown
while a photo is decoded again (an edit, crop mode), AI Denoise progress moved to the activity stack, and the
masking status line keeps its space, so controls never move under the pointer. Fork #418. (no PR) - No one-pixel shifts while adjusting: the photo no longer moves by a pixel while a slider is dragged, whatever
the preview's resolution. Thanks @Kaan88. Fork #424, #434. (no PR) - Auto Sync white balance: syncing a Temperature or Tint edit gives every selected raw the same Kelvin and tint,
instead of a different value on raws whose white balance was still on the old relative scale. Fork #425, #430.
(no PR)
Library
- Colour label shortcuts toggle: 6–9 turn a colour label off when it is already assigned, and Shift+6–9
toggle and advance, as in Lightroom Classic. Thanks @deunderscorepaul. Fork #412, #416. (no PR) - Keyword hierarchies typed with > and <: the Add keyword box reads
animal > doganddog < animalas dog
inside animal instead of one literal keyword. Fork #413, #428. (no PR) - Keyword List parents: a selected photo with only a keyword below another shows a dash in the parent's tick
box; clicking it adds the parent keyword. Fork #413, #435. (no PR) - Faster keyword tree: the Keyword List is built from the keyword index and cached, so large keyword sets no
longer slow the panel down. Fork #371, #437. (no PR)
Interface
- Slider text size: Settings ▸ Interface ▸ Slider text offers Full Size, the regular text size for slider names
and values (one row or two); Compact stays the default. Fork #415. (no PR) - File name in the filmstrip: a source line above the filmstrip shows the source, the photo count, the
selection and the active photo's file name, as in Lightroom Classic. Fork #419. (no PR) - Plug-in Filters: clicking the section header opens the section. Thanks @nwh212. Fork #431. (no PR)
- Identity plate colour: the colour field takes only six hex digits. Thanks @clydecbrown. Fork #432, #433.
(no PR)
From upstream
- Smoother camera tone on raws: fitted camera tone curves are smoothed, and a DRO-lowered Sony curve follows
Sony's curve between knots, ending posterized skin and satin. Sony raws shot with DRO may look slightly different.
Fork #420. (⇠ storytold#2188) - Kelvin white balance for more raws: Canon CR2 / CR3, Panasonic / Leica RW2 and Pentax PEF bodies without
colour matrices read their white balance in Kelvin from the presets stored in the file. Fork #422. (⇠ storytold#2527) - Short ERF / MEF raws refused: an Epson ERF or Mamiya MEF whose raw strip runs past the end of the file is an
error, not a huge allocation. Fork #414. (⇠ storytold#2155) - Negative channels: tests that negative channel values pass through every pipeline stage safely. Fork #417.
(⇠ storytold#2278)
Fixes
- Map right-click menu: the menu keeps the place you right-clicked (or long-pressed), so Geotag Selected Photos
Here, Save Location Here and Copy Coordinates work instead of the menu shrinking and doing nothing. Thanks
@endthestart. Fork #323, #328. (no PR) - macOS updates from before the rename: 0.9.x installs can update again. The disk image also holds the app under
its earlier name, which their updater looks for, and the updater accepts an image built under an earlier name.
Fork #411, #438. (no PR)
Release builds and CI
- Update manifest: the release's
latest.jsonstep reads the release repository frombrand.tomldirectly,
so it no longer fails as it did for 26.43.4. Fork #410. (no PR)
Upstream pull requests
Ported from upstream: storytold#2188, storytold#2527, storytold#2155 and storytold#2278 (each listed above). No upstream PR was opened for this release;
the touch layout and the Android app are fork-only.