- Ajout provider Zone-Telechargement (séries) - Section Authentification (JWT, refresh tokens) - Section Favoris & Recommandations - Section Paramètres (désactivation providers, UI settings, Sonarr) - Tableau état des providers (vérifié Avril 2026) - Tableau des endpoints API principaux (~40 endpoints) - Section Problèmes Connus (Smoothpre, Sibnet, Anime-Ultime, watchlist_settings) - Dépendance manquante: pydantic[email] - Avertissement CORS_ORIGINS dans .env - Structure détaillée des downloaders - Points d'accès documentés (web, docs, login)
9.5 KiB
Ohm Stream Downloader
Application web complète pour rechercher, streamer et télécharger des animes, séries TV et films.
Interface moderne (SPA-like) avec recherche unifiée, watchlist automatique, métadonnées enrichies, téléchargements parallèles et intégration Sonarr. Propulsée par FastAPI, SQLModel et une interface dynamique HTMX/Alpine.js.
✨ Fonctionnalités
🎬 Recherche & Streaming
- Recherche unifiée : Recherchez animes et séries TV simultanément via plusieurs sources.
- Providers Anime : Anime-Sama, Neko-Sama, Anime-Ultime, Vostfree, French-Manga.
- Providers Séries : FS7 (French-Stream), Zone-Telechargement.
- Métadonnées riches : Synopsis, genres, notes, studio via intégration Kitsu/MAL.
- Streaming vidéo : Lecteur Plyr.io intégré supportant plus de 15 hébergeurs.
- Téléchargement flexible : Épisode par épisode ou saison complète.
🔐 Authentification
- Inscription / Connexion : Système JWT avec tokens d'accès et de refresh.
- Sécurité : Clé secrète configurable, tokens expirables (24h access, 30j refresh).
📋 Watchlist & Automatisation
- Suivi intelligent : Ajoutez des titres à votre watchlist pour ne rater aucun épisode.
- Auto-Download : Téléchargement automatique des nouveaux épisodes dès leur parution.
- Planificateur (Scheduler) : Vérification périodique configurable (1h à 168h).
- Filtres avancés : Visualisation par statut (Actif, En pause, Terminé).
- Intégration Sonarr : Support des webhooks pour une automatisation complète du homelab.
⭐ Favoris & Recommandations
- Favoris : Sauvegardez vos animes préférés avec tri et filtres.
- Recommandations : Suggestions basées sur les tendances et sorties récentes.
- Sorties saisonnières : Suivi des sorties anime (top, latest, seasonal).
🚀 Gestionnaire de Téléchargements
- Multi-threading : Jusqu'à 5 téléchargements simultanés avec gestion de file d'attente.
- Pause/Reprise : Support du protocole HTTP Range pour reprendre les téléchargements interrompus.
- Progression Temps Réel : Vitesse (Mo/s), pourcentage et estimation du temps restant.
- Sanitisation : Nettoyage automatique des noms de fichiers pour une compatibilité maximale.
⚙️ Paramètres
- Désactivation de providers : Activez/désactivez les sources individuellement.
- UI Settings : Configuration de l'interface utilisateur.
- Sonarr Config : Configuration de l'intégration Sonarr avec mapping de séries.
🏗️ Architecture & Stack Technique
L'application repose sur une architecture moderne et robuste :
- Backend : Python 3.11+, FastAPI pour l'API asynchrone.
- Base de Données : SQLModel (SQLAlchemy + Pydantic) avec SQLite.
- Migrations : Alembic pour la gestion évolutive du schéma de données.
- Frontend : HTMX pour les interactions serveur, Alpine.js pour l'état client, Vanilla CSS.
- Streaming : Plyr.io pour une expérience de lecture fluide et moderne.
- Authentification : JWT via python-jose + passlib/bcrypt.
📁 Hébergeurs Supportés
| Type | Services Supportés |
|---|---|
| Catalogues Anime | Anime-Sama, Neko-Sama, Anime-Ultime, Vostfree, French-Manga |
| Catalogues Séries | FS7 (French-Stream), Zone-Telechargement |
| Players/Hosts | VidMoly, DoodStream, 1fichier, Uptobox, SendVid, Sibnet, Lplayer, Uqload, Rapidfile, LuLuvid, Smoothpre, Vidzy, OneUpload |
📊 État des Providers
| Provider | Type | Status |
|---|---|---|
| Anime-Sama | Anime | ✅ UP |
| Neko-Sama | Anime | ✅ UP |
| Anime-Ultime | Anime | ✅ UP |
| Vostfree | Anime | ✅ UP |
| French-Manga | Anime | ✅ UP |
| FS7 | Séries | ✅ UP |
| Zone-Telechargement | Séries | ✅ UP |
Dernière vérification : Avril 2026
🚀 Installation & Configuration
1. Prérequis
- Python 3.11+
- Node.js (pour les tests optionnels uniquement)
- Playwright (requis pour l'extraction de certains lecteurs comme VidMoly)
2. Installation
# Cloner le repository
git clone https://git.lanro.eu/Roman/ohm_streaming.git
cd ohm_streaming
# Créer et activer l'environnement virtuel
python3 -m venv venv
source venv/bin/activate
# Installer les dépendances
pip install -r requirements.txt
pip install pydantic[email] # Requis pour la validation des emails
# Initialisation Playwright (optionnel, pour l'extraction VidMoly)
playwright install chromium
3. Configuration
Créez un fichier .env à la racine du projet à partir du modèle :
cp .env.example .env
Générez une clé secrète JWT sécurisée (obligatoire, min. 32 caractères) :
python3 -c "import secrets; print(secrets.token_urlsafe(32))"
Editez le .env et ajoutez :
JWT_SECRET_KEY=<la_clé_générée_ci_dessus>
⚠️ Ne pas définir
CORS_ORIGINSdans le.envsi vous utilisez les valeurs par défaut (format JSON requis, les valeurs par défaut du code suffisent).
4. Lancement
# Lancer l'application (Port 3000 par défaut)
source venv/bin/activate
uvicorn main:app --reload --host 0.0.0.0 --port 3000
Ou via le script fourni :
./run_app.sh
Points d'accès :
- Interface web :
http://localhost:3000/web - Documentation API :
http://localhost:3000/docs - Page de connexion :
http://localhost:3000/login
🧪 Tests & Qualité
# Backend (Pytest)
pytest # Tous les tests
pytest -m "unit" # Tests unitaires rapides
# Frontend (Vitest & Playwright)
npm install # Installer les dépendances dev
npm test # Tests unitaires JS (Vitest)
npx playwright test # Tests E2E complets
🏗️ Structure du Projet
ohm_streaming/
├── main.py # Point d'entrée & Middleware FastAPI
├── app/
│ ├── downloaders/ # Logique d'extraction (Scraping multi-tier)
│ │ ├── anime_sama.py # Downloader Anime-Sama
│ │ ├── anime_ultime.py # Downloader Anime-Ultime
│ │ ├── neko_sama.py # Downloader Neko-Sama
│ │ ├── vostfree.py # Downloader Vostfree
│ │ ├── french_manga.py # Downloader French-Manga
│ │ ├── fs7.py # Downloader FS7
│ │ └── zone_telechargement.py # Downloader Zone-TG
│ ├── models/ # Modèles SQLModel & Pydantic
│ ├── routers/ # Routes API modulaires (~40 endpoints)
│ ├── download_manager.py # Moteur de téléchargement asynchrone
│ ├── watchlist.py # Logique métier du suivi
│ ├── episode_checker.py # Vérification automatique de nouveaux épisodes
│ ├── auto_download_scheduler.py # Planificateur de téléchargements
│ ├── sonarr_handler.py # Intégration Sonarr
│ ├── metadata_enrichment.py # Enrichissement des métadonnées (Kitsu/MAL)
│ ├── recommendations.py # Système de recommandations
│ ├── providers_manager.py # Gestion des providers (health check, activation)
│ └── database.py # Configuration de la base de données
├── config/ # Fichiers de configuration (Sonarr, mappings)
├── alembic/ # Migrations de base de données
├── static/ # Frontend (JS, CSS, Images)
├── templates/ # Vues Jinja2 (avec HTMX & Alpine.js)
├── tests/ # Tests backend
├── scripts/ # Scripts utilitaires
└── downloads/ # Répertoire par défaut des médias
🔧 Endpoints API Principaux
| Endpoint | Méthode | Description |
|---|---|---|
/api/auth/register |
POST | Création de compte |
/api/auth/login |
POST | Connexion (JWT) |
/api/auth/me |
GET | Profil utilisateur |
/api/anime/search?q= |
GET | Recherche multi-providers |
/api/series/search?q= |
GET | Recherche séries |
/api/anime/seasons?url= |
GET | Liste des saisons |
/api/anime/episodes?url= |
GET | Liste des épisodes |
/api/anime/download?url= |
POST | Lancer un téléchargement |
/api/anime/download-season?url= |
POST | Télécharger une saison complète |
/api/downloads |
GET | Liste des téléchargements |
/api/favorites |
GET | Liste des favoris |
/api/watchlist |
GET | Liste de la watchlist |
/api/providers/health |
GET | État des providers |
/api/settings |
GET | Configuration |
/api/sonarr/config |
GET/POST | Configuration Sonarr |
🐛 Problèmes Connus
- Smoothpre : L'extracteur de liens vidéo peut échouer si la structure de la page change côté serveur.
- Sibnet filename : Le nom de fichier généré peut contenir des caractères invalides issus de l'URL (à corriger dans la sanitisation du DownloadManager).
- Anime-Ultime download : La méthode
get_download_link()a une incompatibilité de signature lors de l'appel par le routeur de téléchargement. - Table watchlist_settings : La table SQLite n'est pas créée automatiquement au premier lancement (affiche un warning dans les logs mais n'empêche pas le fonctionnement).
📝 Licence & Sécurité
- Ce projet est à usage éducatif et personnel uniquement.
- Respectez les droits d'auteur et les conditions d'utilisation des sites sources.
- L'utilisation de ce logiciel est sous votre entière responsabilité.
Version actuelle : 2.4 Dernière mise à jour : Avril 2026 Développé avec ❤️ pour la communauté anime