Skip to content

Releases: emmertex/chromaforge

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.

Chromaforge v26.43.4

Choose a tag to compare

@github-actions github-actions released this 22 Oct 09:12
ffc249d

Chromaforge 26.43.4

LightCraft Classic is now Chromaforge. Same app, same libraries and settings, new name: update as usual and everything carries over.

The changes since 0.9.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 Classic layout or a fork issue with no upstream
counterpart).

The first release numbered by week: vYY.WW.B (ISO week-year, ISO week, the release's number within that week),
so this is the fourth release of week 43 of 2026, after 0.9.4, 0.9.5 and 0.9.6. The catalog format is unchanged
(version 13). Previews and smart previews are rendered again once after the update (the render and look versions
moved on).

The app is now Chromaforge

  • A new name: LightCraft Classic is now called Chromaforge from this release on: the window title, menus, About, the
    installers and the Android app. Nothing to do on your side: your settings, libraries, presets and catalogs are
    read where they always were, the program and command-line names stay the same, and the built-in updater keeps
    finding new releases, including after the repository moves to its new name (both addresses are accepted).
    Fork #403, #406. (no PR)

Highlights

  • Tidier Develop and Library: the strip at the far right is gone: the right panel shows and hides from the top
    bar (or F8), Library's Versions panel sits in its left column as in Develop, and About stays in the Help menu.
    Develop's slider names and margins are narrower, so the tracks are longer, and the photo's right-click menu groups
    its less-used items into submenus so it fits a 1280 × 720 screen. Fork #403. (no PR)
  • Two histograms: the histogram is taller, and a second one can show under it (right-click the histogram ▸
    Second Histogram), e.g. RGB Overlay above RGB Parade; view.histogram.second for scripts. Fork #403. (no PR)
  • Sliders stay under the pointer: past an end the thumb waits for the pointer to come back, as in Lightroom
    Classic, and a slow drag no longer lags; Settings ▸ Interface ▸ Slider control picks Absolute, Acceleration on
    Slider, Acceleration on Number (the default) or Acceleration. Fork #389, #400. (no PR)
  • Four new languages: Finnish, Indonesian, Swedish and Vietnamese. (⇠ storytold#2515)
  • Show in Folders and View Options: Photo ▸ File ▸ Show in Folders selects the photo's folder in the Folders
    panel, opens the folders above it and scrolls it into view; View Options sets the loupe's two Info lines next to
    the grid options; deep folder trees narrow their indent instead of cutting names. (⇠ storytold#2515)
  • Fujifilm X-Trans III in Kelvin: X-T20, X-T2, X-Pro2, X-E3, X-H1 and X100F raws are edited in Kelvin and Tint
    through the white points the camera stores in each RAF. (⇠ storytold#2514)

Develop

  • Defringe and slider names: Purple / Green sub-titles in Defringe, shorter slider names and a slider name
    column that keeps its width as panels open and close. Fork #397, #401. (no PR)
  • HDR headroom: the HDR slider is now called Headroom; the histogram no longer jumps to the taller HDR layout
    while dragging after HDR is turned off. Fork #277, #402, #403. (no PR)
  • Remove tool: review fixes for the Remove tool's overlays and modes. Thanks @deunderscorepaul. Fork #364,
    #386. (no PR)
  • Camera colour: Sony DRO in the camera's JPEG is taken into account when fitting the camera look; a raw whose
    camera JPEG is nearly black falls back to a neutral tone; Nikon lens profiles are found by the lens specification
    when the file names no lens model. (⇠ storytold#2515)
  • Masks: hidden masks or masks without components no longer change Clarity's tone base, and Defringe masks
    ignore hidden masks. (⇠ storytold#2515)

Library

  • Search: f:2.8, aperture:5.6 and focal:5.6 find photos shot at exactly that value, and words with a
    colon that aren't fields (10:30, Re:) find text; quoted names (person:"Jane Doe") stay one search word and
    plain words find named people. Thanks @clydecbrown. Fork #390, #391. (⇠ storytold#2515 for the quoted names)
  • Capture time: Edit Capture Time keeps the time zone of a time written without seconds. Thanks @clydecbrown.
    Fork #391. (no PR)
  • Update Folder Location: keeps folder colour labels (and those of the folders inside), and finds the photos of
    a catalog made on Windows when you're on macOS or Linux; a stored path can never relink a photo outside the new
    folder. Thanks @clydecbrown. Fork #399, #404, #405. (no PR)
  • Compare and Survey: the Info panel's stars and colour label apply to the active photo only, as the keys and
    the bottom bar do. (⇠ storytold#2515)
  • Faster smart albums and grid: File Path rules compare in place, and the grid re-reads only the photos an
    import or edit touched. (⇠ storytold#2515)

Import, export and formats

  • Nikon packed raws: D100 and Coolpix NRW files decode; a truncated packed NEF still opens with its missing rows
    black. (⇠ storytold#2515)
  • Export Fit: Image Sizing has Width & Height (fit inside both) next to Dimensions. (⇠ storytold#2515)
  • Import review: the album choice is the album picker, with folders and search. (⇠ storytold#2515)
  • Add to Apple Photos asks for permission: the installed macOS app asks once before sending Apple Events,
    instead of failing with nothing to turn on in System Settings. Thanks @clydecbrown. Fork #393. (no PR)
  • Web module previews: photos not yet seen in the Library get their thumbnails in the Web gallery preview.
    Fork #403. (no PR)

Display and settings

  • HDR display switch: Settings ▸ Performance ▸ HDR display (next launch) turns the HDR window off, for desktops
    that blur or stretch small text in it (KDE with mixed display scaling). Fork #403. (no PR)

Fixes

  • From the upstream merge of 2026-10-22 (Fork #395, upstream merged):
    • Sharper merges: HDR and panorama merges resample with Lanczos instead of blurring.
    • Fujifilm lens corrections: they now match the camera.
    • AI Denoise: works with DirectX 12 on NVIDIA GTX 10-series cards.
    • Sliders and zoom: scrolling the panel past an editing slider no longer changes it, and a pinch no longer
      re-renders the photo at every zoom step.
    • Reference view: a deleted reference photo is no longer drawn.
    • Lightroom imports:
      • thumbnails of Lightroom HDR and panorama merges in a second;
      • fewer false "not imported" warnings for Lightroom raws;
      • Fill Location from GPS no longer puts a neighbouring town in City.
    • Crop: portrait crop ratios stay portrait, and Constrain Crop tightens the crop you see.
    • Synchronize Folder: shows that it is listing the folder, and handles a folder that is already up to date.
    • Photo Merge: takes each photo once.
    • Presets: a preset that couldn't be saved is no longer lost silently.
    • Large libraries: the photo grid keeps up with imports.
    • Sony A7CR: distortion correction.

Release builds and CI

  • Week-based versions: releases are numbered vYY.WW.B: the ISO week-year, the ISO week and the release's
    number within that week. The tag, file names and every package (MSI, Android, macOS, Linux, Flatpak) carry the
    same version, and each release compares as newer than the last, so 0.9.x installs update to it. See
    docs/versioning.md. (no PR)
  • Rename-safe updates: installs accept releases from the repository's old and new addresses, so renaming it
    doesn't strand anyone. Fork #403. (no PR)
  • GPU heal-spot check: the windowed heal spot's CPU/GPU check allows Metal's rounding on a few pixels and holds
    the mean ten times tighter instead. Fork #388. (no PR)
  • Slideshow crates: the Slideshow module lives in crates/classic-slideshow, upstream's slide crate is back at
    crates/slideshow. Thanks @clydecbrown. Fork #394. (no PR)

Upstream pull requests

Merged from upstream: storytold#2515 (integration of 85 reviewed PRs, round 2, merged upstream) and storytold#2514 (Kelvin for
Fujifilm X-Trans III, open upstream; the fork carries it ahead of its merge), plus the upstream merge of
2026-10-22 (Fork #395). Where upstream and the fork differ, the fork's behaviour is kept and upstream's change added
on top (the merge commits list each case).

LightCraft Classic v0.9.6

Choose a tag to compare

@github-actions github-actions released this 21 Oct 21:13
374548f

Not in this build: flatpak (the job failed; see the workflow run).

0.9.6

The changes since 0.9.5. After each item, the matching upstream pull request: (↑ #n) means the
maintainer of this fork opened it upstream, (⇠ #n) means it was ported from an upstream PR, and (no PR)
means there is none (the change is in the fork's own Classic layout or a fork issue with no upstream counterpart).

The catalog format is unchanged (version 13). Raws developed through a camera profile (.dcp) without a tone curve
of its own, such as Adobe Standard, now use the default tone instead of the one fitted to the camera's JPEG, so they
can look a little more saturated than in 0.9.5.

Highlights

  • Lightroom Classic's layout, Library to Develop: Folders lists each disk's folders under its bar, with Local in
    a Local Folders panel of its own; the Grid has Classic's toolbar (Painter, Sort, colour labels, rotate, previous /
    next, slideshow), the Library Filter bar above it and the filmstrip under it; the Develop panels follow Classic's
    order (Basic, Tone Curve, Color Mixer, Color Grading, Detail, Lens Corrections, Transform, Effects, Calibration),
    each with its own switch and ⌘1–⌘9; Crop & Straighten is Classic's drawer; and Crop, Remove, Red Eye and Masking
    sit in a row under the histogram, each opening its drawer above the panels. Thanks @endthestart. Fork #380, #381,
    #382. (no PR)
  • Edit in place on a NAS: opt-in folder polling finds photos other apps add to the library's folders (shown as
    "N new" or added automatically), sidecars changed by another app are read automatically when the catalog hasn't
    changed since the last sync, and sync-folder, open-url and sync links run Synchronize Folder from scripts.
    On macOS, libraries and sidecars on SMB shares that refuse a full flush are written again. Fork #123, #377, #375.
    (no PR)
  • Enhance ▸ Raw Details and Super Resolution: Photo ▸ Enhance… (Ctrl+Alt+I / ⌘⌥I) previews the middle of the
    photo before and after, estimates the time and writes a new linear DNG (-Enhanced-RD, or -Enhanced-SR at twice
    the size per side), stacked with its source and in the activity stack; enhance.rawDetails and
    enhance.superResolution for CLI, MCP and scripts. Fork #355, #358, #367. (no PR)
  • HDR everywhere, and on the GPU: zoomed views, Before/After, Compare / Reference and the second window show HDR
    edits above SDR white; View ▸ HDR Preview toggles the SDR rendition; the HDR render (views, exports, gain maps)
    runs on the GPU, about 3× faster. Fork #354, #357, #367. (no PR)
  • Android in every release: an APK for phones and tablets (arm64-v8a), one for the emulator and Chromebooks
    (x86_64) and a Play Store bundle. Photos can be shared, opened or dropped in, folders on the device are read in
    place with "All files access", picked folders are rescanned for new photos, and the on-screen keyboard works in
    text fields. The Android app is still early (see docs/android.md). Fork #341, #344, #345. (no PR)

Develop

  • Eboda Colour profile: a new Basic profile that gives a raw developed through a camera profile (.dcp) the look
    Lightroom Classic's default colour gives it (fitted to rendered output only: mean colour difference 12.2 → 1.2 ΔE
    on a Leica SL photo). The base profile is renamed Craft Colour and renders as before. Fork #362. (no PR)
  • Camera profiles keep their own tone: a .dcp without a tone curve no longer takes the tone fitted to the
    camera's JPEG (it desaturated midtones by about 15 % on a Leica SL DNG). Fork #362. (no PR)
  • Precise Tone Curve points: a click on the point curve adds a point on the curve, so the photo doesn't change
    until it is dragged, and Input / Output fields (0–255) place the selected point exactly. Thanks @endthestart.
    Fork #340, #373. (↑ storytold#2394)
  • Lens corrections no longer leave grey corners: a lens profile, the camera's own distortion correction, manual
    Distortion or Chromatic Aberration crop just inside the corrected photo, as Lightroom does. Fixes fork #245.
    Fork #374. (no PR)
  • Cleaner sliders: no cut-off names, short names inside groups, a smaller thumb; Settings ▸ Interface ▸ Sliders
    chooses One Row or Two Rows; slow drags move at 30 % speed for fine changes. Fork #346, #383. (no PR)
  • Remove tool: brush strokes show as one outline with a high-contrast halo; spots carry their mode (Heal, Clone,
    Remove, Content-Aware), a single anchor pin and a tether arrow, with a right-click menu and editing of each spot in
    the panel. Thanks @deunderscorepaul. Fork #364. (no PR)
  • HDR merge of JPEG brackets: JPEG and TIFF brackets are linearised through a camera response recovered from the
    bracket, and frames are held as half floats (a 5 × 48 MP merge peaks at 3.6 GB, was 5.1 GB). Fork #353. (no PR)

Library

  • One pinned histogram: the histogram stays at the top of the Library's right column, as in Develop, and follows
    the photo selected in the Grid; Waveform and RGB Parade no longer show stripes. Fork #361, #384. (no PR)
  • Filter by Rating menu: Library ▸ Filter by Rating sets the rating filter (at least / exactly / at most) without
    the filter bar; search understands rating:>=N and rating:<=N. Fork #366. (no PR)
  • Metadata and export presets import: Lightroom Classic metadata and export presets (.lrtemplate), XMP metadata
    templates and the app's own preset files import as reusable presets; creator contact details are stored, edited in
    the Metadata panel and written to sidecars and exports. Fork #366. (no PR)
  • New libraries start like Classic's Grid: without date sections, and the Catalog panel lists All Photographs.
    Thanks @endthestart. Fork #381. (no PR)
  • Sorting and keywords: photos that tie on the sort key sort by file name; the keyword tree and Keyword List are
    faster. Thanks @clydecbrown. Fork #370. (⇠ storytold#1011)

Import, export and formats

  • Lightroom sidecars and browsed folders: importing a folder browsed under Local adds its photos; fewer false XMP
    warnings, and the remaining ones in a window with Select, Copy and Save; on macOS the next click after a file
    dialog is no longer lost. Thanks @endthestart. Fork #379. (no PR)
  • Folder drops finish: a folder dropped on the window goes through the same scan and import review as
    File ▸ Import from Folder…; imported folders are listed by name. Fork #366. (no PR)
  • Canon lens names: older Canon CR2 and sRAW files that carry the lens name only in the MakerNote report it, so
    lens profile lookup finds a match. Thanks @deunderscorepaul. Fork #260, #372. (no PR)

Display, print and video

  • Windows VRR flicker: an opt-in DX12 DirectComposition setting (needs a restart) replaces the continuous
    repainting from fork #216. Adapted from @kmnkv1's implementation. Fork #376. (↑ storytold#2421)
  • Print through the Windows print spooler: any Windows printer, with paper size, orientation and copies.
    Fork #351. (no PR)
  • Sound by default on macOS and Windows: clips and slideshows play sound through the system audio. Fork #350.
    (no PR)
  • Video: interlaced H.264 is decoded and deinterlaced; AV1 decodes 20–30 % faster. Fork #356. (no PR)

Performance

  • GPU histogram: GPU renders bin the histogram and scopes on the GPU (24 MP render 75 → 68 ms). Fork #352.
    (no PR)
  • Thumbnails settle: two views of one photo at different sizes no longer re-render each other's thumbnail every
    frame, so Slideshow and Print stop using the CPU while idle. Thanks @endthestart. Fork #339, #378. (no PR)
  • Keywording with big keyword lists: suggestions and the Add keyword box take well under a millisecond with
    thousands of keywords (were over 100 ms). Fork #343. (no PR)

Fixes

  • Android picker: Add Photos works when Android stops the app while the system picker is open, and failures show
    an error instead of nothing. Fork #344. (no PR)
  • Heal and Remove spots in zoomed views: a spot near the edge of a zoomed-in view renders as it does in the
    whole photo and in exports (the zoomed render read too little around it since the Remove tool changes). (no PR)
  • Hostile Lightroom catalogs: a .lrcat whose cells alias one large record can no longer make an import decode
    without bound. Fork #365. (no PR)

Upstream pull requests

No upstream merge in this release. storytold#2394 and storytold#2421 are open upstream; the fork carries them ahead of their merge.