tests/accessibility.rs walks the AccessKit tree headless in every view, Develop tool and 13 dialogs and fails on unnamed controls, sliders without value/range and untitled dialogs. Fixes what it found: text fields are named by caption or hint, develop sliders expose min/max/step/value text and take Increment/Decrement, Tab-focused sliders take the arrow keys, Auto Stack's slider is named. Also as_chunks in spots.rs for the newer clippy lint. Docs: ui-parity audit section, checklist, gaps, ROADMAP. Sources: own design. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
22 KiB
Target-app parity: LightCraft vs Adobe Lightroom
Last reviewed: 2026-10-10 · Last updated: 2026-10-12 · Change: minor (UI/UX remaining 40–70 h → 34–58 h after the accessibility audit) · Target: Adobe Lightroom Classic 15.5 (August 2026) and Lightroom 9.6 (desktop)
The authoritative assessment of how close LightCraft is to Lightroom. The row-by-row checklist is parity-checklist.md; the ranked work list is gaps.md; deep areas have their own documents: raw-parity.md, file-format-parity.md, ui-parity.md, hardware-parity.md, localization-parity.md.
Headline
| Number | Value | Kind |
|---|---|---|
| Feature breadth, checklist | 81.1% of 517 in-scope rows (P0 98.0%, P1 95.1%, P2 46.9%) | measured: recount of parity-checklist.md rows (✅ 1, 🟡 ½, 🚫 left out), the same rule cargo xtask parity uses |
| Feature breadth, weighted by use | ~77% | estimated: feature-area table below |
| Ready for real work (full target) | ~61% (range 56–66%) | estimated: weighted sum over the dimensions with written weights, see below |
| Mainstream practitioner | ~49% (range 44–54%) | estimated: weekly areas of a working photographer, depth 71.8% × 0.804 × colour 0.85 |
| Essentials user | ~64% (range 59–69%) | estimated: core features at default settings, depth 77.4% × 0.830 |
| Remaining to beta | ~340–600 h | estimated; ~60% parallelizes |
| Remaining to full parity | ~1,000–1,800 h | estimated; ~70% parallelizes |
| Stage | alpha | see Stage |
The target and how it was measured
- Target: Lightroom Classic 15.5 (August 2026; latest per Adobe's release notes) for the
library, modules and depth; Lightroom 9.6 (the cloud-library desktop app), installed on the
owner's Mac at
/Applications/Adobe Lightroom CC, for the interface LightCraft's layout follows. Both share the Camera Raw engine. - Installed bundle, inspected by listing only (the clean-room rule forbids reading contents):
Info.plistdocument types (31 raw extensions, jpg, tif, heic, xmp, catalog bundles); 16.lprojlocalizations;CameraProfiles(1,500 Adobe Standard and 395 Camera Matching model names);LensProfiles(3,635 files, 56 makers);ModelZoo(37 AI model names). The app was not launched. - LightCraft side: origin/main at
b70ae174(2026-10-10): code counts (226 engine commands, 143 UI commands, 122 + 10 develop controls, 2,561 tests, ≈ 202,000 Rust lines in 24 crates + 3 apps), the checklist rows, raw corpus manifests, locale catalogs, CI workflows, docs. - Behaviour and output were not compared against a running Lightroom in this pass; the measured ΔE figures in raw-parity.md come from earlier work.
Presence is not parity. ✅ rows are set by whoever lands a feature and have not been checked systematically against Lightroom's behaviour; bugs keep turning up in ✅ areas (CR2 colour-filter phase #85, duplicate Local entries #22, black GPU exports on an Intel iGPU #78).
By dimension
| Dimension | Breadth | Ready for real work | Remaining | Doc |
|---|---|---|---|---|
| Features (weighted areas below) | ~77% (checklist 81.1%, measured) | ~61% | 600–1,100 h | Features |
| ↳ RAW cameras, colour and lens profiles (part of features) | 81% of Adobe's 1,446 models decode (16% verified), measured | ~56% | 255–480 h | raw-parity.md |
| UI/UX fidelity | ~85% | ~70% | 34–58 h | ui-parity.md |
| File formats (non-raw: images, sidecars, presets, catalogs) | ~85% | ~70% | 30–55 h | file-format-parity.md |
| Hardware | ~50% | ~40% | 40–80 h (+ tethering and printing, counted under Classic modules) | hardware-parity.md |
| Localization (12 key languages) | 7 of 12 present | ~52% (mean of the 12, measured) | 130–210 h for the target's set; +145–255 h for Hindi, Arabic, Indonesian, Vietnamese, Korean | localization-parity.md |
| Performance | ~80% | ~70% | 30–50 h | 24 MP GPU slider 3.9 ms, export 0.3 s (measured, gpu-pipeline.md); 85k library opens in 1.7–4.7 s; 100k test pending |
| Stability | — | ~60% | 30–60 h | never-crash lints and guards workspace-wide, crash-tested journal, 2,561 tests; but CI runs tests only on FreeBSD, user reports keep finding bugs in ✅ areas |
| Platforms | macOS, Windows (x64 / x86 / ARM64), Linux (AppImage, deb, rpm, Flatpak, Nix), FreeBSD, web | ~60% | 25–45 h | macOS is where it is tested; Windows installer UI unverified on Windows (#79); web experimental (CPU only) |
| Ecosystem / plug-ins | ~25% | ~15% | 40–80 h + owner decision | no Lightroom SDK equivalent (export, publish, metadata plug-ins); beyond the target: JSON-lines control channel, MCP server with 28 tools + one per command, CLI |
| AI features | ~30% | ~20% | 120–220 h + model decisions | AI (overlaps the masking and Enhance rows; not added twice) |
Features
Weights are a judgement of what Lightroom users spend their time on (library and develop dominate; Classic output modules and video are used by few). Breadth and readiness per area are estimated from the checklist sections and the deep-dive documents.
| Area | Weight | Breadth | Ready | Remaining | Notes |
|---|---|---|---|---|---|
| Import and library (import, folders, albums, smart albums, keywords, metadata, search, faces) | 15% | 90% | 80% | 25–45 h | checklist A–E 83–92%; robust journal; 85k-photo libraries |
| RAW decoding and camera coverage | 15% | 81% | 77% | 120–220 h | raw-parity.md, measured model by model: 85% of photographers' cameras decode (use-weighted), × 0.9 for per-body bugs; CR3 variants, compressed ORF, HE NEF |
| Colour, camera profiles, render fidelity | 10% | 65% | 35% | 80–150 h | 4 bundled profiles vs Adobe's 1,500; per-file fits median ΔE ~5 vs the camera JPEG, ~10% far off; no fidelity suite (raw-parity.md) |
| Global develop adjustments (light, colour, curves, grading, effects, detail) | 15% | 93% | 70% | 30–60 h | checklist F 91.7%; character tuned by eye |
| Optics, lens profiles, crop and geometry | 6% | 80% | 50% | 40–80 h | no lens database; crop / Upright complete |
| Masking | 8% | 67% | 45% | 60–110 h | checklist K 67.4%; AI masks heuristic or SAM 3 without mirror |
| Remove, heal, Enhance (denoise, Raw Details, Super Resolution, Lens Blur) | 7% | 45% | 30% | 70–130 h | checklist I 75%, P 0% |
| Presets, profiles, versions, history, sync | 5% | 95% | 85% | 8–15 h | |
| Export | 6% | 89% | 75% | 15–30 h | checklist S 88.9% |
| Merge and HDR | 3% | 85% | 60% | 20–35 h | merge 100%, HDR 70% (no HDR display) |
| Views, compare, zoom, culling | 5% | 90% | 70% | 15–30 h | zoom detail P0 gap |
| Classic output modules (Map, Book, Slideshow, Print, Web, publish, tethering) | 4% | 15% | 10% | 90–150 h | Classic extras 48% counts many small keys; the modules themselves are mostly ⬜ |
| Video | 1% | 0% | 0% | 25–45 h | catalogued only |
| Weighted | 100% | ~77% | ~61% (60.6%) | 600–1,100 h |
AI
Lightroom 9.6 ships 37 on-device models (names listed from its ModelZoo), covering subject, sky,
portrait, skin and object selection with refinement, depth estimation, denoise, dust detection,
reflections removal, distraction / people detection, culling scores (eyes open, blur, aesthetics) and
search embeddings; generative remove runs in Adobe's cloud.
| Feature | LightCraft | Status |
|---|---|---|
| Subject / Sky / Background masks | classical heuristics; the file's own DNG semantic mattes | 🟡 |
| People (faces, body, hair, skin…) and Landscape masks | — | ⬜ |
| Object / Describe masks | SAM 3 in pure Rust (Metal / CPU); opt-in 3.4 GB download, no mirror configured | 🟡 |
| Depth range mask, Lens Blur | — | ⬜ |
| AI Denoise | Bayer only, pure-Rust CPU / GPU, user-installed weights | 🟡 |
| Raw Details, Super Resolution | — | ⬜ |
| Generative remove, distractions, reflections | — (generative is out of scope: cloud) | ⬜ |
| Dust detection | ✅ | ✅ |
| Faces / People | YuNet detection, SFace / AuraFace recognition (opt-in downloads), People view | ✅ (MVP, faces.md) |
| Assisted culling | focus, bursts | 🟡 (no eyes-open / aesthetics scores) |
| Auto (tone), adaptive presets | Auto calibrated on Lightroom's Auto results (#628); no adaptive presets | 🟡 |
| Natural-language search | — | ⬜ |
Blocked on a model strategy (maintainer decision): licensable weights or our own training; pure-Rust inference is proven (faces, SAM 3, denoise).
Ready for real work, mainstream practitioner and essentials user
Three readiness numbers (craftrules standards/progress-docs.md). The full number is a weighted
sum over the dimensions with written weights. Mainstream and essentials take the weighted depth of
the areas their user touches, then apply written multiplicative discounts for what still stops real
work. Each has its own hours to ~95%, calibrated as in How hours are calibrated
(essentials ⊂ mainstream ⊂ full):
| Audience | Ready | Opus 5.5 agent wall-clock hours to ~95% | Work that dominates |
|---|---|---|---|
| Full target (ready for real work) | ~61% | 1,000–1,800 h (~70% parallelizes) | raw colour, lens and camera data; AI models; Classic output modules; localization; plug-in ecosystem |
| Mainstream practitioner | ~49% | 450–840 h (~60% parallelizes) | camera colour and render fidelity; CR3 / ORF / HE NEF; lens database; subject / sky masks; Lightroom XMP exchange; stability |
| Essentials user | ~64% | 160–300 h (~50% parallelizes) | default raw look for popular cameras; launch stability; basic-slider feel; opening CR3 / HEIC files people send |
Full target (ready for real work): ~61%
Weighted sum over the dimensions of By dimension (AI is left out because it overlaps the masking and Enhance feature areas). RAW decoding and camera colour are their own rows, valued from the model-by-model measurement in raw-parity.md:
| Dimension | Weight | Ready |
|---|---|---|
| Features: the other 11 areas, weighted depth from Features | 45% | 60.9% |
| RAW decoding and camera coverage | 9% | 77% (85% use-weighted × 0.9) |
| Camera colour and default rendering | 6% | 35% |
| UI/UX fidelity | 8% | 70% |
| File formats (non-raw) | 6% | 70% |
| Hardware | 3% | 40% |
| Localization | 3% | 52% |
| Performance | 6% | 70% |
| Stability | 8% | 60% |
| Platforms | 4% | 60% |
| Ecosystem / plug-ins | 2% | 15% |
| Weighted sum | 100% | 60.7% ≈ 61% (range 56–66%) |
Mainstream comes out lower than full: its scope is the raw-develop core, where LightCraft is weakest (camera colour, CR3 coverage), and its discounts are multiplicative, while the full sum is lifted by strong library, presets, UI and format dimensions.
Why the numbers moved with the RAW measurement: decoding measured model by model against Adobe's list is better than the earlier 50% estimate (84% of photographers' cameras decode, 76% after a bug discount), colour is lower (35%, was 40%) and is now its own row. Net: full +2 points. Mainstream now carries colour as a ×0.85 discount on top of the measured coverage (−2 points); essentials replaces its guessed 45% raw look with 84% × 0.75 (+1 point).
Discounts (evidence: open issues from users, 2026-10-10)
| Discount | Mainstream | Essentials | Evidence |
|---|---|---|---|
| Interaction fidelity / UI clarity | ×0.95 | ×0.95 | brush live preview gaps and feathering (#517, #518); crop artefacts and limits (#731, #742, #770, #771); Compare white-balance selector (#743–#745); low-res slider previews (#330); dialogs taller than the window (#781); mouse-wheel scroll (#714); 100% zoom capped (gap 4) |
| Stability on real machines | ×0.92 | ×0.92 | launch and quit crashes or silent startup failures (#250 macOS 12 Intel, #315 Windows Intel GPU, #431 Intel Mac, #260, #462, #783 Linux / Nouveau, #790 Windows installer); tests run in CI on FreeBSD only (gap 9) |
| File exchange with Lightroom users (mainstream) / opening files people send (essentials) | ×0.92 | ×0.95 | Adobe XMP sidecars change colours (#290), XMP CameraProfile and Upright ignored (#204, #205), catalog import fails (#599), same Light values render differently (#523, #209), no write-back to .lrcat; for casual users: CR3 beyond verified bodies, compressed ORF, HE NEF open as previews (#473, #485, #556), HEIC trouble (#693) |
| Product | ×0.804 | ×0.830 |
Mainstream practitioner: ~49%
A working photographer (wedding, portrait, events, landscape) shooting raw on one current camera, weekly: import, cull, develop, a few masks, sync a look, export. Excluded: Classic output modules, video, generative / cloud AI, plug-ins, tethering and other specialist hardware, languages other than the user's own.
| Area | Weight | Depth |
|---|---|---|
| Import and library | 18% | 80% |
| Cull: views, compare, zoom, ratings | 12% | 70% |
| Raw decoding for their camera | 27% | 85% (measured use-weighted share whose camera fully works, raw-parity.md) |
| Global develop adjustments | 15% | 70% |
| Crop, geometry, lens corrections | 6% | 50% |
| Masking (manual, subject / sky; no generative) | 8% | 45% |
| Heal / remove (no generative), denoise | 5% | 40% |
| Presets, copy / paste / sync | 5% | 85% |
| Export | 4% | 75% |
| Weighted depth | 100% | 72.1% |
Colour fidelity is a written discount, ×0.85: most raws start near the camera's own look (median ΔE ~5), about 10% far off (ΔE ~18), none calibrated to Adobe Standard, so a working photographer corrects colour by hand (33 open colour issues). 72.1% × 0.804 × 0.85 = ~49% (range 44–54%).
Essentials user: ~64%
A casual photographer with default settings: import, look through, rate, fix a few photos with the basic sliders, crop, apply a preset, undo, export JPEGs.
| Feature | Weight | Depth |
|---|---|---|
| Import photos | 15% | 80% |
| Browse grid and detail view | 10% | 85% |
| Rate and flag | 5% | 90% |
| Basic sliders (exposure, contrast, highlights, shadows, white balance, vibrance / saturation) | 22% | 70% (slider strength differs from Lightroom, #196, #521) |
| Auto | 5% | 65% (#318) |
| Crop and straighten | 10% | 80% |
| Presets and profiles | 8% | 80% |
| Undo and history | 5% | 90% |
| Their camera's raws: decode × default look | 10% | 64% (85% whose camera fully works × colour factor 0.75) |
| Export JPEG | 10% | 85% |
| Weighted depth | 100% | 77.5% |
77.5% × 0.830 = ~64% (range 59–69%).
User evidence (GitHub issues, excluding the four maintainers)
- 324 issues from 159 users; 162 open. 8,719 stars, 2,698 forks (2026-10-10).
- Of the 162 open: ~92 core-path bugs (33 colour / rendering, 16 decoding, ~36 UI / workflow, 7 launch / stability), ~11 developer / test infrastructure, ~59 feature requests or niche asks (plug-ins, mobile, sync servers, tablets, MIDI, geocoding, themes).
- Praise in issue text (love / amazing / great work / awesome): ~14 issues; "thank you" in 27. No explicit "switched from Lightroom" report was found ("switched" matches 6 issues, none a switch report).
- Reading: strong interest, but most open user issues are core-path, and raw colour dominates them, so the mainstream number is held down by default rendering rather than missing features.
Why the full number moved (55% → 46% → 59%)
The first figure (~55%) was the feature depth "pulled down" by an unwritten judgement. A later pass applied the mainstream discounts to it (~46%). The standard defines the full number as a weighted sum over the dimensions, so it is now that sum with the weights written above: ~59%. Method aligned with the standard, no new evidence. The stage stays alpha.
Stage
Alpha. Core workflows exist end to end (import, cull, develop, mask, export, catalog migration), but ready-for-real-work is ~61%, below the ~75% beta bar, and the main file formats have blocking gaps: Canon CR3 decodes from sensor data on three verified bodies only, compressed ORF and HE NEF open as previews, and colour on every non-DNG raw is estimated rather than measured.
Alpha gate: all six core workflows (import, cull, develop, save and reopen, batch looks, export) work end to end on macOS; see the table in roadmap.md. The partial rows (CR3 variants, compressed ORF, HE NEF as previews; capped 100% zoom) degrade but don't block a workflow.
To beta: ~14 points of readiness, ~340–600 h: the nine B gaps in gaps.md
(~230–430 h), plus burning down the ~92 open core-path user issues (40–80 h) and stability work
around them. Beta needs: CR3, ORF and
HE NEF decoding from sensor data; measured colour for the popular models and a fidelity suite with
scores; full-resolution zoom; Subject / Sky / People masks; a lens profile database for the
popular lenses; tests in CI on macOS, Windows and Linux.
How hours are calibrated
Hours are Opus 5.5 agent wall-clock hours, one session working sequentially, including tests and verification. Calibrated on this repository's history (git log and GitHub PR open-to-merge times):
- Project pace: first commit 2026-09-30; by 2026-10-10, 1,066 non-merge commits and 325 merged PRs, commits in 159 distinct clock hours, with 4–6 parallel agents plus community contributors. On 2026-10-02 the ROADMAP recorded ≈ 105–145 agent-hours spent; M0–M13 took ≈ 25 active hours with parallel agents against an up-front estimate of 110–170 h.
- UI and library rows: a lead agent closed ≈ 45 checklist rows in ≈ 5 h (2026-10-01) and ≈ 60 in ≈ 12 h (2026-10-02): 6–12 minutes per small row.
- Raw decoders: RW2 in every format 6.5 h (#215), compressed RAF 8.6 h (#282), CR3 CRX 10 h (#279), NEF lossy after split 4.7 h (#633), ORF 12.8 bpp 1.7 h (#651), HEIC 7 h (#609).
- Large features: AI RAW denoise 8.3 h (#384, 12.8k lines), SAM 3 masks 14.9 h (#162), HDR editing and export 2.3 h (#646, on existing groundwork), contact-sheet PDF (#563), German UI 13.8 h (#265).
- PR open time includes queueing and review, so these are upper bounds per feature; the ranges add a long-tail factor of 1.3–1.5× for verification against real files.
Why the estimate went up
The previous estimate (2026-10-02, kept below) was ≈ 270–505 h to full parity. It counted checklist rows only. New evidence since: the target's own lists (≈ 1,000 dedicated camera models, 3,635 lens profiles, 37 AI models, 16 languages) measured from the installed bundle; per-maker verification counts; that CI tests only FreeBSD; and the standard's added dimensions (localization, stability, platforms, ecosystem). The raw-codec package it estimated at 40–80 h took roughly that and closed most of its list; what remains is the data-heavy part (colour, lenses, models) it did not count.
History of the numbers
| Date | Checklist (all / P0 / P1 / P2) | Ready for real work | Remaining to full parity | Source |
|---|---|---|---|---|
| 2026-10-10 (RAW) | 81.1% (unchanged) | ~61% full · ~49% mainstream · ~64% essentials | unchanged | RAW measured model by model against Adobe's list; RAW decode and colour as explicit rows |
| 2026-10-10 (final) | 81.1% (unchanged) | ~59% full (weighted sum) · ~51% mainstream · ~63% essentials | full 1,000–1,800 h · mainstream 450–840 h · essentials 160–300 h | method aligned with the standard |
| 2026-10-10 (later) | 81.1% (unchanged) | ~46% full · ~51% mainstream · ~63% essentials | 1,000–1,800 h | full × discounts (superseded) |
| 2026-10-10 | 81.1% / 98.0% / 95.1% / 46.9% (517 rows) | ~55% | 1,000–1,800 h | this re-measure |
| 2026-10-08 | 79.7% / 98.2% / 95.6% / 41.6% (509 rows) | 60–70% | — | ROADMAP Where we stand |
| 2026-10-02 | 75.6% | — | 270–505 h (cloud parity without AI / Classic: 130–255 h) | ROADMAP Parity estimate |
The 2026-10-08 assessment by dimension, kept for evidence: feature checklist 79.7%; RAW coverage ~55%; colour and image quality ~55–65%; AI and computational ~15–20%; workflow and library ~85% (single machine); Classic modules ~30%; HDR and video ~25%; platform and robustness ~70%. By kind of user: JPEG / DNG shooter ~85%; Nikon / Sony / Panasonic / older-Canon ~65%; Fujifilm ~65%; Canon CR3 / Olympus compressed ~45%; Classic power user ~45%; relies on AI ~25%. Today's numbers per user: JPEG / DNG ~75%; Sony, Panasonic, Fujifilm ~60%; Nikon ~55% (HE NEF); Canon CR3 ~40%; OM / Olympus ~30%; Classic power user ~40%; relies on AI ~20%.
The 2026-10-02 effort table, kept for calibration: remaining P0/P1 UI 5–10 h; raw codecs 40–80 h; lens database 15–30 h; video 20–40 h; AI 80–150 h; HDR 15–25 h; Classic modules 60–100 h; smaller P2 items 12–25 h; look tuning, performance, packaging, hardening 25–45 h.
Revision history
| Date | Change | Summary |
|---|---|---|
| 2026-10-12 | minor | UI/UX remaining 40–70 h → 34–58 h (accessibility audit landed, ui-parity.md); percentages unchanged |
| 2026-10-11 | minor | EOS R5 Mark II CR3 verified (raw-parity.md): use-weighted share whose camera decodes 84% → 85%, RAW decoding 76% → 77%; full 60.6% → 60.7%, mainstream depth 71.8% → 72.1%, essentials depth 77.4% → 77.5%; the rounded numbers (~61%, ~49%, ~64%) are unchanged |
| 2026-10-10 | minor | RAW measured model by model (raw-parity.md): RAW decoding (76%) and colour (35%) are explicit rows of the full sum (59% → 61%); mainstream uses the use-weighted 84% plus a ×0.85 colour discount (51% → 49%); essentials uses 84% × colour 0.75 (63% → 64%); beta ~14 points |
| 2026-10-10 | minor | Full number restored to an additive weighted sum over the dimensions (~59%; method aligned with the standard, no new evidence); hours to ~95% for each of the three audiences; beta distance ~16 points |
| 2026-10-10 | minor | Added mainstream practitioner (~51%) and essentials user (~63%) numbers; full ready re-derived from written weights × discounts (55% → 46%); user-issue evidence; beta hours 340–600 |
| 2026-10-10 | minor | Stage re-checked against the core-workflow alpha gate: passes, stays alpha |
| 2026-10-10 | major | Created per the progress-docs standard: full re-measure (checklist recount, installed Lightroom 9.6 bundle listing, code counts, catalogs, CI), feature areas with weights, dimensions, AI, stage, calibration; merged ROADMAP's Where we stand and Parity estimate |