-**A fast, beautiful, open-source photo library and non-destructive raw developer — written from scratch in pure Rust.**
-Native on macOS, Windows and Linux. In the browser via WebAssembly. Drivable end-to-end by AI agents over MCP.
+
+ A fast, beautiful, open-source photo library and non-destructive raw developer, written from scratch in pure Rust.
+ Native on macOS, Windows and Linux. In the browser via WebAssembly. Drivable end to end by AI agents over MCP.
+
+
+
+ Ansel Adams, "The Tetons and the Snake River" (1942). Public domain, U.S. National Archives. Developed in LightCraft.
+
-Ansel Adams, “The Tetons and the Snake River” (1942) — public domain, U.S. National Archives — developed in LightCraft.
+> [!NOTE]
+> **ArtCraft is a community of artists from all walks of life.** Painters, photographers,
+> filmmakers, illustrators, designers, animators, hobbyists, and people who picked up a pencil
+> last week. If you make things, you're one of us. **[Come say hi on Discord](https://discord.gg/artcraft).**
-
## Edit like you mean it
-LightCraft is a complete darkroom in a single native app. Every adjustment is **non-destructive** — your originals are
-never touched — and every slider renders through a **scene-referred, wide-gamut, 32-bit float pipeline** so highlights
+LightCraft is a complete darkroom in a single native app. Every adjustment is **non-destructive**, so your originals
+are never touched. Every slider renders through a **scene-referred, wide-gamut, 32-bit float pipeline**: highlights
roll off like film, shadows open up without halos, and colour stays clean from capture to export.
@@ -30,60 +75,66 @@ roll off like film, shadows open up without halos, and colour stays clean from c
### ☀️ Light
-**Exposure, Contrast, Highlights, Shadows, Whites, Blacks** — with edge-aware local tone mapping (a guided filter on
-log-luminance), so pulling −100 Highlights recovers a blown sky without the grey halos you'd get from a naive curve.
+**Exposure, Contrast, Highlights, Shadows, Whites, Blacks**, with edge-aware local tone mapping (a guided filter on
+log-luminance). Pulling −100 Highlights recovers a blown sky without the grey halos you'd get from a naive curve.
### 🎨 Color
-**White balance** by temperature & tint (Kelvin for raw, relative for JPEG) with presets, Auto and a
+**White balance** by temperature and tint (Kelvin for raw, relative for JPEG) with presets, Auto and a
click-to-neutralise **eyedropper**. **Vibrance** that protects skin tones, **Saturation**, an 8-band **Color Mixer**
-(hue / saturation / luminance) and 3-way **Color Grading** wheels with blending and balance — all computed in OkLCh,
-a modern perceptual colour space.
+(hue / saturation / luminance) and 3-way **Color Grading** wheels with blending and balance. All of it is computed in
+OkLCh, a modern perceptual colour space.
### ✨ Effects
-**Texture** for fine detail, **Clarity** for mid-tone punch, **Dehaze** (dark-channel-prior with guided refinement —
+**Texture** for fine detail, **Clarity** for mid-tone punch, **Dehaze** (dark-channel prior with guided refinement;
push it negative to add atmosphere), post-crop **Vignette** with highlight priority, roundness and feather, and
resolution-independent film **Grain** with size and roughness.
### 📈 Tone Curve
Parametric region curve with movable splits **plus** point curves for RGB, Red, Green and Blue. Curves are monotone by
-construction — no accidental tone inversions, ever.
+construction, so you never get an accidental tone inversion.
-
+
+
+
+ A gentle S on the RGB point curve, right under the Light sliders. Ansel Adams, 1942 (public domain).
+
## Color grading, the cinematic way
Split-tone shadows, midtones and highlights independently with drag-anywhere colour wheels. Below, Dorothea Lange's
-*Migrant Mother* gets a warm print-like tone — highlights at 42°, shadows at 28° — in two drags.
+*Migrant Mother* gets a warm, print-like tone (highlights at 42°, shadows at 28°) in two drags.
-
-
-Dorothea Lange, “Migrant Mother” (1936) — public domain, Library of Congress.
+
+
+
+ Shadows, midtones and highlights wheels in the Color panel. Dorothea Lange, "Migrant Mother" (1936). Public domain, Library of Congress.
+
## Before & after
-Hold \\ to peek at the original, press Y for side-by-side, or Shift+Y for a split view.
-Every image below is a real screenshot of LightCraft, captured automatically by an agent through the
+Hold \\ to peek at the original, press Y for side by side, or Shift+Y for a
+split view. Every image below is a real screenshot of LightCraft, captured automatically by an agent through the
[control channel](#built-for-agents).
-
The Tetons and the Snake River — Highlights −45, Shadows +38, Clarity +28, Dehaze +18. Ansel Adams, 1942 (public domain).
Earthrise — Dehaze +22, Highlights −30, warmer white balance, Vibrance +22. NASA / Bill Anders, Apollo 8, 1968 (public domain).
-
The Blue Marble — Highlights −38, Blacks −20, Dehaze +15, Vibrance +30. NASA, Apollo 17, 1972 (public domain).
+
Earthrise. Dehaze +22, Highlights −30, warmer white balance, Vibrance +22. NASA / Bill Anders, Apollo 8, 1968 (public domain).
+
The Blue Marble. Highlights −38, Blacks −20, Dehaze +15, Vibrance +30. NASA, Apollo 17, 1972 (public domain).
@@ -93,21 +144,29 @@ Every image below is a real screenshot of LightCraft, captured automatically by
Paint with a **Brush** (size, feather, flow, density, erase), drop **Linear** and **Radial Gradients** with draggable
pins, or select by **Luminance Range**, **Color Range**, **Sky**, **Subject** and **Background**. Combine components
-with **Add / Subtract / Intersect**, invert any of them, and dial in 15 local adjustments per mask — Temp, Tint,
-Exposure, Contrast, Highlights, Shadows, Whites, Blacks, Texture, Clarity, Dehaze, Hue, Saturation, Sharpness, Noise —
+with **Add / Subtract / Intersect**, invert any of them, and dial in 15 local adjustments per mask (Temp, Tint,
+Exposure, Contrast, Highlights, Shadows, Whites, Blacks, Texture, Clarity, Dehaze, Hue, Saturation, Sharpness, Noise)
plus an overall Amount.
-
+
+
+
+ A radial "Sun glow" mask (Temp +40, Exposure +0.50) layered over a linear "Sky" mask. Photo from LightCraft's procedurally generated demo library.
+
## Presets, profiles & the Color Mixer
-Eighteen hand-built presets ship in the box — *Golden Hour, Teal & Orange, Faded Matte, Selenium Tone, Crisp
-Landscape* and more — each with an **Amount** slider from 0 to 200 %. Save your own from any group of settings, mark
-favourites, copy/paste or sync edits across a whole selection with exactly the groups you choose.
+Eighteen hand-built presets ship in the box (*Golden Hour, Teal & Orange, Faded Matte, Selenium Tone, Crisp
+Landscape* and more), each with an **Amount** slider from 0 to 200 %. Save your own from any group of settings, mark
+favourites, and copy, paste or sync edits across a whole selection with exactly the groups you choose.
-
+
+
+
+ The Presets column next to the 8-band Color Mixer. Photo from the demo library.
+
### ⚫️ Black & White
-One click (V) to monochrome with an 8-band **B&W Mix** that lets you darken skies or glow foliage — then
-tone it with Color Grading for selenium, sepia or split-tone prints.
+One click (V) to monochrome, with an 8-band **B&W Mix** that lets you darken skies or make foliage glow.
+Then tone it with Color Grading for selenium, sepia or split-tone prints.
-
-
+
A 16:9 crop straightened +2.5° with the thirds overlay. Ansel Adams, 1942 (public domain).
+
Split view: colour original on the left, B&W with Clarity, Vignette and Grain on the right. Demo library.
@@ -139,18 +198,18 @@ tone it with Color Grading for selenium, sepia or split-tone prints.
A library that stays out of your way: **All Photos**, **Recently Added**, **Picks**, **By Date**, **Albums** nested in
**Folders**, and **Recently Deleted**. Rate with 0–5, flag with P / X /
-U, colour-label with 6–9. Search understands fields —
-`rating:>3 flag:pick iso:>800 camera:x2 date:2026-04 keyword:mountains` — and every view sorts by capture date,
-import date, edit date, name, rating or size. Justified **Photo Grid** and **Square Grid** views are virtualized,
+U, colour-label with 6–9. Search understands fields:
+`rating:>3 flag:pick iso:>800 camera:x2 date:2026-04 keyword:mountains`. Every view sorts by capture date,
+import date, edit date, name, rating or size. The justified **Photo Grid** and **Square Grid** views are virtualized,
so they stay smooth whether you have forty photos or forty thousand.
-
-
+
Photo Grid with albums nested in a folder, ratings and flags. Demo library.
+
Square Grid of the four public-domain showcase photos.
-
+
The Info panel: file, dimensions, rating, title, caption, copyright and camera metadata. NASA / Bill Anders, "Earthrise", Apollo 8, 1968 (public domain).
@@ -159,8 +218,8 @@ so they stay smooth whether you have forty photos or forty thousand.
## Built for agents
Every menu item, slider, brush stroke, crop handle and keystroke in LightCraft is a **command** with a stable id and
-JSON parameters — the UI, the keyboard, the CLI, a JSON-lines control channel and an **MCP server** all dispatch
-through the same entry point. An agent can cull a shoot, develop it, mask a sky and export it — and *see* the result.
+JSON parameters. The UI, the keyboard, the CLI, a JSON-lines control channel and an **MCP server** all dispatch
+through the same entry point. An agent can cull a shoot, develop it, mask a sky and export it, and *see* the result.
```sh
lightcraft --control 7980 ~/Pictures/trip
@@ -174,30 +233,31 @@ lightcraft --control 7980 ~/Pictures/trip
{"method": "ui.screenshot", "params": {"path": "after.png"}}
```
-- **91 engine commands** and **48 UI commands** — list them all with `engine.commands`, read every slider's range,
+- **91 engine commands** and **48 UI commands.** List them all with `engine.commands`; read every slider's range,
default and current value with `develop.controls`.
-- **MCP server** — `lightcraft-cli mcp` gives Claude (or any MCP client) ~100 tools: import, query, develop, mask,
- render (returned as an image), export — headless, or attached to the running app with screenshots, clicks and
- gestures. See [docs/mcp.md](docs/mcp.md).
+- **MCP server.** `lightcraft-cli mcp` gives Claude (or any MCP client) ~100 tools: import, query, develop, mask,
+ render (returned as an image), export. It runs headless, or attached to the running app with screenshots, clicks
+ and gestures. See [docs/mcp.md](docs/mcp.md).
```sh
cargo build --release -p lightcraft-cli
claude mcp add lightcraft -- "$PWD/target/release/lightcraft-cli" mcp ~/Pictures/shoot # headless
claude mcp add lightcraft-app -- "$PWD/target/release/lightcraft-cli" mcp --connect 127.0.0.1:7980 # live app
```
-- **Scriptable CLI** — `lightcraft-cli render in.dng -o out.jpg --set light.exposure=0.7 --preset …`.
+- **Scriptable CLI:** `lightcraft-cli render in.dng -o out.jpg --set light.exposure=0.7 --preset …`.
- **Undo for everything**, including agent actions: a slider drag (or a scripted burst of updates) is one undo step.
-- **Every widget is addressable** (`ui.widgets`) and clickable by name, so agents can operate the real UI, not a
+- **Every widget is addressable** (`ui.widgets`) and clickable by name, so agents operate the real UI, not a
side door.
-- The screenshots in this README were produced by [`docs/showcase/`](docs/showcase/) scripts, end to end.
+- The screenshots in this README were produced end to end by the [`docs/showcase/`](docs/showcase/) scripts.
Protocol reference: [docs/control-protocol.md](docs/control-protocol.md).
## Fast, native, private
-- **Pure Rust, no C.** Our own RAW decoders (DNG, Canon CR2, Sony ARW, Nikon NEF, Fujifilm RAF incl. X-Trans, Panasonic RW2, Pentax PEF, Olympus ORF), our own colour
- science, our own pipeline. JPEG, PNG, TIFF, WebP, PSD composites and JPEG XL open today.
+- **Pure Rust, no C.** Our own RAW decoders (DNG, Canon CR2, Sony ARW, Nikon NEF, Fujifilm RAF incl. X-Trans,
+ Panasonic RW2, Pentax PEF, Olympus ORF), our own colour science, our own pipeline. JPEG, PNG, TIFF, WebP, PSD
+ composites and JPEG XL open today.
- **Scene-referred & wide-gamut.** Linear Rec.2020 float internally, Bradford-adapted white balance, gamut mapping
instead of clipping, a filmic shoulder for raw and pixel-exact pass-through for JPEGs you haven't touched.
- **Resolution-independent edits.** Radii and brush sizes are relative to the image, so a 400 px preview, your
@@ -207,10 +267,10 @@ lightcraft --control 7980 ~/Pictures/trip
~4 ms, a cold 2.5 MP loupe in ~30 ms, and a full-size export in ~0.3 s including a parallel JPEG encode.
Without a GPU the same pipeline runs on all CPU cores, redoing only the stages a slider affects.
- **Instant culling.** Opening a raw shows its embedded camera preview or cached render within ~0.1 s while the
- full render follows (~0.2–0.5 s for 24 MP); the next and previous photos are prepared in the background, so stepping
+ full render follows (~0.2–0.5 s for 24 MP). The next and previous photos are prepared in the background, so stepping
through a shoot takes ~50 ms per photo.
- **Background rendering.** A worker pool renders the loupe, before/after and every visible thumbnail off the UI
- thread; drafts during drags, full quality on release.
+ thread: drafts during drags, full quality on release.
- **Local-first.** No account, no cloud, no telemetry, no subscription. Your catalog is an append-only log of
human-readable operations you can diff, back up or replay.
@@ -218,8 +278,8 @@ lightcraft --control 7980 ~/Pictures/trip
## Feature status
-LightCraft is young and moving fast — see the [roadmap](ROADMAP.md) for estimates. The detailed, row-by-row
-Lightroom parity tracker — every feature, menu item and shortcut with its status, evidence and the top gaps — is
+LightCraft is young and moving fast; see the [roadmap](ROADMAP.md) for estimates. The detailed, row-by-row
+Lightroom parity tracker (every feature, menu item and shortcut with its status, evidence and the top gaps) is
[docs/parity.md](docs/parity.md).
| Area | Status |
@@ -229,7 +289,7 @@ Lightroom parity tracker — every feature, menu item and shortcut with its stat
| Light, Color, Effects (vignette styles), Tone Curve (+ refine saturation, targeted adjustment), Color Mixer (+ targeted), Point Color, Color Grading, Calibration, B&W | ✅ |
| Masking: brush, linear, radial, luminance/colour range, add/subtract/intersect | ✅ (AI subject/sky use classical heuristics for now) |
| Crop, straighten tool + auto straighten, flip, rotate, aspect ratios, overlays | ✅ |
-| Profiles (Color, Neutral, Vivid, Landscape, Portrait, Monochrome — our own looks), presets, versions, history, copy/paste/sync settings | ✅ |
+| Profiles (Color, Neutral, Vivid, Landscape, Portrait, Monochrome: our own looks), presets, versions, history, copy/paste/sync settings | ✅ |
| Native macOS menu bar (generated from the command registry), control channel + every widget addressable, headless UI snapshots | ✅ |
| RAW: DNG, CR2, ARW, NEF (uncompressed), Fujifilm RAF (Bayer + X-Trans), Panasonic RW2, Pentax PEF, Olympus ORF; embedded previews for every format incl. CR3 | ✅ · compressed NEF/RAF/ORF, CR3 decode 🚧 |
| Detail: sharpening, luminance + colour noise reduction | ✅ · AI Denoise, Super Resolution ⬜ |
@@ -243,6 +303,8 @@ Lightroom parity tracker — every feature, menu item and shortcut with its stat
| GPU pipeline (wgpu compute, CPU-exact within 1/255) with CPU fallback | ✅ · WebGPU in the browser 🚧 |
| Web build (same UI in the browser via WASM): persistent library in OPFS/IndexedDB, Web Worker rendering, export downloads | ✅ · WebGPU, Safari/Firefox testing 🚧 |
+✅ works today · 🚧 in progress · ⬜ not started
+
## Quick start
@@ -261,7 +323,7 @@ cargo xtask ci # fmt, clippy, tests, la
The web build needs the `wasm32-unknown-unknown` target and the matching `wasm-bindgen` CLI
(`cargo xtask web` prints the exact install command); see [docs/web.md](docs/web.md).
-Keyboard: G grid · D detail · E edit · C crop · M masking ·
+**Keyboard:** G grid · D detail · E edit · C crop · M masking ·
Shift+P presets · \\ original · Y before/after · Z zoom ·
J clipping · ⌘Z undo · ⌘/ all shortcuts.
@@ -274,38 +336,74 @@ egui frontend is one swappable crate; nothing below it knows a UI exists. `mcp`
## Contributing
-Humans and agents follow the same rules — read [AGENTS.md](AGENTS.md) first. The short version:
+Humans and agents follow the same rules, so read [AGENTS.md](AGENTS.md) first. The short version:
- **Clean-room.** Never read Adobe binaries or GPL raw/photo code (darktable, RawTherapee, LibRaw, rawspeed, dcraw…);
work from public specs and black-box observation.
-- **No Adobe assets, ever** — no icons, screenshots, presets, profiles, LUTs or fonts from Adobe products. Every
+- **No Adobe assets, ever:** no icons, screenshots, presets, profiles, LUTs or fonts from Adobe products. Every
image, icon and font in the repo is original, public domain, Creative Commons, OFL or permissively licensed, and has
an entry in [assets/ATTRIBUTION.md](assets/ATTRIBUTION.md) added in the same commit.
- **Pure Rust**, enforced crate layering, everything is a command, and `cargo xtask ci` green before every commit
(one task id per commit).
+Questions, ideas or a bug you'd like to talk through first? Bring them to [Discord](https://discord.gg/artcraft).
+
-## Crafting Apps
+## The Crafting Apps
-Clean-room, pure-Rust creative tools from the same workshop — native on macOS, Windows and Linux, and in the browser.
+LightCraft is one of the **Crafting Apps**: free, open-source creative tools from the
+[ArtCraft](https://getartcraft.com/) team, each written from scratch in Rust and each able to
+stand on its own.
-
-
-
PhotoCraft Layered raster image editor — a Photoshop-class app with layers, masks, adjustments, brushes and PSD support.
-
DrawCraft Vector illustration — an Illustrator-class app with pen tools, live shapes, Pathfinder, type and SVG/PDF.
-
FilmCraft Non-linear video editor — a Premiere-class app with its own H.264/ProRes/AAC codecs, timeline and colour.
-
LightCraft Photo library and raw developer — a Lightroom-class app with a scene-referred pipeline, masking and presets.
-
PrintCraft PDF viewer and editor — an Acrobat-class app for reading, organizing, annotating and editing PDFs.
-
-
+| App | What it's for | Code | Learn more |
+|---|---|---|---|
+| | Image editing: layers, masks, type and real PSD files | [GitHub](https://github.com/storytold/photocraft) | [getartcraft.com](https://getartcraft.com/apps/photocraft) |
+| | Vector illustration (formerly DrawCraft) | [GitHub](https://github.com/storytold/vectorcraft) | [getartcraft.com](https://getartcraft.com/apps/drawcraft) |
+| | Video editing, color and sound | [GitHub](https://github.com/storytold/filmcraft) | [getartcraft.com](https://getartcraft.com/apps/filmcraft) |
+| | **Photo library and raw development** · **you are here** | [GitHub](https://github.com/storytold/lightcraft) | [getartcraft.com](https://getartcraft.com/apps/lightcraft) |
+| | Reading, organizing and protecting PDFs | [GitHub](https://github.com/storytold/printcraft) | [getartcraft.com](https://getartcraft.com/apps/printcraft) |
+| | Motion graphics and visual effects | [GitHub](https://github.com/storytold/effectcraft) | [getartcraft.com](https://getartcraft.com/apps/effectcraft) |
+| | Page layout and publishing | [GitHub](https://github.com/storytold/designcraft) | [getartcraft.com](https://getartcraft.com/apps/designcraft) |
-## Credits
+And [**ArtCraft**](https://getartcraft.com/) itself, our AI image and video studio for artists who want real control.
+
+
+
+
+
+
+
+
Come make things with us
+
+
+ Our Discord is where artists of every kind hang out: people who paint, shoot, draw, cut film,
+ set type, and people still figuring out what they like to make. Share what you're working on,
+ ask for help, tell us what's broken, or tell us what you wish these tools could do.
+ Whatever your medium and however long you've been at it, you're welcome here.
+
+
+
+
+## License and credits
+
+LightCraft is licensed under **MIT OR Apache-2.0**.
Showcase photographs are public-domain works, used via Wikimedia Commons: Ansel Adams, *The Tetons and the Snake River*
(1942, U.S. National Archives); Dorothea Lange, *Migrant Mother* (1936, Library of Congress); Bill Anders / NASA,
*Earthrise* (1968); NASA, *The Blue Marble* (1972). The demo library is procedurally generated by LightCraft. UI font:
Inter (SIL OFL). All icons are original. See [assets/ATTRIBUTION.md](assets/ATTRIBUTION.md).
-LightCraft is an independent project and is not affiliated with or endorsed by Adobe. Licence: MIT OR Apache-2.0.
-By the artcraft team.
+LightCraft is an independent project and is not affiliated with or endorsed by Adobe.
+
+