Files
lightcraft/docs/ui-parity.md
T
Atmik Shetty 56e65bf49f KEYC-PANELS: F8 toggles the right panel, Shift+Tab hides and restores all panels
View > Right Panel (view.rightPanel, F8) hides the right panel and shows the one that was
there again (Edit when nothing was remembered; Crop, Remove, Masking and Red Eye end when
hidden and come back as Edit). View > Hide All Panels (view.allPanels, Shift+Tab) hides the
left sidebar, the right panel, the Presets column and the filmstrip; the next press brings
back exactly what was shown, so a panel that was already hidden stays hidden. Showing any
panel by hand while they are hidden makes the snapshot stale: the next Shift+Tab hides again
instead of resurrecting old state. Both commands take an optional show / hide parameter and
are checked in the View menu while they apply. The top bar and tool strip stay.

Shift+Tab is also egui's "focus previous widget", set when the pass begins and without
consuming the key; with nothing focused it focused the loupe. The shortcut consumes the key
and cancels the traversal. In a focused text field neither key is a shortcut, and Shift+Tab
keeps moving focus as before. On a Mac keyboard F8 is Play/Pause unless fn is held or
"Use F1, F2, ... as standard function keys" is on.

Docs: KEYC-PANELS is partial (Tab, T, F5 and solo remain; F6 / F7 are in PR #1078), KEYC-HELP
is done (F1), KEYC-RATING's missing list drops the already implemented [ ] keys, two View
menu rows are added, gap 28 shrinks, and the parity summary is refreshed with
cargo xtask parity --write (it was already stale on main).

The native menu leaves Shift+Tab to egui (no accelerator, so the macOS menu shows no key hint) and
the native_menu accelerator test lists it with the other keys egui handles.
2026-10-12 13:37:28 +05:30

7.8 KiB
Raw Blame History

UI parity

Last reviewed: 2026-10-10 · Last updated: 2026-10-12 · Change: minor (shortcuts: F8 and ⇧Tab panel keys, F1 help and [ ] were already done, command counts recounted; zoom row: Compare and Reference sharp at 1:1) · 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 158 UI commands (UI_COMMANDS in crates/ui-egui/src/menus.rs, 77 with a shortcut; recounted 2026-10-12) 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% with a mask overlay or soft proofing (no zoom window there; Detail, Before/After, Compare and Reference have them; 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: flag cycling (backtick), the filter-bar \ key, Tab and F5.

Still missing / broken:

  • No Tab (side panels) or F5 yet; F6 and F7 are in PR #1078. F8 (right panel) and ⇧Tab (hide / show all panels) work: ⇧Tab hides the side panels, Presets and filmstrip and brings back exactly those; on a Mac keyboard F8 is Play/Pause unless fn is held.
  • H opens 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-12 minor Shortcuts: F8 and Shift+Tab panel keys; F1 help and [ ] rating were already implemented; UI command counts recounted
2026-10-11 minor Zoom row: Compare and Reference get zoom windows; what remains of LR-VIEW-ZOOM is overlays and soft proofing
2026-10-10 major Created: measured command and shortcut counts, assessment by area, estimates; moved the shortcut conflicts section here from the checklist