Progress docs per craftrules standards/progress-docs.md: target-app parity, gaps, roadmap with alpha gate, readiness by audience (full / mainstream / essentials) with Opus 5.5 hours, model-by-model RAW coverage against Adobe's camera list (docs/raw/), and format, hardware, UI and localization parity docs. Co-Authored-By: Claude Opus 5.5 <[email protected]>
7.2 KiB
UI parity
Last reviewed: 2026-10-10 · Last updated: 2026-10-10 · Change: major (created; shortcut notes moved here from the checklist) · Target: Adobe Lightroom Classic 15.5 / Lightroom 9.6
How LightCraft's interaction compares with Lightroom's: views, panels, tools and handles, modifier
keys, shortcuts, zoom, context menus and feel. Rows for individual menu items and shortcuts live in
parity-checklist.md (sections Y and Z, Classic keys); this page is the
assessment and the notes that don't fit a row. Visual reference for agents: plan/lightroom/
(local, gitignored; 10-observed-ui.md and screenshots).
Measured counts (2026-10-10)
- 226 engine commands (
crates/engine/src/cmd/, 30 modules) and 143 UI commands (UI_COMMANDSincrates/ui-egui/src/menus.rs, 73 with a shortcut) plus 10 language commands; 23 secondary shortcut bindings (ALIASES,crates/ui-egui/src/shortcuts.rs); a keymap editor. - 122 develop controls plus 10 indexed templates (
crates/develop/src/controls.rs). - Checklist: menus 95.3% (86 in-scope rows), desktop shortcuts 94.4% (81 rows), Classic extras 48.2% (82 rows), measured by recounting parity-checklist.md.
- 31 panel modules (
crates/ui-egui/src/panels/), 26 context-menu sites.
Assessment by area
| Area | Target | LightCraft | Ready | Main gaps |
|---|---|---|---|---|
| Layout and views | Lightroom: grid / detail / edit; Classic: Library, Develop, Map, Book, Slideshow, Print, Web modules, filmstrip, panels | Lightroom-style single window: Photo Grid, Square Grid, Detail, Compare, Survey (≤ 48), Before / After, People, quick slideshow, second window, filmstrip | 75% | no Classic module switcher (by design) or output modules; dark theme only |
| Develop panels and sliders | Light, Color, Effects, Detail, Optics, Geometry, Lens Blur, Calibration | every global slider; scrub, double-click reset, Alt-drag previews where implemented | 80% | Lens Blur, Calibration panel depth; slider feel (acceleration, fine Shift-drag) unmeasured |
| Crop, Upright, transform handles | handles, aspect lock, angle, overlays (O / ⇧O), guided Upright | ✅ all of them; overlay cycle on ⇧O | 85% | crop opacity of cut-out area (15.5) |
| Masking tools | brush (A / B, flow, density, auto mask, pressure), linear / radial, range masks, AI masks, pins | brush, linear, radial, colour / luminance range, add / subtract / intersect / invert, masks panel, pins | 60% | brush live preview (#517 / #518), no pen pressure, no depth range, AI masks, Feather / Edge controls (15.5) |
| Remove / heal | content-aware remove, heal, clone, visualize spots | heal, clone, auto source, visualize spots, red / pet eye | 65% | content-aware (patch synthesis) remove, generative remove, detect distractions |
| Zoom and navigation | Fit / Fill / 1:1 / 2:1 … 11:1, Navigator, spacebar pan | Fit to 800%, pinch zoom, pan, Navigator-like | 60% | original-pixel detail at 100% (preview capped at 2,560 px; P0 gap LR-VIEW-ZOOM) |
| Library culling and metadata | ratings, flags, labels with keys, painter, keywording, metadata panel, filter bar | ratings / flags / labels and advance, keyword list and sets, keywording box, metadata fields, smart albums, filter bar | 85% | painter tool, quick collection, some Classic keys |
| Shortcuts | Lightroom desktop and Classic keymaps | Lightroom-desktop keymap with Classic additions, editable | 85% | deliberate differences below; no Classic keymap layer |
| Context menus | everywhere | 26 sites (grid, filmstrip, albums, folders, keywords, masks, presets…) | 70% | unaudited against Lightroom's menus item by item |
| Text fields | native editing behaviour | custom text field (LR-BEHAV-TEXTFIELD) | 70% | IME and selection edge cases |
| Accessibility | VoiceOver / Narrator, keyboard navigation | AccessKit: sliders, buttons, dropdowns, section headers announce | 30% | canvas tools pointer-only; not audited with a screen reader |
| Feel and responsiveness | GPU-interactive sliders (15.3) | ≤ 16 ms slider budget on GPU; background renders | 75% | colour NR at half resolution, 100k-photo grid test |
| UI/UX overall | ~70% | estimated, weighted by use (develop and library 60%, tools 25%, rest 15%) |
Remaining: 40–70 h (zoom detail 8–15 h, brush and masking feel 8–12 h, accessibility audit 10–20 h, Classic keymap layer 4–8 h, context-menu audit 4–8 h, text-field and IME polish 4–8 h). Output modules and AI tools are counted with their features in target-app-parity.md.
Shortcuts
Compared plan/lightroom/06-shortcuts.md (desktop part) with our bindings: command specs in crates/engine/src/cmd/,
UI_COMMANDS in crates/ui-egui/src/menus.rs and secondary bindings (ALIASES) in crates/ui-egui/src/shortcuts.rs.
no_conflicting_bindings (same file) fails when one key fires two actions.
Fixed (M16.1): added Lightroom-desktop keys as secondary bindings for existing commands — ⌘D Select None, ⇧E
Export dialog, Space Toggle zoom, ⇧M Create Version, ⇧X Reject + advance, ⇧U Unflag + advance. ⇧Y fired both
Before/After Split and the History panel; History lost the binding. W and ⇧⌘I also fired the engine command
under the UI command that wraps it (a no-op error); the UI command now wins.
Deliberate differences (our key → Lightroom desktop key) — each is a conflict with another binding we have:
| Action | Ours | Lightroom desktop | Why |
|---|---|---|---|
| Pick flag | P | Z | Z = toggle zoom (Classic convention); P is the Classic pick key |
| Photos panel (left) | ⌘⇧L | P | P = pick |
| Expand/collapse edit sections | ⌘⌥1–5 | ⌘1–6 | ⌘0 = Zoom to Fit, ⌘1 = Zoom 100 %; Geometry lives in the Crop panel |
| Histogram | ⌘⇧H | ⌘0 | ⌘0 = Zoom to Fit |
| Square Grid | ⇧G | (none; ⇧G = Guided Upright) | Guided Upright is a button in the Crop panel |
| Export dialog | ⌘⇧E (+ ⇧E) | ⇧E | ⌘⇧E is "Edit in Photoshop" there; no external-editor command yet |
| Crop overlay cycle | ⇧O | O | O = mask overlay; ⇧O (mask colour / overlay orientation) unused otherwise |
| Create Version | ⌘⇧S (+ ⇧M) | ⇧M (Windows: Ctrl+⇧S) | — |
| Select None | ⌘⇧A (+ ⌘D) | ⌘D | — |
Library culling (KEYC-RATING): 0–5, 6–9 and P/X/U reach egui on macOS even when displayed in the native menu (adapted from PR #261; issue #283). Shift+0–9 applies and advances once; Shift+P picks and advances in Photo Grid / Square Grid and retains Presets elsewhere. See library shortcuts for the verified Classic mapping and regression coverage. Remaining Classic gaps: rating [ / ], flag cycling and filter-bar keys.
Still missing / broken:
- No command yet: F1 help (verify the rest of the old list: full screen, settings, stacks, visualize spots and merges have commands now).
Hopens Remove; Lightroom also uses it (Classic) to hide pins — pins toggle from View → Show Mask Pins.- ⌘M / ⌘H / ⌘Q / ⌘W rely on the platform window defaults (unverified).
Revision history
| Date | Change | Summary |
|---|---|---|
| 2026-10-10 | major | Created: measured command and shortcut counts, assessment by area, estimates; moved the shortcut conflicts section here from the checklist |