root 5c7116557d
CI / Test (Python 3.11) (push) Has been cancelled
CI / Test (Python 3.12) (push) Has been cancelled
CI / Lint (push) Has been cancelled
CI / Type Check (push) Has been cancelled
CI / Summary (push) Has been cancelled
feat: frontend modernization with HTMX, Alpine.js and Plyr (Phase 3)
- Integrated HTMX for server-driven UI updates and fragments
- Adopted Alpine.js for global reactive state and tab management
- Replaced legacy player with Plyr.io for premium streaming experience
- Implemented real-time download polling via HTMX
- Added server-sent Toast notification system
- Fixed navigation and authentication scoping issues
2026-03-24 11:10:22 +00:00
2026-03-06 21:17:54 +00:00

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

  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 :

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 !

  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

S
Description
No description provided
Readme 8.2 MiB
Languages
Python 75.8%
HTML 10.6%
JavaScript 8.7%
TypeScript 2.5%
CSS 2.3%