feat: Keyboard Shortcuts, Audio Mixing & Timeline Markers#156
Merged
Conversation
- Implement centralized shortcut registry with persistence - Support per-action key rebinding with conflict detection - Use zustand persist middleware with smart merge for future updates - Add formatBinding() helper for cross-platform key display
- Create KeyboardShortcutsSettings component with search and category grouping - Implement capture-mode key rebinding with conflict detection - Add per-shortcut reset and global reset all functionality - Display shortcuts as styled keyboard chips with live capture
- Create AudioEnvelopeEditor component with SVG envelope visualization - Add draggable fade-in/fade-out handles at clip edges - Implement vertical volume drag with double-click reset to 100% - Show dynamic tooltips during drag operations - Commit changes to history for undo/redo support
- Add undoLabel and redoLabel to CommandJournalState interface - Populate labels from command history in getState() - Enable UI to display context-specific undo/redo action names
- Add optional fadeIn and fadeOut (in seconds) to Clip interface - Support audio envelope fade curves in timeline model - Enable audio mixing with fade transitions
- Add fade_in and fade_out to RustClip interface - Map camelCase fadeIn/fadeOut to snake_case for Rust backend - Enable full project save/load support for audio envelopes
- Replace hardcoded key checks with getMatchingAction() from shortcutStore - Enable user-customizable keyboard bindings - Maintain all existing shortcut behaviors and actions - Add marker creation shortcut (m key)
- Initialize markers array in timeline state - Implement addMarker, removeMarker, updateMarker actions - Enable marker creation, editing, and deletion in timeline
- Serialize/deserialize markers during save/load operations - Include markers in auto-save cycle - Ensure markers persist across project sessions
- Add 'add-marker' action with default 'm' key binding - Enable keyboard-driven marker insertion at playhead
…tomization - Add markers via double-click on ruler - Render colored diamond flags at marker positions - Enable smooth horizontal dragging to reposition markers - Implement edit popover with name, color picker, position, and delete - Support 5 color options: Purple, Blue, Green, Yellow, Red
- Add clypra_next_releases.md to .gitignore - Add custom_gpu_rendering_plan.md to .gitignore
- Add AudioEnvelopeEditor as overlay for audio/video clips - Import and render audio envelope controls - Update arePropsEqual to check volume, fadeIn, fadeOut changes - Enable real-time audio mixing in timeline
- Import KeyboardShortcutsSettings component - Add Keyboard icon to lucide imports - Add 'shortcuts' to Tab type and TABS array - Render KeyboardShortcutsSettings in modal content
…tips - Import Undo2 and Redo2 icons from lucide-react - Add undo and redo functions from useHistoryStore - Replace text counter with icon buttons - Display action-specific tooltips using undoLabel/redoLabel - Show buttons only when actions are available
theunavailableguy
approved these changes
Jul 12, 2026
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.
🎹 Keyboard Shortcuts & Undo/Redo UX
Features
Files Changed
CommandJournal.ts- Expose undoLabel/redoLabel in history stateshortcutStore.ts- Shortcut registry with persistenceuseKeyboardShortcuts.ts- Dynamic shortcut lookupKeyboardShortcutsSettings.tsx- Settings UI componentSettingsModal.tsx- Added Shortcuts tabTopBar.tsx- Styled Undo/Redo buttons with tooltips🎚️ Audio Mixing & Volume Envelopes
Features
Files Changed
index.ts- Added fadeIn/fadeOut to Clip interfaceserialization.ts- Snake_case mapping for Rust backendAudioEnvelopeEditor.tsx- Visual envelope overlay componentClip.tsx- Integrated AudioEnvelopeEditor with equality checks📍 Timeline Markers
Features
Files Changed
index.ts- TimelineMarker interfacetimelineStore.ts- Marker CRUD actionsprojectStore.ts- Marker persistenceshortcutStore.ts- Add marker shortcutuseKeyboardShortcuts.ts- Handle marker creationTimelineRuler.tsx- Interactive marker UI✅ Verification