Commit Graph
2336 Commits
Author SHA1 Message Date
Alex ChambersandClaude Opus 5.5 ac677a2624 LR-EDIT-OPTICS-PROFILE: decode Sony shading, CA and distortion tables with settings and provenance; apply nothing new
Sony ARWs record shading, lateral chromatic aberration and distortion as a camera setting plus a radial
table in the raw image IFD (0x7031-0x7037), with copies in the encrypted SR2SubIFD (0x797c-0x7982).
They are now decoded for every body that records them and carried through RawInfo and RawImage as
`lens_metadata.sony` (types in crates/raw/src/lens_metadata.rs, decoder in
crates/raw/src/vendor/arw_lens.rs):

- Raw-IFD fields are the ones the TIFF reader parsed, which is what the image itself uses. A scan of
  the directory adds diagnostics only: repeated tags, and why an entry the reader skipped was dropped
  (values outside the file, an unknown type, past the reader's limits). SR2SubIFD fields are read
  from their first entry. Only the exact layouts are accepted: SHORT[1] or non-negative SSHORT[1]
  settings, SSHORT[17] headed by 16 for shading and distortion, SSHORT[33] headed by 32 for CA.
  Nothing is allocated from a count in the file.
- The raw IFD's copy wins. The SR2SubIFD copy fills in only for a tag the raw IFD lacks, never for a
  malformed one, and the two copies' agreement is recorded.
- Settings keep their number and their documented meaning, Unknown(value) otherwise (never Off).
- Framing evidence (stored frame, Sony and default crops, reference rectangle, coding, 3:2) and a
  per-component status. Only Applied components become opcodes.

Applied corrections are unchanged: the ILCE-7RM4A distortion conversion receives exactly the table it
received before, and no other body or component gains a correction. The ILCE-7CR distortion misses its
camera JPEG at 24 mm, and shading and CA semantics are not validated on any body; see
docs/sony-lens-corrections.md.

Locating the SR2SubIFD, now done for every ARW that has one, selects the SR2Private offset, length and
key with the TIFF reader's own rules, which lightcraft-tiff now exposes and builds its reader on
(directory_entries, entry_span, ParseOptions::budget_for, decode_value). Only each field's first value
is decoded, so the directory's other entries cost no memory sized by the file: a 16 MiB file whose
SR2Private holds eight fields aliasing it peaks at 37 kB. DirectoryEntries keeps its layout private,
and its positions() iterator uses checked arithmetic.

Tests: synthetic decoder tests; a differential test of the SR2Private selection against the TIFF
reader's in both byte orders (0 to 8,193 filler entries, unreadable and unusual first occurrences of
each field, a used-up value budget); a dhat peak-heap test; public-corpus checks against the values
ExifTool prints, with pinned and anchored SHA-256s (LIGHTCRAFT_CORPUS_REQUIRED=1 makes absent files
fail); and an opt-in local inventory check (crates/raw/tests/sony_lens_inventory.rs).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 08:19:21 +02:00
Brandon Thomas a4b53b28cc Merge pull request #1682 from storytold/claude/integrate-batch-35
Integration batch 35: 61 reviewed community PRs (never-crash, raw decode, imports, UI fixes)
2026-10-14 02:04:11 -04:00
Brandon ThomasandClaude Opus 5.5 180d400cdd Batch 35: one header line per tracker doc, one 2026-10-13 section in What's New, parity summary refreshed, rustfmt after merges
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 01:59:55 -04:00
Brandon Thomas 5fe332c7b4 Merge PR #1570 (updated head)
# Conflicts:
#	README.md
#	crates/raw/src/vendor/nef_lens.rs
#	docs/gaps.md
#	docs/nikon-lens-corrections.md
#	docs/parity-checklist.md
#	docs/raw-parity.md
#	docs/whats-new.md
2026-10-14 01:54:50 -04:00
Brandon Thomas 195fb9698b Merge PR #1427 (updated head)
# Conflicts:
#	docs/parity-checklist.md
2026-10-14 01:53:54 -04:00
Brandon ThomasandClaude Opus 5.5 a5989d6c0d Batch 35: #1132's cancel test takes the four-part fake import #1412 left
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 01:41:33 -04:00
Brandon Thomas 48b9a5e21f Merge PR #1132
# Conflicts:
#	crates/engine/src/lightroom_job.rs
2026-10-14 01:40:32 -04:00
Brandon Thomas 418f6255be Merge PR #1543
# Conflicts:
#	crates/engine/src/export.rs
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-14 01:40:03 -04:00
Brandon Thomas 9085eb4b23 Merge PR #1653
# Conflicts:
#	docs/parity-checklist.md
2026-10-14 01:39:50 -04:00
Brandon Thomas 694ce5b42b Merge PR #1537
# Conflicts:
#	docs/gaps.md
2026-10-14 01:39:50 -04:00
Brandon Thomas aa0f9a5666 Merge PR #1536
# Conflicts:
#	docs/parity-checklist.md
#	docs/whats-new.md
2026-10-14 01:39:49 -04:00
Brandon Thomas 5e1213c963 Merge PR #1598 2026-10-14 01:39:06 -04:00
Brandon Thomas ea7f799607 Merge PR #1597 2026-10-14 01:39:05 -04:00
Brandon Thomas 71a43d55ce Merge PR #1661 2026-10-14 01:39:04 -04:00
Brandon Thomas 89b6a34595 Merge PR #1652 2026-10-14 01:39:04 -04:00
Brandon Thomas cc7179c560 Merge PR #1667
# Conflicts:
#	docs/whats-new.md
2026-10-14 01:39:03 -04:00
Brandon Thomas 4fe0466942 Merge PR #1666
# Conflicts:
#	docs/whats-new.md
2026-10-14 01:39:02 -04:00
Brandon Thomas e783f705dc Merge PR #1483 2026-10-14 01:39:00 -04:00
Brandon Thomas 35c4290d14 Merge PR #1477 2026-10-14 01:38:59 -04:00
Brandon Thomas 0a68a21e03 Merge PR #1459
# Conflicts:
#	crates/raw/tests/dng.rs
2026-10-14 01:38:59 -04:00
Brandon Thomas 61d96fc037 Merge PR #1655 2026-10-14 01:38:58 -04:00
Brandon Thomas 93bd81a480 Merge PR #1557
# Conflicts:
#	docs/whats-new.md
2026-10-14 01:38:57 -04:00
Brandon Thomas 1dd41b1872 Merge PR #1550
# Conflicts:
#	docs/whats-new.md
2026-10-14 01:38:56 -04:00
Brandon Thomas 4d0e11651a Merge PR #1546
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-14 01:38:55 -04:00
Brandon Thomas c8f1ecd4d3 Merge PR #1544 2026-10-14 01:38:54 -04:00
Brandon Thomas deb7831083 Merge PR #1542
# Conflicts:
#	docs/whats-new.md
2026-10-14 01:38:53 -04:00
Brandon Thomas b54a2e9793 Merge PR #1541 2026-10-14 01:38:52 -04:00
Brandon Thomas 992e67188b Merge PR #1539
# Conflicts:
#	docs/whats-new.md
2026-10-14 01:38:51 -04:00
Brandon Thomas b18ce72b61 Merge PR #1535
# Conflicts:
#	crates/raw/src/vendor/pef.rs
2026-10-14 01:38:49 -04:00
Brandon Thomas 1c65549d10 Merge PR #1533
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-14 01:38:48 -04:00
Brandon ThomasandClaude Opus 5.5 9b7d2e6ae2 Batch 35: #1443's face-tile test passes the preview edge #1410 added
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-14 01:34:10 -04:00
Brandon Thomas 07f73c44da Merge PR #1443
# Conflicts:
#	crates/engine/src/files.rs
#	docs/raw-preview-reads.md
#	docs/whats-new.md
2026-10-14 01:29:30 -04:00
Brandon Thomas b4d5b47617 Merge PR #1453 (rebased onto main) 2026-10-14 01:27:32 -04:00
skybluu bcfda31678 Merge current main into DNG identity fix 2026-10-13 21:34:33 -05:00
skybluu 83a89ff271 Merge current main into source build guidance 2026-10-13 21:31:07 -05:00
sanyamsingh001andCodex 3489c45cf9 LR-MASK-OBJECTS: integrate model folder retry with pinned main baseline
Preserve model setup and retry behavior alongside the upstream folder
opening callback. Keep the Linux opener asynchronous.

Co-authored-by: Codex <codex@openai.com>
2026-10-14 02:19:43 +00:00
skybluu f12cf65ab7 LR-BUILD: document command-local low-memory release overrides (#1196) 2026-10-13 21:19:28 -05:00
skybluu ce607d5a49 LR-LIB-CONVERT: avoid duplicated DNG camera make (#840) 2026-10-13 21:13:51 -05:00
Marco Arnulfo aaf7f2cc47 Loupe: the filter pill sits as far from the left edge as from the top (fixes #1645) 2026-10-14 02:39:16 +02:00
eliets2 ddc347cc55 Reject non-finite denoise inputs and derived pixels 2026-10-14 02:11:50 +03:00
Marco Arnulfo 528a464740 Search: clearing the filters empties the search field too (fixes #1648) 2026-10-14 01:04:42 +02:00
eliets2 3ad5eadab2 LR-REM-HEAL: checkpoint zero-feather spot edge correction
Treat a zero-width feather transition as a hard edge so exact-radius pixels remain unchanged, including at zero opacity. Add actual image regressions for all spot modes, image corners and two clone output sizes.

Validation: both new regressions failed on the original implementation and pass here. Formatting, workspace Clippy, HEIF and a generated-photo app smoke test pass. The unfiltered workspace gate remains blocked by the existing all-masks overlay test tracked by #1599; later parity, layers, assets and WASM stages are pending. This is a source checkpoint, not a green release candidate.

Contributor: @eliets2
2026-10-14 00:51:56 +03:00
Navid Zaman Khan aa4e3ce822 fix(ui): propagate find-missing errors and timeouts 2026-10-13 22:45:47 +06:00
Michael Anderson 1ee751ebdf LR-EDIT-OPTICS-PROFILE: Apply Nikon's in-file distortion correction for the Z 6II, Z 8 and Z f
Read the polynomial, zoom and optical center offset from NikonNEFInfo.
2026-10-13 11:10:46 -05:00
Brandon Thomas d71e7d11c1 Merge PR #1429
# Conflicts:
#	crates/ui-egui/src/panels/left.rs
2026-10-13 11:52:08 -04:00
Brandon Thomas 93f8ee7c0d Merge PR #1427
# Conflicts:
#	crates/ui-egui/src/lib.rs
#	docs/parity-checklist.md
2026-10-13 11:52:07 -04:00
Brandon Thomas ce3fad5a77 Merge PR #1567
# Conflicts:
#	crates/engine/src/tests.rs
2026-10-13 11:52:01 -04:00
Brandon Thomas f478b000de Merge PR #1580 2026-10-13 11:51:51 -04:00
Brandon Thomas cd59698798 Merge PR #1583
# Conflicts:
#	docs/whats-new.md
2026-10-13 11:49:24 -04:00
Brandon Thomas e067581ff3 Merge PR #1581 2026-10-13 11:49:23 -04:00