# Audio Classifier - TODO Mise à Jour (6 décembre 2024) ## ✅ Ce qui est FAIT (État actuel du projet) ### Infrastructure - ✅ Structure complète backend + frontend - ✅ Docker Compose avec PostgreSQL + pgvector - ✅ Backend Dockerfile (Python 3.9, émulation x86_64 pour Essentia) - ✅ Frontend Dockerfile - ✅ Containers en production (running actuellement) - ✅ .env et .env.example configurés - ✅ Modèles Essentia téléchargés (genre, mood, instrument) ### Backend (Python/FastAPI) - ✅ Structure complète src/ - ✅ Modèles SQLAlchemy (schema.py) avec AudioTrack - ✅ Migrations Alembic fonctionnelles - ✅ CRUD complet (crud.py) - ✅ API FastAPI (main.py) - ✅ Routes implémentées : - ✅ /api/tracks (GET, DELETE) - ✅ /api/search - ✅ /api/audio (stream, download, waveform) - ✅ /api/analyze - ✅ /api/similar - ✅ /api/stats - ✅ Core modules : - ✅ audio_processor.py (Librosa) - ✅ essentia_classifier.py (modèles genre/mood/instruments) - ✅ analyzer.py (orchestrateur) - ✅ file_scanner.py - ✅ waveform_generator.py - ✅ Utils (config, logging, validators) - ✅ CLI scanner fonctionnel ### Frontend (Next.js 14) - ✅ Structure Next.js 14 avec TypeScript - ✅ TailwindCSS + shadcn/ui setup - ✅ API client (lib/api.ts) - ✅ Types TypeScript (lib/types.ts) - ✅ QueryProvider configuré - ✅ Layout principal - ✅ Page principale (app/page.tsx) ### Documentation - ✅ README.md complet - ✅ QUICKSTART.md - ✅ SETUP.md - ✅ STATUS.md - ✅ COMMANDES.md - ✅ DOCKER.md - ✅ ESSENTIA.md - ✅ CORRECTIONS.md - ✅ RESUME.md --- ## 🔧 Ce qui reste À FAIRE ### Phase 1: Finaliser Docker pour Mac ARM #### 1.1 Docker Build Optimization - [ ] **Finir le build Docker backend** (actuellement timeout à 10min) - Build en cours mais très lent (émulation x86_64) - Options : - [ ] Option A : Augmenter timeout et laisser finir (15-20 min estimé) - [ ] Option B : Build natif ARM64 en compilant Essentia depuis sources - [ ] Option C : Utiliser image multi-arch existante (mgoltzsche/essentia-container) - [ ] Tester le container backend une fois buildé - [ ] Vérifier que Essentia fonctionne correctement dans le container - [ ] Documenter temps de build et performances #### 1.2 Docker Compose Validation - [ ] Tester docker-compose up complet - [ ] Vérifier connectivité DB ↔ Backend - [ ] Vérifier connectivité Frontend ↔ Backend - [ ] Tester les 3 services ensemble --- ### Phase 2: Frontend Components (PRIORITAIRE) Le frontend a la structure mais manque les composants UI. **C'est la priorité #1.** #### 2.1 Composants de base manquants - [ ] `components/SearchBar.tsx` - [ ] `components/FilterPanel.tsx` - [ ] `components/TrackCard.tsx` - [ ] `components/TrackDetails.tsx` (Modal) - [ ] `components/AudioPlayer.tsx` - [ ] `components/WaveformDisplay.tsx` - [ ] `components/BatchScanner.tsx` - [ ] `components/SimilarTracks.tsx` #### 2.2 Hooks manquants - [ ] `hooks/useSearch.ts` (recherche avec debounce) - [ ] `hooks/useTracks.ts` (fetch + pagination) - [ ] `hooks/useAudioPlayer.ts` (state audio player) #### 2.3 Pages manquantes - [ ] `app/tracks/[id]/page.tsx` (page détail track) #### 2.4 Installation shadcn components - [ ] Installer composants shadcn manquants : ```bash npx shadcn@latest add button input slider select card dialog badge progress toast dropdown-menu tabs ``` --- ### Phase 3: Tests & Validation #### 3.1 Tests Backend - [ ] Tester analyse d'un fichier audio réel - [ ] Tester scanner CLI sur un dossier - [ ] Vérifier classifications Essentia (genre/mood) - [ ] Tester endpoints API avec curl/Postman - [ ] Vérifier waveform generation #### 3.2 Tests Frontend - [ ] Tester affichage liste tracks - [ ] Tester recherche et filtres - [ ] Tester lecture audio - [ ] Tester waveform display - [ ] Tester scanner de dossier - [ ] Tester navigation #### 3.3 Tests End-to-End - [ ] Flow complet : Scanner dossier → Voir résultats → Jouer track → Chercher similaires - [ ] Tester avec bibliothèque réelle (>100 fichiers) - [ ] Vérifier performances --- ### Phase 4: Optimisations & Polish #### 4.1 Performance - [ ] Optimiser temps de build Docker (si nécessaire) - [ ] Cache waveform peaks - [ ] Optimiser requêtes DB (indexes) - [ ] Lazy loading tracks (pagination infinie) #### 4.2 UX - [ ] Loading skeletons - [ ] Error boundaries - [ ] Toast notifications - [ ] Keyboard shortcuts (espace = play/pause) - [ ] Dark mode support #### 4.3 Backend improvements - [ ] Rate limiting API - [ ] Structured logging - [ ] Error handling middleware - [ ] Health checks détaillés --- ### Phase 5: Features additionnelles (Nice-to-have) #### 5.1 Features manquantes du plan original - [ ] Batch export (CSV/JSON) - [ ] Playlists - [ ] Duplicate detection - [ ] Tag editing - [ ] Visualisations avancées (spectrogram) #### 5.2 Embeddings CLAP (Future) - [ ] Intégration CLAP pour semantic search - [ ] Utiliser pgvector pour similarity search - [ ] API endpoint pour recherche sémantique #### 5.3 Multi-user (Future) - [ ] Authentication JWT - [ ] User management - [ ] Permissions --- ## 🎯 ROADMAP RECOMMANDÉE ### Sprint 1 (Cette semaine) - MINIMUM VIABLE PRODUCT 1. ✅ ~~Finaliser Docker setup~~ 2. **Créer composants frontend de base** (SearchBar, TrackCard, AudioPlayer) 3. **Créer hooks frontend** (useTracks, useAudioPlayer) 4. **Page principale fonctionnelle** avec liste + lecture 5. **Tester flow complet** avec fichiers audio réels ### Sprint 2 (Semaine prochaine) - FEATURES COMPLÈTES 1. Composants avancés (FilterPanel, BatchScanner, SimilarTracks) 2. Page détail track 3. Optimisations performance 4. Polish UX (loading states, errors, toasts) ### Sprint 3 (Après) - POLISH & EXTRAS 1. Dark mode 2. Keyboard shortcuts 3. Export data 4. Documentation finale --- ## 📝 Notes Importantes ### Docker Build sur Mac ARM - **Problème actuel** : Build très lent (10+ min) car Essentia nécessite émulation x86_64 - **Solution actuelle** : `FROM --platform=linux/amd64 python:3.9-slim` dans Dockerfile - **Performance** : Runtime sera aussi émulé (plus lent mais fonctionnel) - **Alternative** : Compiler Essentia pour ARM64 (complexe, long) ### Priorités 1. **Frontend components** → Rendre l'app utilisable 2. **Tests avec vraie data** → Valider que tout fonctionne 3. **Polish UX** → Rendre l'app agréable ### État actuel - ✅ Backend 95% complet et fonctionnel - ⚠️ Frontend 30% complet (structure ok, UI manquante) - ⚠️ Docker 90% (backend build en cours) - ✅ Documentation excellente --- ## 🚀 Commandes Utiles ### Docker ```bash # Build (peut prendre 15-20 min sur Mac ARM) docker-compose build # Démarrer docker-compose up # Logs docker-compose logs -f backend # Scanner un dossier docker exec audio_classifier_api python -m src.cli.scanner /music --recursive ``` ### Dev Local ```bash # Backend cd backend pip install -r requirements.txt uvicorn src.api.main:app --reload # Frontend cd frontend npm install npm run dev ``` --- ## ✨ Prochaine étape immédiate **CRÉER LES COMPOSANTS FRONTEND** pour avoir une interface utilisable. Ordre suggéré : 1. TrackCard (afficher les tracks) 2. AudioPlayer (jouer les tracks) 3. SearchBar + FilterPanel (recherche) 4. BatchScanner (scanner des dossiers) 5. TrackDetails + SimilarTracks (features avancées)