Brandon Thomas and Claude Opus 5.5
bc2cda97cf
M13.2: Photo Merge commands, dialog with live preview, CLI
...
- engine: `merge.hdr`, `merge.panorama`, `merge.hdrPanorama` (bracket size from
EXIF); MergeJob (Send) with progress/cancel, preview renders through the develop
pipeline (deghost overlay, auto-crop frame); finish writes <name>-HDR/-Pano.dng
next to the first source, imports, selects, applies Auto Settings / auto crop
- ui: Photo Merge dialog (HDR / Panorama / HDR Panorama) with live preview on a
worker thread, background final merge with progress toast; context menu and
Ctrl+H / Ctrl+M (Ctrl now means the physical Control key on macOS)
- cli: `merge hdr|panorama|hdr-panorama`, `synth-merge` for synthetic inputs
- merge::synth: procedural brackets (DNG) and panorama views; docs/merge.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 10:30:03 -04:00
Brandon Thomas and Claude Opus 5.5
3ef4eb0687
M9.2: preset files — .lcpreset import/export (groups preserved), XMP presets via crs: mapping
...
- engine presets.rs: .lcpreset JSON format {format: "lightcraft.preset", version, presets[]},
parse_preset_file (.lcpreset file / bare preset / array, or XMP), folder expansion,
Session::add_presets (identical presets skipped, id clashes get fresh user.* ids, built-ins
never replaced).
- crs::preset_from_xmp: crs: fields → partial settings, crs:Name/crs:Group (fallback: file name /
"Imported Presets").
- Commands preset.import {paths} and preset.export {path, ids?, group?}; UI commands
file.importPresets / file.exportPresets (File menu, with native open/save dialogs on desktop),
Presets panel "⋯" menu (Import Presets…, Export User Presets…) and group context menu
(Export Group…).
- Tests: export → import round trip keeps groups/settings, duplicates skipped, clashing ids,
malformed files reported, hand-written XMP preset imports and applies.
- docs/xmp-interop.md: preset file section.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 01:05:26 -04:00
Brandon Thomas and Claude Opus 5.5
8af27c11b1
M10.8: XMP sidecars — save/read metadata + develop settings, auto-write, crs: interchange
...
- crates/engine/src/sidecar.rs: <stem>.xmp (default) or <file>.xmp next to originals with rating,
label, title, caption, copyright, creator, keywords, capture time/GPS, pick flag + full develop
settings in lc:settings; atomic writes; read on import (sidecar wins for metadata, edits restored)
and via photo.readMetadataFromFile (one undo step); raw/DNG embedded XMP used without a sidecar.
- Commands: photo.saveMetadataToFile (Cmd+S), photo.readMetadataFromFile, library.xmpPreferences
{autoWrite, naming}, library.toggleAutoWriteXmp; prefs persisted in the library's prefs.json.
Auto-write rewrites sidecars after each committed change (not mid-drag; undo/redo too).
- crates/engine/src/crs.rs: crs: develop fields (PV2012 light, WB abs/incremental, presence, HSL,
B&W mix, parametric + point curves, colour grading, sharpening, NR, vignette, grain, optics,
geometry, crop) → partial settings; documented in docs/xmp-interop.md.
- meta: write_xmp_lc for extra lc: properties; crs namespace canonicalised on read (never written).
- Tests: packet round trip, crs mapping with hand-written snippets, save → delete library →
re-import restores edits, auto-write + prefs persistence, foreign sidecar, DNG-embedded XMP.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com >
2026-10-01 00:36:19 -04:00