All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Build System Enhancement (v1337.3): Enhanced dependency management with intelligent libprojectm handling
- Added automatic dependency installation for Arch Linux via
pacman - Implemented version-aware libprojectm detection with minimum version check (4.1.0)
- Added
--system-projectmflag to force use of system/pacman libprojectm - Added
--cpm-projectmflag to force building libprojectm from source via CPM - Smart auto-detection: uses system libprojectm if recent enough, otherwise falls back to CPM
- Version comparison logic ensures compatibility with system requirements
- Added
CHADVIS_FORCE_CPM_PROJECTMCMake option to bypass system detection
- Added automatic dependency installation for Arch Linux via
- Build System Enhancement (v1337.2): Upgraded the Zsh build system for better transparency and automation
- Implemented dual-output logging: Build steps now show live in console AND are saved to
logs/build.log - Integrated automated dependency checking and installation for Arch Linux
- Added
-y/--yesflag to auto-install missing packages viapacman - Fixed pipe status handling to correctly detect failures in
teepipelines - Added unbuffered output for real-time visibility of CMake and Ninja progress
- Added
synccalls to ensure build logs are flushed to disk on failure.
- Implemented dual-output logging: Build steps now show live in console AND are saved to
- Persistent Suno Authentication: Implemented persistent cookie storage for Suno authentication to prevent session loss during library updates (~2500 songs)
- Created
SunoPersistentAuthclass to manage persistent WebEngine profile with cookie storage - Updated
SunoBrowserWidgetandSunoCookieDialogto useForcePersistentCookiespolicy - Session data stored in
~/.config/chadvis-projectm-qt/webengine/suno/ - Cookies persist across application restarts, eliminating need to re-login each session
- JWT token extraction and user ID parsing from session cookies
- Logout functionality to clear persistent session data
- Added modern Chrome User Agent to bypass Google OAuth "browser not supported" errors.
- Created
- Non-Modal Suno Browser Widget: Created
SunoBrowserWidgetas an embedded alternative to the modalSunoCookieDialog. Provides non-blocking authentication flow that can be docked or used as a floating panel. - Modern Sidebar Navigation: Implemented
SidebarWidgetreplacing the tab-based dock widget. Features icon-based navigation with collapsible sections, organized into Library, Visualizer, Recording, Overlays, Karaoke, Suno, and Settings panels. - Theme System Verification: Verified theming system is fully operational with dark, gruvbox, and nord themes properly loading via QSS resource files.
- Direct Lyrics Display Injection: Refactored
onAlignedLyricsFetchedto immediately parse and display lyrics without waiting for database save. Lyrics now appear instantly when API response returns. - Direct Mapping Cache: Added
directLyricsCache_to store recently fetched lyrics, enabling instant display on track restarts during the same session. - Aggressive UUID Extraction: Implemented
extractClipIdFromTrack()helper with multi-source detection - checks filename, full path, parent directory, and title-based fuzzy matching. - Last Requested ID Fallback: Added
lastRequestedClipId_to handle track mapping during playlist transitions when extraction fails. - Sidecar File Loading:
onTrackChangednow loads lyrics from local.srtand.jsonfiles alongside MP3s, enabling offline lyrics display. - Detailed Trace Logging: Added comprehensive tracing in
OverlayEngine::drawToCanvasto diagnose why lyric lines might be skipped (timing gaps, before/after range, etc.). - Instrumental Tag Handling: Enhanced
LyricsAligner::parseJsonto preserve instrumental sections with 🎵 placeholder while skipping other tags like [Verse] and [Chorus].
- MainWindow Layout Options: Added View menu option "Use Sidebar Layout" to toggle between traditional dock-based tab interface and modern sidebar navigation.
- SunoController Architecture: Refactored
onAlignedLyricsFetchedinto helper methods:isCurrentlyPlaying(),parseAndDisplayLyrics(), andsaveLyricsSidecar()for cleaner separation of concerns. - Track-to-ID Mapping:
onTrackChangednow uses 4-priority lookup: 1) Direct cache, 2) Database, 3) Sidecar files, 4) API fetch. - Persistence Strategy: Sidecar files (.json/.srt) are now saved immediately alongside local MP3s when available.
- UI Widget Polish: Clamped glow alpha values in
GlowButtonandCyanSliderto valid range [0, 1].
- Qt6 WebEngine Compatibility: Fixed compilation error in
SunoPersistentAuth.cppby removing invalidsetOffTheRecord()call (handled via named profile in Qt6). - Lyrics Export Refactor: Fixed export logic in
LyricsPanel.cppto correctly handlestd::stringreturn values fromLyricsExportand implement proper file saving usingQFileDialog. - Missing Build Includes: Added missing
<QFileDialog>,<QFile>,<QTextStream>,<QStandardPaths>, and<QTimer>includes toLyricsPanel.cpp. - UI Animation Errors: Resolved
QPropertyAnimationerrors by properly declaringglowOpacityas aQ_PROPERTYinCyanSlider.
- Modern 1337 Chad GUI Custom Controls (P3.005): Created custom styled widgets for modern UI redesign
CyanSlider: Horizontal slider with cyan accent (#00bcd4), glow effects, and smooth animationsGlowButton: Glassmorphism button with animated glow border, press feedback, and modern aestheticsToggleSwitch: Animated toggle switch with smooth sliding thumb, cyan/grey states, and optional labels- All controls follow the design system from MOCKUPS.md: dark background (#1a1a1a), cyan accent (#00bcd4), 8px border radius
- Lyrics Tool Tab (P1.003): Full integration of
LyricsPanelinto the sidebar- Added "Lyrics" panel to modern sidebar navigation (icon: text-x-generic)
- Export functionality for subtitle files: SRT, LRC, and JSON formats
- Export buttons integrated into LyricsPanel toolbar with cyan styling
lyricsExported()signal emitted on successful export with format and file path- Exports use existing
LyricsExport::toSrt(),toLrc(),toJson()functions
-
PlayerControls Modernization: Replaced standard Qt widgets with custom modern controls
QSlider→CyanSliderfor seek and volume controls with cyan accentQPushButton→GlowButtonfor all transport buttons (play, pause, stop, next, prev, shuffle, repeat)- Added
applyModernStyling()method to configure glow effects and accent colors - Play button uses green accent (#00ff88) for visual prominence
- All buttons feature glassmorphism backgrounds and animated glow borders
-
SettingsDialog Modernization: Updated dialog buttons with modern styling
- Karaoke color selection buttons now use
GlowButtonwith color-matched glow - Dialog action buttons (OK, Cancel, Apply) use
GlowButtonwith cyan/green accents - OK button uses green accent (#00ff88) for primary action emphasis
- Karaoke color selection buttons now use
-
RecordingControls Modernization: Updated recording interface with modern controls
- Record button uses
GlowButtonwith red glow (#ff4444) for recording state - Browse button uses
GlowButtonwith cyan accent - Consistent with the modern 1337 Chad GUI design system
- Record button uses
-
Sidebar Layout Default: Changed
useSidebarLayout_fromfalsetotruein MainWindow- Modern sidebar navigation is now the default layout
- Users can still toggle back to traditional dock-based layout via View menu
- Sidebar provides icon-based navigation with 7 integrated panels
- Custom widgets located in
src/ui/widgets/following project naming conventions - All widgets use
namespace chadvisfor consistency with SidebarWidget - LyricsPanel export functions check for empty lyrics before attempting export
- MainWindow now creates LyricsPanel instance and adds to sidebar alongside other panels
- Signal/slot connections updated to use custom widget signals (
chadvis::GlowButton::clicked,chadvis::CyanSlider::valueChanged)
- ✅ LSP Diagnostics: All modified files pass diagnostics with 0 errors, 0 warnings
- PlayerControls.hpp/cpp: Clean
- SettingsDialog.hpp/cpp: Clean
- RecordingControls.hpp/cpp: Clean
- MainWindow.hpp: Clean
- ✅ Widget Integration: Custom widgets now actively used in 3 major UI components
- ✅ Design System: Full compliance with MOCKUPS.md - cyan accents (#00bcd4), glassmorphism, 8px radius
- ✅ Default Layout: Sidebar navigation now default (useSidebarLayout_ = true)
- ✅ Code Quality: Modern C++20 features, Qt best practices maintained
- ✅ Task Registry: All P3.005 and P1.003 integration tasks completed
- Modern 1337 Chad GUI Custom Controls (P3.005): Created custom styled widgets for modern UI redesign
CyanSlider: Horizontal slider with cyan accent (#00bcd4), glow effects, and smooth animationsGlowButton: Glassmorphism button with animated glow border, press feedback, and modern aestheticsToggleSwitch: Animated toggle switch with smooth sliding thumb, cyan/grey states, and optional labels- All controls follow the design system from MOCKUPS.md: dark background (#1a1a1a), cyan accent (#00bcd4), 8px border radius
- Lyrics Tool Tab (P1.003): Full integration of
LyricsPanelinto the sidebar- Added "Lyrics" panel to modern sidebar navigation (icon: text-x-generic)
- Export functionality for subtitle files: SRT, LRC, and JSON formats
- Export buttons integrated into LyricsPanel toolbar with cyan styling
lyricsExported()signal emitted on successful export with format and file path- Exports use existing
LyricsExport::toSrt(),toLrc(),toJson()functions
- Custom widgets located in
src/ui/widgets/following project naming conventions - All widgets use
namespace chadvisfor consistency with SidebarWidget - LyricsPanel export functions check for empty lyrics before attempting export
- MainWindow now creates LyricsPanel instance and adds to sidebar alongside other panels
- ✅ LSP Diagnostics: All 12 new/modified files pass diagnostics with 0 errors, 0 warnings
- ✅ CMakeLists.txt: All source files properly included (lines 331-340)
- ✅ MainWindow Integration: SidebarWidget and LyricsPanel integrated (lines 151-171)
- ✅ Design System: Full compliance with MOCKUPS.md color palette and spacing
- ✅ Code Quality: Modern C++20 features, Qt best practices, proper documentation
- ✅ Task Registry: P1.003 and P3.005 marked as completed
- Automated Suno Authentication: Implemented email/password login flow using Clerk API, eliminating manual cookie extraction.
- Intelligent ProjectM v4 Detection: Added robust CMake logic to find system
libprojectm(v4) or build from source via CPM as a fallback. - Arch Linux Dependency Check: Enhanced build script to detect missing Arch packages and provide one-liner install commands.
- Zsh-Native Build System: Refactored build scripts to use Zsh built-ins for hardware detection, timing, and logging.
- Build System Overhaul: Rewrote
build.shandscripts/build.zshfor better performance, visual feedback, and LLM-friendly logging. - Configuration: Added
emailandpasswordfields to Suno configuration.
- ProjectM Include Path: Resolved issues with
projectM-4/projectM.hnot being found on fresh installs.
- Initial release of ChadVis ProjectM Qt.
- Basic Suno AI integration with manual cookie support.
- Real-time audio visualization using ProjectM.
- Karaoke lyrics overlay.