What's Changed
- Integrate community fixes, batch 1 (18 PRs + follow-ups) by @bflatastic in #349
- LR-IMP-FORMATS: RW2 format 8: decode each 2×2 cell column by column by @radialmonster in #255
- Fix Nikon NEF CropArea and embedded preview colour space by @Hanmo123 in #257
- Correct global Tint direction (compatibility review) by @Hanmo123 in #258
- Web: prune the thumbnail cache to the configured budget (#245) by @itsmunzir in #267
- Issue #180: ICC profiles carry a fixed header date, so exports are byte-identical by @wstock in #268
- Issue #182: library.select and id queries reject a photo id that is not in the library by @wstock in #269
- LR-IMP-FORMATS: ORF colour-filter layout from the file's Exif CFAPattern by @marek-hubar in #277
- Preserve embedded preview aspect ratios by @stano-bustor in #280
- Issue #166:
snapshot --scriptexits non-zero when a scripted request fails by @wstock in #284 - Issue #157: colour-range mask tolerance narrowed so a sample stops at its own colour by @wstock in #285
- Issues #181, #183:
app.exportrefuses unknown params and bad values; watermark keys documented and range-checked by @wstock in #287 - Issues #164, #169:
--memorysessions write nothing — noui.json, no settings folder by @wstock in #288 - Issue #266: filmstrip labels cut file names on characters, not bytes by @wstock in #289
- Issue #187: the filmstrip highlights every selected photo, not only the active one by @wstock in #292
- TIFF: invert WhiteIsZero once, and decode 1-, 2- and 4-bit samples by @Issuenate in #300
- LR-EXP-WATERMARK: shape Japanese vertical watermark glyphs by @midasdf in #311
- Fix Windows Explorer reveal path and platform file manager labels (#272) by @peiyan0 in #324
- macOS menu: single-key shortcuts reach egui (E, C, ⇧P, ratings…) by @xak47d in #261
- Integrate community PRs, batch 2 (14 PRs + follow-ups; stacked on #349) by @bflatastic in #350
- RW2/RWL: apply the distortion correction Panasonic and Leica cameras record in the file by @radialmonster in #262
- LR-PROF-CAMERACOLOR: fit the camera look away from edges when a lens-corrected JPEG misaligns (#232) by @radialmonster in #263
- Desktop: write log records to a rotating log file as well as standard error by @switch87 in #286
- macOS DMG: branded window background and icon layout by @XusBadia in #297
- Sidebar: Folders section — explore the library by the folders photos were imported from by @nledford in #307
- Improve library culling shortcuts and color label feedback by @Hanmo123 in #308
- Crop: stop at image edge, lock aspect on every handle, visible lock + custom ratio (#295) by @nledford in #312
- Add trackpad image zoom and pan with stable cursors by @sebastianpfluegelmeier in #313
- Select All selection visuals and re-importing deleted photos (#298) by @nledford in #325
- engine, ui: support imported LUT profiles in profile dropdown and browser (#328) by @peiyan0 in #333
- Issue #168: the desktop app and CLI log warnings to stderr; RUST_LOG works by @DWAA1660 in #340
- Import: Shift-click checks or unchecks a range of photos in the review (#338) by @MarekSpodBiedry in #347
- Fetch: opt-in bearer token, validated file specs, borrowed FileSpec, download_url by @voshart in #259
- Integrate community PRs, batch 3: German + Russian UI, Fujifilm compressed RAF, raw fixes (stacked on #350) by @bflatastic in #363
- Added Russian language by @wondarkus in #264
- Decode Fujifilm compressed RAFs and add guarded camera colour support by @sebastianpfluegelmeier in #282
- Issue #234: Windows opens links (Map button) in the browser, not File Explorer by @MarekSpodBiedry in #339
- LR-IMP-FORMATS: NEF lossy type 2 curve of version
0x44 0x40spans a quarter of the sample range by @radialmonster in #358 - M16: Add German interface localization by @marceldenzer in #265
- LR-IMP-CAMERA-COVERAGE: read Canon ColorData stored as bytes, so PowerShot and EOS M CR2s get their as-shot white balance by @radialmonster in #356
- Fix #322: type an exact value into a slider by @bflatastic in #352
- Fix #316: the section eye switches Light, Color and Detail off, and can be clicked by @bflatastic in #353
- Fix #341: By Date and Keywords rows show their photos from All Photos by @bflatastic in #354
- AI masks: the worker stops counting a job as pending before it replies by @bflatastic in #365
- Fix #293: undo and redo show the photo they change by @bflatastic in #364
- Fix #319: release builds pin craft-fonts with Noto Sans CJK SC (includes #203) by @bflatastic in #361
- Docs: allow Noto CJK (via craft-fonts) for Chinese text by @echelon in #203
- Fix #171: a library that can't be locked opens with a warning the user sees by @bflatastic in #369
- Part of #260: a desktop start that fails says why, in a message box naming the log by @bflatastic in #370
- Integrate #279 (Canon CR3 decoding) and #362 (file dialog filters) by @bflatastic in #375
- M11.1: add CR3 decoding and measured Canon lens correction by @wrgdbtry in #279
- Fix #372: masking tile labels and long mask names stay inside their boxes by @bflatastic in #379
- Fix #366: the SAM 3 dialog without a download location shows how to install by hand by @bflatastic in #381
- Fix #371: Spanish interface by @bflatastic in #382
- Part of #372: painted-text layout tests from #376 by @bflatastic in #383
- Integrate #373 (keymap editor), #218 (Lightroom catalog import), #367 (parallel import copies), #344 (import file types) by @bflatastic in #389
- Import Lightroom Classic catalogs natively by @bogusyogi in #218
- Integrate part of #374 (bounded folder walks, launch imports off the UI thread) and #385, #386, #387 by @bflatastic in #394
- LRC-LIB-LIBFOLDERS: a chosen folder that follows a move keeps its names' case and the platform's separators by @radialmonster in #385
- M11.4: the X-T20 corpus RAF is fitted since the away-from-edges retry by @radialmonster in #386
- LRC-LIB-LIBFOLDERS: the sidebar rename test builds its folder ids with forward slashes on Windows by @radialmonster in #387
- Integrate #391 and #393 (undecodable raws import as preview only), with a work budget for the JPEG scan by @bflatastic in #398
- LR-IMP-FORMATS: TIFF raws with a thumbnail-only IFD0 import as preview only, not as a tiny image by @radialmonster in #391
- LR-IMP-FORMATS: raws we cannot decode import as preview only when any usable JPEG is embedded by @radialmonster in #393
- Header-only import probes (part of #367), PSD RLE allocation bounds, and #397 (CR3 C-RAW clipped highlights) by @bflatastic in #401
- LR-IMP-FORMATS: CR3 C-RAW samples that overshoot the bit depth are clamped, not rejected by @radialmonster in #397
- Fix #310 (CR2/PEF starting look) and integrate #402 (menus stay below the menu bar) by @bflatastic in #405
- Fix #189: in-window menus and submenus stay below the menu bar by @ragtux in #402
- Fix #374: troubleshooting for the NVIDIA shader-cache startup hang by @bflatastic in #409
- Integrate #407 (file dialogs off the UI thread) and #408 (macOS top-bar drag and zoom) by @bflatastic in #413
- Fix #191: commands' file dialogs run off the UI thread by @ragtux in #407
- Top bar: drag to move and double-click to zoom the window (macOS) by @nledford in #408
- Integrate #351 (sharp zoomed Detail view, #323) with follow-ups by @bflatastic in #419
- Sharp zoomed Detail view: render at the drawn size and render the visible window at the zoom scale (#323) by @nledford in #351
- Integrate #403, #411, #412, #414, #415, #416 by @bflatastic in #424
- Part of #260: Help ▸ Open Log Folder shows the log file in the file manager by @ragtux in #403
- M16: use paintable separators in localized UI text by @midasdf in #411
- M16: keep grapheme clusters intact in vertical watermarks by @midasdf in #412
- PSD: as_chunks in the palette and 16/32-bit plane loops (clippy 1.98) by @Exalted5373 in #414
- LR-IMP-FORMATS: no overflow deciding whether to scale a full-size JPEG decode by @Exalted5373 in #415
- LR-IMP-PROFILES: XMP preset import fixes (bookkeeping, LensProfileEnable, channel curves) by @Exalted5373 in #416
- Integrate #429, #426, #422, #395, #172, #173, #174, #335, #427 by @echelon in #439
- Faces: model manifests, an ONNX probe, and Settings ▸ Faces (no runtime yet) by @voshart in #172
- Faces: YuNet face detection and one-click model downloads (nothing bundled) by @voshart in #173
- Faces: recognition in pure Rust, People view, and the Settings > Faces model manager by @voshart in #174
- LR-IMP-FORMATS: HEIC/HEIF decode behind the optional
heiffeature by @hemna in #335 - LR-BEHAV-HEADLESS: keep snapshots on the CPU and bound viewport dimensions by @sanyamsingh001 in #395
- Web: the window wire test allows the CPU/GPU difference by @Exalted5373 in #426
- Format support from #327: JPEG XL DNG, gain table map (not rendered), semantic mattes, BaselineSharpness, camera-space WB by @Exalted5373 in #427
- LR-IMP-FORMATS: 12-bit raws packed in 32-bit little-endian words (Coolpix NRW, FinePix S1 / X-A10 / SL1000) and the NRW black level by @radialmonster in #429
- MENU-BAR: pointing at another menu title switches the open menu by @radialmonster in #422
- Integrate #423, #359 by @echelon in #440
- feat: run SAM3 masks on a remote Metal worker by @joshuaswarren in #359
- Albums tree: matching tree view, create inside folders, drag to move and order by @nledford in #423
- AI RAW denoise with opt-in models and pure-Rust CPU/GPU inference by @voshart in #384
- CI: restore green FreeBSD builds by @echelon in #445
- Integrate #453, #470, #482, #492, #433, #465 by @echelon in #511
- LR-IMP-FORMATS: CR3 photos render in the aspect ratio set in the camera by @radialmonster in #433
- LR-IMP-FORMATS: read plain packed 12-bit PEF strips tagged as PackBits (older Pentax and Samsung GX-1L) by @radialmonster in #453
- M11.1: decode EOS R7 C-RAW (odd-height CRX QP map) by @cookingwithsimon in #465
- LR-IMP-FORMATS: report Sony A200/A230/A350 packed ARW as unsupported (preview fallback) by @radialmonster in #482
- LR-IMP-FORMATS: decode Canon sRAW and mRAW CR2 from their data instead of the preview by @radialmonster in #492
- LR-IMP-FORMATS: read the PEF colour-filter layout from the Exif CFAPattern for every compression by @radialmonster in #470
- Integrate #489, #493, #495, #494, #444, #484, #477 by @echelon in #512
- fix(macos): prevent SIGILL crash on exit by replacing viewport close … by @onemannoplan in #444
- Fix #226: a refused Web Locks request no longer leaves the web app loading by @MarekSpodBiedry in #477
- LR-BEHAV-GPU: compile DX12 shaders with FXC, never a stray dxcompiler.dll (issue #471) by @HarrisXiu in #484
- LRC-LIB-CATALOG-IMPORT: import catalog crops that have no HasCrop by @rock-meister in #489
- LRC-LIB-CATALOG-IMPORT: carry catalog crops through the photo orientation by @rock-meister in #493
- LRC-LIB-CATALOG-IMPORT: import straightened catalog crops as Lightroom shows them by @rock-meister in #495
- Keep Local import headers readable in narrow panes by @QuirkyTurtle94 in #494
- Integrate #478, #368, #460, #449, #451, #468 by @echelon in #545
- Issue #272: Show in Explorer selects photos whose path has a space by @MarekSpodBiedry in #368
- M6: move radial masks by dragging inside their ellipses by @Hanmo123 in #449
- Keep selection near deleted photos instead of jumping to the first by @midasdf in #451
- fix #425: Restore Simplified Chinese font rendering by @henu043 in #460
- catalog: group photos without capture date under Unknown Date (#437) by @peiyan0 in #468
- Web restore: reject originals that don't match their content hash (#227) by @MarekSpodBiedry in #478
- Integrate #474, #448, #447, #499, #459 by @echelon in #546
- LR-IMP-FORMATS: decode lossy JPEG XL DNG tiles completely and without clipping by @radialmonster in #447
- LR-IMP-FORMATS: decode Hasselblad 3FR files with uncompressed raw data by @radialmonster in #448
- LR-IMP-FORMATS: decode Samsung SRW files with uncompressed raw data by @radialmonster in #459
- LR-IMP-CAMERA-COVERAGE: xtask corpus verifies the sha256 of every downloaded corpus file by @radialmonster in #474
- LR-PROF-CAMERACOLOR: fit the starting tone curve by quantile matching (no flat steps), old fit as fallback by @radialmonster in #499
- Integrate #464, #273 by @echelon in #553
- Camera local tone mapping (ProfileGainTableMap) as a per-photo opt-in by @BuonBreda in #273
- MCP: core tools, resources, export progress and cancellation by @storybored379 in #464
New Contributors
- @bflatastic made their first contribution in #349
- @Hanmo123 made their first contribution in #257
- @wstock made their first contribution in #268
- @marek-hubar made their first contribution in #277
- @stano-bustor made their first contribution in #280
- @Issuenate made their first contribution in #300
- @peiyan0 made their first contribution in #324
- @xak47d made their first contribution in #261
- @switch87 made their first contribution in #286
- @XusBadia made their first contribution in #297
- @sebastianpfluegelmeier made their first contribution in #313
- @MarekSpodBiedry made their first contribution in #347
- @wondarkus made their first contribution in #264
- @marceldenzer made their first contribution in #265
- @wrgdbtry made their first contribution in #279
- @ragtux made their first contribution in #402
- @Exalted5373 made their first contribution in #414
- @hemna made their first contribution in #335
- @sanyamsingh001 made their first contribution in #395
- @joshuaswarren made their first contribution in #359
- @cookingwithsimon made their first contribution in #465
- @onemannoplan made their first contribution in #444
- @HarrisXiu made their first contribution in #484
- @rock-meister made their first contribution in #489
- @QuirkyTurtle94 made their first contribution in #494
- @henu043 made their first contribution in #460
- @BuonBreda made their first contribution in #273
Full Changelog: v0.4.0...v0.5.0