Commit Graph
228 Commits
Author SHA1 Message Date
aiongg e05c4f7e7c Merge track r3-t08
# Conflicts:
#	crates/meta/README.md
#	crates/ui-egui/locales/cs.json
#	crates/ui-egui/locales/de.json
#	crates/ui-egui/locales/es.json
#	crates/ui-egui/locales/fi.json
#	crates/ui-egui/locales/fr.json
#	crates/ui-egui/locales/id-formats.json
#	crates/ui-egui/locales/id.json
#	crates/ui-egui/locales/it.json
#	crates/ui-egui/locales/ja.json
#	crates/ui-egui/locales/ka-formats.json
#	crates/ui-egui/locales/ka.json
#	crates/ui-egui/locales/pl.json
#	crates/ui-egui/locales/pt-br.json
#	crates/ui-egui/locales/ru.json
#	crates/ui-egui/locales/sv-formats.json
#	crates/ui-egui/locales/sv.json
#	crates/ui-egui/locales/uk.json
#	crates/ui-egui/locales/vi.json
#	crates/ui-egui/locales/zh-hans.json
#	crates/ui-egui/locales/zh-hant.json
#	crates/ui-egui/src/panels/grid.rs
#	crates/ui-egui/tests/it/main.rs
#	docs/gaps.md
#	docs/library-shortcuts.md
#	docs/parity-checklist.md
#	docs/raw-parity.md
#	docs/user/guides/export-photos.md
#	docs/whats-new.md
2026-10-31 02:31:16 +00:00
aiongg 1f111b5e80 Merge track r3-t07
# Conflicts:
#	crates/engine/src/tests/libops.rs
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-31 02:30:21 +00:00
aiongg 0fa59f8846 Merge track r3-t05
# Conflicts:
#	crates/ui-egui/locales/cs-formats.json
#	crates/ui-egui/locales/cs.json
#	crates/ui-egui/locales/de-formats.json
#	crates/ui-egui/locales/de.json
#	crates/ui-egui/locales/es-formats.json
#	crates/ui-egui/locales/es.json
#	crates/ui-egui/locales/fi-formats.json
#	crates/ui-egui/locales/fi.json
#	crates/ui-egui/locales/fr-formats.json
#	crates/ui-egui/locales/fr.json
#	crates/ui-egui/locales/id-formats.json
#	crates/ui-egui/locales/id.json
#	crates/ui-egui/locales/it-formats.json
#	crates/ui-egui/locales/it.json
#	crates/ui-egui/locales/ja-formats.json
#	crates/ui-egui/locales/ja.json
#	crates/ui-egui/locales/ka-formats.json
#	crates/ui-egui/locales/ka.json
#	crates/ui-egui/locales/pl-formats.json
#	crates/ui-egui/locales/pl.json
#	crates/ui-egui/locales/pt-br-formats.json
#	crates/ui-egui/locales/pt-br.json
#	crates/ui-egui/locales/ru-formats.json
#	crates/ui-egui/locales/ru.json
#	crates/ui-egui/locales/sv-formats.json
#	crates/ui-egui/locales/sv.json
#	crates/ui-egui/locales/uk-formats.json
#	crates/ui-egui/locales/uk.json
#	crates/ui-egui/locales/vi-formats.json
#	crates/ui-egui/locales/vi.json
#	crates/ui-egui/locales/zh-hans-formats.json
#	crates/ui-egui/locales/zh-hans.json
#	crates/ui-egui/locales/zh-hant-formats.json
#	crates/ui-egui/locales/zh-hant.json
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-31 02:30:12 +00:00
aiongg 5e56e9536b Merge track r3-t04
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-31 02:30:01 +00:00
aiongg 67b636329a Merge track r3-t03
# Conflicts:
#	crates/ui-egui/src/tests/drop_import.rs
#	crates/ui-egui/tests/it/main.rs
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-31 02:29:52 +00:00
aiongg 46982a5c4f Merge track r3-t02
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-31 02:29:22 +00:00
aiongg 3af32798f3 Merge PR #2821: LR-META-LOCATION: reject malformed typed GPS coordinates
crates/engine/src/cmd/library.rs: kept main's split; the PR's parse_gps changes and tests are ported to crates/engine/src/cmd/library/gps.rs.
docs/gaps.md, docs/parity-checklist.md: both sides kept (header items, rows, LR-META-LOCATION note).
2026-10-31 02:10:49 +00:00
aiongg bfb9572eb1 Merge PR #2529: LR-MAP-TRACKLOG: Decode XML character references in GPX
docs/gaps.md, docs/whats-new.md, docs/parity-checklist.md: both sides' header items, entries and rows kept.
2026-10-31 02:10:14 +00:00
aiongg 847fc7558d Merge PR #3027: LR-PROF-CAMERACOLOR: docs count 9 bundled camera profiles, not 5 2026-10-31 02:09:51 +00:00
aiongg b28ef86773 Merge PR #2724: fix(codecs): validate JPEG ICC APP2 chunk sequences
Conflicts: docs/gaps.md header merged (newer date, both change lists), rows kept; other docs unioned
2026-10-31 02:09:46 +00:00
aiongg 5a7a1b2ad9 Merge PR #2964: LR-IMP-ADD-DIALOG: handle rename sequence exhaustion
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.
2026-10-31 02:09:36 +00:00
aiongg c03c567f5e Merge PR #2732: LR-EDIT-OPTICS-PROFILE: Sony ILCE-6700 in-file distortion
docs/gaps.md: main's header, gap 9 and revision rows kept; gap 8 row and header carry the ILCE-6700 mention; the PR's revision row added.
2026-10-31 02:08:57 +00:00
aiongg 035d4d5dcb Merge PR #2977: LR-META-EXIF-FULL: reject malformed EXIF clocks
docs/gaps.md, docs/parity-checklist.md, docs/whats-new.md: both sides kept; the PR's sentences added to main's rows and entries.
docs/xmp-interop.md: capture-time paragraph combines both sides.
The PR's test file crates/engine/src/tests_import.rs landed in crates/engine/src/tests/import.rs (moved on main).
2026-10-31 02:08:25 +00:00
aiongg 82ba9ee4f9 Merge PR #2796: docs: gap 9 — the CI gate runs the tests on Linux x64; macOS, Windows and the GPU tests still don't
ROADMAP.md: header keeps main's text plus the gap 9 phrase; item 7 keeps the #329 link, item 8 from the PR; revision rows union
docs/gaps.md: header keeps main's text plus the gap 9 phrase; row 8 keeps the #329 link, row 9 from the PR
2026-10-31 02:08:21 +00:00
aiongg e967200f0d Merge PR #2912: Reject incomplete ISO timestamps in metadata and track logs
crates/meta/src/xmp.rs: kept main's 'mod tests;'; the PR's two tests ported to xmp/tests.rs.
docs/gaps.md, docs/parity-checklist.md, docs/whats-new.md: both sides kept; newer date in headers; XMP row and header carry the PR's sentence.
2026-10-31 02:07:55 +00:00
aiongg 36dd2a7d6b Merge PR #2237: LR-IMP-ADD-DIALOG: remembered import thumbnail-size slider
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.
2026-10-31 02:07:51 +00:00
aiongg 72aebe1d72 Merge PR #2781: LR-LIB-VIRTUALCOPY: prevent numbering overflow in copy batches
docs: kept the newer header and both sides' lines (union).
2026-10-31 02:07:39 +00:00
aiongg c0df71dde6 Merge PR #2849: LR-EXP-METADATA: refuse Originals with embedded place names
crates/engine/src/export.rs: main moved the code to export/prepare.rs; hunk ported there by hand
docs/gaps.md, docs/parity-checklist.md: header keeps the newer line, revision rows are the union
2026-10-31 02:07:23 +00:00
aiongg 3f5dd5a92d Merge PR #2021: Fix reference app catalog video classification and filtering
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.
2026-10-31 02:07:23 +00:00
aiongg 78fe857011 Merge PR #2841: Write sidecar keywords as names in dc:subject and paths in lr:hierarchicalSubject
crates/catalog/src/keywords.rs: kept main's 'mod tests;'; PR's test changes ported to keywords/tests.rs.
docs/parity-checklist.md: main's LR-META-XMP / EXIF-FULL rows with the PR's keyword sentence added; revision rows both kept.
2026-10-31 02:07:14 +00:00
tylerphotosandCodex 6b1fc20053 LR-IMP-ADD-DIALOG: render import previews when the camera JPEG is too small
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>
2026-10-29 11:59:23 -05:00
tylerphotosandCodex 8ab4641011 LR-IMP-ADD-DIALOG: finish import thumbnail sizing review (#2056)
Reconcile with current modules, preserve all locale catalogs, reuse small-source preview jobs, release dismissed review state, and keep exact-entry Escape inside the slider.

Co-Authored-By: Codex <noreply@openai.com>
2026-10-29 07:56:08 -05:00
radialmonsterandClaude Opus 5.5 6188590675 Docs: link gap 8 and roadmap priority 7 to lens profile issue #329
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014ti8KemZbjE2ZgHgV1q1BM
2026-10-28 13:58:49 -04:00
Brain Wang 88960dbb0e LR-PROF-CAMERACOLOR: docs count 9 bundled camera profiles, not 5 2026-10-26 10:33:56 +08:00
ronibalthazar a1e1b4cc0e LR-META-EXIF-FULL: reject malformed EXIF clocks 2026-10-25 19:03:33 +00:00
ronibalthazar cff89260f9 LR-IMP-ADD-DIALOG: check rename sequence exhaustion 2026-10-25 17:28:56 +00:00
ronibalthazar 0352b420a7 fix(codecs): validate JPEG ICC APP2 chunk sequences 2026-10-25 14:13:58 +00:00
ronibalthazar 07d1f0ad5d LR-META-XMP: reject incomplete ISO timestamps 2026-10-25 06:35:43 +00:00
Nathaniel Ledford 44cb68b8c1 docs: gap 9 — the CI gate runs the tests on Linux x64; macOS, Windows and the GPU tests still don't 2026-10-25 00:38:38 -04:00
aiongg c3feda15c0 LR-META-INFO: the Info panel shows Selected Photos by default; gaps.md lists its change notes once 2026-10-25 03:36:14 +00:00
aiongg e339afc263 Merge PR #2810: LR-META-INFO: the Info panel can show metadata for the selected photos 2026-10-25 02:25:16 +00:00
ronibalthazarandCodex 650edf66f8 LR-EXP-METADATA: refuse Originals with embedded place names
Co-authored-by: Codex <noreply@openai.com>
2026-10-24 22:27:28 +01:00
j-a-b-r-o-n-iandClaude Opus 5.5 f6c5cab021 LR-META-XMP: write sidecar keywords as names in dc:subject and paths in lr:hierarchicalSubject
Saving a sidecar wrote each keyword's path into dc:subject. A photo
keyworded Places|Italy|Rome got "Places|Italy|Rome" there instead of
"Places", "Italy" and "Rome", after any change with auto-write on, even a
rating. dc:subject is the flat list Lightroom, darktable, digiKam and
exiftool-based tools search, so the photo stopped turning up for "Rome"
in a library shared with them.

keywords::to_file is the inverse of from_file: every level of every
keyword goes to dc:subject, and when any keyword has levels, every
keyword goes to lr:hierarchicalSubject as its path. It applies no export
options (a sidecar is the photo's own record), so from_file reads the
pair back as the same keywords. lr:hierarchicalSubject is now owned, so
it is replaced on save and removed when the photo has no keywords, which
also ends the documented limit where a keyword removed here stayed in
another app's hierarchical list. Sidecars from 0.13 and older (paths in
dc:subject) still read as paths and are written the new way on the next
save.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 15:26:42 -04:00
dotCooCoo cc557e189d KEYC-METADATA: Cmd+Alt+Shift+C / V copy and paste metadata
Copy Metadata and Paste Metadata had no shortcut. They now use
Cmd+Option+Shift+C and Cmd+Option+Shift+V on macOS and
Ctrl+Alt+Shift+C and Ctrl+Alt+Shift+V on Windows and Linux, the keys
Lightroom Classic's keyboard shortcut page lists for copying and
pasting metadata in the Library module. Both keys also work when
Windows and Linux deliver them as clipboard events. The KEYC-METADATA
row now lists the keys LightCraft binds (Cmd+S, the two new keys and
Alt+1 to Alt+9 for keyword sets) and every other key of that table
that is still missing. Gap 28 in docs/gaps.md and the Library keys in
docs/ui-parity.md list the two new keys.
2026-10-24 09:13:54 -07:00
ronibalthazar 4f94e0c592 LR-META-LOCATION: validate typed GPS coordinates 2026-10-24 16:43:10 +01:00
Brandon Thomas 3f1e5c21d6 Merge PR #2775
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
2026-10-24 10:20:13 -04:00
dotCooCoo 0b1b47ee7b LR-META-INFO: the Info panel can show metadata for the selected photos
With several photos selected, the Info panel offers Show Metadata For:
Target Photo (the default) shows the active photo's values as before,
and Selected Photos shows the values the selected photos share. A text
field or GPS where they differ is empty with a Mixed hint, and
Copyright Status shows Mixed. What is typed there is saved to every selected
photo, and a Mixed field typed in and left empty clears it on all of
them. A field left as it was saves nothing, even when the choice
changes during the edit. The choice is saved with the app settings, and
`view.infoSelectedPhotos {on?}` sets it for an agent.
2026-10-24 07:03:31 -07:00
Julian Zahnow 9710a64ba2 Merge remote-tracking branch 'origin/main' into sony-ilce6700-distortion
# Conflicts:
#	docs/gaps.md
2026-10-24 13:33:21 +02:00
ronibalthazar 745976e95c LR-LIB-VIRTUALCOPY: check numbering before copy creation 2026-10-24 09:38:23 +01:00
ronibalthazar 522ae832ec fix: scope relative-date expiry to referenced albums 2026-10-24 07:28:51 +01:00
ronibalthazar 18c56f03d4 fix: expire relative-date view caches on minute change 2026-10-24 07:02:22 +01:00
francoisgnandClaude Opus 5.5 496291276c Merge PR #2468@218e7451c (its main merge) into round3a-integration
Its code is already in the batch; docs keep the batch's version, headers list
#2468's change entries too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 05:50:46 +03:00
midasdf 218e7451c0 Merge remote-tracking branch 'origin/main' into jp/photo-paper-sizes
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
2026-10-24 10:08:32 +09:00
francoisgnandClaude Opus 5.5 144d900c21 Merge upstream/main (integration batch 43, #2729, #2737, #2412) into round3a-integration
Conflicts:
- apps/lightcraft/src/native_menu.rs: upstream's item swapping (macOS keys
  given up for real, Help menu not swapped, Settings / Quit tracked) with
  KEY-GRID's keymap-aware rows. `Item.label` stays the text the row shows
  (native_item_presentation), so `Item::native_label` reuses it instead of
  formatting it again; Settings / Quit store theirs through
  display_item_label, as upstream's native_label did. No early return after
  a rebuild (upstream).
- crates/ui-egui/src/i18n.rs: upstream's tests (#2729: one test per check
  across languages, gaps reported, never a failure) plus the batch's two new
  ones (dropped-photos notice, Polish counts); production code as merged.
- grid.rs, keyword_list.rs, masking.rs: the translation tests #2729 removed
  stay removed; the batch's new keyword and segmenter tests stay.
- cmd/library.rs, ui-egui/src/lib.rs: both test modules, each with its
  #[cfg(test)].
- xtask/src/main.rs: #2302's test_selected and upstream's translation_gaps.
- docs: tracker / gap rows take both sides' edits, headers list both sides'
  changes, history rows of both sides newest-first. What's New: one section
  per date, newest first (the batch had 10-22 above 10-23, and second 10-21
  and 10-19 sections); no line lost.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 02:26:48 +03:00
Brandon Thomas 73f1b4906e Merge PR #2622
# Conflicts:
#	docs/gaps.md
2026-10-23 17:21:18 -04:00
Brandon Thomas 1acd2938ea Merge PR #2546
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-23 17:21:18 -04:00
Brandon Thomas bbf9b713f2 Merge PR #2526
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-23 17:21:17 -04:00
Julian ZahnowandClaude Opus 5.5 e1ea92349a LR-EDIT-OPTICS-PROFILE: Sony ILCE-6700 in-file distortion
The ILCE-7RM6 conversion extends to the APS-C ILCE-6700: its 11 knots span
the file's own default crop (half diagonal / (count - 1) = 372.09 px), with
the same unit 15000, index and zoom rule. APS-C bodies use a 0.5 px fit gate:
the polynomial matches the camera JPEG as well as the exact table, while the
0.25 px gate refused 13 of 30 tables.

Measured on 30 photos with three lenses against the camera JPEG: p95
0.22-0.73 px on 27 photos as rendered, 1.36-1.38 px at the Sigma 10-18 mm's
10 mm end (uncorrected up to 5.6 px).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 22:05:43 +02:00
francoisgnandClaude Opus 5.5 b840f3f290 Round 3a: Edit In reports an editor that won't open in its result; doc header and history fixes
CodeRabbit on #2689 (head 0d64d9ef3):
- Edit In (#1417) returned an error when the editor failed to open although
  photo.editExternal had already added the copies to the library, so a script
  retrying on ok:false made another set each time. It now succeeds with
  `failed` set (null on success, as open_originals) and a toast saying why.
  Test edit_in_reports_an_editor_that_wont_open_without_failing fails without
  the fix.
- docs/gaps.md, docs/parity-checklist.md: one entry was listed twice on the
  Change line.
- Revision-history rows the batch added now read newest-first (gaps,
  parity-checklist, localization-parity, target-app-parity); upstream's own
  rows are left where they were.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 21:01:46 +03:00
Marco Arnulfo 6c55a76e95 LR-LIB-FILTER: Cmd+L / Ctrl+L (View > Enable Filters) switches the library filter off and on again as it was 2026-10-23 17:38:34 +02:00