Adds keyboard shortcuts for the core tonal and color adjustments#1308
Open
SandeepSubba wants to merge 11 commits into
Open
Adds keyboard shortcuts for the core tonal and color adjustments#1308SandeepSubba wants to merge 11 commits into
SandeepSubba wants to merge 11 commits into
Conversation
- cache_utils: hash full AI-patch base64 content instead of string length in calculate_transform_hash, so two distinct patch results of identical dimensions can no longer collide and leave a stale patch composited. - ai_processing: validate AI model output tensor shapes before indexing (SAM decoder, sky-seg, U-2-Netp, Depth-Anything, LaMa). A model whose output resolution differs from the hardcoded assumption now returns a clean error instead of panicking on out-of-bounds access. - export_processing: bounds-check the frontend-supplied mask_index and guard calculate_resize_target against zero-dimension images (was Inf/NaN). - lib: cap lut_cache at 32 entries; it is keyed by path and never cleared by the session/image cache resets, so it previously grew unbounded. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Move the seven self-contained widget components (KeybindRow, SettingItem, DataActionItem, AiProviderSwitch, CloudDashboard, CanvasInputModeSwitch, PreviewModeSwitch) into src/components/panel/settings/widgets.tsx and prune the now-dead imports. These widgets touch no parent state, so the cut is mechanical. SettingsPanel.tsx drops from ~2415 to ~2032 lines. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Peel cohesive clusters out of two oversized Rust files into sibling submodules, each using `use super::*` to inherit the parent's imports and re-exported via `pub use` so the existing command paths in lib.rs are unchanged: - file_management/albums.rs (AlbumItem + album commands, ~260 lines) - file_management/folder_tree.rs (FolderNode + lazy dir scanning, ~270 lines) - image_processing/analysis.rs (histogram/waveform/auto-adjust, ~710 lines) file_management.rs 3661 -> 3135, image_processing.rs 3262 -> 2555. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add an "Adjustments" section to Settings → Controls with increase/decrease shortcuts for exposure, contrast, saturation, vibrance, temperature (white balance) and tint. Direction is the +/- keys (like Capture One); modifier families select the adjustment and match Capture One where it defines them (Contrast = Ctrl+Shift, Saturation = Ctrl+Alt). Exposure uses Alt+/- because Ctrl+/- is already bound to Zoom here. Implementation is intentionally self-contained and additive to keep it easy to rebase onto upstream releases: - keyboardUtils.ts: new `adjustments` section + a config-driven ADJUSTMENT_NUDGES table (combo, target key, step, clamp range) spread into KEYBIND_DEFINITIONS so the binds render and stay user-remappable. - useKeyboardShortcuts.ts: one generated handler per nudge, riding the same debounced-history setAdjustments path the sliders use. - en.json: section label + action labels. All defaults are remappable in Settings → Controls. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… workflow Documents the fork's custom changes (Capture One–style adjustment shortcuts + backend hardening) and a step-by-step process to rebase them onto new upstream releases, so updating stays low-effort. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
custom-shortcuts = full fork (fixes + refactors + shortcuts), the branch to run and rebase; code-analysis-fixes = clean fix/refactor subset for the upstream PR. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Export filename templates now support metadata tokens matching the Metadata
panel's editable fields: {title} (ImageDescription), {author} (Artist),
{copyright} (Copyright) and {comments} (UserComment). Values are read lazily
from the image's cached EXIF and sanitized so they are safe in a filename.
- The File Naming section now shows for single-image export too (previously
multi-select only); {sequence} stays hidden for single images. Single-image
export resolves the template via a new generate_export_filename command so it
supports the same tokens (dates, metadata, original filename) as batch.
- Guard against a persisted/imported template referencing an unknown token
(e.g. a stray {dcp_title} saved into the last-used preset): unknown tokens now
fall back to the original default {original_filename}_edited.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Opening an image that's part of a multi-selection now preserves the whole selection instead of collapsing to the opened image, so batch actions keep targeting every selected image. - Creator Details edits (Title/Author/Copyright/Comments) now apply to all selected images, with a "Edits apply to all N selected images" hint. The backend already wrote every path it received; it just never got the others. - Add a "Sync to N selected" action that copies the focused image's creator details to every selected image at once. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
When the focused image's rating drops it below the active star filter, it disappears from the filtered view but the cursor was left on the now-hidden image, breaking arrow-key navigation. Add an effect in App.tsx that, when the focused image leaves the sorted/ filtered list, advances the cursor to the nearest still-visible image (next in sort order, else previous). Covers both the editor (selectedImage) and the library grid (libraryActivePath); in the grid, still-visible members of a multi-selection are preserved. A "was it visible before" guard avoids hijacking selection on folder/album switches. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The Alt +/- exposure shortcuts nudged the `exposure` adjustment key, which is what the EV Shift slider (inside the Tone Mapper box) writes - a linear pre-tonemap gain. The slider actually labelled "Exposure" in the Basic panel writes `brightness` (the filmic, midtone-weighted lift). Point the nudges at `brightness` so the shortcut moves the slider the user sees as Exposure. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Adds keyboard shortcuts for the core tonal and color adjustments — exposure,
contrast, saturation, vibrance, white balance (temperature) and tint. They
appear in a new "Adjustments" group under Settings → Controls and are fully
user-remappable.
Type of Change
Changes Made
keyboardUtils.ts: newadjustmentskeybind section plus a config-drivenADJUSTMENT_NUDGEStable (combo, target adjustment key, step, clamp range),spread into
KEYBIND_DEFINITIONSso the binds render in the UI and stayremappable.
useKeyboardShortcuts.ts: one generated handler per nudge, reusing theexisting debounced-history
setAdjustmentspath (same as the sliders), gatedon an image being open in the editor.
i18n/locales/en.json: section label + action labels.+/-keys set the direction and the modifier selectsthe adjustment:
Alt+/-(Ctrl+/-is already Zoom)Ctrl+Shift+/-· Saturation:Ctrl+Alt+/-Shift+Alt+/-Shift+/-· Tint:Ctrl+Shift+Alt+/-Update (2026-07-03)
Fixed a mistargeted mapping: the exposure nudges pointed at the
exposureadjustment key, which is what the EV Shift slider (Tone Mapper box) writes —
a linear pre-tonemap gain. The slider actually labelled Exposure writes
brightness(the filmic midtone lift), so Alt+/-moved the wrong slider.The nudges now target
brightness, with a comment at the definition sitedocumenting the
exposure/brightnessnaming split.Screenshots/Videos
Testing
Built and ran via
tauri dev. Verified that the shortcuts adjust exposure /contrast / saturation / temperature live on a loaded image, that undo/redo
(Ctrl+Z / Ctrl+Y) captures the changes, and that all entries show up in
Settings → Controls → Adjustments and can be rebound.
cargo checkand theVite build are clean.
Test Configuration:
Checklist
Additional Notes
ADJUSTMENT_NUDGESarray, soadding or changing a shortcut is a one-line edit and the keybind UI and the
dispatch logic stay in sync automatically.
en.json; other locales fall back to English untiltranslated.
them to their preference.
AI Disclaimer: