What's Changed
- Updates: shared check-result dialog from craft-update by @aiongg in #3437
- docs: tidy agent, contributor and asset docs by @aiongg in #3436
- Integration r3: 178 reviewed PRs by @aiongg in #3430
- Issue #3405: Auto Import waits for an import that starts during its listing by @finaler1x in #3409
- LR-BEHAV-ACCESS: a date header in the photo grid is named with the text it shows by @nledford in #3212
- LR-BEHAV-ACCESS: a slider's value field is named " value" and describes how to use it by @nledford in #3214
- LR-VIEW-PHOTOGRID: the grid's empty view names Import Photos' shortcut as the keymap has it by @nledford in #3221
- Issue #3228: the hard-link originals test holds under SeBackupPrivilege (Git Bash, the CI gate) by @THEtheChad in #3230
- Reject signed ports in Url::parse by @Silvertree2010 in #3233
- Reject signed numbers in Content-Range parsing by @Silvertree2010 in #3234
- Show the remembered crop ratio's box on an untouched photo by @Silvertree2010 in #3235
- Reject EXIF offsets beyond 18 hours by @TheGalitube in #3242
- LR-BEHAV-ACCESS: an icon button's accessible name is its label, with the shortcut as its description by @nledford in #3253
- LR-BEHAV-ACCESS: a dialog is exposed to screen readers as a dialog, not a group by @nledford in #3260
- LR-BEHAV-ACCESS: the photo in Detail is named with its file name by @nledford in #3262
- LR-BEHAV-ACCESS: the grid's Thumbnail size reads as a slider by @nledford in #3265
- LR-BEHAV-ACCESS: panels and bars are named as landmarks and toolbars by @nledford in #3273
- LRC-LIB-FOLDERS: the home folder and Local's built-in places can't be renamed or moved by @nledford in #3276
- Develop exports from a source at least twice the output size by @Silvertree2010 in #3281
- Refuse a signed or malformed Content-Length in HTTP responses by @Silvertree2010 in #3283
- FACES: a person's page finds its look-alikes in seconds, not minutes by @tabasko78 in #3286
- MENU-BAR: merge the native menu's identical quit/about/settings branches (clippy::if_same_then_else) by @Peaperfish in #3295
- Issue #3293: README no longer lists an MCP mask helper by @Peaperfish in #3296
- Issue #3251: People card badge shows the full photo count by @Peaperfish in #3297
- Issue #3272: AI masks are enlarged along the photo's edges, no outline under a raised Exposure by @Peaperfish in #3298
- Contributors: add my entry (Peaperfish) by @Peaperfish in #3307
- Reject malformed base64 in MCP and segmask decoders by @Silvertree2010 in #3309
- LR-IMP-FORMATS: decode compressed RAF 13–17 % faster with a buffered bit reader by @cbram in #3321
- LRC-LIB-CATALOG-SWITCH: a library missing at launch is reported instead of being made anew with demo photos (#3239) by @Bruno-Alumn in #3322
- LR-MASK-PINS: Object and Describe masks show a pin that selects them (#3049) by @Bruno-Alumn in #3323
- LRC-LIB-FOLDERS: Move Folder To… asks for the destination without freezing the window (#3140) by @Bruno-Alumn in #3325
- LR-VIEW-HISTOGRAM: the histogram's clipping buttons read in every theme by @nledford in #3331
- LR-BEHAV-TITLEBAR: a dialog leaves the macOS title bar undimmed by @nledford in #3332
- fix(ui): translate the white balance preset menu by @newdives in #3364
- Reject multiple GPX document roots by @TheGalitube in #3367
- Issue #3368: drop_import's launch-list tests wait for the library checks before clicking by @THEtheChad in #3369
- Ignore negative XMP pixel dimensions by @TheGalitube in #3371
- LR-IMP-FORMATS: a Samsung panorama JPEG with its SEF trailer imports (#3350) by @Bruno-Alumn in #3375
- LR-MASK-COLORRANGE: a colour-range mask keeps at most 64 samples however it is loaded (#2556) by @Bruno-Alumn in #3379
- PERF-SMART: a File path rule over a non-ASCII path folds case in stack buffers instead of allocating two strings per photo by @nledford in #3383
- LR-MASK-OBJECTS: a SAM 3 checkpoint in Meta's original format is named as such, not as an unsupported dtype (#3378) by @Bruno-Alumn in #3384
- Never crash: a mask id at the u32 limit doesn't overflow the next mask's id by @Bruno-Alumn in #3385
- Never crash: strip byte counts near u64::MAX don't overflow their sum in ORF, SRW, ARW and PEF by @Bruno-Alumn in #3386
- LRC-LIB-MISSING: settling waits for the Missing Photos count, which can't panic on spawn by @mpratsaki in #3392
- LR-EXP-DIM: export sizes keep the pixels typed (#3300) by @Bruno-Alumn in #3396
- Never crash: a photo renders at most 64 red eye corrections (#2556) by @Bruno-Alumn in #3398
- Never crash: a Samsung encryption key past i64::MAX doesn't overflow keyed() by @Bruno-Alumn in #3400
- RAW.colour: fit the per-file look on the vignetting-corrected sensor by @cbram in #3402
- LRC-LIB-CATALOG-SWITCH: files waiting for a library wait for a running import instead of being dropped (#2779) by @Bruno-Alumn in #3403
- Control: pointer and scroll gestures refuse numbers past any screen instead of queueing NaN positions by @Bruno-Alumn in #3408
- Issue #3406: Auto Import says when it can't read the watched folder by @finaler1x in #3410
- i18n(it): panel and tab group menus, update check, rules, import and retouch labels by @fabiodalez-dev in #3411
- Issue #3412: accessibility audit allows missing glyphs without craft-fonts by @finaler1x in #3413
- Issue #1764: running out of device memory falls back without stopping the GPU by @finaler1x in #3419
- fix(ui): wrap the Edit header buttons instead of letting Reset cover HDR by @Enthendor in #2804
- Enable Filters: a folder moved while filters are off is followed by the filter put aside, and Cmd+L still brings it back (follow-up to #2709) by @marcoarnulfo in #2805
- LR-META-LOCATION: reject malformed typed GPS coordinates by @ronibalthazar in #2821
- LR-BEHAV-DRAGDROP: a right-click on a text field while photos are carried opens no menu by @nledford in #2823
- LR-LIB-ALBUM: album commands skip photos the library lacks and record nothing when they add nothing by @nledford in #2825
- LR-BEHAV-MULTISELECT: replacing the selection with a repeated id keeps each photo once by @nledford in #2830
- Write sidecar keywords as names in dc:subject and paths in lr:hierarchicalSubject by @j-a-b-r-o-n-i in #2841
- GPU: black pixels take the colour tools and a light vignette as on the CPU by @radialmonster in #2844
- LRC-SS-LAYOUT: the Slideshow settings page no longer moves when the slide preview finishes rendering by @nledford in #2848
- LR-EXP-METADATA: refuse Originals with embedded place names by @ronibalthazar in #2849
- i18n(fr): complete the French catalog (1,154 entries) by @Atalantis in #2851
- Keywords: start and stop painting with the keyboard shortcut by @dotCooCoo in #2856
- LRC-LIB-LIBFOLDERS: Don't ask again when moving photos is kept only when the move started by @nledford in #2858
- docs(linux): document LLVM 23 ThinLTO SIGILL workaround (#2811) by @Zaxaerith in #2885
- Export: note when LZW is picked for TIFF, 16-bit ZIP size test (#2882) by @radialmonster in #2890
- Reject signed chunk sizes in the HTTP chunked decoder by @Silvertree2010 in #2908
- Reject incomplete ISO timestamps in metadata and track logs by @ronibalthazar in #2912
- PERF-WINDOW: the window queues one frame, not two (eframe's low-latency surface) by @ZJHeepfixer in #2919
- Issue #2936: build the GPU kernels on parallel threads by @iluebbe in #2942
- LR-EDIT-COLOR-TEMP: a one-field white balance partial keeps the other field's look (#2910) by @hnoerenberg in #2952
- LR-IMP-ADD-DIALOG: an import checks its probes and looks up sidecars several at a time by @nledford in #2954
- Accept a UTF-8 BOM at the start of lightcraft-cli --script files by @Silvertree2010 in #2963
- LR-IMP-ADD-DIALOG: handle rename sequence exhaustion by @ronibalthazar in #2964
- LR-META-EXIF-FULL: reject malformed EXIF clocks by @ronibalthazar in #2977
- Issue #2819: the histogram stays SDR when HDR is switched off by @x-labb in #2981
- Issue #2980: Clear Color Label can be given a keyboard shortcut by @x-labb in #2986
- GPU-TESTS: every WGSL kernel parses and validates in the test run, without a GPU by @OneSlips in #2989
- LR-EDIT-EFFECTS-GRAIN: grain skips a degenerate frame instead of producing NaN pixels by @emmertex in #3003
- CLI-HOSTILE: render --set refuses inf / NaN instead of dropping the value by @emmertex in #3006
- LR-EDIT-OPTICS-PROFILE: lens profiles for compact cameras with a built-in lens by @emmertex in #3013
- Never crash: an oversize export size is an error, not a multiply overflow by @emmertex in #3015
- LR-PROF-CAMERACOLOR: docs count 9 bundled camera profiles, not 5 by @Peaperfish in #3027
- i18n(it): launch library chooser, Lightroom import destination and new settings by @fabiodalez-dev in #3035
- Windows: declare the gvfs test path only where it is used by @eliets2 in #3042
- Issue #3069: --connect resends a command that crossed the app's idle-close notice by @THEtheChad in #3076
- Issue #3065: the settings test puts the memory budget back as it found it, one budget-changing test at a time by @THEtheChad in #3088
- Issue #3070: the CLI's refused-connection tests use a free port, not 18437 by @THEtheChad in #3098
- Issue #3067: ui-egui test apps render on two workers, not six (peak −22 %) by @THEtheChad in #3113
- PERF-CATALOG: a smart album's per-photo test stops storing an answer nothing can read by @nledford in #3121
- LC-002: reject non-object script parameters by @DAnaeto in #3122
- LC-001: stop commands after failed imports by @DAnaeto in #3123
- LC-003: reject non-Unicode CLI arguments without panicking by @DAnaeto in #3124
- Reject signed list indexes in indexed develop control ids by @Silvertree2010 in #3165
- LR-BEHAV-DIALOGS: a one-line prompt that's refused stays open and says why by @nledford in #3167
- LR-IMP-ADD-DIALOG: an import's probe opens each file once by @nledford in #3176
- Disarm color picking when adding mask components by @TheGalitube in #3182
- Drop the sign from slider text that rounds to zero by @Silvertree2010 in #3188
- MENU-BAR: the macOS menu bar keeps every row when two rows run the same command by @nledford in #3196
- MENU-BAR: shortcuts list their modifiers in one order everywhere on macOS (⇧⌘I, not ⌘⇧I) by @nledford in #3200
- LR-BEHAV-ACCESS: the sidebar's disclosure triangles name their row by @nledford in #3209
- MENU-HELP-HELP: on macOS the Help menu is registered with AppKit after the menu bar is installed by @nledford in #3220
- LR-MAP-TRACKLOG: Decode XML character references in GPX by @ronibalthazar in #2529
- Return None from shift_iso for impossible calendar dates by @Silvertree2010 in #2530
- Tests: discovery tests use the platform's path separator (Windows) by @OneSlips in #2547
- i18n(ka): Georgian for 336 interface strings, 48 format messages and the 559 untranslated What's New lines by @devius in #2582
- Reset the profile section to the default profile by @eliets2 in #2583
- Write capture time UTC offset and sub-seconds in write_exif by @Silvertree2010 in #2605
- LR-CROP-RECT: sidecar settings kept in range; a turned crop bounded to the photo (#2555) by @insideTheFlux in #2623
- i18n(it): translate the effect presets, slideshow, print, people and overlay strings by @fabiodalez-dev in #2624
- raw: CR3 preview box scan checks 32-bit lengths for overflow (#2569) by @radialmonster in #2628
- LRC-LIB-MISSING: library.missing from the control channel checks the files off the UI thread by @nledford in #2629
- LR-EDIT-DETAIL-DENOISE: GPU denoise doesn't hang when its tiles in flight fail (#2577) by @Bruno-Alumn in #2631
- MCP: render and screenshot PNGs go through a private temp folder (#2573) by @Bruno-Alumn in #2632
- LR-MASK-BRUSH: with the mask overlay hidden, the stroke being painted no longer tints the photo (#2549) by @Bruno-Alumn in #2639
- LR-LIB-SMARTALBUM: editing a smart album made from an album view keeps the album by @nledford in #2647
- Never crash: the work gate's byte count saturates instead of overflowing (#2576) by @insideTheFlux in #2648
- LR-FILT-FLAG: the filter bar's flag buttons combine, Picked + Unflagged hides only the rejects by @marcoarnulfo in #2651
- LR-PROF-CAMERACOLOR: limit tone-curve steps between pixel populations (#1904) by @radialmonster in #2656
- raw: read Canon CR3/CR2 preview colour space from the maker note (#2654) by @radialmonster in #2664
- LR-PREF-GENERAL: Esc in a Settings text box gives the text back instead of closing Settings by @nledford in #2691
- "Favorite" and "Listing folders" in the catalogs that lack them by @nledford in #2693
- LRC-LIB-LIBFOLDERS: a count never covers a name in a narrow sidebar by @nledford in #2696
- LR-IMP-FORMATS: AHD blends its candidates where noise alone would pick one, no maze in noisy raws (#2094) by @pick2510 in #2698
- LR-BEHAV-LOCALIZE: the translation report also lists plain tr() strings a catalog lacks, wrapped calls included by @nledford in #2703
- Never crash: NaN in tone curves and an i16::MIN UTC offset (#2579 items 3 and 4) by @darthnut in #2712
- Never crash: History is bounded on load and by every op that sets it (#2579 item 8) by @darthnut in #2714
- Never crash: rational tag lists show 16 values like every other list (#2579 item 7) by @darthnut in #2717
- LR-VIEW-FILMSTRIP: photos drag from the filmstrip like from the grid by @nledford in #2722
- Control port: close gracefully so the client reads its last reply (Windows reset) by @insideTheFlux in #2723
- fix(codecs): validate JPEG ICC APP2 chunk sequences by @ronibalthazar in #2724
- LRC-LIB-CATALOG-LOCK: quitting on macOS removes the lock's owner note by @nledford in #2725
- LR-BEHAV-LOCALIZE: panel layout toasts, face recognition prompts and the second window title are translated by @nledford in #2726
- Brush dabs: build only as far as the caller will look (#1520) by @saad-mughal435 in #2731
- LR-EDIT-OPTICS-PROFILE: Sony ILCE-6700 in-file distortion by @Enthendor in #2732
- LR-BEHAV-DRAGDROP: a drop's destination is named with its parent when another folder or album has the same name by @nledford in #2735
- Never crash: ARW and SRW strips shorter than declared are refused before allocating (#2561) by @mercuryVM in #2740
- LR-VIEW-HISTOGRAM: the histogram stays in view while the Edit panel's sliders scroll (#2679) by @Bruno-Alumn in #2741
- LR-MERGE-PANO: the merge dialog makes a new preview each time it opens, also after a failed one (#2708) by @Bruno-Alumn in #2743
- LR-CLOUD-SMARTPREVIEW: the smart-previews folder test cleans up the folder it takes offline by @nledford in #2748
- Never crash: tiles far larger than the image are refused before decoding (#2554) by @mercuryVM in #2750
- KEYC-RATING: deleting the only keyword of the filter Enable Filters put aside leaves filtering on by @nledford in #2758
- LR-VIEW-PHOTOGRID: a thumbnail that can't be read is tried again only when its photo changes (#2682) by @insideTheFlux in #2764
- LR-VIEW-PHOTOGRID: the grid asks the image decoders for no thumbnail of a video (#2682) by @insideTheFlux in #2765
- LR-BEHAV-DRAGDROP: only the primary button drags and drops photos from the grid by @nledford in #2766
- Read Canon maker-note lens when LensModel is missing by @eliets2 in #2771
- Reject signed numeric character references in XML entity decoding by @Silvertree2010 in #2776
- LR-EDIT-OPTICS-PROFILE: Fujifilm X-S20 embedded lens corrections and spectral matrices by @samuelili in #2777
- LR-LIB-VIRTUALCOPY: prevent numbering overflow in copy batches by @ronibalthazar in #2781
- docs: gap 9 — the CI gate runs the tests on Linux x64; macOS, Windows and the GPU tests still don't by @nledford in #2796
- LR-LIB-SMARTALBUM: the catalog refuses an edit that makes a smart album include itself by @nledford in #2798
- LR-BEHAV-DRAGDROP: a right-click while photos are carried opens no context menu by @nledford in #2808
- LR-CROP-AUTO: Auto straighten reads the vertical vanishing point and the horizon by @ingolfteetz in #2809
- Alt/Option-drag previews for clipping and sharpening (#937) by @itrycodinganditsbad in #999
- Do not read a sibling's shared stem sidecar for a non-owner photo (#1523) by @MarekSpodBiedry in #1575
- Bound interpolation for extreme brush segments by @eliets2 in #1654
- Fix Lightroom catalog video classification and filtering by @harrisonoconnorhover in #2021
- KEY-TOGGLEZOOM: hold Space over a tool to pan and click-zoom, as in Lightroom (#1895) by @helgehelge123 in #2065
- LR-BEHAV-DIALOGS: dialog confirm buttons name their action by @nledford in #2075
- LR-VIEW-PHOTOGRID: the active photo's selection ring shows on light themes and differs from the other selected photos by weight by @nledford in #2162
- LR-IMP-ADD-DIALOG: remembered import thumbnail-size slider by @tylerphotos in #2237
- Lightroom catalog import: turn masks into the photo's upright frame by @marcoarnulfo in #2246
- #2284: read the Exif and XMP items of HEIF files by @john01px2022 in #2290
- LR-CROP-RECT: a free crop corner on a straightened photo grows both sides (#2308) by @chordpli in #2322
- fix(windows): add opt-in DirectComposition workaround for VRR flicker by @Kaan88 in #2421
- PERF-SMART: test a smart album's rules cheapest first by @nledford in #2423
- i18n: complete the Simplified Chinese (zh-hans) catalog (162 missing strings) by @joblonfk001 in #2427
- i18n: complete the Traditional Chinese (zh-hant) catalog (200 missing strings) by @joblonfk001 in #2429
- Kelvin for Fujifilm X-Trans III bodies from the RAF's own neutral pair (#730) by @radialmonster in #2514
- i18n: add Vietnamese (vi) interface language by @sonth87 in #2520
- LR-VIEW-ZOOM: test pinch display fitting with controlled completions by @AlexChambers in #2521
- Issue #136: applying the GPU setting never waits for the device on the UI thread by @OneSlips in #2545
- LR-IMP-FORMATS: GIF and BMP sizes from the header; a canvas the file can't fill is refused (#2553) by @insideTheFlux in #2607
- LC-SAFETY: Refuse to create a library photo's XMP sidecar by @endthestart in #2658
- LR-BEHAV-ACCESS: the Flatpak may talk to the accessibility bus, so Orca can read LightCraft by @nledford in #3390
- packaging(flatpak): add OCI image build and GHCR publishing helper by @dylanmtaylor in #3498
New Contributors
- @finaler1x made their first contribution in #3409
- @tabasko78 made their first contribution in #3286
- @cbram made their first contribution in #3321
- @newdives made their first contribution in #3364
- @mpratsaki made their first contribution in #3392
- @j-a-b-r-o-n-i made their first contribution in #2841
- @ZJHeepfixer made their first contribution in #2919
- @iluebbe made their first contribution in #2942
- @hnoerenberg made their first contribution in #2952
- @x-labb made their first contribution in #2981
- @DAnaeto made their first contribution in #3122
- @pick2510 made their first contribution in #2698
- @darthnut made their first contribution in #2712
- @saad-mughal435 made their first contribution in #2731
- @mercuryVM made their first contribution in #2740
- @samuelili made their first contribution in #2777
- @harrisonoconnorhover made their first contribution in #2021
- @Kaan88 made their first contribution in #2421
- @sonth87 made their first contribution in #2520
Full Changelog: v0.16.0...v0.17.0