# 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*