# Dépendances du projet

## Backend Python (requirements.txt)

### Web Framework
- `fastapi==0.109.0` - Framework web moderne
- `uvicorn[standard]==0.27.0` - Serveur ASGI
- `python-multipart==0.0.6` - Support formulaires multipart

### Database
- `sqlalchemy==2.0.25` - ORM
- `psycopg2-binary==2.9.9` - Driver PostgreSQL
- `pgvector==0.2.4` - Extension vecteurs PostgreSQL
- `alembic==1.13.1` - Migrations de base de données

### Audio Processing
- `librosa==0.10.1` - Analyse audio
- `soundfile==0.12.1` - Lecture/écriture fichiers audio
- `audioread==3.0.1` - Décodage formats audio
- `mutagen==1.47.0` - Métadonnées ID3

### Machine Learning
- `essentia-tensorflow` - Classification genre/mood/instruments (installé via Dockerfile)
- `numpy==1.24.3` - Calcul numérique
- `scipy==1.11.4` - Calcul scientifique

### Configuration & Validation
- `pydantic==2.5.3` - Validation de données
- `pydantic-settings==2.1.0` - Configuration via env vars
- `python-dotenv==1.0.0` - Chargement fichier .env
- `email-validator==2.1.0` - Validation emails (requis par Pydantic EmailStr)

### Authentication
- `python-jose[cryptography]==3.3.0` - JWT tokens
- `passlib[bcrypt]==1.7.4` - Hashing passwords

### Utilities
- `aiofiles==23.2.1` - I/O fichiers asynchrones
- `httpx==0.26.0` - Client HTTP asynchrone

## Dépendances Système (Dockerfile)

### Requis pour le backend
```bash
apt-get install -y \
    ffmpeg              # Transcodage audio (MP3, etc.)
    libsndfile1         # Lecture formats audio
    gcc g++ gfortran    # Compilation packages Python
    libopenblas-dev     # Algèbre linéaire optimisée
    liblapack-dev       # Routines algèbre linéaire
    libfftw3-dev        # Transformées de Fourier rapides
    libavcodec-dev      # Codecs audio/vidéo
    libavformat-dev     # Formats conteneurs
    libavutil-dev       # Utilitaires FFmpeg
    libswresample-dev   # Resampling audio
    libsamplerate0-dev  # Conversion taux d'échantillonnage
    libtag1-dev         # Métadonnées audio
    libchromaprint-dev  # Audio fingerprinting
```

## Frontend (package.json)

### Framework
- `next@15.5.6` - Framework React
- `react@19.0.0` - Bibliothèque UI
- `react-dom@19.0.0` - Rendu React

### State Management & Data Fetching
- `@tanstack/react-query@5.62.11` - Gestion état serveur
- `axios@1.7.9` - Client HTTP

### UI & Styling
- `tailwindcss@3.4.17` - Framework CSS utility-first

### Types
- `typescript@5.7.2` - Typage statique
- `@types/react@19.0.1`
- `@types/node@22.10.1`

## Modèles Essentia (inclus dans le repo)

Total: ~28 MB

- `discogs-effnet-bs64-1.pb` (18 MB) - Modèle d'embedding
- `genre_discogs400-discogs-effnet-1.pb` (2 MB) - Classification genre
- `genre_discogs400-discogs-effnet-1.json` (15 KB) - Métadonnées genres
- `mtg_jamendo_moodtheme-discogs-effnet-1.pb` (2.6 MB) - Classification mood
- `mtg_jamendo_instrument-discogs-effnet-1.pb` (2.6 MB) - Classification instruments
- `mtg_jamendo_genre-discogs-effnet-1.pb` (2.7 MB) - Classification genre (alternatif)

## Vérification des dépendances

### Backend
```bash
cd backend
python check_dependencies.py
```

### Build Docker
```bash
# Backend
docker build -t audio-classifier-backend -f backend/Dockerfile .

# Frontend
docker build -t audio-classifier-frontend -f frontend/Dockerfile .
```

## Notes de compatibilité

- **Python**: 3.9 (requis pour essentia-tensorflow)
- **Architecture**: amd64 (meilleure compatibilité Essentia)
- **Node.js**: 20+ (pour Next.js 15)
- **PostgreSQL**: 16+ avec extension pgvector

## Installation locale

### Backend
```bash
cd backend
python -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate
pip install -r requirements.txt
pip install essentia-tensorflow
```

### Frontend
```bash
cd frontend
npm install
```

## Variables d'environnement requises

Voir `.env.example` pour la liste complète des variables nécessaires.

### Critiques
- `DATABASE_URL` - Connexion PostgreSQL
- `ADMIN_EMAIL` - Email admin
- `ADMIN_PASSWORD` - Mot de passe admin
- `JWT_SECRET_KEY` - Secret pour JWT (générer avec `openssl rand -hex 32`)
