Skip to content

Sync: merge upstream/main into ours (2026-10-18) - #2

Merged
iannitram merged 100 commits into
oursfrom
sync/2026-10-18
Oct 18, 2026
Merged

iannitram merged 100 commits into
oursfrom
sync/2026-10-18

Conversation

@iannitram

Copy link
Copy Markdown
Owner

Daily fork sync, 2026-10-18. Merges upstream/main (31a677f, 99 commits) into ours on sync/2026-10-18, as a merge commit (no rebase). No conflicts.

After the merge the tree differs from upstream/main only by our three agent-docs files (CLAUDE.md, the agent-skills config); there is no code of ours in this fork, so the GitHub checks on this PR are the test of record. Nothing was built locally on the Z13 for this repo.

🤖 Generated with Claude Code

FredApps and others added 30 commits October 14, 2026 10:23
…d#1670)

Preserve real transparency, pixels and embedded metadata. Cover RGB PNG,
TIFF compression modes and WebP, plus real-alpha round trips.

Co-authored-by: Codex <codex@openai.com>
The host name lookup blocked with no deadline before the cancel check, and each address then got the full connect timeout. The lookup now runs on a helper thread under the connect deadline, which all addresses share.
Found while testing crates/meta/src/xmp.rs:364 (parse_gps_coord, used at xmp.rs:539-544)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…mapped local sliders

Two of the three problems reported in storytold#1840:

- A luminance range at full strength up to white (LumRange "a b 1 1",
  a typical highlights mask) ended at our scene white (0 EV) with no
  feather, so anything brighter (the sun, speculars, a sky after a
  positive exposure) fell out of the mask along a hard edge. That end
  now stays open.
- Correction sliders we have no counterpart for (LocalGrain, ...) were
  dropped silently. They are now listed in `unmapped` as
  "Mask: LocalGrain"; LocalCurveRefineSaturation 100 counts as neutral.

Adobe base looks, the third problem, are handled by storytold#1469.

Also adds my entry to contributors/people.toml.
…an allocation budget (storytold#1517)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…els (storytold#1518)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The HDR / Panorama / HDR Panorama dialogs now open with the options of the
last merge of that kind instead of the defaults, and those options are kept
in the library's prefs.json (Session::last_merge) so they survive a restart.
"With Last Settings" and HDR for Each Bracket Set read the same store.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…arks (gap 15)

The Print dialog's Page section gets Lightroom's Page Options for Single Image
and Contact Sheet: the page number at the bottom right, the print settings line
(sharpening, profile, resolution) at the bottom left, and crop marks at the
corners of each photo. They are `print.set {page: {pageNumbers, pageInfo,
cropMarks}}`, saved with templates, drawn in the preview and composed into the
PDF; marks and text turn white on a dark page.
Align feature descriptions, counts, exports and language options with the
current code. Distinguish model-dependent features and implemented Print
and slideshow workflows from their remaining gaps.

Co-Authored-By: GPT-6.1 Sol <noreply@openai.com>
Co-Authored-By: Claude <noreply@anthropic.com>
An FFF (a 3FR converted on the desktop) has no colour matrix of its own:
the camera's stays in the original 3FR header the FFF carries as a
complete TIFF in private IFD0 tag 0xC51B. The new vendor::hasselblad
reader decodes 3FR / FFF through dng::decode_as and, when the file has
no matrix, takes the matrices from that header, so an FFF no longer
develops with the "camera RGB = sRGB" fallback (H4D-40 as-shot white
moves from xy 0.279, 0.356 to 0.325, 0.336).

RGGB checked against the camera preview on the CC0 H4D-40 FFF and CFV
3FR (raw.pixls.us 931 and 709). Synthetic tests cover the embedded
matrix, an own matrix winning, a missing or damaged header, and
truncated files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J2NDVXA8jQQWeJb4YVTb6b
These files carry no JPEG: their preview is an uncompressed 8-bit RGB
IFD (1217 x 913 in the H4D-40 FFF, 218 x 218 in the CFV 3FR). The
largest such image is handed on by embedded_preview as a small baseline
TIFF, which lightcraft_codecs::decode reads, so 3FR / FFF show a preview
in the grid and loupe before they are developed. No Orientation tag is
written: the raw file's applies, as for JPEG previews without one. The
FFF's 16-bit copy (with a TransferFunction of unknown meaning) is not
used.

decode_raw_preview applied a container-declared colour space by forcing
the JPEG decoder on any owned preview; it now checks for JPEG bytes, so
a wrapped TIFF (or a JPEG XL preview) goes to its own decoder.

Checked on the CC0 H4D-40 FFF and CFV 3FR through
embedded_preview_srgb: right colours, the 3FR upright through its
Rotate90. Tests cover the wrap, the choice among RGB images, a short
strip and truncated files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J2NDVXA8jQQWeJb4YVTb6b
Canon EOS R6 Mark II writes its Exif model as 'Canon EOS R6 Mark II', which failed the spectral camera table lookup because the table registers the model as 'EOS R6m2'. Add the alias mapping and regression unit tests in lightcraft_raw and lightcraft_catalog.
Clippy 1.97 rejects `drop(write)` in the same-folder export test: the
closure has no Drop, so its borrow of `written` already ends at its last
use and the call did nothing. Removed, with a note on why the following
read of `written` compiles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01J2NDVXA8jQQWeJb4YVTb6b
Found while testing crates/engine/src/rename.rs:919 (start parsed at crates/engine/src/cmd/manage.rs:12)

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Found while testing crates/meta/src/xmp.rs:509-512

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Fixes storytold#1930

Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
echelon and others added 27 commits October 18, 2026 09:20
… open at white, report unmapped local sliders

# Conflicts:
#	contributors/people.toml
…he print doesn't

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…line)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ers, page info and crop marks (gap 15)

# Conflicts:
#	docs/gaps.md
#	docs/parity-checklist.md
…ded 3FR header

# Conflicts:
#	docs/parity-checklist.md
#	docs/raw-parity.md
…thout clone (clippy 1.99)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ch-42

Integration batch 42: 31 community PRs
@iannitram
iannitram merged commit cd573eb into ours Oct 18, 2026
3 checks passed
@iannitram
iannitram deleted the sync/2026-10-18 branch October 18, 2026 16:57
iannitram added a commit that referenced this pull request Oct 18, 2026
Sync: merge upstream/main into ours (2026-10-18)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.