Skip to content

Numpad controls (SP-3000 style)#1078

Draft
R-Laine wants to merge 6 commits into
CyberTimon:mainfrom
R-Laine:Colour-Contrast-Hotkeys
Draft

Numpad controls (SP-3000 style)#1078
R-Laine wants to merge 6 commits into
CyberTimon:mainfrom
R-Laine:Colour-Contrast-Hotkeys

Conversation

@R-Laine
Copy link
Copy Markdown
Contributor

@R-Laine R-Laine commented Apr 23, 2026

Description

Implemented numpad hotkeys for rapid image adjustments, inspired by traditional film scanner workflows. Users can now adjust RGB/CMY color channels, contrast, and density using the numpad keys, with configurable step sizes and two adjustment modes.

This was requested in #96

Type of Change

  • New feature

Changes Made

  • Added settings interface for numpad configuration with mode (digital/film), enter key behavior, and configurable step sizes
  • Extended adjustments interface with color offsets for film-style color grading
  • Updated keyboard shortcuts hook to handle all numpad keys with:
    • Digital mode: Temperature/Tint adjustments
    • Film mode: Full RGB/CMY color offsets with density-rich shadows
    • Contrast adjustments
    • Reset function
    • Enter key modes: Next, Instant Export, Skip & Move
  • Created settings panel section with:
    • Enable/disable toggle
    • Mode switch (Digital/Film)
    • Enter key behavior selector
    • Adjustable step sizes for exposure, contrast, and RGB/CMY
    • Key mapping reference table
  • Integrated with main app to pass numpad settings and adjustments to the keyboard hook

Screenshots/Videos

image image image image

Critical Issue: Film Mode Not Integrated with Backend

The Film mode (RGB/CMY color offsets) is currently not functional because it lacks backend integration.

Problem

  • Frontend stores filmColorOffsets (cyanRed, magentaGreen, yellowBlue) in the adjustments state
  • Numpad shortcuts successfully modify these values in the frontend
  • However, the Rust backend (GlobalAdjustments struct in image_processing.rs) and WGSL shader do not include these fields
  • No shader logic exists to apply these color offsets to the rendered image

Impact

  • Film mode adjustments are saved but do not affect image rendering
  • Digital mode works fully (uses existing temperature/tint which are already in the backend)
  • Users will see no visual change when using Film mode numpad keys

Resolution Required

To make Film mode functional, backend changes are needed:

  1. Add cyan_red, magenta_green, yellow_blue fields to Rust GlobalAdjustments struct
  2. Add same fields to WGSL shader GlobalAdjustments struct
  3. Add shader logic to apply these color offsets in the color grading section
  4. Update JSON-to-struct conversion in image_processing.rs

Current Status

  • Film mode is documented as experimental in the UI with a warning banner
  • Digital mode is fully functional and recommended for use

Optional future addition

Color Panel could be updated to display film color offsets for visual feedback

Testing

  • I have tested these changes locally and confirmed that they work as expected without issues

Test Configuration:

  • OS: Windows 11
  • Hardware: i9-9900 RX9070

Checklist

  • My code follows the project's code style
  • I haven't added unnecessary AI-generated code comments
  • My changes generate no new warnings or errors

AI Disclaimer:

  • This PR is AI-generated but guided by a human

R-Laine added 2 commits April 24, 2026 00:12
Fixed a few issues and changed all but one reference to the Sp-3000 to film instead
@R-Laine R-Laine requested a review from CyberTimon as a code owner April 23, 2026 23:45
@R-Laine
Copy link
Copy Markdown
Contributor Author

R-Laine commented Apr 24, 2026

Lots of lines, massive feature add, but I think it's worth it

Bottom of the shortcuts tab is the logical place to put it but it may be too hidden down there

@R-Laine R-Laine marked this pull request as draft April 24, 2026 13:49
@sefalkner
Copy link
Copy Markdown
Contributor

I've just opened #1083 which conflicts a bit. Part of your proposed changes can be massaged into #1083 , given that the numpad is then assignable, right ?

@R-Laine
Copy link
Copy Markdown
Contributor Author

R-Laine commented Apr 24, 2026

I've just opened #1083 which conflicts a bit. Part of your proposed changes can be massaged into #1083 , given that the numpad is then assignable, right ?

I do see the conflict but I don't believe your pr can replace the functionality introduced by this either

I'm very much for assignable keys but it would require extra work to be able to fully supersede this, unfortunately I'm not the one to make such a judgement.

@R-Laine
Copy link
Copy Markdown
Contributor Author

R-Laine commented Apr 24, 2026

As a compromise, if you've already looked at my pr you can see it can be fully disabled, so all that would be needed is locking off numpad assignability while this was enabled

@sefalkner
Copy link
Copy Markdown
Contributor

Sorry, I didn't mean conflicting in a either/or sense, but more in a merging conflict sense. One could expose many of the actions you describe in "Keymapping" as configurable in a controls section and default them to the film scanner workflow keys. Then, e.g., the numpad enter could be configured to one of the three suggested functions.

I think many of the new actions are great additions even if one does not use a traditional film scanner workflow, e.g., I'd find instant export on numpad enter super useful.

@R-Laine
Copy link
Copy Markdown
Contributor Author

R-Laine commented Apr 25, 2026

Sorry, I didn't mean conflicting in a either/or sense, but more in a merging conflict sense. One could expose many of the actions you describe in "Keymapping" as configurable in a controls section and default them to the film scanner workflow keys. Then, e.g., the numpad enter could be configured to one of the three suggested functions.

I think many of the new actions are great additions even if one does not use a traditional film scanner workflow, e.g., I'd find instant export on numpad enter super useful.

If you're willing to put in the effort, I don't mind you taking what I've implemented, features and all and adding it as a part of your pr for keybindings. Maybe we can get in touch through better means and discuss how best to proceed

@R-Laine
Copy link
Copy Markdown
Contributor Author

R-Laine commented Apr 25, 2026

image The CMY sliders already exit, hidden with the negative conversion in the productivity folder

The issue with this is that it's buried in menus, slow and cumbersome to use

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants