Commit Graph
1435 Commits
Author SHA1 Message Date
francoisgn 59c5072687 Merge PR #2430 (updated head) 2026-10-23 12:47:48 +03:00
Matej Vrzala dadb0dfc79 Colour-range mask: cap the number of samples from automation
A colour-range mask compares every pixel against every sample, so
render and export cost is pixels x samples. The interactive sampler
stops at 5, but mask.add / mask.update (colorRange) passed their
`samples` array straight through, so a few hundred samples on a large
render turned into billions of operations and hung rendering and
export. The project already caps similar lists (MAX_STROKE_DABS,
MAX_DETAIL).

The samples list from automation is now capped at 64.

Test: a request with 1000 samples is cut to 64; a two-sample request is
unchanged.

Reported-by: BS.ehlas.cz
2026-10-23 09:46:14 +02:00
joblonfk001 fb39a00d80 fix(web): keep undecodable files out of the picker accept list
.avif has no AV1 decoder in any build and .heic/.heif only decode when
the codecs' heif feature is enabled, so listing them let web users pick
files import would immediately report as failed. accept_list() now mirrors
lightcraft_codecs::Format::Heif::can_decode() and never offers .avif.
EXTENSIONS itself is unchanged, so files on disk are still recognised and
imported-or-reported as before.
2026-10-23 08:54:08 +08:00
francoisgn 01f4f6c5b4 Merge PR #2620: corpus tests (Z 8 / Z 6II lens warp, Hasselblad TIFF preview) 2026-10-22 23:30:27 +03:00
francoisgnandClaude Opus 5.5 98189d5311 Corpus tests: the Z 8 / Z 6II profile tests pair through the lens warp; Hasselblad TIFF previews pass
Two corpus tests fail on main with the CC0 corpus present (they skip without it, so no CI
has run them):

- camera_preview::tests::corpus_z8_uses_the_bundled_profile / corpus_z6ii_…: the test fitted
  the camera look with `lens: None`. Since 1ee751ebd (Nikon's in-file distortion for the
  Z 6II and Z 8, the same day as the tests) the camera's JPEG is matched through that warp,
  which files.rs reads with `lens_geometry` and removes from the opcodes before binning the
  proxy. The test now does the same; the app path was right all along.
- corpus_raw_decodes: coverage-1639.fff has no JPEG and hands on its 8-bit RGB image as a
  baseline TIFF (`rgb_preview`, b5dc500c5); the test only accepted JPEG / JPEG XL previews.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 23:30:04 +03:00
Clyde C BrownandClaude Opus 5.5 f6a4770cf2 #2617: Find Missing matches Windows paths' file names on macOS and Linux
Find Missing Photos took a missing photo's file name with Path::file_name,
which doesn't split on `\` on macOS or Linux, so a library made on Windows
had photos it could only find by content: those with no hash on record
(Lightroom-catalog imports, files edited since) were never found. Both the
missing photos and the files found on disk are now named by one rule: the
part after the last `/` or `\`, in lower case.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 13:31:51 -06:00
francoisgn 5426e5ca66 Merge PR #2072: Export: add Thai glyph fallback only (#2052, partial)
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
2026-10-22 22:31:16 +03:00
francoisgn dee97e5ff9 Merge PR #1499: Fix graphic watermark aspect/orientation and HDR JPEG file-s
# Conflicts:
#	docs/parity-checklist.md
2026-10-22 22:31:16 +03:00
francoisgn 6ed7741f6f Merge PR #2502: LRC-LIB-IMPORT: month names in date templates (%B January, %
# Conflicts:
#	docs/whats-new.md
2026-10-22 22:31:04 +03:00
francoisgn b20f55ba75 Merge PR #2503: LRC-LIB-MISSING: the availability worker sweeps a list of fi 2026-10-22 22:31:04 +03:00
francoisgn 1938bc3845 Merge PR #2422: PERF-SMART: count every smart album once per pass, not once
# Conflicts:
#	docs/whats-new.md
2026-10-22 22:31:03 +03:00
francoisgn 51d3eceb0a Merge PR #2015: #1944: keyword.export refuses library originals and writes d 2026-10-22 22:31:03 +03:00
francoisgn 77f313a0f2 Merge PR #2506: Edit Capture Time leaves a capture time it can't fully read
# Conflicts:
#	crates/ui-egui/src/lib.rs
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-22 22:29:19 +03:00
francoisgn 4abb3bc860 Merge PR #2430: fix(web): import picker accept list misses many raw formats 2026-10-22 22:28:42 +03:00
francoisgn f2ffc34b14 Merge PR #2468: Print: Japanese photo and postcard paper sizes (L判・2L・KG・はがき
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
2026-10-22 22:28:41 +03:00
francoisgn a52a709ef5 Merge PR #2279: LR-LIB-CULL: adjustable burst gap and similarity in Assisted
# Conflicts:
#	docs/parity-checklist.md
2026-10-22 22:28:41 +03:00
francoisgn 4e75723da5 Merge PR #2327: #2312: culling goes on from a photo rated out of the view
# Conflicts:
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-22 22:28:40 +03:00
Nathaniel Ledford a9be2e14f3 LRC-LIB-LIBFOLDERS: catalog queries and streamed file hashing for locating a folder (#1112)
Two catalog additions and one internal change, with nothing calling the new ones yet:

- Catalog::folder_records_located: folder_records_follow for a folder located where it
  already is on disk (records of library folders at the destination stay).
- Catalog::local_records_of: the Local records of some files, split into those that can
  give way and those that hold something of the person's.
- Find Missing Photos hashes a file in 64 KiB pieces instead of reading it whole (the same
  hash).
2026-10-22 14:48:20 -04:00
midasdf 767c4a39b6 Print: export the はがき alias in the paper-size test
The Japanese paper-size test exported only the canonical names and then
checked `print.set` with はがき, so the alias-to-MediaBox path was not
covered. Export はがき through `print.exportPdf` as well and read the
same 283.46 × 419.53 pt page as postcard.
2026-10-23 02:28:33 +09:00
ronibalthazar 36d6762f08 #2519: reject invalid UTF-8 in PSD XMP resources 2026-10-22 16:15:39 +01:00
ronibalthazar 26a24eb22e Fail closed on malformed PSD XMP and duplicate resources 2026-10-22 15:48:40 +01:00
midasdf 867284656e Merge origin/main into #2468: keep main's work and the Japanese paper sizes
Both sides' revision-history rows and change lines are kept (newest first);
print_view.rs auto-merged, so main's shared context_menu call sits beside the
PR's current_paper()/paper_name() punctuation and alias fixes.

# Conflicts:
#	ROADMAP.md
#	docs/gaps.md
#	docs/parity-checklist.md
2026-10-22 23:37:29 +09:00
midasdf 6b0c891333 Print: match paper names past punctuation and resolve aliases
The paper-name normalisation promised punctuation-insensitive names but
dropped only whitespace, hyphens, underscores and parentheses, so `L判。`
did not resolve; keep letters and digits only instead. The Print dialog
also lower-cased the stored name without resolving it to a canonical
paper, so a paper set through an alias (`はがき`) showed `はがき in` and
selected no option; add `paper_name` and use it for the selector's
current value and option comparison.

Tests: the layout aliases test covers periods and Japanese punctuation,
and the Print view test covers the resolved current paper.
2026-10-22 23:24:53 +09:00
ronibalthazar c8390afbd2 Fail closed on malformed PSD metadata during original export 2026-10-22 14:21:32 +01:00
Alex Chambers 0cfc70b2fa Issue #2052: merge main and limit export fallback to Thai
Keep the existing Inter and CJK export order and the UI font chain.
Defer Arabic export faces until joining and bidirectional ordering exist.
Restore main's headline documents and record remaining text-layout limits.
2026-10-22 13:27:10 +02:00
ronibalthazar 6413bccbfd #2519: read PSD and PSB metadata 2026-10-22 11:20:53 +01:00
NetterSilverandClaude Opus 5.5 9458e2c59a Take photos removed by Synchronize Folder out of their stacks
Found while testing crates/engine/src/sync.rs:851 (SyncStep::Remove; compare mark_deleted in crates/engine/src/cmd/library.rs:168)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 11:41:53 +02:00
Nathaniel LedfordandClaude 434da7ae68 MENU-BAR: menu switches are named for what they show, and no two commands share a name
Switches read "Show Focus Point ✓" next to "Filmstrip ✓"; now every switch
is named for the thing and the check mark says whether it is on (Focus
Point, Clipping, Photo Counts, Mask Overlay, All Mask Overlays, Mask Pins,
Layout Image). Show Original stays: it is a view, not a switch.

Names that meant two things: View ▸ Detail and the Edit section Detail
(Detail View now, like Reference View), Window ▸ Edit and the Edit menu
(Edit Panel), Compare and Compare Before and After (Before/After Side by
Side, next to Split and Top/Bottom), and Clear/Discard Preview Cache (one
command, now Discard Preview Cache everywhere). New labels in all 13
catalogs. Tests: no "Show …" switch; no two menu commands share a label or
a menu's name.

Co-Authored-By: Claude <noreply@anthropic.com>
2026-10-22 02:00:54 -04:00
Nathaniel LedfordandClaude Opus 5.5 6b8cb9826c PERF-SMART: count every smart album once per pass, not once per album that tests it
A full count (AlbumTally::of, albums.list) keeps each loop-free smart album's photos for the pass and
answers "album is #N" from them, so an album tested by 51 others is worked out once instead of 52 times
per photo. Albums in or reaching a loop, or in a chain too deep for the depth limit, are evaluated by
their rules as before.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 01:54:43 -04:00
ronibalthazar 8d4e6e1e01 LR-META-XMP: preserve foreign namespace collisions 2026-10-22 06:42:11 +01:00
helgehelge123 b1f6c1513d Merge remote-tracking branch 'origin/main' into cull-burst-params
# Conflicts:
#	docs/parity-checklist.md
2026-10-22 07:28:25 +02:00
radialmonster 8b4bdcea11 LR-IMP-FORMATS: decode Nikon small raw (sRAW) NEFs as 4:2:2 luma/chroma 2026-10-22 00:45:13 -04:00
aiongg 8daa25c4c9 Merge track r2-t04 into next
# Conflicts:
#	ROADMAP.md
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/target-app-parity.md
#	docs/whats-new.md
2026-10-22 02:53:42 +00:00
aiongg 727e66babe Merge track r2-t03 into next
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/ui-parity.md
#	docs/whats-new.md
2026-10-22 02:53:00 +00:00
aiongg 3300e6dad8 Merge track r2-t01 into next
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/raw/coverage.tsv
#	docs/whats-new.md
2026-10-22 02:49:52 +00:00
aiongg 5991f9de61 Integration: #1809 smart preview SourceInfo takes native_long (None; the catalog fills it) 2026-10-22 02:47:31 +00:00
aiongg d26c11a676 Merge track r2-t02 into next
# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-22 02:42:47 +00:00
aiongg fa6f5b285b Integration: one LOOK_VERSION (12) and RENDER_CACHE_VERSION (69) bump for the merged camera-look changes 2026-10-22 02:42:38 +00:00
aiongg 93c55d7c89 Merge PR #2041: fix(camera-profiles): invalidate cached renders after subsecond profile changes 2026-10-22 02:42:06 +00:00
aiongg 731b511295 Merge PR #1985: Imported LUTs no longer leave a copy in the temp folder without a library on disk 2026-10-22 02:42:06 +00:00
aiongg 70e9338085 Merge PR #1040: LR-IMP-FORMATS: decode Minolta MRW
docs/parity-checklist.md: header keeps the newer date; LR-IMP-FORMATS row keeps both sides' changes.
docs/raw-parity.md: header change note names both sides' changes.
docs/raw/coverage.tsv: merged cleanly; same rows as both sides, no duplicates (regenerated on the combined branch).
2026-10-22 02:42:05 +00:00
aiongg b05bb535e6 Merge PR #2271: Analyse a photo listed twice once in Assisted Culling 2026-10-22 02:40:53 +00:00
aiongg aea654b59a Merge PR #2257: LR-META-XMP: fewer false "XMP adjustments were not imported" warnings for raws edited elsewhere
Conflicts:
- docs/parity-checklist.md: LR-META-XMP row carries both changes (JPEG embedded XMP, bookkeeping crs fields)
2026-10-22 02:40:48 +00:00
aiongg 2959b3a7e8 Merge PR #2009: Kelvin white balance from Canon CR2 ColorData presets (PowerShot G1 X Mark III)
docs/raw-parity.md: header change note and revision rows keep both sides (newest first).
2026-10-22 02:40:28 +00:00
aiongg 3ec8b08ad8 Merge PR #2042: LR-META-XMP: reread embedded JPEG metadata
Conflicts:
- crates/engine/src/sidecar.rs: imports keep HashSet and add Read, Seek, SeekFrom
- docs/parity-checklist.md: LR-META-XMP and LR-META-EXIF-FULL rows carry both changes (import stem ranking, JPEG embedded XMP)
- docs/xmp-interop.md: Read row carries both changes
2026-10-22 02:40:19 +00:00
aiongg 04b099a4f5 Merge PR #1901: LR-EDIT-OPTICS-PROFILE: apply A7CR embedded distortion for corrected full-frame raws
crates/engine/src/camera_preview.rs: LOOK_VERSION keeps both history lines and the higher value.
crates/engine/src/media.rs: RENDER_CACHE_VERSION keeps the higher value.
docs/whats-new.md: both 2026-10-14 entries under one heading.
2026-10-22 02:40:09 +00:00
aiongg 195340da77 Merge PR #2263: LR-IMP-PREVIEW-READ: thumbnails of merged HDR/panorama DNGs develop from their reduced raw copies (38 s → 1 s)
crates/engine/src/media.rs, crates/engine/src/smart.rs: DecodedSource keeps both new fields, from_proxy (#1809) and reduced (#2263); a smart preview loads with from_proxy true, reduced false.
crates/engine/src/cmd/previews.rs: original_only refuses both proxy-loaded and reduced sources.
2026-10-22 02:39:46 +00:00
aiongg 29565bbad0 Merge PR #1861: LR-EXP-DIM: Width & Height limits each edge to its own number (#1620)
Conflicts:
- docs/parity-checklist.md: header keeps the newer date; revision rows are the union
2026-10-22 02:39:44 +00:00
aiongg fdb93026b4 Merge PR #2456: Fix/strict ids params 2026-10-22 02:39:38 +00:00
aiongg b81b6d9f3d Merge PR #2300: LR-LIB-STACK: the filmstrip stack badge expands/collapses the stack; badges work on unselected stacks
crates/ui-egui/src/panels/grid.rs: badge keeps main's double-click guard and calls #2300's toggle_stack

crates/ui-egui/src/tests_grid.rs: both sides' badge tests

docs/parity-checklist.md: header and revision rows from both sides; rows take both changes
2026-10-22 02:39:32 +00:00