Repository navigation
Releases: emmertex/chromaforge
Release list
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.
Chromaforge v26.43.4
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.secondfor 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.6andfocal:5.6find 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
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, andsync-folder,open-urlandsynclinks 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-SRat twice
the size per side), stacked with its source and in the activity stack;enhance.rawDetailsand
enhance.superResolutionfor 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
.dcpwithout 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 understandsrating:>=Nandrating:<=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
.lrcatwhose 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.