# 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 ```bash # 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 : ```bash cp .env.example .env ``` **Générez une clé secrète JWT sécurisée** (obligatoire, min. 32 caractères) : ```bash python3 -c "import secrets; print(secrets.token_urlsafe(32))" ``` Editez le `.env` et ajoutez : ```env JWT_SECRET_KEY= ``` > ⚠️ **Ne pas** définir `CORS_ORIGINS` dans le `.env` si vous utilisez les valeurs par défaut (format JSON requis, les valeurs par défaut du code suffisent). ### 4. Lancement ```bash # 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 : ```bash ./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é ```bash # 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**