crates/engine/src/import/job.rs: union of the imports (main's Seen, reusable_probes, sidecars_of plus the PR's FileFacts); the sidecar read uses main's batched found_sidecar and the PR's skip for duplicates with a known capture time.
crates/engine/src/import.rs, cmd/library.rs: main split these files; kept main's side here and ported the PR's hunks to import/job.rs, cmd/library/import.rs and cmd/library/specs.rs (module doc stays in import.rs).
docs: headers keep main's newer date plus the PR's item; the PR's row additions applied to main's rows; revision rows and What's New entries kept, one heading per date.
docs/parity-checklist.md: header keeps main's date plus the PR's item; the LR-IMP-ADD-DIALOG row keeps main's text and gets the PR's sentence; revision rows union.
docs/whats-new.md: both entries kept.
docs/gaps.md, docs/parity-checklist.md: header keeps the newer date plus both sides' items; revision row added newest first.
locales/ru.json: union of keys.
docs/gaps.md, docs/parity-checklist.md: kept main's header and rows, added the PR's video text and revision row.
crates/engine/src/lightroom_catalog.rs: the PR's two tests moved to lightroom_catalog/tests.rs (main split the module).
Dropped the PR's unrelated hunks (slide_overlay.rs, tests_export.rs, raw corpus tests) per the review.
A catalog photo whose bytes match another library photo got the generic develop defaults, so a raw
with no white balance or lens setting in the catalog lost its as-shot white balance and embedded
lens corrections and rendered unlike a file import. It now gets the import defaults (camera
defaults plus the default preset), as a file import does, before the catalog's settings go on top.
Show in Library selected the lowest mapped photo id, which can be a master left in Recently Deleted
whose new virtual copy the import added; All Photos doesn't show it. It now selects the lowest
mapped photo not in Recently Deleted, and the button is left out when there is none.
Tests: a content-duplicate raw with no catalog settings equals its camera defaults (as-shot WB,
lens profile on); Show in Library skips a trashed mapped photo and offers nothing when only
trashed or vanished ids are mapped.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Require a covering embedded image only for renderable import candidates. Keep the available camera JPEG for preview-only raws and failed or unavailable render fallbacks; ordinary quick views and grid thumbnails retain their immediate stand-in behavior. Also release import preview state when canceled through the control channel.
Co-Authored-By: Codex <noreply@openai.com>
Where the folder listing can't vouch for a name (non-ASCII names, a listing that is gone), each photo's sidecar names are asked of the disk, nine per photo, one photo after another. The batch's lookups now run 16 at a time; the loop that plans the photos takes each one's answer in order.
They use the same `at_once` as the probe checks, so the latency stand-in measured with the previous commit applies to them as well (16 at a time against one at a time); the lookups themselves were not timed on a share for this version.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Reusing a scan's probes costs one stat per file to see that it is as it was. They ran one after another, so on a network share every file waited for a round trip. They now run 16 at a time, in the import's batches and in the scan's check of an earlier scan's probes.
Measured on this version with each stat made to take 2 ms (a stand-in for a share's round trip): 5,990 stats took 15.1 s one at a time and 0.95 s through `stat_all`, with the answers in the same order. An earlier version of this change, tried on a real network share, spent most of the import's time in these stats; that figure is not repeated here because it was not taken on this code.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The restore actions use the recorded folder without checking that it still
exists, so an upgrade creates it again rather than using the default folder.
Double-clicking a library's catalog.snap in Explorer (or giving it, or the
library folder, as an argument) opened the last library used and treated the
argument as photos to import. It now opens that library, through the usual
launch path (the lock check for
one open in another LightCraft), and makes it the library in use. A second
library argument gets a notice. Never imported.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 64a86cf3098ae4d33cef8c4f4a2ec486cdb148a4)
`rating:>=3`, `iso:<=400`, `f:>=2.8` read the `=` as part of the number, the
parse failed, and the token silently matched no photo. Parse the two-character
operators first and compare inclusively; `>`, `<`, `=` and bare numbers are
unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SqKgSkHi5MfTQFrZvDKBjm
* LR-PREF-SHORTCUTS: the shortcuts panel's Fixed keys ignore keys saved for unknown commands
* KEYC-METADATA: an Add Keywords request the Keywords panel can't take in time expires
* LR-META-INFO: Target Photo saves an Info edit to the photo it shows