31 days · 187 commits
December 2025
- Day 245 · 8 commits

- Audio engine
- 093fe2cGridOverlayPainter: Extract overlay painting from BaseGridComponent Extracts all overlay rendering logic into a dedicated GridOverlayPainter class as Phase 4 of the BaseGridComponent refactoring. This consolidates audio level highlights, condition column highlighting, cell flash animations, grid lines, drag highlights, multi-sample badges, conditional indicators, hover highlights, trim badges, and color helper methods (applyBreathingToColor, getBadgeColorForMode, createHeaderBlendingGradient, paintHeaderWithVerticalBlending) into a focused ~530-line manager class, reducing BaseGridComponent.cpp by approximately 350 lines.
- 30ba4a3BaseGridComponent Refactor: Extract GridZoomManager and GridAudioLevelManager Extracts zoom and audio level management from BaseGridComponent into dedicated manager classes following the established extraction pattern. Phase 1 creates GridZoomManager (~70 lines) containing horizontalZoomFactor state and zoom methods (setHorizontalZoom, getHorizontalZoom, applyZoomPreset, applyCustomZoom). Phase 2 creates GridAudioLevelManager (~154 lines) containing thread-safe audio level tracking (levelMapLock, activeCellLevels), clipping detection (clippedCells), and conditional status caching (conditionalStatusCache, updateConditionalStatuses). Updates all derived grid components (GridDisplayComponent, WeatherGridComponent, SeasonGridComponent, LocationGridComponent, MoonPhaseGridComponent, TimelineGridComponent) to use accessor methods instead of direct member access.
- UI / UX
- dcbc04dBasegridComponent Refactor: GridHoverStateManager: Extract hover and pressed state tracking from BaseGridComponent. Extracts all hover-related state management into a dedicated GridHoverStateManager class as Phase 3 of the BaseGridComponent refactoring. This consolidates 7 hover state members (hoveredCell, pressedCell, hoveredTrackIndex, hoveredConditionIndex, hoveredTrackHeaderLeft, hoveredTrackHeaderRight, hoveredMultiSampleBadge) and their accessors into a focused manager class. Updates all derived grid components (Weather, Season, Location, MoonPhase, GridDisplay, EndlessScroll, Timeline) to use accessor methods instead of direct member access. Adds setHoveredCell() public method to BaseGridComponent for external callers like TimelineHoverManager.
- fdee380BaseGridComponent: Extract track name label management to GridTrackNameManager
- b338c84GridContextMenuCallback: Extract context menu callbacks from BaseGridComponent
- Infrastructure
- 3c6a6bdBasegridcomponent Refactor: Created GridCellAnimator
- Other
- e82de90WaveformThumbnailCache: Move drawWaveformRobust from BaseGridComponent
- 9a6dde4GridDragDropHandler: Extract drag/drop logic from BaseGridComponent
- Day 246 · 7 commits

- Audio engine
- ff8c5f4Timeline/Automation: Added per-sample unique IDs and timeline context menu
- 9737c69Marathon Wins Test: Created GridBatchOperationsHandler, SampleAssignmentHelper, TimelineClipboardHandler, ParameterValidation, ValidationMAcros, AudioPRocessingValidation, Aand ConfirmationDialogs files. Grid Operations: - Right-click multi-selection → Batch Operations → Set all to Loop/OneShot/Granular/Trigger Right-click cell with sample → Assign to All Conditions Sample Browser: Right-click sample → Assign to Current Cell Right-click sample → Auto-assign to Next Empty Cell in Track Multi-select samples → Auto-assign N Samples to Next Empty Cells Clipboard: Piano Roll: Ctrl+D duplicates selected notes Timeline: Copy/paste clips at cursor position Automation: Copy/paste curves between parameters Robustness: Parameter clamping helpers (volume, pan, frequency, BPM, etc.) Debug validation macros (VALIDATE_TRACK_INDEX, VALIDATE_GRID_INDICES) Audio buffer validation at processBlock entry. Safe division helpers for synthesis engines, Confirmation dialog patterns for destructive actions
- dc5597bMixerPanel: Add 16-track support with polished scroll UX. Expands mixer from 8 to 16 visible tracks matching backend capacity. Adds mouse wheel horizontal scrolling with Shift modifier for 3x speed. Implements edge shadow gradients indicating hidden content direction. Displays track count badge in header when tracks are hidden. Adds chevron indicators on drag handle showing more tracks available. Updates snap points to 728px (8 tracks), 1048px (12 tracks), and 1368px (16 tracks). MixerPanel.h adds mouseWheelMove declaration and updates trackCount to 16 with kFullWidth to 1368. MixerPanel.cpp implements horizontal scroll handling, edge shadows in paint(), track count badge in header, and scroll state callbacks for visual updates. MixerDragHandle.h adds STANDARD_WIDTH and EXTENDED_WIDTH constants with hasMoreTracksToRight state tracking. MixerDragHandle.cpp draws chevron indicators when more tracks are available and updates snap point array.
- Timeline
- 9051720Timeline/Automation: Copy/Pase Automation curve working
- 60f73e1Timeline/Automation: Fixed Automation cursor selection error
- UI / UX
- 924bee0Timeline paste: Add vertical track lane positioning This commit adds support for pasting timeline clips at the vertical track lane where the cursor is positioned. Previously, paste only respected horizontal (time) position. Now the context menu paste calculates the target lane from the y-coordinate of the right-click position.
- Other
- 7107b61Zm1400
- Day 247 · 20 commits
- Audio engine
- 114fdc0MultiSamplePanelComponent, MultiSampleItemRowComponent: Added comprehensive theme adaptation with dark time-of-day gradient background, theme-aware selection highlights, and properly styled buttons/ComboBoxes. Improved sample name text readability with high-contrast whitesmoke color against subtle row backgrounds
- 8a4d823Timeline Grid: Adjust multi-sample selection badge positioning to not overlap active sources text
- ae096eeTimeline Grid: Renaming Active source track synced with sample grids. Badge position for multi sample selection moved but need to adjust backgroun. Ctrl-A selects and highlights all (samples weren't being highlighted)
- 59b8c3aTimeline Grid: Clicking outside of selected area deselects multi-selected automation items. Multi-selecting a sample item highlights its active source entry
- e875ad1TimelineActiveSourcesColumn.cpp/h, TimelineSelectionManager.cpp/h: Add hover and click-to-toggle highlight for automation track labels in active sources column. Automation tracks now behave like sample rows with hover effect (35% rounded highlight) and selection toggle (20% theme-colored highlight). Uses getUniqueCurveID() for selection tracking.
- dd066ceTimelineItemColorCalculator.h/cpp (new), AutomationTrackPainter.h/cpp, TimelineGridPainter.cpp: Add visual cohesion between timeline samples and automation tracks. Automation tracks now inherit colors from parent sample's condition type with continuous gradient flow (automation top = parent bottom). Sample items use square bottom corners when automation exists for seamless 'cut from same material' effect with subtle 0.25f darkening for subordinate hierarchy.
- Modulation
- 5ecbbd7TimelineSampleInteractionHandler.cpp, AutomationMouseHandler.cpp, TimelineDragStateManager.h/cpp, TimelineGridComponent.cpp: Unified multi-selection drag for samples and automation clips. Multi-selection condition now counts both item types. Added associated item tracking for cross-type drag.
- Timeline
- afa6fedTimelineDragStateManager.h, TimelineDragStateManager.cpp, AutomationCurve.h, AutomationCurve.cpp, AutomationMouseHandler.cpp, AutomationPointsScaleAction.h, AutomationPointsScaleAction.cpp: Implemented proportional automation point scaling where dragging a point scales all left points proportionally (with first point fixed) while translating right points with a fixed offset. Added Shift modifier to enable uniform translation mode for all points as a fallback. Includes full undo/redo support via new AutomationPointsScaleAction class.
- b74af91ProcessorState.h/cpp, PluginInterfaceTabComponent.h/cpp, AutomationMouseHandler.cpp: Add setting to control automation track negative offset behavior. Default clamps automation tracks to start at or after time position 0, with optional toggle in Program Settings > Timeline to allow dragging before 0 for advanced users.
- UI / UX
- 1a64756Timeline Grid: Size of Vertical Scrollbar matches horizontal scrollbar
- d53cf8cTimelineAutomationManager.h, TimelineAutomationManager.cpp, TimelineGridComponent.h, AutomationTrackMoveAction.cpp: Fixed undo/redo for horizontal automation clip movement by syncing AutomationTrackInfo::timeOffset with AutomationCurve::timeOffset during undo/redo operations. Added syncAutomationTrackTimeOffset() method to TimelineAutomationManager and getTimelineAutomationManager() accessor to TimelineGridComponent. Both perform() and undo() in AutomationTrackMoveAction now update the UI representation alongside the data model
- edf8b00MultiSamplePanelComponent, MultiSampleItemRowComponent: Added theme adaptation for both Living (time-of-day ColorHarmony) and Dark modes. Panel backgrounds, labels, buttons, ComboBoxes, and row components now update colors based on current theme state.
- 78d5a68Waveform Display: Added color sync in paint() so GPU renderer updates its waveform and background colors on every repaint cycle, matching the CPU renderer behavior. Previously GPU waveform only received color updates during initialization or mode toggles.
- 10aa964Timeline Grid: Automation Lock Symbol Fixed
- 5bc3cf7Timeline Grid: Fixed active sources background issue when adding Multi-select badge
- ef274fbTimeline: Double click to name timeline Active source track foundation. Brighter hover highlight when selected, was too dark. Selection count badge but in wrong spot. Lock icon, needs adjustment. Escape clears all multi selected timeline items. Ctrl-A select all foundation. Ctrl+I to invert
- ade061bTimeline Grid: Multi-select height resize will work bidirectionally with all items
- 8658925TimelineDragStateManager.h/cpp, TimelineHeightResizeHandler.cpp: Multi-selection height resize support. Shift+click on bottom edge of any selected item resizes all selected samples and automation clips together. Added MultiHeightResizeInfo tracking and undo support for batch operations.
- 96c56e2Timeline Grid: Automation highlight color changed to gradient
- 538ed2eTimeline Grid: Automation included in multi-selection, can lock automation clips
- Day 248 · 17 commits

- Audio engine
- 8031de2ShadowStyles.h, MixerPanel, CollapsibleBottomPanel, *SettingsPanelComponents: Add Melatonin Blur drop shadows to floating panels. Added 5 new shadow presets (interactive, selection glow, bottom panel, waveform inset, panel depth). Applied panel shadows to MixerPanel, CollapsibleBottomPanel, and 8 effect settings panels (Delay, Reverb, Filter, Compressor, Chorus, Distortion, EQ, Sample). Prepared includes for remaining 6 panels
- 8921a0bGridPaintManager.h, GridPaintManager.cpp, preview.h: Fixed missing drag highlight during internal cell-to-cell sample drags by adding renderDragHighlights() call to renderOverlayElements(). Added snapshot size limiting to Melatonin Inspector preview to prevent Direct2D crashes when focusing large components like timeline grids
- 3ade90dSamplePaintingAction: Fix shift+drag paint mode adding sample twice to source cell
- 378f600SamplePaintingAction, GridDragDropHandler, GridOverlayPainter: Hold Shift while dragging a sample to paint it across multiple cells in a horizontal (across conditions) or vertical (across tracks) direction. Direction locks after moving to the first adjacent cell, allowing continued painting even when the mouse moves outside the lane boundaries. Includes single-undo support for the entire paint gesture and cyan highlight color to distinguish paint mode from normal drag operations.
- 25801d0PianoRollInteractionHandler.h, PianoRollInteractionHandler.cpp, BasePianoRollComponent.cpp, PianoRollKeyboardShortcuts.md: Added batch transpose keyboard shortcuts for piano roll note selection. Up/Down arrows transpose by semitone, Shift+Up/Down transpose by octave (clamped to MIDI range 0-127).
- 6548142AudioProcessingValidation.h, FMSynthEngine.cpp, FMSynthEngine.h, GranularSynthEngine.cpp, GranularSynthEngine.h, MetronomeGenerator.cpp, SubtractiveSynthEngine.cpp, WavetableSynthEngine.cpp, AdditiveSynthEngine.cpp, MusicalTimeManager.cpp, SamplePlayer.cpp: Added division by zero safeguards across all synthesis engines and audio components. Extended AudioProcessingValidation.h with double-precision helpers (safeDivideDouble, safeReciprocalDouble, clampBpm, safeSamplesPerBeat) and applied safeDivide patterns to phase increments, ADSR coefficients, BPM calculations, and timing divisions to prevent audio thread crashes from invalid parameter values.
- Effects
- f1e38e3EffectAssignmentManager.cpp: Fixed effect state not persisting on project reload by adding missing Cello bridge sync in setEffectEnabled, reorderEffectChain, and clearEffectChain methods. All effect modifications now properly sync to both legacy maps and Cello bridge for correct serialization.
- e5dbffaEffectAssignmentManager.cpp: Fixed effect bypass state not persisting on project reload by adding Cello bridge sync in setEffectEnabled(). Both legacy map and Cello bridge are now updated when user toggles bypass, ensuring state is correctly serialized and restored.
- UI / UX
- de9acbfGridCellAnimator, GridOverlayPainter, BottomBarComponent, WaveformDisplayComponent, ThemedPopupMenuLookAndFeel, *SettingsPanelComponents: Implement Phase 2-4 Melatonin Blur visual enhancements. Added animated hover shadows to grid cells (150ms ease-out) with shadowIntensity interpolation. Selection glow uses time-of-day accent colors with 8px blur. Transport button group shadow in bottom bar. Inner shadow for waveform display 'screen' effect. Context menu inner shadow. Completed shadows for all 13 effect settings panels.
- dc8e549ShadowStyles.h, .gitignore, TimeSampler.jucer: Add Melatonin Blur module for high-performance shadows. Created EphemeraStyles namespace with pre-configured shadow presets (cell, panel, modal, inner, glow, ambient). Added melatonin_blur and melatonin_inspector to .gitignore
- eae9bd8SafeCastUtilities.h, EditorAccessHelper.h, EditorAccessHelper.cpp, TrackChannel.cpp, ProcessorState.cpp: Added safe casting utilities and fixed unchecked dynamic_cast locations for crash prevention. New header-only SafeCastUtilities.h provides template functions and macros for safe casting with optional InfoChiron notifications. EditorAccessHelper extended with showNotification() and reportCriticalCastFailure() methods with rate limiting. Added early null checks with DBG logging in TrackChannel::updatePlayerAssignmentsAndTargets(), TrackChannel::setupClipForPlayback(), ProcessorState::loadGridMuteSoloFromState(), and ProcessorState::loadGridVolumePanFromState().
- 036f802PluginEditor.h, PluginEditor.cpp: Added Melatonin Inspector module for debug UI inspection. Inspector opens automatically in Debug builds only, guarded by JUCE_DEBUG preprocessor checks. Enables component hierarchy inspection, paint timing analysis, and layout debugging
- Other
- 92d15c4Program Settings: Increased Program Settings window default width to 650px
- cf59cecDebugConfig.h, GridDragDropHandler.cpp, BaseGridComponent.cpp, GridOverlayPainter.cpp: Moved drag highlight debug statements behind DEBUG_DRAG_HIGHLIGHT_ENABLED flag (disabled by default). Enables selective re-enabling for future drag system debugging without log flooding
- 310733eMelatonin: Inspector starts closed by default, use Ctrl+Shift+I to open
- 3698a6aMelatonin: Gitignore added
- d9a2b9eGeneral: Add Controls tab, LFO improvements, preset validation, fix zoom preset save crash
- Day 249 · 13 commits
- Modulation
- d202e9dPiano Roll Parameter Lane: Colors update with time of day
- 421b6b2PianoRollWindow, SequencerContextMenu: Add focus-aware PR badge toggle with deactivation timing. Badge now appears immediately when piano roll opens. Clicking badge closes window if it was recently focused (within 200ms), otherwise brings to front. Added activeWindowStatusChanged() override and wasRecentlyActive() to track focus loss timing, solving the race condition where clicking the badge steals focus before the check runs.
- Visualizer
- b403624PianoKeyboardComponent: Brighten white keys for better visual separation
- UI / UX
- 549abfdPianoRoll: Fix time-of-day color updates for parameter lane and scrollbars
- ea5fc40PianoKeyboardComponent: Pixel-perfect grid alignment with traditional piano styling
- a1b2141PianoRollParameterLane: Top resize handle, grid lines, lollipop-style velocity bars
- d31a600Piano Roll/Parameter Lane: Grid Lines added, moved paramterlane resize handle to top of parameter lane
- 7ad1b42Piano Roll/Sequencer: PR recall button remembers screen position
- 9a8b786PianoRollDuplicatePatternAction, PianoRollClipboardHandler, BasePianoRollComponent: Implement Duplicate Pattern feature with full undo support. Added Ctrl+Shift+D shortcut and context menu item to duplicate all piano roll notes offset by pattern duration. Created PianoRollDuplicatePatternAction UndoableAction for proper undo/redo
- Other
- 3ac40c0PianoRoll: Keybed adjustments
- d47ff96PianoRollParameterLane: Fix velocity bars not appearing until scroll
- c4e6215Piano Roll: Added paremeter lane
- 5e72158SequencerContextMenu, SequencerGridComponent: Add clickable PR badge to open/focus Piano Roll window. Made handlePianoRollAction() public, added getPianoRollBadgeBounds() helper for hit detection in mouseDown()
- Day 250 · 14 commits
- Audio engine
- b4565a6PianoRollInteractionHandler: Track actual MIDI pitch in note info callback for proper undo/redo of vertical drags
- Timeline
- e99c935Piano Roll: Fix playhead not moving by reading beat position from SequencerState and updating time ruler in timer
- Effects
- 0e487daPiano Roll: Note Brightness and saturation now changes based on note velocity. Added Ghost Note toggle which will toggle a given piano rolls ghost notes to display when opening other piano rolls
- UI / UX
- 5d9fe2eInterface Tab: Refactor to GroupComponent-based layout with custom theme-aware styling. Replaced 10 title labels with bordered GroupComponent containers and added two-column layout helpers (layoutSliderRow, layoutToggleRow, layoutComboBoxRow) for consistent alignment of labels, controls, and value displays.
- 9b45fdb Piano Roll: Add pattern auto-expansion when notes are placed beyond current pattern boundary. Added 1/64 resolution option and getStepsPerBeat() method to MusicalTimeManager for professional architecture without duplicate switch statements. Pattern length now snaps to standard lengths (8, 16, 32, 64) and properly syncs UI via APVTS parameter updates.
- 87d383fPiano Roll: Cursor changes on note edge to indicate horizontal resize ability
- Infrastructure
- 82396cbSequencer: Refactor resolution handling to use single authoritative source. Updated Constants.h enum and helpers to include 1/64 option, removed duplicate switch statements in PluginProcessor by delegating to MusicalTimeManager::setResolution().
- Other
- 399612cPiano Roll: Notes show labels by default, option for zoom disclosed labels added to Interface Tab of Program Settings
- 106dac6Piano Roll: Added system to display note labels on piano roll notes based on zoom level. Will gate behind toggle in interface
- 668d00dPiano Roll: Any note that intersects with the selection rectangle will now be selected, even if only partially overlapping. Previously, only notes whose starting point was inside the selection were selected
- 533f18bSequencer: Removed Diagnostic logging
- 61cb67cSequencer: Fix resolution parameter mismatch causing piano roll to wrap at wrong beat position
- 0ce8a50Piano Roll: Piano Roll Follow toggle stays on after closing the window
- 1b33068Piano Roll: Quantize Undo now working
- Day 251 · 4 commits

- Audio engine
- 5712ce5Ephemera Command Center Phases 1-4 complete: Phase 1 added toggleable prompt flags with category-based defaults and quick presets (Quick Win, Complex, Bug Fix, Audio Safe) for customizing Claude Code prompts. Phase 2 implemented auto-enhancement that injects audio thread safety and UI threading guidelines into prompts based on feature category. Phase 3 added pre-flight verification that validates features before launch with dependency, status, and complexity checks displayed in a modal. Phase 4 introduced post-completion verification with category-specific quality checklists, unblocked feature tracking.
- Infrastructure
- bb3a7f4Ephemera Command Center Refactor
- Other
- 7208b25Ephemera Command Center improvements
- d0f0cb6Feature Dashboard/Command Center Work
- Day 252 · 2 commits

- UI / UX
- 9bf4463Command Center: Dependency Graph & Infrastructure Improvements. Add C++ dependency indexer that parses #include relationships to identify high-impact hotspot files (1,047 files, 3,255 edges, 192 hotspots). Implement interactive D3.js force-directed graph visualization with module color-coding, impact analysis showing direct/transitive dependents, and risk assessment. Add infrastructure improvements including YAML validation before save, automatic backup rotation (keeps last 10), and in-memory caching. Fix Knowledgebase and Dependency Graph section styling to match other dashboard sections.
- 8289da8Command Center: Add Knowledgebase & Component Browser (Phases 5-6) Add two-panel documentation browser with category toggle and empty category support. Implement C++ component indexer with 752 components across 9 categories, alphabetic range navigation, and card grid layout in center panel.
- Day 253 · 2 commits

- Other
- 31eb60fCommand Center: Add API Contracts extraction/injection. Extract method signatures, parameter docs, and thread safety annotations from C++ headers for prompt injection.
- a09a405Command Center: Before sending prompts can 'Ask Claude' to search relevant components related to the feature selected
- Day 254 · 1 commit

- Infrastructure
- d0b93c3Streamdeck: Debug Build and Release build buttons automatically build, on success program is opened and focused to fron window. On failure, visualStudio errors are automatically pasted and sent back to Claude
- Day 255 · 8 commits

- Audio engine
- a8734eadocs/gain_parameters_audit.md, test_gain_parameter_conversion.cpp: Volume Parameter Scaling Audit - Comprehensive audit of all gain/volume/level APVTS parameters confirmed correct dB-to-linear conversion throughout codebase. Created documentation with file locations and reference values, plus regression tests verifying 0dB=1.0, -6dB≈0.5, -∞dB=0.0
- cb4af13SignalsmithPitchShifter.h, SignalsmithPitchShifter.cpp: Fix Audio Thread Stack Allocations - Pre-allocate temp buffers in prepare() instead of per-frame allocation in process() to prevent real-time audio thread memory allocation
- 9265f4dFiles affected: SampleBrowserDataManager.cpp, SampleBrowserDataManager.h, build-history.json, etc: Work on APERF-002: Implement Lock-Free Sample Tags & Search Paths
- UI / UX
- 814fbc8Command Center: Add Hybrid Response Capture & Commit Summary Panel. Implement response polling API for auto-capturing Claude responses during research sessions with adaptive End Session modals (code vs research). Add auto-generated commit summary as collapsible static panel with format Files affected: file1.cpp, etc: [Title] - [Description] and Copy button.
- Infrastructure
- 7a4f518Remove Debug/, node_modules/, and hook_handler.jsonl from git tracking - saves 37MB
- Other
- 5563d97Command Center Updates
- 00beebcEphemeraKnob.h, EphemeraKnob.cpp, TrackControlRow.h: TrackControlRow Knob Size - Increase knob size by 10% (35→38px) and arc thickness when dragging (6→7px) for improved usability
- acaf3b8Command Center/General: Memory System. Default Window Size increased (Ephemera)
- Day 256 · 4 commits

- Timeline
- ea0b016 TimelineOrderManager.h, TimelineOrderManager.cpp: Lock-free Timeline Order - Replaced CriticalSection mutex with atomic snapshot pattern for real-time safety. Added TimelineOrderSnapshot struct inheriting from ReferenceCountedObject, implemented lock-free getTimelineOrder(), setTimelineOrder(), and reorderTimelineItems() using atomic pointer swaps following the established SampleColorManager pattern.
- Other
- 03270b4Command Center Logging, Streamdeck updates
- 14c6f62ProcessorState.h, ProcessorState.cpp, ProjectMetadata.h, Constants.h: ProecessorState Refactoring - Added ProjectMetadata struct with project name, author, notes, and timestamps. Implemented project dirty flag system with ProjectSTatelistener interface for change notifications. Integrated metadata serialization into save/load cycle for complete project state persistance
- 8d9809bReal-time Safety Monitoring: Implemneted RT watchdog monitoring that will monitor for potetential RT code violations, proactively launch new claude code window to investigate if it is actually an issue, and high confidence issues are then sent to the original claude code window to steer it in the right direction
- Day 257 · 3 commits
- UI / UX
- 00e3925Added Day of Week Grid Foundation
- Infrastructure
- 9c0165dBuild Optimization: Enable PCH for Release, remove duplicate include
- 270e523Dependency Graph Overhaul
- Day 258 · 11 commits
- Audio engine
- 14c90bcTempo Map: Tempo Events now snap to set snap setting
- df94582Tempo Map: Tempo Event points now have context menu
- 28619a3Tempo Map: Added Context menu for Tempo events
- 932f752Tempo Map: Transport BPM Display now updates with tempo map updates
- c6a09d7Tempo Map: BPM display updates now occur in Tempo Map lane
- 2a45fd2Tempo Map UI: Theme-aware coloring for all tempo track elements
- a397376Tempo Map UI: Fix Active Sources alignment and add playhead indicator
- 9d000f3Tempo Map: Connected backend and frontend, added initial UI and controls. Show/hide with ctrl+shift+T. Can add tempo markers/events. Testing required
- 0607e88Tempo Map Infrastructure: Lock-free tempo automation with ramp support, MusicalTimeManager race condition fix, ProcessorState serialization
- UI / UX
- fcce286TempoUI/Playhead Indicator: Indicator paint session displays proper time of day color
- Other
- 0ccb75cCommand Center/Streamdeck: Container System organizes Claude Code windows
- Day 259 · 4 commits
- UI / UX
- e643c62Container Manager: Presets, Swap Windows, Resize Fix. Command Center: Prompt Preview Improvement.
- f07db9fContainer Manager: CC Button focuses existing window, excludes Python/terminal
- 72afbc6Command Center, Streamdeck, Container System: Added Header Navigation to container system, minimize support, CC button moves container to left half of screen. Streamdeck feature search button added. Added Historical and 'To-Do' features to to the feature list in the browser
- Other
- ba1cefdContainer Manager: Tooltips added to elements
- Day 260 · 1 commit
- Other
- cd3070cCreated Window Container Manager. Upgraded Command Center Sub-feature generation. Turned off Debug Mode for PluginProcessor
- Day 261 · 1 commit
- Other
- c2e3c6eCommand Center, StreamDeckPlugin, and Containermanager updates
- Day 262 · 4 commits
- UI / UX
- 35a0943Command Center: Created Ios Style Docker, updated Open, Launch Claude button permissions for WSL
- ff59bd9Timeline: Added Ctrl+G shortcut to pen go to position dialog supporting bar, beat, tick and MM:SS formats.
- 261d45aTrackControlStrip: Added Track Notes, right click track header to see Edit Track Notes option
- Infrastructure
- 1e9e173Command Center: Refactor Process started, Bots Section added
- Day 263 · 4 commits
- UI / UX
- 197a767Command Center/Streamdeck: Open CmdCtr button now opens new window instead of being added to existing tab
- ed7cc1bStreamdeck: Fixed Build Debug/Release buttons, fixed Config not updating, added BUILD STOP icon, updated NO EXE BUILD FIRST button. Command Center: Added bot lifetime uptime %, fixed Reddit Commit bot not starting
- Infrastructure
- 93dead6Build/PCH: Add build status tracking with phase breakdown, stuck build detection, and PCH health monitoring
- Other
- cbfbc59PCH Fixed. 17 minute builds? No! 5 minute builds instead!
- Day 264 · 5 commits
- UI / UX
- 565f3aaPluginProcessor: Phase 2 forward declarations (AudioBufferPool, RatchetEventPool, FrameRateController) Forward-declared 3 headers in PluginProcessor.h and moved includes to PluginProcessor.cpp, reducing header footprint by ~569 lines. All three use the safe unique_ptr + pointer accessor pattern.
- aa61a86PluginProcessor: Forward declare ForecastPreloader to reduce header dependencies
- 530cbf5Command Center: Docker button size adjustments, fixed laptop mode toggle. added MSBuild hooks (Directory.Build.targets + vs-build-reporter.ps1) that report Visual Studio F5/Ctrl+Shift+B builds to Command Center's build history API, so now all builds are tracked regardless of whether they're triggered from StreamDeck or VS.
- c0b5db5Builds: Smart Build button PCH logging now correct
- Other
- 5b76cebPluginProcessor: Phase 4 forward declarations (AudioProcessingCache, BackgroundPitchRenderer)
- Day 265 · 9 commits
- Audio engine
- 5c41403Parameters Helpers Refactor Phase 4: Mixer Parameters Moved to ParameterHelperMixers
- Effects
- 671156cParameter Helpers Refactor Phase 2: Effect Parameters moved to ParameterHelpersEffects
- UI / UX
- bc36cf2JuceHeader Includes: Removed redundant #include <JuceHeader.h> from 228 .cpp files The precompiled header (EphemeraPrecompiled.h) already includes JuceHeader.h, making explicit includes unnecessary. Removed the redundant includes and associated 'MUST BE FIRST' comments from all source filesexcept 8 test files that may compile standalone. This completes Phase 2 of the include optimization effort
- 61d142cSTL Includes: Removed STL headers already provided by PCH (EphemeraPrecompiled.h) from 10 header files, eliminating ~40 redundant include directives. Target files: TrackChannel.h, PluginProcessor.h, MixerEngine.h, BaseEffectGridComponent.h, TrackControlStripComponent.h, OptimizedObserver.h, CelloValue.h, CelloCollection.h, AnimationCuller.h, and RenderOptimizer.h
- Infrastructure
- 785ac07Parameter Helpers Refactor Phase 3: Synth Parameters Moved to ParameterHelpersSynths
- 889a54aParameter Helpers Refactor Phase 1: ParameterHelpersInternal created
- e9f42cdConstants Refactor: Created XML and ParamID's files and updated directory. Command Center: Updated sub-feature generation. Container Manager: Added Unlink-option
- Other
- 50bd174Forward declared WeatherForecastService, SequencerState, and StemSeparationManager in PluginProcessor.h. Added explicit includes to 13 .cpp files that directly use SequencerState. Reduces parsing by ~713 lines per translation unit across 206 includers.
- cd867f5PluginProcessor: Phase 5B + 5C forward declarations (TimelineMarkerManager.h
- Day 266 · 3 commits
- Infrastructure
- 8c33150Constants: Extract BaseGridMenuIDs.h to break circular dependency: Moved BaseGridMenuIDs namespace from BaseGridComponent.h to dedicated Source/Constants/BaseGridMenuIDs.h, resolving the circular include chain between BaseGridComponent.h and ContextMenuTooltips.h. Also optimized BaseGridComponent.h by moving ContextMenuTooltips.h, TooltipEnabledMenuItem.h, WaveformThumbnailCache.h, and ViewModels/GridViewModel.h includes to the .cpp file and adding forward declarations, reducing transitive build impact by ~16,800 lines across 40 includers.
- Other
- 5544401PluginProcessor: Forward declare OptimizedParameterCache and SequencerParameterOptimizer in PluginProcessor.h
- d3e6b42FASTBuild: Installed and Cache Working - Local compilation of 515 files with /Z7 caching for JUCE library modules saving ~1min per rebuild
- Day 267 · 7 commits
- Audio engine
- 5121a11Sample Browser Refactor: Extract SampleBrowserScanManager for async directory scanning Extracted ~320 lines of background scanning logic from SampleBrowserPanelComponent into dedicated SampleBrowserScanManager class. The manager handles DirectoryScannerJob (TimeSliceClient for batch file processing), scan throttling (2-second minimum interval), FileChooser for adding directories, and search path state management.
- c874d1aSample Browser Refactor: Extract SampleBrowserViewModeManager for view/layout switching. Extracted ~90 lines of view mode (ListView/GridView) and layout mode (Horizontal/Vertical) switching logic from SampleBrowserPanelComponent into dedicated SampleBrowserViewModeManager class. Handles button text updates, tooltip registration, visibility toggling, and editor coordination.
- be6c695Sample Browser Refactor: Extract SampleBrowserFolderManager for folder operations. Extracted ~260 lines of folder management logic from SampleBrowserPanelComponent into dedicated SampleBrowserFolderManager class. This includes folder creation/editing, button management (addNewFolderButton, rebuildFolderButtons), and deletion with confirmation dialogs
- ab96e37Sample Browser Refactor: Extract SampleBrowserThemeManager for environmental theming Extracted ~100 lines of environmental color theming logic from SampleBrowserPanelComponent into dedicated SampleBrowserThemeManager class. This includes updateEnvironmentalColors() for button/search bar theming and updateTableEnvironmentalColors() for table header/background colors based on time-of-day.
- 592ce43Sample Browser Refactor: Extract SampleBrowserSearchEngine for search/filter and lazy loading Extracted search criteria matching (~105 lines) and lazy loading state management (~70 lines) from SampleBrowserPanelComponent into dedicated SampleBrowserSearchEngine class. The engine handles tag parsing with AND/OR operators and manages incremental display of large file lists.
- a38679aSample Browser Refactor: Extract SampleBrowserKeyboardHandler for keyboard input separation Extracted ~140 lines of keyboard handling logic from SampleBrowserPanelComponent into dedicated SampleBrowserKeyboardHandler class. This includes Enter key search execution, Ctrl+A select all, Escape to clear selection, and arrow key navigation with auto-preview auditioning.
- 10de0bbSample Browser Refactor: Extract SampleBrowserLayoutManager for layout separation Extracted ~560 lines of layout logic from SampleBrowserPanelComponent into dedicated SampleBrowserLayoutManager class. This includes horizontal/vertical FlexBox layouts, table column configuration, and the LeftResizerBar component for vertical mode width adjustment. The layout manager follows the established handler pattern (similar to TimelineGeometryManager), using friend access to position UI components while keeping layout constants and calculations encapsulated. Combined with the earlier DragDropHandler extraction, the main panel file is now ~2,700 lines (down from ~3,560), completing two of three Phase 1 extractions in the refactor plan.
- Day 268 · 3 commits
- UI / UX
- 1eb1f90LookAndFeel Refactor Phase 2: Extract slider and scrollbar renderers
- 15f7d74LookAndFeel Refactor Phase 1: Extract TimeOfDayColorHelper and TransportIconRenderer
- Other
- 619c781FASTBuild: Launchers/Scripts updated
- Day 269 · 1 commit

- UI / UX
- 9b3e323LookAndFeel Refactor Phase 3: Extract button, toggle, combobox, popup, tab, and group renderers
- Day 270 · 7 commits

- Other
- 9faeaccREFACT-025 Phase 2: Extract ProjectMetadataManager from ProcessorState
- b361fc5REFACT-025 Phase 1: Extract UIPreferencesManager from ProcessorState
- 1acd341REFACT-023 Phase 5: Extract PatternColors from TimeOfDayColorSystem.h
- cd23847REFACT-023 Phase 4: Extract ContrastUtilities from TimeOfDayColorSystem.h
- 67331f5REFACT-023 Phase 3: Extract ColorHarmony namespace from TimeOfDayColorSystem.h
- 8901feeREFACT-023 Phase 2: Extract EnvironmentalGradients from DesignTokens.h
- c6c2262REFACT-023 Phase 1: Extract TimeOfDayColorSystem from DesignTokens.h
- Day 271 · 11 commits

- UI / UX
- 7db7258REFACT-008 Phase 6: Fix dark theme not restoring on project load
- 32793f3Fix: Remove theme saving from storeCurrentUIState() since it's already handled by PluginInterfaceTabComponent::saveSettings() when the user explicitly changes the theme. This prevents resize events from overwriting loaded theme state before restoration completes.
- 90c2319Zoom Presets: Now work for all grid types
- Other
- 6f92956REFACT-008 Phase 5: Extract EditorTrackOrderController from PluginEditor
- 35e7f0aREFACT-008 Phase 4: Extract EditorZoomController from PluginEditor
- bbc9a63REFACT-008 Phase 3: Extract EditorViewManager from PluginEditor
- fb14054REFACT-008 Phase 2: Extract EditorToolbarHandler from PluginEditor
- dce1ce7REFACT-008 Phase 1: Extract EditorLayoutManager from PluginEditor
- 321d20fREFACT-025 Phase 6: Final cleanup of ProcessorState
- 6e22f43REFACT-025 Phase 4-5: Extract ZoomPresetManager and PathConversionHelper from ProcessorState
- db4c90dREFACT-025 Phase 3: Extract SampleBrowserStatePersistence from ProcessorState
- Day 272 · 4 commits

- Audio engine
- 635797aREFACT-026 PluginProcessor: Extract sequencer step triggering to SequencerBlockProcessor. Replaces ~80 lines of step processing, ratcheting, probability, and envelope triggering logic in processBlock with a call to the new extracted processor class.
- 889260cREFACT-026 PluginProcessor: Create SequencerBlockProcessor class for sequencer step processing. Adds new processor class following AutomationProcessor/RecordingCoordinator pattern to handle step advancement, ratchet events, probability triggering, and song mode - preparing for extraction from processBlock.
- 1bfd6efREFACT-029 BaseGridComponent Refactor: Extract sample info resolver, timer scheduler, and track name coordinator
- Other
- bbe267bREFACT-029: Extract GridSampleOperationsHandler from BaseGridComponent
- Day 273 · 6 commits
- Audio engine
- 14ac0d0Ephemera Player: Listener-facing streaming player prototype with environmental shader system. Added standalone web-based player prototype that visualizes Ephemera's environmental conditions through real-time GLSL shaders. This marks the first tangible connection between Ephemera's condition-based audio engine and a consumer-facing experience.
- b5fed9fREFACT-026 Phase 2: Extract processBlock helpers (transport, modulation, volume, metronome)
- ad01f6aREFACT-026 Phase 1: Extract SequencerBlockProcessor and TimelineBlockProcessor from processBlock Extracted ~155 lines of sequencer and timeline processing logic into dedicated processor classes following the established AutomationProcessor/RecordingCoordinator pattern. This reduces PluginProcessor.cpp's processBlock method complexity.
- 6edb2f9REFACT-026 PluginProcessor: Create TimelineBlockProcessor class for timeline clip processing. Adds new processor class to handle clip triggering, position tracking, trim/reverse, and conditional playback - preparing for extraction from processBlock.
- Infrastructure
- e2034d8Decouple BaseGridComponent from PluginProcessor via SampleLoadState extraction Extract SampleLoadState enum to break include dependency between BaseGridComponent.h and PluginProcessor.h. Consolidates duplicate LoadState enum from SampleRegistryEntry.h
- Other
- 6c2ac9fREFACT-026 Phase 2 Cleanup
- Day 274 · 1 commit

- Audio engine
- f209d87Add Nagai Beach shader to Ephemera Player with 24-hour sky gradients, palm trees, ocean, weather effects, and audio reactivity. Fix JuceBridge for JUCE 8 WebView2 compatibility and add WebGL debug logging with 2D canvas fallback.
- Day 275 · 2 commits

- Visualizer
- e3e63adNagai Beach Scene Overhaul
- UI / UX
- c1b3badAdd Ctrl+O override panel with dropdowns for time, weather, season, location, moon phase, and track simulation presets - Add Ctrl+D debug panel toggle (hidden by default) - Wire up Grid Data Bridge: iWeatherTracks[16] and iSeasonTracks[16] uniforms now control visual effects - Add track-driven weather effects: clouds (0-1), fog (2), rain (3-4), snow (6-9) - Add track-driven season effects: cherry blossoms (0), falling leaves (2), ice crystals (3)