- Migrated monolithic main.py to feature-scoped routers in app/routers/ - Added GEMINI.md for project context and AI instructional guidelines - Updated README.md with a comprehensive modernization plan (SQL migration, robust scraping DSL, frontend modernization) - Improved authentication with cookie support and modular JS - Updated test suite and documentation
12 KiB
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
# 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
-
Onglet Accueil :
- Dernières sorties anime et séries populaires
- Recommandations personnalisées
-
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
-
Onglet Séries :
- Recherchez des séries TV (Breaking Bad, Game of Thrones, etc.)
- Téléchargez des épisodes
-
Onglet Providers :
- Liste des hébergeurs de fichiers disponibles
-
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 :
curl "http://localhost:3000/api/anime/search?q=frieren&lang=vostfr"
Ajouter à la watchlist :
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 !
- Fork le projet
- Créez une branche (
git checkout -b feature/AmazingFeature) - Commit (
git commit -m 'Add some AmazingFeature') - Push (
git push origin feature/AmazingFeature) - 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.
- Tables :
- 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.ymlincluant App, Redis (cache), PostgreSQL et Playwright. - Journalisation Structurée : Remplacer les
printpar 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