265 lines
7.2 KiB
Markdown
265 lines
7.2 KiB
Markdown
# 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)
|