# Ohm Stream Downloader

**Application web complète pour télécharger des animes, séries TV et fichiers depuis divers hébergeurs.**

Interface moderne avec recherche unifiée, watchlist automatique, métadonnées enrichies, téléchargements parallèles et streaming vidéo.

## ✨ Fonctionnalités

### 🎬 Recherche d'Animes & Séries TV
- **Recherche unifiée** : Recherchez animes et séries TV simultanément
- **Providers Anime** : Anime-Sama, Neko-Sama, Anime-Ultime, Vostfree, French-Manga
- **Providers Séries** : FS7 (French-Stream)
- **Métadonnées riches** : Synopsis, genres, notes, année de sortie, studio, nombre d'épisodes
- **Téléchargement par épisode** : Sélectionnez et téléchargez des épisodes individuels
- **Téléchargement de saison complète** : Téléchargez tous les épisodes d'un coup
- **Streaming vidéo** : Regardez vos animes directement dans le navigateur
- **Recherche floue** : Gestion des fautes de frappe et variations de noms

### 📋 Watchlist (Suivi Automatique)
- **Ajout à la watchlist** : Suivez vos animes préférés depuis la recherche
- **Téléchargement automatique** : Télécharge tous les épisodes dès le suivi
- **Vérification automatique** : Le planificateur vérifie les nouveaux épisodes automatiquement
- **Intervalle configurable** : Paramétrez la fréquence de vérification (1-168 heures)
- **Notifications** : Recevez des alertes pour les nouveaux épisodes
- **Filtres** : Visualisez tous / actifs / en pause / terminés
- **Contrôle granulaire** : Pausez, reprenez, vérifiez manuellement chaque anime

### 📁 Hébergeurs de Fichiers Supportés
- **1fichier** (1fichier.com, 1fichier.fr)
- **Uptobox** (uptobox.com, uptobox.fr)
- **Doodstream** (doodstream.com, dood.to, dood.lol, etc.)
- **Rapidfile** (rapidfile.net, rapidfile.com)
- **Uqload** (uqload.co, uqload.io)
- **OneUpload** (oneupload.co)
- **SendVid** (sendvid.com)
- **VidZ** (vidzi.tv)

### 🎥 Hébergeurs Vidéo Supportés
- **VidMoly** (vidmoly.to, vidmoly.com)
- **SendVid** (sendvid.com)
- **DoodStream** (doodstream.com)
- **LPlayer** (lplayer.net)
- **VidZy** (vidzy.tv)

### 🚀 Gestion des Téléchargements
- **Téléchargements parallèles** : Hasta 5 téléchargements simultanés
- **Pause/Reprise** : Contrôle total sur vos téléchargements
- **Progression en temps réel** : Vitesse, progression, taille
- **Reprise automatique** : Support des HTTP Range pour reprendre les téléchargements interrompus

### 🌐 Interface Web
- **Design moderne** : Interface sombre avec onglets
- **5 onglets** : Accueil, Recherche, Séries, Providers, Watchlist
- **Responsive** : Fonctionne sur desktop et mobile
- **Mise à jour automatique** : Rafraîchissement automatique du contenu
- **Métadonnées visuelles** : Affichage des informations anime avec icônes

### 🔌 API REST
- **Endpoints REST** : Intégration facile avec d'autres applications
- **Documentation automatique** : Swagger UI disponible

## 📋 Configuration Requise

- Python 3.8+
- pip

## 🚀 Installation

```bash
# Cloner le repository
git clone https://git.lanro.eu/Roman/ohm_streaming.git
cd ohm_streaming

# Créer l'environnement virtuel
python3 -m venv venv
source venv/bin/activate  # Windows: venv\Scripts\activate

# Installer les dépendances
pip install -r requirements.txt

# Lancer le serveur de développement
uvicorn main:app --reload --host 0.0.0.0 --port 3000
```

Accédez à l'interface : http://localhost:3000/web

## 📖 Utilisation

### Interface Web

1. **Onglet Accueil** :
   - Dernières sorties anime et séries populaires
   - Recommandations personnalisées

2. **Onglet Recherche** :
   - Entrez le nom d'un anime (ex: "Naruto", "Frieren")
   - Sélectionnez la langue (VOSTFR ou VF)
   - Cliquez sur "Rechercher"
   - Sélectionnez un épisode et cliquez sur "Télécharger"
   - Ou utilisez "Toute la saison" pour tout télécharger
   - Cliquez sur "➕ Suivre" pour ajouter à la watchlist

3. **Onglet Séries** :
   - Recherchez des séries TV (Breaking Bad, Game of Thrones, etc.)
   - Téléchargez des épisodes

4. **Onglet Providers** :
   - Liste des hébergeurs de fichiers disponibles

5. **Onglet Watchlist** :
   - Visualisez vos animes suivis
   - Contrôlez le planificateur automatique
   - Paramétrez l'intervalle de vérification
   - Filtrez par statut (tous, actifs, en pause, terminés)

### API Endpoints

#### Authentication
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| POST | `/api/auth/register` | Créer un compte |
| POST | `/api/auth/login` | Connexion (JWT) |
| GET | `/api/auth/me` | Profil utilisateur |

#### Téléchargements
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| POST | `/api/download` | Créer un nouveau téléchargement |
| GET | `/api/downloads` | Lister tous les téléchargements |
| GET | `/api/download/{task_id}` | Statut d'un téléchargement |
| POST | `/api/download/{task_id}/pause` | Mettre en pause |
| POST | `/api/download/{task_id}/resume` | Reprendre |
| DELETE | `/api/download/{task_id}` | Annuler/Supprimer |
| GET | `/api/download/{task_id}/file` | Télécharger le fichier terminé |

#### Anime
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| GET | `/api/anime/search` | Rechercher un anime |
| GET | `/api/anime/metadata` | Obtenir les métadonnées |
| GET | `/api/anime/episodes` | Liste des épisodes |
| POST | `/api/anime/download` | Télécharger un épisode |
| POST | `/api/anime/download-season` | Télécharger toute une saison |

#### Watchlist
| Méthode | Endpoint | Description |
|---------|----------|-------------|
| GET | `/api/watchlist` | Liste des animes suivis |
| POST | `/api/watchlist` | Ajouter à la watchlist |
| DELETE | `/api/watchlist/{item_id}` | Supprimer de la watchlist |
| POST | `/api/watchlist/check-all` | Vérifier tous les animes |
| GET | `/api/watchlist/settings` | Paramètres |
| PUT | `/api/watchlist/settings` | Mettre à jour les paramètres |

### Exemples API

**Rechercher un anime :**
```bash
curl "http://localhost:3000/api/anime/search?q=frieren&lang=vostfr"
```

**Ajouter à la watchlist :**
```bash
curl -X POST http://localhost:3000/api/watchlist \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"anime_title": "Frieren", "anime_url": "https://anime-sama.si/catalogue/frieren/saison1/vostfr/", "provider_id": "animesama", "lang": "vostfr"}'
```

## 🏗️ Structure du Projet

```
Ohm_streaming/
├── main.py                      # Application FastAPI & endpoints API
├── app/
│   ├── models/                  # Modèles Pydantic
│   ├── downloaders/             # Downloaders par provider
│   │   ├── anime_sites/       # Providers anime
│   │   └── series_sites/       # Providers séries
│   ├── providers.py            # Configuration des providers
│   ├── download_manager.py     # Gestionnaire de file d'attente
│   ├── watchlist.py            # Gestion de la watchlist
│   ├── episode_checker.py      # Vérification des nouveaux épisodes
│   └── auto_download_scheduler.py # Planificateur automatique
├── templates/                   # Templates HTML
│   ├── index.html              # Interface web principale
│   └── components/             # Composants réutilisables
├── static/                     # Fichiers statiques (CSS, JS)
└── requirements.txt            # Dépendances Python
```

## ⚙️ Configuration

Les paramètres peuvent être configurés via variables d'environnement ou fichier `.env` :

```
JWT_SECRET_KEY=votre-clé-secrète
DOWNLOAD_DIR=downloads
MAX_PARALLEL_DOWNLOADS=5
```

## 🔧 Ajouter un Provider

Voir la documentation dans le code source pour ajouter de nouveaux providers.

## 🤝 Contribution

Les contributions sont les bienvenues !

1. Fork le projet
2. Créez une branche (`git checkout -b feature/AmazingFeature`)
3. Commit (`git commit -m 'Add some AmazingFeature'`)
4. Push (`git push origin feature/AmazingFeature`)
5. Ouvrez une Pull Request

## 🗺️ Plan d'Évolution Global (Modernisation)

Ce plan détaille les étapes nécessaires pour transformer Ohm Stream Downloader en une application de production robuste, sécurisée et évolutive.

### Phase 1 : Consolidation de la Donnée (Fondation)
*Objectif : Remplacer les fichiers JSON par une base de données relationnelle.*
- **Migration SQL** : Utiliser **SQLModel** (SQLAlchemy + Pydantic) pour gérer la persistance.
  - Tables : `users`, `watchlist`, `tasks`, `favorites`, `settings`.
- **Gestion des Migrations** : Mettre en place **Alembic** pour suivre l'évolution du schéma sans perte de données.
- **Support Multi-base** : Configurer SQLite par défaut et PostgreSQL pour les déploiements avancés.

### Phase 2 : Robustesse du Scraping (Cœur Technique)
*Objectif : Rendre l'extraction de données résiliente aux changements des sites tiers.*
- **Abstraction DSL (Domain Specific Language)** : Déporter les sélecteurs CSS et Regex dans des fichiers **YAML/JSON**.
  - Permet de mettre à jour un provider sans modifier le code Python.
- **Découplage des Métadonnées** : Utiliser exclusivement les API de **Kitsu**, **Anilist** ou **MyAnimeList** pour les fiches d'animes.
  - Le scraping ne sert plus qu'à récupérer les flux vidéo.
- **Health Checks Automatisés** : Script quotidien vérifiant que chaque provider répond toujours correctement (alerte en cas d'échec).
- **Service Playwright (Headless)** : Intégrer un service optionnel pour scraper les sites protégés par Cloudflare ou du JS complexe.
- **Résolution de Domaines (Auto-Mirrors)** : Détection automatique des changements de domaine (.si, .co, .pw) via DNS-over-HTTPS.

### Phase 3 : Modernisation du Frontend (UX & Maintenance)
*Objectif : Simplifier le code JS et améliorer l'expérience utilisateur.*
- **Adoption de HTMX/Alpine.js** : Réduire la complexité du Vanilla JS en utilisant **HTMX** pour les mises à jour partielles (DOM diffing) et **Alpine.js** pour la réactivité légère.
- **Lecteur Vidéo Professionnel** : Intégrer **Plyr** ou **Video.js** pour supporter :
  - Les sous-titres (.srt, .vtt).
  - La gestion avancée du cache et du buffering.
  - Une interface personnalisée et responsive.
- **Système de Toasts & Notifications** : Alertes visuelles pour la progression des tâches et les nouveaux épisodes détectés.
- **Design "Mobile First"** : Optimisation complète des CSS pour une utilisation fluide sur smartphone (PWA).

### Phase 4 : Sécurité et DevOps (Professionnalisation)
*Objectif : Sécuriser les accès et faciliter le déploiement.*
- **Dockerisation Complète** : `docker-compose.yml` incluant App, Redis (cache), PostgreSQL et Playwright.
- **Journalisation Structurée** : Remplacer les `print` par un logger structuré (ex: `structlog`) avec rotation des logs.
- **Rate Limiting** : Protection des endpoints API contre le brute-force et le spam de recherche.
- **Gestion Stricte des Secrets** : Validation rigoureuse des variables d'environnement et suppression des IPs codées en dur (CORS).

### Phase 5 : Nouvelles Fonctionnalités (Valeur Ajoutée)
*Objectif : Étendre les capacités du service.*
- **Transcodage à la volée** : Option FFmpeg pour convertir les .mkv incompatibles vers .mp4.
- **Bot de Notification** : Intégration Telegram/Discord pour être alerté dès qu'un épisode de la watchlist est téléchargé.
- **Multi-Utilisateurs Réel** : Bibliothèques et historiques de lecture totalement isolés par compte.
- **Support des Sous-titres Externes** : Upload de fichiers de sous-titres personnalisés pour le streaming.

## 📝 Licence

Ce projet est à usage éducatif uniquement. Respectez les droits d'auteur et les lois locales.

## ⚠️ Avertissement

Ce logiciel est destiné à un usage personnel et éducatif. Les utilisateurs sont responsables de vérifier qu'ils ont le droit de télécharger du contenu protégé par des droits d'auteur dans leur juridiction.

---

**Développé avec ❤️ pour la communauté anime**

*Version actuelle : 2.2*
*Dernière mise à jour : Février 2026*
