A fast photo library and non-destructive raw developer, written from scratch in pure Rust. No account, no cloud, no telemetry, no subscription.
Non-destructive by design
A scene-referred, wide-gamut, 32-bit float pipeline. Your originals are never touched.
Every control you reach for
Light, color, effects, tone curve, an 8-band color mixer, 3-way color grading wheels and 18 built-in presets.
Precise masking
Brush, linear and radial gradients, luminance and color ranges, plus sky, subject and background masks.
Native raw decoding
Pure-Rust decoders for DNG, CR2, ARW, NEF, RAF (including X-Trans), RW2, PEF and ORF, with more on the way.
A library that keeps up
Albums, ratings, flags, field search and virtualized grids built for big catalogs.
Instant feedback
The GPU develop pipeline updates a 24 MP raw in about 4 ms per slider move.
What's New
- fix(ui): eliminate preview flickering when hovering presets and profiles by @benlukka in #137
- Windows on ARM64: release builds, PE header check, install test on ARM64 hardware by @echelon in #141
- Issue #134: Exports: atomic without fsync; Copy import verifies against the probe hash by @echelon in #143
- Issue #136: Windows: use DX12 by default, honour WGPU_BACKEND, never let GPU init block startup by @echelon in #144
- Issue #138: DNG: apply the file's own camera-profile look (HueSatMap, LookTable, ToneCurve) by @echelon in #145
- Fonts: use craft-fonts as an optional build input; move the Japanese fonts out by @echelon in #149
- Tests: snapshot-determinism test asserts both runs settled by @echelon in #151
- Issue #148: Raw: read white balance, black level and crop of pre-2017 Sony ARWs by @echelon in #158
- Export: protect originals imported through differently named symlinks by @storybored379 in #152
- feat(ui): improve radial mask resizing and rotation by @kywk in #155
- Issue #150: Raw: NEF colour from the camera JPEG; 12-bit NEF black level by @treyreynolds in #165
- Restore from Recently Deleted; re-adding a deleted photo shows where it is by @cruzer45 in #177
- CR3: full-size preview and metadata from the container by @cruzer45 in #178
- docs: add star history chart to README by @coygeek in #179
- CLI: the connect hint names the port it actually tried (#167) by @itsmunzir in #192
- Faces: read face regions from XMP, show them in the loupe, and a People view by @voshart in #170
- LR-BEHAV-LOCALIZE: a language table, Simplified Chinese, and per-script font fallback by @lzjtugjc in #184
- M16: add Traditional Chinese UI, menus and stock preset localization by @sakamoto824 in #198
- LR-PROF-CAMERACOLOR: camera-look hue table, chroma curve and per-model camera profiles by @haraldh in #201
- LR-PROF-CAMERACOLOR: built-in ILCE-7M4 camera profile by @haraldh in #202
- M12: SAM 3 Object and Describe masks (pure Rust, Metal) by @GuintherKovalski in #162
- Rename PrintCraft to PdfCraft by @echelon in #219
- Tests: fix three FreeBSD-flaky headless UI tests by @echelon in #199
- M16.1: complete navigation arrowheads by @MusseJusse in #221
- Smart albums: File Path rule field by @nledford in #239
- Library: switching libraries no longer shows the old library's sidebar by @nledford in #225
- Sidebar: collapsible Albums, Local, By Date and Keywords sections by @nledford in #242
- Library: Random sort with a stable seed and Reshuffle by @nledford in #217
- Export: clear error when there's no export folder (instead of "Access is denied") by @DWAA1660 in #238
- Docs: fix release, sibling, and command references by @agorevski in #241
- Build: resolve a relative CRAFT_FONTS_DIR against the workspace root by @Ndsanes in #222
- i18n: add Brazilian Portuguese (pt-br) UI translation by @RicSchonfelder in #228
- LR-BEHAV-LOCALIZE: fill the zh-hans catalog to match zh-hant by @Ndsanes in #223
- Tests: pass on Windows (path separators, temp folder inside home, one GPU edge pixel) by @voshart in #207
- Issue #212: Raw: keep vendor white balance when writing DNG by @Gremiger in #235
- LR-IMP-FORMATS: Panasonic RW2 / Leica RWL / Panasonic RAW in every raw format, with the RW2 camera look by @XRTce in #215
- Fetch: the model downloader becomes its own crate (no behaviour change) by @voshart in #210
- Packaging: add a Nix flake (nix build / nix develop) by @anarion80 in #206
- Decode Sony downsized lossless ARWs (4:2:0 / 4:2:2) by @bogusyogi in #213
- Thumbnails: faster requests, reject stale preview work (+ bundled fixes split out) by @radialmonster in #243
- GPU: faster warp coverage mask, warp formulas written once (depends on #243) by @radialmonster in #246
- Web: time raw preview decodes with web_time so wasm doesn't panic by @andrewyao in #248
- CI: pick build jobs from available RAM, not installed RAM by @radialmonster in #249
- About: contributor and model credits compiled in (grab bag + table, self-submitted names) by @echelon in #252
- Release: FreeBSD, Flatpak x86_64/aarch64, AppImage zsync updates; README Downloads by @echelon in #302
- README Downloads: where to get it, then builds (Windows first) by @echelon in #306

