13 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
This is a new music management application project that aims to create a Spotify-like desktop application with Python. The project is in its initial planning phase with only a project requirements document (project.txt) currently present.
Project Requirements
The application will be a music management tool that:
- Connects to Spotify API and Plex Media Server
- Features an elegant, animated, vibrant theme similar to Spotify's desktop/web app
- Synchronizes Spotify playlists to Plex using robust matching systems
- Integrates with Soulseek for downloading FLAC/high-quality audio files
- Updates music metadata on Plex based on Spotify metadata including album art
- Provides core functionality that feels and looks like Spotify
Configuration
The application will use a central config.json file to store:
- Spotify API credentials and login information
- Plex Media Server connection details
- Other connected service configurations
Development Status
Current State: Active development of a PyQt6-based desktop application with functional UI and core integrations.
Completed Features:
- ✅ PyQt6 GUI framework with Spotify-inspired dark theme
- ✅ Modular architecture with separate service clients (Spotify, Plex, Soulseek)
- ✅ Modern sidebar navigation with animated buttons and status indicators
- ✅ Media player sidebar with scrolling text animation for long titles
- ✅ Search functionality with real-time filtering (Albums vs Singles)
- ✅ Audio streaming and playback from Soulseek search results
- ✅ Service status monitoring and connection indicators
- ✅ Configuration management system
- ✅ Download progress tracking for both singles and albums
- ✅ Enhanced filename matching system preventing false positives
- ✅ Complete download queue management system with functional buttons
- ✅ Compact, practical download item UI design
- ✅ Album track button state management and cancellation handling
- ✅ Clear completed downloads functionality with backend integration
Recently Completed Work:
✅ Download Manager Complete Redesign (COMPLETED)
- COMPLETED: Fully functional Cancel and Open buttons in download queue
- COMPLETED: Proper slskd API integration with correct endpoint formats
- COMPLETED: Enhanced album track button state management with cancellation support
- COMPLETED: Clear All Completed Downloads functionality using slskd backend API
- COMPLETED: Compact download item UI redesign for optimal space utilization
✅ Download Queue Button Functionality (RESOLVED)
- FIXED: Cancel button now properly cancels downloads using correct slskd API format
- FIXED: Open button successfully opens download folders with fallback logic
- FIXED: Enhanced debugging and error handling for button operations
- FIXED: Album track buttons properly reset after individual track cancellation
✅ UI/UX Improvements (COMPLETED)
- COMPLETED: Redesigned CompactDownloadItem with efficient 45px height
- COMPLETED: Conditional layout system (active: filename/uploader/progress/cancel, finished: filename/uploader/open)
- COMPLETED: Smart text ellipsis handling preventing horizontal overflow
- COMPLETED: Optimized space allocation fitting perfectly in download queue container
- COMPLETED: Clean, functional button design with immediate accessibility
Active Work:
- 🎯 PRIORITY FEATURE: Spotify Matched Download System - Advanced music organization with intelligent matching
- ⏳ Additional UI polish and user experience improvements
- ⏳ Enhanced matching engine development for cross-service track matching
Current System Status: All major download management functionality is working correctly. Ready for advanced Spotify integration features.
🎯 MAJOR FEATURE: Spotify Matched Download & Organization System
🎯 Feature Overview
Ultimate Goal: Transform downloaded music files into a perfectly organized library with Spotify-accurate metadata and professional folder structure.
Core Concept: Add "Matched Download" buttons (🎯) alongside regular download buttons that automatically:
- Download the track using existing Soulseek integration
- Intelligently match the track with Spotify's database for accurate metadata
- Transfer and organize the file into a professional folder structure
- Handle complex edge cases like remixes, compilations, and mixed-artist albums
Target Folder Structure:
Transfer/
├── Taylor Swift/
│ ├── Taylor Swift - 1989 (Taylor's Version)/
│ │ ├── Taylor Swift - Shake It Off (Taylor's Version).flac
│ │ ├── Taylor Swift - Blank Space (Taylor's Version).flac
│ │ └── ...
│ └── Taylor Swift - Folklore/
│ ├── Taylor Swift - Cardigan.flac
│ └── ...
├── Daft Punk/
│ └── Daft Punk - Random Access Memories/
│ ├── Daft Punk - Get Lucky (feat. Pharrell Williams).flac
│ └── ...
└── Various Artists/
└── Various Artists - Now That's What I Call Music 50/
├── Britney Spears - Toxic.flac
└── ...
🚀 Implementation Phases
Phase 1: Foundation & Architecture ⏳
Status: In Planning Deliverables:
- ✅ Comprehensive specification document (SPOTIFY_MATCHING_SPEC.md)
- ⏳ Advanced metadata extraction system leveraging existing TrackResult/AlbumResult data
- ⏳ Sophisticated matching algorithms with multi-stage fallback logic
- ⏳ Professional UI architecture with responsive modal design
Phase 2: Core Services Development 📋
Status: Pending Phase 1 Deliverables:
- SpotifyMatchingService with intelligent search query generation
- FileOrganizationService with atomic file operations and conflict resolution
- MatchingEngine with confidence scoring and remix detection
- Enhanced error handling and logging systems
Phase 3: Professional UI Implementation 🎨
Status: Pending Phase 2
Deliverables:
- Responsive MatchingModal with proper spacing and layouts
- Real-time search interface with debouncing and progress indicators
- Confidence visualization and user feedback systems
- Accessibility features and keyboard navigation
Phase 4: Integration & Polish ⚡
Status: Pending Phase 3 Deliverables:
- 🎯 Matched download buttons integrated into existing UI components
- Download completion detection and automatic processing
- Album-level matching and batch processing capabilities
- Comprehensive testing and edge case handling
🎵 Supported Download Types
1. Singles (Primary Focus)
- Individual tracks from search results
- Most straightforward matching scenario
- Foundation for more complex matching logic
2. Albums (Future Enhancement)
- Complete album downloads with track-by-track matching
- Handle mixed-artist compilations intelligently
- Detect and separate "fake albums" (user playlists disguised as albums)
3. Individual Album Tracks (Future Enhancement)
- Tracks downloaded individually from within album results
- Inherit album context for better matching accuracy
- Maintain consistency with full album downloads
🧠 Intelligent Matching System
Advanced Metadata Extraction
Challenge: Soulseek filenames are inconsistent and unreliable Solution: Multi-source metadata aggregation
- Primary: Leverage existing
TrackResult.artist,TrackResult.title,TrackResult.albumfields - Secondary: Enhanced filename parsing with regex patterns
- Tertiary: Directory path analysis for album context
- Fallback: Manual user input through search interface
Sophisticated Search Strategies
- Exact Match: Artist + Title + Album (highest confidence)
- Partial Match: Artist + Title (good confidence)
- Fuzzy Match: Normalized strings with similarity scoring
- Remix Detection: Extract remix artist from title patterns
- Manual Search: User-driven fallback with suggestions
Confidence Scoring System
- 90-100%: Exact metadata match, auto-proceed
- 75-89%: High confidence, show for user confirmation
- 60-74%: Medium confidence, require user review
- Below 60%: Low confidence, manual search required
🎛️ User Experience Flow
Seamless Workflow
- User clicks 🎯 on any track (single or within album)
- Download starts immediately using existing proven download system
- Matching modal appears with elegant, responsive design
- Automatic matching runs in background with progress indication
- Results displayed with confidence scores and preview information
- User confirms or refines the match through intuitive interface
- File transferred atomically to organized structure
- Success feedback with option to open destination folder
Error Handling & Fallbacks
- No automatic match: Manual search interface with intelligent suggestions
- Multiple high-confidence matches: User selection with detailed comparison
- No suitable matches found: Option to proceed with regular download
- File transfer errors: Rollback mechanisms and detailed error reporting
- Spotify API failures: Graceful degradation with retry logic
🔧 Technical Challenges & Solutions
Challenge 1: Inconsistent Soulseek Metadata
Problem: Filenames like "Track 01.mp3" or "asdjkfh - some song.flac" Solution: Multi-stage extraction using existing TrackResult fields + enhanced parsing
Challenge 2: Remix Track Attribution
Problem: "Song Title (Artist Remix)" should match to remix artist, not original Solution: Regex-based remix detection with artist extraction patterns
Challenge 3: Album vs Playlist Distinction
Problem: User playlists disguised as "albums" with mixed artists Solution: Artist consistency analysis and intelligent categorization
Challenge 4: File Organization Conflicts
Problem: Duplicate files, naming conflicts, atomic operations Solution: Professional file management with backup, rollback, and deduplication
Challenge 5: Spotify API Rate Limits
Problem: Search throttling and request failures Solution: Intelligent caching, request batching, and exponential backoff
⚙️ Configuration & Settings
User Preferences
- Auto-match threshold: Minimum confidence for automatic processing
- Folder naming patterns: Customizable organization schemes
- Transfer location: Default destination directory
- Conflict resolution: Overwrite, rename, or skip duplicate files
- Remix handling: Original artist vs remix artist preference
Advanced Options
- Search aggressiveness: Number of search strategies to attempt
- Metadata sources: Priority order for information extraction
- Quality preferences: File format and bitrate handling
- Cover art download: Album artwork integration
🎯 Success Criteria
Functional Requirements
- 95%+ success rate for popular tracks with clear metadata
- Graceful fallback handling for edge cases
- Sub-3-second matching time for typical searches
- Professional folder organization matching industry standards
- Zero data loss during file operations
User Experience Requirements
- Intuitive interface requiring minimal user training
- Clear progress indication and feedback
- Responsive design that adapts to different screen sizes
- Accessibility compliance for keyboard navigation
- Professional visual design matching existing application theme
Technical Requirements
- Robust error handling with detailed logging
- Atomic file operations with rollback capability
- Efficient memory usage during batch operations
- Integration with existing download queue system
- Maintainable code architecture for future enhancements
Key Components Status
- Configuration Management: ✅ Complete - Secure handling of API keys and service credentials
- Spotify Integration: ✅ Complete - Playlist retrieval and metadata extraction
- Plex Integration: ✅ Complete - Media server synchronization and metadata updates
- Soulseek Integration: ✅ Complete - Full music discovery, download management, and queue functionality
- Download Management: ✅ Complete - Comprehensive download queue with cancel/open functionality
- User Interface: ✅ Complete - Spotify-inspired design with practical, efficient download management
- Matching Engine: ⏳ In Development - Robust algorithms for matching tracks across services
Technical Architecture
Download Management System
- CompactDownloadItem: Efficient 45px height design with conditional layouts
- slskd API Integration: Proper DELETE endpoints with username/download_id parameters
- Album Track Management: State synchronization between album buttons and download queue
- Clear Completed: Backend integration for removing finished downloads from slskd
- Progress Tracking: Real-time updates with percentage display and status monitoring
UI Design Philosophy
- Function over Form: Practical, user-focused design prioritizing usability
- Container Responsive: Optimized for small download queue areas without horizontal scrolling
- Efficient Space Usage: Conditional layouts maximize available space
- Immediate Accessibility: Buttons positioned for quick access without scrolling