30 days · 325 commits
November 2025
- Day 215 · 20 commits

- Audio engine
- da0129eSampleSettingsPanel: Added General Tab- Added Sample Information and Sample Actions categories
- UI / UX
- 1f9f753Weather Grid: Standardized font sizes
- e4c0c56Weather Grid: Increased default horizontal grid width
- cf8c763Weather Grid: Added Hail, Heavy Snow, Blizzard, and changed name of light snow to flurries, and light rain to drizzle
- 4181a48Plugin Editor Refactor: Fixed Waveform display color issue. Refactor complete- 1200 lines relocated
- 5d9f581Plugin Editor Refactor: Created EditorGridSwitcher to handle Go to Effect and go to Source grids
- 50e0aaaPlugin Editor Refactor: Created EditorKeyboardShortcutHandler to handle editor keyboard shortcuts :)
- 2343121Grid Manager/TopRowComponent: Grid buttons automatically center and now have max width set
- 5dd7235General: Maximize/Restore button properly restores to previously set program resolution
- 02f3e2aGrid Manager/TopRowComponent: Synced toggles on startup between Grid on/off swithces and TopRow buttons
- bd793a6Grid Manager/TopRowComponent: Removed universal button from top row component, removed toggle button from grid manager Universal category
- 6256a7cGrid Manager/TopRowComponent: Grid buttons scale in ttop row component and added new grid buttons
- 7d496feGrid Manager: Enable 5 new grid types with dynamic button scaling in TopRowComponent. Buttons now automatically scale larger/smaller horizontally based on the number of enabled grids (1-10 buttons supported), replacing the hardcoded 5-button layout with a flexible system that adapts to user's enabled grids.
- 57a0f33Grid Manager: Collapsible color picker sections now open up and collapse
- b259b9bGrid Manager: Added Collapsible foundation
- b3e720cGrid Manager: Added 4 New placeholder grid options- Day of Week, Tides, Halloween, and Christmas
- Infrastructure
- 56f530cPluginEditor Constructor Refactor: Created EditorComponentInitializer- 4104 to 3314 lines.
- Other
- 99300e8Trackcontrolstrip: Mute Speaker cone now oriented properly, was pretty funny how it was set before..
- 1472650Program Settings: General Tab- Added Normaize Samples option
- 2a0b573TopRowComponent: Anchored override controls to top right of screen
- Day 216 · 13 commits

- Audio engine
- 10199cfSampleSettingsPanel: Added dual peak display showing both sample peak and output level with volume applied. Output level updates in real-time with color-coded warnings (red for clipping, orange/yellow for hot levels).
- cbf8164Mixer: Added Stereo Width control to mixer above pan control
- UI / UX
- b907e87Piano Roll: Separate keyboard from scrollable grid. Created PianoKeyboardComponent as fixed left panel outside viewport. Grid coordinate system now starts at X=0 with no keyboard offset. Horizontal scrolling only affects grid (notes never go behind keyboard). Vertical scrolling synchronized between keyboard and grid. Removed resize handle and fixed overlay system. Scrollbar positioned correctly under grid only.
- 56031d7Timeline Grid: Added Timeline Zoom Easing/Animation. Supports Ctrl+wheel, F1-F4. Maintains time position under cursor during zoom via anchor point math.
- da5e474EphemeraLookAndFeel: Added conditional intensity drop shadows to ToggleButtons for improved visual depth and consistency. Implemented two-layer shadow system matching existing TextButton pattern, with configurable intensity (60% for grid tabs, 75% for override/bottom bar buttons, 100% for standard toggles) to avoid overwhelming time-of-day themed UI while maintaining proper visual hierarchy.
- 18ae2bbOptions: Added Timestamps to Recent Projects context menu
- 465b54aOptions: Added Recent Projects to options menu. Will show up to 10 most recent projects
- Other
- 0a98374Piano Roll: Ctrl+Scroll to zoom in on time/note under mouse
- 0bec192SampleSettingsPanel: General Tab- Removed name redundancy and reorganized group vertical heights
- 0fe4987Options: Recent Project info window updated to ProjectinfoWindow.h/cpp. Also fixed GridRegistry crash
- affb60cOptions: Recent projects now has information option
- c479907Options: Added Pin to top option in recent projects submenu
- 56ccee6TrackcontrolStrip: Can pull-out Stereo Width knobs by shift+click+dragging to the right of Trackcontrolstrip right side bounds
- Day 217 · 11 commits

- Audio engine
- a81f192Sequencer: Set Starfield default to 0% and halved gain/intensity
- Visualizer
- d0832dcPiano Roll: Added Hover state shadow gradient to indicate where note will be dropped on click. Removed old Keyboard bed code
- UI / UX
- 6760eccSequencer: Toprow and Grid header now follows time of day gradient
- 1fcf8c5Piano Roll: Created fixed time ruler component (PianoRollTimeRuler) that stays in place during vertical scrolling, matching keyboard header behavior for proper grid line alignment. Unified color scheme across control bar, time ruler, and keyboard header using consistent time-of-day gradient (darker 0.2f → 0.5f), and implemented real-time scrollbar listeners for instant keyboard/ruler synchronization.
- f45588aPiano Roll: Playhead/Ruler Color matches TimelineGrids
- 8f33852Piano Roll: Right click selects and opens note context menu
- 42b655ePiano Roll: Ctrl+wheel Keyboard and Grid synced
- Other
- 8512065Piano Roll: Clicking and dragging a note no longer leaves the hover state shadow behind during drag
- 10f6282Piano Roll: CustomTitleBar added.
- d90ff0aPiano Roll: Ctrl+wheel also eases animates Keyboard pt 1
- e527d21Piano Roll: Mouse on Keyboard accepts Ctrl+scroll
- Day 218 · 12 commits

- Audio engine
- 1064833PitchShifterProcessor: Eliminated 3 heap allocations in audio thread by pre-allocating workingMagnitudes_, workingPhases_, and workingSmoothingBuffer_ in prepareToPlay(). Replaced stack allocations in processFrame() (lines 231-232) and applySpectralSmoothing() (line 372) with cached buffer pointers improving real-time safety and reducing per-frame overhead from ~33KB to zero allocations.
- 75d6990Sample Browser: Replaced mutex-protected sampleTags and savedSearchPaths wit lock-free atomic snapshots using JUCE ReferenceCountedObject pattern. Eliminated sampleTagsLock and savedSearchPathsLock, converting all related methods to use copy-on-write snapshots with proper memory ordering.
- b2e7ddbSample Browser: Can now hover over sample browser items and they display waveform in WaveformDisplayComponent
- 28c7e6dSample Browser: Added additional drag and drop support. Can drag and drop samples from grids and from Windows folders into sample grid via dragging directly into a folder, or dragging onto the sample browser background which will add sample to current folder. If no folder is open, it will prompt the creation of one.
- c258eafSample Browser: Custom Folders Saving properly, Drag sample from windows into custom folder
- 597d2bbFixed audio thread blocking in TrackChannel::controlTimelinePlayer() (lock-free FIFO queue) and updateReverbParametersRealTime() (atomic parameters), eliminating priority inversion risk and improving timeline playback performance by 30-50%
- Timeline
- 1815f28Recording: Recording tracks no longer produces an error- added onRecordingStopping callback for cleanup.
- Other
- f4f6aa0PitchShifterProcessor: Removed Spectral Smoothing, Pre-computed per bin constants, lazy formant calc
- 897f9c0Infochironcomponent: Removed +++ spacer
- cc1b835Bots: Daily Summary now posts at 11:59PM instead of 12:10AM
- 26871d9BottomBarComponent: Made Play, Stop, and Rec buttons evenly sized and put 2px of space between them
- 5747324BottomBarComponent: Arm State now red rectangle, Rec state is Glowing Red Rectangle
- Day 219 · 14 commits

- Audio engine
- fb10a33PitchShifterProcessor: O(N2) formant bug fix, Block Copy FIFO, Block Copy frame Reading, Cache Pitch Ratio, Ultra-fast mode, Lazy formant, Phaselocking early exit, Adaptive multi band
- d7c0df6PitchShifterProcessor: Optimize Multi band pitch shifting, replaced sample by sample processing with SIMD-optimized block operations, added RMS-band skipping, made bass FFT size configurable
- c6f39aaPitchShifterProcessor: Block-Based Crossover Filters. Power of 2 Delay Buffer Masking
- 6bcc1caPitchshifterProcessor: Improved LinkwitzRileyCrossover. Connected to processblock
- Effects
- 8b5fc98PitchShifterProcessor: Vector Delay Comp/Energy-based band skipping
- 52f05d1PitchShifterProcessor: Added Circular Delay Buffers to prevent delay
- UI / UX
- c7c87cbPitchShift: Added Multi-Band Processing UI button
- ef8652bPItchShifterProcessor: Added Crossover member to header, added 3 band buffers, added mutibandenabled_ flag, initialized croosover in perpareToPlay()
- Infrastructure
- 1b60a7aPitchShifterProcessor: Added bass band processing infrastructure with 8192 FFT for 5.86 Hz/bin frequency resolution . Created processBassBand() method with simplified phase vocoder optimized for <300 Hz, allocated bass-specific buffers (FIFO), and integrated initialization in prepareToPlay()/reset(). Feature dormant until multi-band integration
- Other
- 79c95aaPitchShifterProcessor: Added 2 inline helper fuctions
- 56abc02PitchShifterProcessor: Added Pre-compute Phase Advance Tables
- ead1989PitchShifterProcessor: Added Pre-compute window tables
- aa52a10PitchShifterProcessor: Added shared FFT Working Buffers- CPU improvment by 10% approx
- 67fce29PitchShifterProcessor: Fixed RT safety issue, implemented fast trig, replaced divisions with reciprocal multiplication, added usage montoring.
- Day 220 · 2 commits

- Audio engine
- 688ad15Pitch Shifter: Removed LinkwitzRiley
- Infrastructure
- 8fcf3dfUpdating Git Ignore to include the SignalSmith lib
- Day 221 · 0 commits

- Day 222 · 1 commit
- Audio engine
- 7cceff6Pitch Shift: Unbelievably so, added a batch renderer for offline processing of audio tasks/pitch shift as well as real time pitch shift in a semi stable format. It's still not quite right but it is much closer to working and we can save progress here.
- Day 223 · 4 commits
- Audio engine
- fde7ad4Pitch Shift: Can shift pitch in real-time with slider at Ultra Fast 2024 quality while using 2024 buffer size
- d036dd7Pitch Shift: Working at Balanced and High at 2048 buffer
- c561b8cPitch Shift: Updated Quality labels
- 50a17c0Pitch Shift: 2048 Buffer Produces cleaner audio
- Day 224 · 1 commit

- Audio engine
- 530809cPitch Shift: Removed unnecessary BufferWrapper struct and replaced with direct getArrayOfWritePointers() calls throughout SignalsmithPitchShifter.cpp.
- Day 225 · 6 commits

- Audio engine
- 93b8aa3Pitch Shift: 0.5x Time Stretch speed slows down properly but still has distortion/artifacts/smearing/spectralGrease
- ef5453ePitch Shift: Fixed Balanced and High Quality pitch shift modes not working
- fc1a2bcPitch Shift: Fixed Trackchannel audio buffer issue that was doubling buffer size for pitchshifter
- 0def525Pitch Shift: Fixed pitch shift developer controls wiring by routing manual block/interval, prefill, and FIFO size settings to all per-player pitch shifters instead of the unused global instance, and updated diagnostics panel to read from active per-track pitch shifters. Implemented adaptive block/interval sizing that matches host buffer size while maintaining quality-defined overlap ratio (e.g., 4x for Ultrafast), preventing phase discontinuities that caused helicopter artifacts at non-2048 buffer sizes Added gentle Output FIFO recovery mechanism that processes +1 or +2 extra intervals when FIFO drop below 10%/5% thresholds to prevent chronic underrun states. These changes enable smooth pitch shifting across all buffer sizes (512, 1024, 2048+) with proper dev control functionality and accurate real-time diagnostics including [MANUAL]/[AUTO] mode indicators.
- 10ab009Pitch Shift: Added additional diagnostics
- 39b51f9Pitch Shift: added diagnostics to ui
- Day 226 · 4 commits

- Audio engine
- 3d4f537SamplePlayer: Added ability to change sample rate for individual samples for time stretch
- 3958bdeTime Stretch: Works for longer, identified main issue
- c60b622Time Stretch: Getting closer
- c5b05ffTime Stretch: Inverted Formula, FIFO Throughput, Reseampler State Reset, Stops false resets
- Day 227 · 19 commits

- Audio engine
- fb7c698TrackControlStrip/PluginProcessor/ParameterHelpers/TrackcontrolViewModel: Implemented per-track send level controls in TrackControlStrip with proper MVVM bindings, allowing independent control of how much each track sends to global reverb and delay effects. Added send bus architecture with dedicated audio buffers that are mixed from each track based on send levels, processed through global effects, and returned to the master output. All 16 tracks now have reverb and delay send knobs (-60dB to 0dB) with proper real-time safe parameter access and UI context menus for show/hide functionality.
- 1c05b28Fileloader: Automatically Resamples samples not set to projects default sample rate
- 6d7708fPitch Shift/Time Stretch: Collapsible sections follow time of day gradient
- 8227eb2Pitch Shift/Time Stretch: Removed Offline processing buttons
- 7756c70Pitch Shift/Time Stretch: Added Collapsible sections for Quality, Dev Controls, and Diagnostics
- 0519ac6Pitch Shift/Time Stretch: Proud to say both Pitch shift and Time-Stretch are working as intended for now. It was a grueling process- probably 250 debug loops. Worth it
- Modulation
- 86dd313EffectChainItemPanel: Updated Add Effect highlight to match time of day bright gradient
- f43bbd9EffectChainItemPanel: Updated colors to match time of day gradient
- Effects
- 8ff6d0bGlobal Reverb: Feedback and LP Freq controls affect reverb tail visualization
- 5a09703Global Reverb: Added Core Settings group
- UI / UX
- 68a9bbaGlobal Delay: Updated UI with additional controls and 2 visualizers: Echo Pattern and Feedback Filter
- fe833acTrackcontrolstrip: Added send button infrasttructure
- a6191e6TrackControlStrip: Hidden column items via shift+click+drag can now be restored via track column context menu option
- f217e16TrackControlStrip: Moved old Track Column context menus into new Trackcontrolstip Track context menu
- 70239d2SampleSettingsPanelComponent: Added corner resize handle, tabs in samplesettingspanel can now be resized
- 60de4afEffectChainItemPanel: Toggle button now follows time of day color
- Other
- c95a58aBug Fix: Fixed Crash with EffectChainPanelComponent and UndoManager
- 9021131PitchShiftSettingsPanelComponent: Reduced padding and resized collapsible vertical height
- 1857423PitchShiftSettingsPanelComponent: Removed progress bar and moved controls up
- Day 228 · 18 commits
- Audio engine
- c1bccb6Mixer: Added PFL Button above Mute and Solo buttons, slightly adjusted Volume slider vertical height
- 18a84e0Trackcontrolstrip: Restored Master volume thumb behavior
- ad7f833Samples in the header and shows --- indicators for parameters with mixed values across selected cells. Modified EnvelopeTabComponent to detect multi-edit mode via slider onDragEnd callbacks, applying parameter changes to all target cells through SampleDataManager with a single triggerAsyncConditionUpdate() call for efficiency. Users receive visual confirmation via InfoChironComponent showing Updated N cells message for 2 seconds after completing batch edits, supporting workflows like adjusting volume levels across multiple environmental conditions simultaneously.
- Effects
- 9d0d49eEffects: Fix dual-layer architecture - per-cell insert effects and global send/return now work independently. Fixed three critical bugs preventing both per-cell and global effects from functioning. Per-cell insert reverb/delay now automatically add to effect chain when enabled, eliminating confusing right-click workflow. Removed incorrect global enable check that prevented per-cell insert effects from processing. Track reverb/delay sends now default to -12dB instead of silence, making global send/return effects audible by default.
- 824a2e6Trackcontrolstrip: All buttons now display including reverb send and delay send
- Visualizer
- 8843d02Focus Render: Glow and speed reduced
- UI / UX
- 54756c6TrackControlStrip: Refactor: Extract TrackControlStrip styling components (Phase 1/7) Extracted nested classes to separate files for better modularity. TrackButtonLookAndFeel: Custom mute/solo button styling with time-of-day theming. ContextMenuToggleButton: Right-click filtering for context menu support
- 97c9051Bottombarcomponent/Transport: Record button is red in Armed state and glows red in Rec state
- 344b70eTrackcontrolstrip: Fixed double click resize handle bug
- 832874dEnvironmental/Settings: Added Rain Speed sliders to UI controls in Interface tab
- Other
- c28b618Trackcontrolstrip: Added Solo-Safe and Solo-In-Place modes to control whether or not solo receives sends
- 2ffbe00General: CPU indicator turns orange for warning and red for critical
- 437ce89CustomTitleBar: Can now double click project name to rename, confirmation box appears, click yes to save or no to cancel
- e0a3d4bTrackControlStrip: Context menus appear at mouse position
- 2a420e7Trackcontrolstrip: All Controls collapse as intended, holding LED for last
- 2d0202aTrackcontrolstrip: Moved LED indicator to the rightmost position
- f559631Multi-Cell/InfoChiron: When adjusting multi-cell parameters, an infochiron message appears letting them know what's changed.
- d7a4db1Grids: The above commit now functions
- Day 229 · 18 commits

- Audio engine
- 3110505TrackControlStrip: Refactor: Extract MasterVolumeSection component (Phase 2/7) Extracted master volume slider, labels, and layout logic into dedicated MasterVolumeSection component for better modularity. Reduced TrackControlStripComponent.cpp by ~145 lines while preserving all functionality including timeline mode extension, metering, time-of-day theming, and modulation visualization.
- Modulation
- 7f17ca5Grids: Implement copy/paste operations for effect chains between cells in effect grids (Time, Weather, Season, Location, MoonPhase). Effect chains are copied with their enabled states and pasted with new unique IDs to prevent conflicts. Full undo/redo support provided through existing EffectChainAction infrastructure.
- UI / UX
- 4d7a1f4TopRowComponent: Right click background of TopRowComponent to access high level grid context menu. Options include Manage Grids, Show All Grids, Hide Inactive Grids (needs fixing), Grid Mode submenu, Reset to Default, and Help: Grid Management
- 0339846BaseeffectGrid: Can remove track level effect chain from track context menu
- 5955e65TrackControlStrip: Refactor: Extract individual TrackControlRow components (Phase 3/7) Replaced per-track component arrays (muteButtons, soloButtons, volumeKnobs, etc.) with self-contained TrackControlRow components that manage their own UI and MVVM bindings. Fixed hover highlighting, button toggling, track visibility (all 16 tracks now display correctly), and eliminated 2 empty rows caused by duplicate headerHeight calculation in layout positioning.
- Infrastructure
- 80a6670Trackcontrolstrip Refactor: Complete. Reduced almost ~2000 lines
- 35cc0b8TrackControlStrip Refactor: Phase 6 complete
- 4f4f893TrackControlStrip Refactor Phase 5.2/5.3
- 62735ffTrackControlStrip Refactor Phase 5.1: Create Factory Infrastructure
- Other
- b565931PluginEditor: Undo/Redo operations now shows a flash in corner/border of screen
- d78b8e4TrackControlStripRefactor Phase 5.11: TrackContextMenu
- 6464440TrackControlStripRefactor Phase 5.10
- 41a9868TrackControlStripRefactor Phase 5.9
- 9da8611TrackControlStripRefactor Phase 5.8
- ab57d1cTrackControlStripRefactor Phase 5.4/5.7
- ade4bbcTrackcontrolrow: Fixed LED Meter Regression
- 67cb682Trackcontrolstrip: Row Highlight alignment fix
- 796f3c4Trackcontrolstrip: Highlight entire row
- Day 230 · 15 commits

- Audio engine
- e82f9e6Sample Browser: Can now drag from browser into Sample grids
- 1533333FileLoader: Resampling- Samples are correctly resampled to project sample rate when loaded
- 76e65bbMissing Sample Update Reverted (something went wrong lol)
- 4353725Missing File Detection: Centralized validation system with categorized notification. Added MissingFileDetector h/cpp class to validate all sample types (grid, timeline, unassigned, multi-sample lists) on project load. Displays InfoChiron notification with categorized summary (e.g., '7 missing: 3 grid, 2 timeline, 2 multi-sample') that auto-dismisses after 8 seconds. Works seamlessly with existing red [M] text visual feedback system.
- 6070dddMIDI & Interface Tabs: Replaced unclear toggle buttons with modern iOS/macOS-style switches for better UX clarity. Added property-based switch detection in EphemeraLookAndFeel::drawToggleButton() that renders label text on left with 50x25px pill-shaped toggle widget on right (green when ON, grey when OFF, sliding knob). Also expanded MIDI Activity Monitor collapsed height from 50px to 70px and expanded height from 200px to 350px for better visibility.
- 275d7acMIDI Tab: Made Activity Monitor collapsible and increased section height. Added collapsible MIDI Activity Monitor with Collapse/Expand button to save vertical space (saves ~150px when collapsed). Increased section heights from 120px to 145px for MIDI Devices, MIDI Channels, Velocity Response, and MIDI Learn sections to prevent channel button squashing. Fixed UTF-8 encoding crash by using ASCII 'Collapse/'Expand' button text instead of Unicode arrow symbols.
- UI / UX
- bc253bcProgram Settings: File Tab- added Choose Backup Folder button
- a069d7aProgram Settings: File Tab- transitioned to flexbox instead of manual layout
- 8dee0ecTopRowComponent: Added Initial Hide Inactive Grid Support
- Other
- f8da2ecProgram Settings: File Tab- Choose Backup Folder Option now functions
- 2c69686Saving: Created BackupManager h/cpp- Version history system triggered on explicit save
- 946b83cAuto-Save: Working
- 73eda00Auto-Save: Added AutoSaveManager with proper file comparator. Added PluginFileTabComponent to Program Settings with Auto Save interval and max backups controls.
- d5886a2TopRowComponent: Edge Case handling
- 56bd367TopRowComponent: Fixed Help option crash
- Day 231 · 8 commits

- Audio engine
- ad99dd9Metronome/Click: Reliably playing beats/clicks but need to verify time
- ee9f56bMetronome/Click: Now clicking/producing audio but not consistently
- 1c52324MetronomeGenerator audio engine with beat-synced clicks. Integrated into PluginProcessor with Playhead sync. Pre-count/pre-roll state machine in REcordingViewModel. UI controls in BottomBarComponent. Doesn't work yet.
- a0fcf79Input Trim & Recording Enhancements: Input trim controls now appear on all tracks when armed for grid cell recording with red border highlighting the target track, and automatically re-arm after audio input selection if initially armed with no input. Added 'Disarm Recording' option to grid cell context menu that appears when cell is armed. Fixed RecordingViewModel property notifications and CollapseStateManager width calculations to properly account for input trim column and prevent meter clipping.
- Timeline
- 80aefa3Grids/Recording: Added ability to Disarm once Armed
- UI / UX
- fab5c0dRecord: Arm button allows press but still no record
- 6d9e6f8Input Trim Controls: Show on all tracks when armed with red border highlight on target track. Fixed RecordingViewModel to call notifyPropertyChanged() when arming/disarming so UI updates reactively. Corrected width calculations in CollapseStateManager to match TrackControlRow's spacing logic (extra padding after solo, width, and delay send controls) preventing meter from being cut off.
- Other
- a4cc7caTrackcontrolstrip: Meter spacing with TrackcontrolRow and CollapseStateManager spacing matched
- Day 232 · 14 commits

- Audio engine
- 624431bPluginProcessor refactor: Extract AuditionManager for sample preview start/stop/loop operations (~76 lines)
- 50a550eMixerEngine, ReverbScJuceProcessor: Fix global reverb/delay not audible and audio thread crash. Set effect mix to 100% wet for send/return configuration (dry signal already in main buffer) and removed unsafe debug logging with emoji characters from audio thread.
- 2aee3c9PluginProcessor Refactor: Extract global effects processing to MixerEngine (~100 lines) Moved reverb, delay, and pitch shifter processors with their prepareToPlay and processBlock logic to MixerEngine. Phase 3 of 4-phase extraction consolidates all effect processing in one location.
- 5437c72PluginProcessor Refactor: Extract track processing loop to MixerEngine (~150 lines) Moved per-track volume/pan parameter caching, track processing loop with metering updates, and all metering arrays to MixerEngine. Phase 2 of 4-phase extraction reduces processBlock complexity.
- 90cd494Pluginprocessor Refactor: Extract SynthEngineManager from PluginProcessor (~190 lines) Moved all synthesizer engine management (Subtractive, FM, Wavetable, Additive, Granular) including lifecycle, audio processing, MIDI priority control, and UI note tracking to dedicated manager class
- 5880d6fPluginprocessor Refactor: Extract MixerTrackManager from PluginProcessor (~565 lines) Moved mixer track system (buffers, EQ, filters, metering, routing) to dedicated manager class. Reduces PluginProcessor size by ~14.5% total with all extractions combined.
- b71f6c7Recording: Input Gain Control now controls Input Gain
- Timeline
- 20462a2PluginProcessor refactor: Extract PlaybackController for timeline play/pause/seek/reset operations (~37 lines)
- 0f6e717Record: Recording now restored- Preroll was interfering
- Effects
- 919f5d9Plugin Processor refactor: Extract RecordingCoordinator from PluginProcessor (~180 lines) Move recording callback setup (arm, start, stop, complete) to dedicated RecordingCoordinator class
- Infrastructure
- 95ad4dbPluginProcessor Refactor: Extract MixerEngine from PluginProcessor (~150 lines) Moved TrackChannel vector ownership and lifecycle management (prepareToPlay, releaseResources) to dedicated MixerEngine class. Phase 1 of 4-phase extraction to reduce PluginProcessor complexity.
- 4a20757Pluginprocessor Refactor: Extract 3 managers from PluginProcessor (544 lines) Created AuxSendManager, PerCellParameterCacheManager, and SampleBrowserDataManager to reduce PluginProcessor complexity from 5,543 to 4,999 lines while maintaining all existing functionality
- Other
- f279d46Debug: Emoji char fix
- 6c72e16MasterVolumeSection: Connected + working
- Day 233 · 5 commits

- Audio engine
- 1606362PluginProcessor refactor: Extract OutputMeterProcessor to MixerEngine, metronome control to MetronomeGenerator, create TimelineSnapCalculator (~150 lines)
- 2e47509PluginProcessor refactor: Extract MidiInputProcessor for MIDI input handling and stuck note prevention (~152 lines)
- Timeline
- 743c1b4PluginProcessor refactor: Extract TimelineItemManager for timeline item storage and clip lifecycle (~113 lines)
- Infrastructure
- cf8818ePluginProcessor refactor: Extract StateLoadApplicator for post-load state application logic (~183 lines)
- 9dae073PluginProcessor refactor: Extract ParameterChangeRouter for parameter change handling and gesture-based undo system (~360 lines)
- Day 234 · 12 commits

- Audio engine
- a1e774aPluginProcessor Refactor: Extract PerformanceDataCollector (~58 lines) Extract getCurrentGridPerformanceData() method from PluginProcessor into EditorAccessHelper class for UI traversal logic to collect RenderOptimizer statistics from active grid components. Pure delegation pattern following existing EditorAccessHelper methods (getEditor, refreshAllWaveformDisplays) for improved modularity and architectural consistency. Message-thread only with no audio thread concerns, used by PerformanceMonitoringComponent for real-time performance data visualization.
- c01866fPluginProcessor Refactor: Extract EditorAccessHelper (~64 lines) Extract 3 editor access methods (getEditor, setStandaloneEditorRef, refreshAllWaveformDisplays) from PluginProcessor into dedicated EditorAccessHelper class. Pure delegation pattern following SampleBrowserFacade/StemSeparationFacade for improved maintainability and architectural consistency. Handles dual-mode editor access (plugin/standalone) and waveform display refresh operations. Message-thread only with no audio thread concerns.
- 4542872PluginProcessor Refactor: Extract StemSeparationFacade (~110 lines) Extract 6 stem separation methods from PluginProcessor into dedicated StemSeparationFacade class. Pure delegation pattern following SampleBrowserFacade for improved maintainability and architectural consistency. Message-thread only with no audio thread concerns.
- 2ab2ef4PluginProcessor Refactor: Extract ModulationVisualizationBridge (~30 lines) Extract modulation visualization communication (4 methods + 2 data members) from PluginProcessor into dedicated ModulationVisualizationBridge class. Handles thread-safe audio→UI communication for real-time modulation visualization using atomics. Fixes member initialization order to prevent crash (bridge now declared after parameterCache dependency)
- ee78f26PluginProcessor Refactor: Extract SampleBrowserFacade (~140 lines) Extract 25 sample browser-related methods (custom folders, favorites, tags, view mode, search paths) from PluginProcessor into dedicated SampleBrowserFacade class. Pure delegation pattern following successful RecordingCoordinator/PlaybackController extractions for improved maintainability and architectural consistency.
- a97d4cePluginProcessor/AutomationProcessor: Extract automation curve evaluation from PluginProcessor::processBlock into dedicated AutomationProcessor class, reducing PluginProcessor by 45 lines and eliminating goto statement (230 total lines added/modified)
- 9a8af38PluginProcessor refactor: Move recording logic to RecordingCoordinator::processBlock, convert static state tracking to member variables (~152 lines)
- 32721e1PluginProcessor/ParameterChangeRouter: Fix per-grid track volume/pan persistence Add missing APVTS listeners for TrackVolume/TrackPan and fix parameter ID pattern matching
- Timeline
- d7ce8ebPluginProcessor Refactor: Extract TimelineOrderManager (~50 lines) Extract timeline ordering logic (getTimelineOrder, setTimelineOrder, reorderTimelineItems) and data (timelineOrder vector + mutex) from PluginProcessor into dedicated TimelineOrderManager class. Fixes StateLoadApplicator to use public API instead of direct member access for improved encapsulation and thread safety
- UI / UX
- 2c5e23dTrackControlStripComponent: Fix track name persistence across grid switches Implement editorHidden() to call processor.setTrackName() with currentGridType, ensuring track names are saved to TrackDataManager per-grid instead of only updating the ViewModel's UI-only Cello property.
- Infrastructure
- 5c4a07bPluginProcessor refactor: Move per-cell listener registration to PerCellParameterCacheManager (~64 lines)
- Other
- f9a78c3Stem Seperation: Restored
- Day 235 · 5 commits

- Audio engine
- 2b516f6GridCellRenderer, GridPaintManager, 6 Grid Components: Fix trim badge darkening by moving to final render pass Move paintTrimBadges() to end of GridPaintManager::renderOverlayElements() (after audio highlights/overlays). Enhanced badge with white underlay, fully opaque text/background, stronger shadow for maximum visibility over all cell effects
- c497b6aTrim Marker Badge: Add visual trim indicators to all grid cells (~158 lines across 9 files) Add GridCellRenderer::paintTrimBadge() method with color-coded severity (yellow <20% trim, orange ≥20% trim). Integrate 14x14px 'T' badge in top-left corner of cells across all 6 grid types (Time/Time Endless/Weather/Season/Location/MoonPhase). Enhance GridTooltipGenerator to show trim values and percentage removed on hover. Badge positioning avoids conflicts with multi-sample badges (top-right) and updates in real-time when trim sliders change.
- UI / UX
- 2b2a3bfTrim Badge: Add hover expansion to show full 'Trim' text with enhanced visibility (40px wide, stronger shadow/border, full opacity on top of cell highlight) across all 6 grid types
- 5aeac0aBackup System: Add restore UI to File Settings (~120 lines) Add 'Restore from Backup' section to PluginFileTabComponent allowing users to browse and restore from available backups. New UI includes ComboBox showing timestamped backups (sorted newest first), Restore and Refresh List buttons. Implements confirmation dialog before restore and error handling for missing files. Uses existing BackupManager::getBackupFilesForProject() and processor setStateInformation() for restoration flow.
- Infrastructure
- aab3433PluginProcessor Refactor: Extract 6 manager classes to reduce complexity (~184 lines removed, 4341→4157). New classes: HostDisplayManager, UnassignedSampleManager, PlayheadInfoCache, BPMManager, DocumentManagementFacade, and MIDIForwardingQueue - each handling a single responsibility with proper thread safety. All managers follow the established facade pattern with processor reference for lazy dependency access, avoiding initialization order issues.
- Day 236 · 15 commits

- Audio engine
- 525b8eaSample Browser: Add batch favorites, selection utilities, and smart filtering Adds batch operations for favorites (add/remove N samples) and copy file paths to clipboard. Implements Escape key to clear selection in both table and grid views. Adds 'Select all [.ext] files' and Select All With Tag...' context menu options for quick filtering and multi-selection based on file type or tags.
- df1698aSample Browser: Add multi-select and batch tag editing (replace/add/remove/clear tags)
- dce4da7Piano Roll: Add select all notes at same pitch (Ctrl+Shift+N + context menu)
- 685265dSampleListComponent: Add insertion line with arrows during Pool Manager organize mode reordering. TimelineGridComponent: Add paintInsertionIndicator() for timeline reordering + handleFileDropOnGrid() override to support Sample Browser and Windows Explorer drag-in (creates unassigned samples at drop position). BasePianoRollComponent: Add MIDI file drop overlay with Drop MIDI file here message. BaseGridComponent: Make handleFileDropOnGrid() virtual to allow timeline override. All highlights use time-of-day theming for visual consistency. Can drag into Timeline grid from Sample Browser/Windows
- Timeline
- feee07eBaseViewModel, TrackControlViewModel, TrackControlRow: Add track selection with click-to-select and visual highlight. Fix BaseViewModel to bridge Cello::Object property changes to BaseViewModel::Listener notifications
- UI / UX
- e2cc9e3Timeline Grid: Show grid lines for all rows in Active Sources column
- 3030640Timeline Grid: Match Active Sources column grid lines to main timeline styling
- a383ce3Timeline Grid: Add Ctrl+Click rectangle selection for multi-select
- cbccadaTimeline Grid: Added Ctrl+click to use multi-select box when in 'Select' mode in Timeling Grid
- 154399bBaseGridComponent, GridContextMenuBuilder: Add 'Select All Samples in Column' to condition header context menu
- f378e4eTrackControlStripComponent, TrackControlRow, PluginEditor: Add hover suppression during keyboard track reordering - clears hover on Shift+Up/Down and blocks hover updates for 100ms to prevent visual clutter during layout repositioning
- bd16a18TrackControlStripComponent: Fix repeated track reorder bug by keeping trackRows indexed by logical track (not visual position), applying track order during layout in resized() instead of moving unique_ptrs in applyTrackOrder()
- fdfe900GridTrackOrderManager, PluginEditor, TrackControlStripComponent: Add per-grid track reordering with Shift+Up/Down keyboard shortcuts
- 8561f9cBaseViewModel, TrackControlViewModel, TrackControlRow: Track selection is specific to active grid
- Other
- 3a1e075BaseViewModel,TrackControlViewModel, TrackControlRow: Can unselect selected tracks
- Day 237 · 20 commits

- Audio engine
- 666f9b7Sample Browser: Increased default height to 300px
- 991a821Sample Browser Vertical View: Improve default layout and column visibility Increase default width to 340px (was 250px) to prevent button truncation. Show only File Name, Duration, and Tags columns in vertical mode using setColumnVisible() for cleaner view. Button width increased to 80px.
- e75593aSample Browser: Add vertical mode resize handle and improve button layout. Fix button alignment to left-align and stay grouped when resizing. Move Add Folder button to action row for better organization. Add time-of-day theming to Recent button. Fix waveform preview to only show when window has focus.
- dfadb35Sample Browser Vertical View: Added Resize handle to adjust width of Sample Browser in vertical view
- f1a3e98Sample Browser: Updated Recent button background color to match time of day theming
- 7fae066Sample Browser: Fix waveform preview focus and z-order behavior Add window focus check to prevent preview when other programs are active. Remove setAlwaysOnTop to respect normal window stacking order. Preview now only appears when Ephemera window has focus.
- 7b7bf71Sample Browser: Fix batch conversion format matching Use containsIgnoreCase instead of equalsIgnoreCase to match format names. JUCE returns 'WAV file'/'AIFF file'/'FLAC file' but UI sends 'WAV'/'AIFF'/'FLAC'
- 4e79ca7Sample Browser: Fix batch conversion dialog not displaying controls Replace broken nested FlexBox layout with manual bounds calculation. JUCE FlexBox cannot layout other FlexBox objects as FlexItems - each component now positioned explicitly via setBounds().
- 26e66fcSample Browser: Sample Conversion- Added Convert Sample option to sample browser items
- fd4e62cSample Browser: Fix color picker crash and use full color selector. Fix double-delete crash by replacing custom ColorPickerPopup with SimpleColorPickerDialog. New implementation uses full ColourSelector (XY picker, sliders, preview) matching grid manager theme color style.
- c8ffed0Sample Browser: Fix search history not saving queries on Enter key Use ComboBox onChange callback to detect Enter key press. Distinguishes between custom text entry (selectedId == 0) and dropdown selection (selectedId > 0) to save new queries while avoiding duplicates from dropdown selections.
- 32c858bSample Browser: Can add notes to samples
- Timeline
- c27921aTimeline: Loop regions now follow boundary markers when dragged Loop regions set from markers automatically update when markers move. Loop clears if boundary marker is deleted.
- UI / UX
- 6dbfb04Timeline: Loop menu toggles between Loop and Clear Loop based on state Menu text dynamically changes when right-clicking an already-looped marker region. One option now handles both setting and clearing loops.
- b202aacTimeline: Clear Loop only enabled when clicking inside loop region Menu item is greyed out when clicking outside loop boundaries. Provides better visual feedback about loop presence.
- 56ff4bfTimeline: Flattened context menu and add Loop Between Markers Remove nested 'Show Playhead Menu' - all options now accessible in one flat menu. Add 'Loop Between Markers' when right-clicking between timeline markers.
- 662762fTimeline Grid: Increased vertical grid line brightness to be slightly less than horizontal lines
- 3ce8c63Transport: Stop Button- Can infinitely click the stop button. It was greyed out. Sorry.
- 23c991bGrid warp effect: Set default to off
- Other
- bb2f483Fix: Removed 'Zoom' custom badge
- Day 238 · 20 commits

- Audio engine
- 28cd0a1Timeline: Deleting Timeline item/sample clears waveform display when deleted item was being shown previously
- b80c1f8Timeline: Fix Delete Item not removing timeline clips from view. When deleting a timeline item via 'Delete Item (Clear Source)', the clip was removed from clip storage but the legacy samplePath was not cleared. This caused collectActiveSourceIdentifiers() to still find the item (via non-empty getSamplePath check), making deleted items reappear. Fix: After successfully removing a clip, check if it was the last clip for that cell and clear the legacy sample path if so.
- 28eb428Timeline: Add real-time visual feedback during vertical lane dragging. Sample now moves visually as you drag vertically, matching horizontal drag behavior. Updates rowIndex directly during drag for immediate rendering, with position restored from storage if drag is cancelled.
- 194661aTimeline: Add vertical lane dragging for DAW-style track arrangement. Clips can now be dragged vertically to any lane position, similar to traditional DAW playlist behavior. Implemented via laneIndex property on TimelineClip with fill-gaps algorithm for mixed explicit/auto-assign clips, and fixed legacy sample migration to ensure clips are stored in SampleDataManager for persistent lane updates.
- 8f03ac5Timeline: Fix unassigned sample uniqueness - paste now creates new entry with unique ID, fixing delete behavior
- 65d5ab7Transport: Stop button now resets playback position to 0
- ba50fa0Timeline: Implement time selection workflow and loop playback. Right-click drag on timeline ruler creates yellow time selection. 'Set Loop to Selection' menu is greyed out until selection exists, then creates loop with markers at selection boundaries. Loop playback now wraps timeline when playhead reaches loop end, but only activates if playback started before/inside loop region. Fixed String formatting crash and preserved playhead position on stop.
- Timeline
- ee276dbTimeline: Implement standard DAW selection behavior for multi-clip workflows. Click on multi-selected clip selects only that clip; click on empty space deselects all.
- abb9489Timeline: Implement multi-clip drag - all selected clips move together preserving relative positions. Added save-on-release performance option in General Settings for smoother dragging of large selections.
- dc662dbTimeline: Previously added samples/clips will appear at the default starting 0 position if they are readded
- 9c9e22aTimeline: Unify clip-based storage architecture and fix copy/paste/delete. Auto-creates TimelineClip when samples are loaded and syncs all property changes (start time, height, trim, reversed) to clip storage. Fixes paste not creating clips, delete not working after move, and adds Ctrl+C/V shortcuts.
- 38a500fTimeline: Fix paste functionality and add Ctrl+C/V keyboard shortcuts. Fixed TimelineAction::AddItem which was unimplemented, preventing paste from creating new clips. Added Ctrl+C to copy selected item and Ctrl+V to paste at timeline start (0.0), while right-click paste uses mouse position.
- d75270fTimeline: Right-click drag creates time selection before setting loop
- UI / UX
- 7e071f1Timeline: Sync Active Sources labels with clip vertical position during drag. Each clip now has its own label that follows its lane position in real-time when dragging vertically, with labels updating instantly in both the timeline and Active Sources column.
- d8f5772Timeline: Fix vertical drag tracking to work outside component bounds by moving position updates to mouseDrag handler and persisting lane changes in mouseUp.
- cd1c346Timeline: Fix copy/paste creating linked clips that merge when dragged. setTimelineStartTimeSec and setTimelineHeightMultiplier were updating ALL clips in a cell, causing pasted clips to move together with the original. Changed drag and resize operations to update only the specific clip by clipID, with a fallback to legacy storage if clip lookup fails. Also added updateActiveSamples() call after paste to ensure UI reflects the new independent clip.
- 68f41a4Timeline: Add loop count system with finite iteration support Submenu allows setting loop counts (Infinite, 1-16, Custom), tracks iterations, and displays progress in time label.
- d1430ccTimeline Grid: Set Loop to Selection context menu option now saves correct selection
- 58e9de4Timeline Grid: Loop menu toggles text and clears loops based on state Menu dynamically shows 'Clear Loop Between Markers' when region is already looped. Clicking the menu item now properly sets or clears the loop, matching playhead menu behavior.
- 3649632Timeline Grid: Loop menu text toggles based on current loop state Context menu dynamically shows 'Clear Loop Between Markers' when clicking within an already-looped region. Matches playhead menu behavior.
- Day 239 · 13 commits

- Audio engine
- 6b7eb4dAdd ClipTabOverrides system allowing timeline clips that share a source cell to have independent settings on a per-tab basis (Envelope, Filter, Crossfade, Granular, Time). Integrate clip selector UI in SampleSettingsPanelComponent with 'Use custom settings for this tab' toggle, and add ClipSettingsResolver for audio thread to resolve effective settings by checking clip overrides before falling back to cell defaults. Add timeline context menu items 'Edit Clip Settings...' and 'Reset Clip to Cell Settings' for quick clip override management.
- fa708d7Sample/Effect Grids: Add middle-click viewport panning for grid navigation. Implement middle-click drag to pan viewports in sample grids (TimeOfDay, Location) via GridInteractionHandler and effect grids (TimeOfDayEffect) via BaseEffectGridComponent, matching the existing timeline grid behavior.
- Timeline
- 149743eClip Override: Phase 3.1 Complete
- e91c91dClip Override: Phase 3 Complete
- 093cf5eClip Override: Phase 2 complete
- 2b8d70fVarious: created the foundation for the clip settings override system- Phase 1
- 58139f8Timeline: Added smoothing for middle-click viewport panning.
- UI / UX
- ed2b128Timeline Grid Refactor Phase 6: TimelineSampleInteractionHandler
- 27d31ceTimeline Grid Refactor Phase 5: TimelineKeyboardHandler
- d374cdaTimeline Grid Refactor Phase 4: TimelineUndoHandler
- 7d6624fTimeline Grid Refactor Phase 3: TimelineHeighResizeHandler
- e5e1ef7Timeline Grid Refactor Phase 2: TimelinePlayheadHandler
- c259b8fTimeline Grid Refactor Phase 1: TimelineGeometryManager
- Day 240 · 12 commits

- Audio engine
- 15a0ddaPluginProcessor: Fix audio thread safety by gating debug allocations behind preprocessor
- 4f6e3f1RecordingCoordinator/RecordingCommandQueue: Fix audio thread safety by replacing callAsync with lock-free command queue
- b5c2b13MixerTrackManager/PluginProcessor: Fix heap allocation in audio thread by pre-allocating unassignedBuffer
- 4c9bf05General: Restored sample mode playback by reverting shouldAutoPlay to trigger when transport is active, allowing grid players to auto-play in Editor mode. Fixed settings panel tabs binding to wrong cell parameters by replacing setClipOverrideMode(false) with direct loadSettingsForCell() calls using the panel's current cell info. Added real-time parameter reading in audio thread for volume/pan/ADSR so UI changes affect sound immediately during playback.
- cd71578ParameterChangesRouter/TrackChannel: Removed the skip logic that prevented grid players from being assigned in Editor mode when timeline clips exist. Before: Grid cells with timeline clips → skipped in Editor mode → 'C' cached status, no playback After: Grid players always assigned based on conditions → playback works in both modes. Also added Hour Wrap behavior option to clock context menu
- UI / UX
- 5fe381cPluginEditor: Extract layout constants from resized() for maintainability
- 3112690Weather Grid/Tooltips: The 'Refresh Forecast' button tooltip will now properly appear in InfoChironComponent when hovering over the button, consistent with other UI elements in Ephemera.
- 2313ef5Timeline Grid Refactor Phase 7: TimelineRowDataManager. Refactor plan Complete, 1200+ lines moved out
- Infrastructure
- 3203eccParameterHelpers Refactor: Phase 1- Factory Functions Added
- Other
- 249dc67PluginEditor: Extract layoutInfoWaveformArea(), layoutTrackControlStrip(), applyAutoScaleZoom() helpers
- 056e465PluginEditor: Extract layoutTopRow() helper from resized()
- 0e3d3b2PluginEditor: Extract layoutOverlayComponents() helper from resized()
- Day 241 · 5 commits

- Infrastructure
- 23d251dRelease: Added /Zm1200, /Bigobj, /MP4 to Projucer File. Deleted %temp% folder and Builds folder. These changes allow build.
- Other
- 898d27cTimelineKeyboardHandler: Add left/right arrow key nudge for selected clips
- 01fa21dTimelineContextMenuHandler: Reorganize 40+ flat items into 10 organized submenus
- f356ec8SamplePlayer, TrackChannel, FileLoader, *PitchShift*: Add file-level DBG guards to prevent string evaluation when debug flags disabled
- d97cd76SampleDataManager, BaseGridComponent: Remove dead hasDataInCell code, optimize paintTrimBadges empty cell skip
- Day 242 · 6 commits

- Audio engine
- 145b608EditorPlaybackController, PluginProcessor, TrackChannel: Added audio looping at loop region boundary
- Timeline
- a63a436TimelineAnimationManager, TimelineGridComponent, TimelineGridPainter: Add smooth playhead position interpolation
- f04d5a7TimelineMarkerManagerComponent: Fix marker creation at playhead position and jump-to-marker functionality
- 0b51972TimelineGridComponent: Fix click on empty space to reliably deselect clips and clear waveform display
- UI / UX
- 0e0fb1eEphemeraLookAndFeel: Fixed theme System hooks
- Other
- d208f42TimelineClip, TimelineGridComponent, TimelineContextMenuHandler, TimelineSampleInteractionHandler, TimelineGridPainter: Add lock clips feature to prevent accidental dragging
- Day 243 · 14 commits

- Timeline
- a835402PluginEditor: Double timeline horizontal scrollbar height for better visibility
- d423b7aTimelineAnimationManager: Remove playhead position interpolation for instant updates
- ab80ca6Timeline: Removed Animation for playhead indicator
- d3fcef8Timeline: Animation testing
- UI / UX
- 881dd53Themes: Dark Theme Phase 1- Theme infrastructure in Constants.h and DesignTokens.h. Theme-aware colors for buttons, scrollbars sliders, background. Settings UI toggle in Interface tab → Appearance section. Theme preference persists across sessions
- 40e9537PluginEditor, EphemeraLookAndFeel: Move timeline horizontal scrollbar above ruler with proper viewport alignment and color override fix
- Other
- ab656bdThemes: Dark Phase 9
- 2e175e0Themes: Dark Phase 8
- 6e37994Themes: Dark Phase 7
- 1e5adf3Themes: Dark Phase 6
- 72db640Themes: Dark Phase 5
- 04bc46fThemes: Dark Phase 4
- 87ed399Themes: Dark Phase 3
- 5b9c1c7Themes: Dark Phase 2
- Day 244 · 18 commits

- Audio engine
- 4eb4597Themes: Dark Phase 17: Mixer Knobs, Pattern Arrangement Display, Parameter Lane
- 50bf845Themes: Dark Phase 16: Sample Browser
- Effects
- d095793PluginSettingsTabComponents: Fix dark mode colors for all Plugin Settings tab components
- UI / UX
- 6f36886PluginSettingsWindow:Dark Theme Sliders updated
- 653588ePluginSettingsTabComponents: Tabs updated to dark theme
- d03903cPluginSettingsWindow: Fix time-of-day colors for sliders in PluginSettingsWindow The PluginSettingsWindow is a standalone DocumentWindow that doesn't exist in the editor's component hierarchy. This caused drawRotarySlider to fail when looking for the editor parent to get time-of-day colors.
- 14bc33dSettings Window: Add EphemeraLookAndFeel for consistent control styling. Apply EphemeraLookAndFeel to PluginSettingsWindow content so knobs, sliders, buttons, and combo boxes match the app's styling. The controls lost their styling when converted from overlay to native window since they no longer inherited LookAndFeel from the editor hierarchy.
- 1b2a6afSettings Panel: Convert to native window to fix GPU waveform z-order Convert PluginSettingsComponent from an overlay panel to a native DocumentWindow (PluginSettingsWindow) to resolve OpenGL z-order issues where the GPU waveform renderer was displaying through the settings panel.
- 41ea523GPU Waveform Rendering: Fix z-order, context menu, and placeholder display
- 6c16db1GPU Waveform Rendering: Add OpenGL-accelerated waveform display with settings toggle Implement GpuWaveformRenderer using OpenGL for faster waveform visualization with automatic amplitude normalization and stereo channel support. Add CPU/GPU rendering mode toggle to Program Settings > Waveform tab, allowing users to switch between GPU (faster) and CPU (more compatible) rendering. Fix OpenGL z-order issues by temporarily hiding GPU renderer when overlay panels are displayed.
- 54d3317Themes: Dark Phase 15: Grid Manager
- d4b9913Themes: Dark Phase 14- Timeline grid viewport background fix
- bbe5a28Themes: Dark Phase 13- Timeline components dark theme support
- b15e55aThemes: Dark Phase 12- Context menu/popup menu size increase
- 702046cThemes: Dark Phase 11- WaveformDisplayComponent context menu addition
- Other
- 652c7c9PluginSettingsWindow: Scrollbar size adjustment to 16px
- 2583f30PluginSettingsWindow: Title bar updated for dark mode
- 7907036Themes: Dark Phase 17