What's Changed
- Use crw craftlib by @rwoldberg in #3503
- security(web): ?bench runs on demo photos in an unsaved library, never the stored one by @dylanmtaylor in #3646
- #3601: the Square Grid's badge band sits on the photo itself by @rahul05ranjan in #3604
- lightcraft-cli: calibrate walks folders with the engine's bounded walk by @dylanmtaylor in #3643
- security(engine): Find Missing Photos hashes only regular files, no further than their size by @dylanmtaylor in #3704
- security(engine, faces): index repeated membership scans in photo move, keywords, import planning, sync and rename by @dylanmtaylor in #3709
- security(geocode): bound dataset reads, per-line fields, and the inflate error text by @dylanmtaylor in #3718
- security(logging): a log message cannot begin a record of its own by @dylanmtaylor in #3720
- security(tests): test fixture directories are created exclusively, never reused from a predictable name by @dylanmtaylor in #3721
- security(raw): linear sparse planning, distinct-byte allocation bound, opcode list budget, ORF strip length by @dylanmtaylor in #3679
- security(engine): sidecar copies, backups and version checks read regular files only by @dylanmtaylor in #3677
- catalog: bound keyword list path expansion and index synonym merges by @dylanmtaylor in #3641
- security(web): restore plans its writes first; cap render workers by @dylanmtaylor in #3669
- security(engine): embed only fonts inside the asset checkout; no line breaks in cargo instructions by @dylanmtaylor in #3670
- security: staging and probe files are created new, never written through an existing entry by @dylanmtaylor in #3673
- security(engine): the library folder is protected from folder.move however its path is spelled by @dylanmtaylor in #3676
- security(raster, segment): resample tall narrow images columns first by @dylanmtaylor in #3678
- Issue #2249: a teleconverter combination never inherits the bare lens's profile by @eliets2 in #3660
- #2361: lens corrections crop inside the corrected photo by @emmertex in #3012
- LR-EDIT-OPTICS-PROFILE: Sigma 10-18 mm exception on the ILCE-6700 by @Enthendor in #2733
- security(lensdb): bound the names calibrations copy, read database files through the opened regular file by @dylanmtaylor in #3697
- LR-MASK-GEOMETRY: masks stay on the photo under lens corrections, Upright, Transform and Rotate by @OneSlips in #3550
- LR-EDIT-OPTICS-PROFILE: enable Sony ILCE-7M3 embedded distortion correction (rebase of #1384) by @janickm in #3144
- LR-EDIT-OPTICS-PROFILE: preserve unknown crop factors in lens profiles by @r3d42-git in #2676
- LR-EDIT-OPTICS-PROFILE: the lens database is offered on first launch and downloads on request, the library is looked up, Optics names the profile by @OneSlips in #3073
- LR-EDIT-OPTICS-PROFILE: the log says where the lens database was read from and what it holds, and warns when it has no lenses by @FredApps in #3738
- Pass the Linux signing key to the release workflow by @dylanmtaylor in #3759
- LR-EXP-WATERMARK: decomposed Korean and Vietnamese export text draws whole (#3480) by @chordpli in #3489
- LR-VIEW-HISTOGRAM: the histogram and HDR settings flow between SDR and HDR by @JordyUSA in #1460
- About: credits tables fit without side-scrolling and their columns resize by @FredApps in #3726
- LR-EXP-LOCATION: an export subfolder never leaves the destination folder (#2571) by @insideTheFlux in #2600
- LRC-LIB-VISUALSEARCH: Find Similar Photos reads the photos off the UI thread by @insideTheFlux in #3496
- Logging: each render request and how it ended, at debug level (#2682) by @insideTheFlux in #2772
- GPU-FULL: more of the render on the GPU, loupe drafts from GPU textures by @OneSlips in #1065
- LR-META-LOCATION: place names always download into the settings folder (#2575) by @insideTheFlux in #2659
- LR-EDIT-DETAIL-SHARPEN: Radius and Detail work, and sharpening acts at pixel scale (#757) by @radialmonster in #762
- PERF-STEP-STALL: stepping and flagging never wait for the drive, and no change is ever dropped by @OneSlips in #3557
- Convert Negative 1/4: lightcraft-film, the negative conversion maths by @smyrgeorge in #2490
- LR-VIEW-SURVEY: the × on a survey tile removes the photo again by @Yeetjof in #3715
- Auto Sync: As Shot, Auto and Temp apply to each selected photo's own white balance by @OneSlips in #3571
- LR-BEHAV-RENDER-FIDELITY: calibrated Contrast and Blacks in process V3 (#523) by @AlexChambers in #1383
- Tests: two catalog flakes; a readback waits as long as a render by @FredApps in #3777
- pipeline: apply 8x8 ordered Bayer dithering to prevent display banding by @mynameisdeleted in #3509
- LR-PROF-IMPORT: import the user's own DNG camera profiles (.dcp) by @OneSlips in #1063
- Light tests allow a level of 8-bit dither by @FredApps in #3779
- Culling: the loupe uses built previews; photos prepared ahead and in the background by @OneSlips in #3077
- Detail: Remove Hot Pixels, on for newly imported raws (#1345) by @PiMinusMax in #1350
- LR-EDIT-DETAIL-DENOISE: built-in BM3D denoising with GPU acceleration by @esli1283 in #2982
- LR-BEHAV-TITLEBAR: the Windows title bar takes LightCraft's theme at launch (#3381) by @insideTheFlux in #3650
- LR-PREF-DISPLAY: on Windows, previews follow the monitor's colour profile by @insideTheFlux in #2439
- GPU tests allow a level of 8-bit dither by @FredApps in #3789
- LR-LIB-PEOPLE: face boxes drawn on a photo as stored land on the upright photo (#2674) by @insideTheFlux in #2857
- xtask ci: --no-fail-fast test runs; flaky-test policy by @FredApps in #3791
- CI: stop a hung gate at 80 min with a process list by @FredApps in #3794
- Docs: drop the Last updated / Change header line that every PR conflicted on by @FredApps in #3790
- deps: craft-update with flate2's miniz backend (fixes larger-than-raw ZIP TIFFs on Windows) by @FredApps in #3800
- #2270: a host bridge for pages framing the web build (?host=parent) by @francoisgn in #2315
- feat(web): page host mode, so a page can host LightCraft in its own document (builds on #2315) by @helenkwok in #3591
- CI: Windows leg for pull requests that change Windows code, or labelled full-ci by @FredApps in #3793
- Issue #315: the second launch on Windows can load the Vulkan driver and crash before any window by @eliets2 in #3667
- Test Create Preset name box restores on escape, keeps text on return by @eliets2 in #3773
- Report the lens database contents and missing XML files in the log by @eliets2 in #3809
- catalog: resync finds the retry record from the end, not every marker (#2124) by @eliets2 in #2179
- Issue #2165: a Lightroom collection that can't nest goes under the nearest set instead of failing the import by @THEtheChad in #3145
- LR-BEHAV-RENDER-FIDELITY: process V5 rolls raw tone curves off into white in stops, so raising Exposure keeps highlights (#1632) by @AlexChambers in #3783
- Export: built-in presets for Instagram Feed, Story / Reel, Web / Portfolio, Full Resolution (#2104) by @eliets2 in #2209
- Add GFX100S II to the spectral camera matrix table by @eliets2 in #3139
- shortcuts: H toggles mask pins while masking by @eliets2 in #1458
- Import review: say what the folder scan left out by @eliets2 in #2944
- Cut edited thumbnails from the decoded source, not the file by @eliets2 in #3810
- catalog: history steps and versions share segmentation grids (#2154) by @eliets2 in #2203
- Give the pipeline one exact output size instead of re-fitting by @eliets2 in #3749
- Presets change only the settings they name (fixes #2159) by @eliets2 in #2207
- Apply Auto settings to every selected photo by @eliets2 in #3808
- LR-IMP-FORMATS: pure-Rust clean-room compressed Olympus ORF bitstream decoder by @bd78 in #3775
- Extend CR3 white level to actual sensor saturation by @eliets2 in #3805
- Keep a stitched panorama at the photos' own resolution by @eliets2 in #3806
- ui: first-run onboarding tour and What's New after an update by @eliets2 in #2206
- Tests: the next folder drop gets 20 seconds to land by @FredApps in #3834
- never-crash: deny the panic lints in every crate root; GPU asserts become fail paths (#2137) by @eliets2 in #2170
- Paint clipped pixels red/blue when clipping warnings (J) are on by @Silvertree2010 in #3638
- Import review: an optional batch-edit recipe for newly imported photos by @eliets2 in #2940
- Tests: clipping warnings crush the shadows with Blacks by @FredApps in #3839
- Colour noise reduction: joint linear chroma filter with speck brake, CPU and GPU (#815) by @PiMinusMax in #1348
- Add flash, exposure bias and serial rules to smart albums by @eliets2 in #3821
- Remove the dead Cloud button from the top bar by @eliets2 in #3832
- Face boxes: drag a box's body to move it by @eliets2 in #3846
- Arm the window renderer marker before probing the driver by @eliets2 in #3817
- Write camera make and lens make to EXIF on export by @eliets2 in #3828
- Fix mismatched source/destination rects in before/after zoom window renders by @eliets2 in #3842
- Picture Package and Custom Package pages can print cut guides at each cell's corners by @eliets2 in #3843
- Match renamed missing files by content when size is unknown by @eliets2 in #3852
- Treat a first intersect mask component as its base selection by @eliets2 in #3854
- Copy the shared house rules into AGENTS.md by @FredApps in #3857
- Use adapter texture limit for probed window device by @eliets2 in #3853
- Issue #3768: dialog_role tests draw glyphs only craft-fonts has as boxes when built without it by @THEtheChad in #3769
- Stabilize sidebar month-name test fixture by @FredApps in #3859
- WEB-WORKER-PARITY: compare serialized jobs with the CPU reference (#3778) by @lostwald in #3782
- GPU float output for the HDR render (F32Hdr) by @eliets2 in #3856
New Contributors
- @rahul05ranjan made their first contribution in #3604
- @janickm made their first contribution in #3144
- @r3d42-git made their first contribution in #2676
- @mynameisdeleted made their first contribution in #3509
- @esli1283 made their first contribution in #2982
- @helenkwok made their first contribution in #3591
- @bd78 made their first contribution in #3775
- @lostwald made their first contribution in #3782
Full Changelog: v0.18.1...v0.19.0