Skip to content

Releases: emmertex/chromaforge

Chromaforge v26.45.1

Choose a tag to compare

@github-actions github-actions released this 02 Nov 13:32
fd6b828

What's Changed

  • Release 26.45.1: settings migration runs before the log file opens (hotfix) by @emmertex in #773

Full Changelog: v26.45.0...v26.45.1

Chromaforge v26.45.0

Chromaforge v26.45.0 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 02 Nov 08:33
10617b8

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

Choose a tag to compare

@github-actions github-actions released this 31 Oct 09:09
479561d

What's Changed

Full Changelog: v26.44.3...v26.44.4

Chromaforge v26.44.3

Choose a tag to compare

@github-actions github-actions released this 30 Oct 13:44
38deb7f

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

Choose a tag to compare

@github-actions github-actions released this 29 Oct 18:54
da7eb87

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

Choose a tag to compare

@github-actions github-actions released this 28 Oct 21:17
7f00fa5

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

Choose a tag to compare

@github-actions github-actions released this 26 Oct 09:44
aeb6800

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 its plugins.json entry and data, and a plug-in that didn't load can now be removed (plugin.uninstall, a Remove button in the Plug-in Manager). version is now required, in semver, and installing an older version needs allowDowngrade (an Install Older Version button in the dialog). plugin.list reports 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 GainMap opcodes 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_BACKEND still 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 fit and add accept camera and look identifiers containing slashes (e.g. phone models such as Xiaomi 17 Ultra/2512BPNDAG and 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-photolab fits a camera calibration to that editor's exports. Calibration files gain an editor field (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 a chart camera-database entry, with --dcp, --preview and --report. See docs/chart-calibration.md. (no PR)
  • Compare renders from any editor: compare REFERENCE TEST in 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 --json report and a --diff ΔE00 map. (no PR)
  • Camera matrices for about 550 more models: dcraw's adobe_coeff table (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 .dcp or 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 .dcp writer moved from the CLI into lcc-raw (lcc_raw::dcp::write). (no PR)
  • Probe DNGs and slider sweeps: calibrate-lightroom probe writes 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-check reads 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 into fit like 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 the crs: 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

Choose a tag to compare

@github-actions github-actions released this 25 Oct 11:02

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-lightroom in 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 with add, and list shows 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.openAsLayers and editIn.savePreset no longer take a program (app, args, control), the Edit In menu
    commands no longer take app, and ui.set can't change the editors in Settings ▸ External Editing; a saved Edit In
    preset or the editor in Settings opens instead. The command line (run without --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 at catalog.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

Choose a tag to compare

@github-actions github-actions released this 24 Oct 07:09
8c0de9c

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.maskOverlayColor refuses 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 --aab builds 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-code overrides 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

Choose a tag to compare

@github-actions github-actions released this 23 Oct 06:47
00e3e66

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.md says 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 > dog and dog < animal as 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.json step reads the release repository from brand.toml directly,
    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.