Files
ohm_streaming/README.md
T
root 1fe7392063 feat: Complete Sonarr integration with security enhancements
This commit adds comprehensive Sonarr webhook integration and implements
critical security improvements identified in code review.

## Sonarr Integration
- Full webhook support for Grab, Download, Rename, Delete, and Test events
- HMAC SHA256 signature verification for webhook authentication
- Series mapping system (Sonarr TVDB ID → Anime Provider URL)
- 11 new API endpoints for configuration, mappings, search, and downloads
- Comprehensive test suite (31 tests, all passing)
- Complete documentation in docs/SONARR_INTEGRATION.md

## Security Enhancements
- CORS restricted to specific origins (user's IP: 192.168.1.204:3000)
- Path traversal prevention via sanitize_filename() and is_safe_filename()
- Structured logging infrastructure (replaced all print() statements)
- Environment-based configuration with .env support
- Filename sanitization prevents malicious path attacks

## New Features
- Lpayer and Sibnet downloader support
- Kitsu API integration for anime metadata
- Recommendation engine based on download history
- Latest releases endpoint for new anime
- Modular web interface with component-based templates

## Configuration
- Centralized settings via app/config.py with pydantic-settings
- Sonarr config auto-created in config/ directory
- Example configurations provided for easy setup

## Tests
- 31 Sonarr integration tests (23 functionality + 9 security)
- 100+ tests passing in core test files
- Security utilities fully tested

## Documentation
- Updated CLAUDE.md with Sonarr and testing info
- Added IMPROVEMENTS_2024-01-24.md analysis
- Added SONARR_IMPLEMENTATION.md technical summary

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-24 21:25:47 +00:00

15 KiB

Ohm Stream Downloader

Application web complète pour télécharger des animes et fichiers depuis divers hébergeurs.

Interface moderne avec recherche d'anime, métadonnées enrichies, téléchargements parallèles et streaming vidéo.

Fonctionnalités

🎬 Recherche et Téléchargement d'Animes

  • Recherche unifiée : Recherchez sur 4 providers simultanément (Anime-Sama, Neko-Sama, Anime-Ultime, Vostfree)
  • Métadonnées riches : Synopsis, genres, notes, année de sortie, studio, nombre d'épisodes, statut
  • 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

📁 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)

🎥 Hébergeurs Vidéo Supportés

  • VidMoly (vidmoly.to, vidmoly.com)
  • SendVid (sendvid.com)

🚀 Gestion des Téléchargements

  • Téléchargements parallèles : Jusqu'à 3 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 gradients et animations
  • Responsive : Fonctionne sur desktop et mobile
  • Mise à jour automatique : Rafraîchissement chaque seconde
  • 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://github.com/votre-user/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 Recherche d'Anime :

    • Entrez le nom d'un anime (ex: "Naruto", "One Piece")
    • Sélectionnez la langue (VOSTFR ou VF)
    • Cochez "Inclure les métadonnées" pour plus d'informations
    • Cliquez sur "Rechercher"
    • Sélectionnez un épisode et cliquez sur "Télécharger"
    • Ou utilisez "Toute la saison" pour tout télécharger
  2. Onglet Lien Direct :

    • Collez un lien de téléchargement direct
    • Cliquez sur "Télécharger"
  3. Onglet Providers :

    • Utilisez les onglets spécifiques à chaque provider
    • Chaque onglet a ses propres options de recherche

API Endpoints

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 (paramètres: q, lang, include_metadata)
GET /api/anime/metadata Obtenir les métadonnées d'un anime (paramètre: url)
GET /api/anime/episodes Liste des épisodes d'un anime (paramètres: url, lang)
POST /api/anime/download Télécharger un épisode
POST /api/anime/download-season Télécharger toute une saison

Streaming Vidéo

Méthode Endpoint Description
GET /video/{task_id} Stream une vidéo (support Range/seeking)
GET /stream/{filename} Stream par nom de fichier
GET /player/{task_id} Lecteur vidéo pour un téléchargement
GET /watch/{filename} Lecteur vidéo par nom de fichier

Système

Méthode Endpoint Description
GET / Informations sur l'API
GET /api/providers Liste des providers supportés
GET /health Vérifier l'état du serveur
GET /web Interface web

Exemples API

Rechercher un anime avec métadonnées :

curl "http://localhost:3000/api/anime/search?q=naruto&lang=vostfr&include_metadata=true"

Obtenir les épisodes d'un anime :

curl "http://localhost:3000/api/anime/episodes?url=https://anime-sama.si/catalogue/naruto/saison1/vostfr/&lang=vostfr"

Télécharger une saison complète :

curl -X POST "http://localhost:3000/api/anime/download-season?url=https://anime-sama.si/catalogue/naruto/saison1/vostfr/&lang=vostfr"

Créer un téléchargement direct :

curl -X POST http://localhost:3000/api/download \
  -H "Content-Type: application/json" \
  -d '{"url": "https://1fichier.com/?xxxxx"}'

🏗️ Structure du Projet

Ohm_streaming/
├── main.py                      # Application FastAPI & endpoints API
├── app/
│   ├── models/                  # Modèles Pydantic
│   │   └── __init__.py         # DownloadTask, AnimeMetadata, etc.
│   ├── downloaders/             # Downloaders par provider
│   │   ├── base.py              # Classe BaseDownloader
│   │   ├── animesama.py         # Anime-Sama (avec métadonnées)
│   │   ├── animeultime.py       # Anime-Ultime (avec métadonnées)
│   │   ├── nekosama.py          # Neko-Sama (avec métadonnées)
│   │   ├── vostfree.py          # Vostfree (avec métadonnées)
│   │   ├── unfichier.py         # 1fichier
│   │   ├── uptobox.py           # Uptobox
│   │   ├── doodstream.py        # Doodstream
│   │   ├── rapidfile.py         # Rapidfile
│   │   ├── vidmoly.py           # VidMoly
│   │   ├── sendvid.py           # SendVid
│   │   └── __init__.py          # Registry des downloaders
│   ├── providers.py             # Configuration des providers
│   └── download_manager.py      # Gestionnaire de file d'attente
├── downloads/                   # Fichiers téléchargés
├── templates/
│   ├── index.html               # Interface web principale
│   └── player.html              # Lecteur vidéo
├── static/                      # Fichiers statiques (CSS, JS, images)
└── requirements.txt             # Dépendances Python

⚙️ Configuration

Modifiez ces paramètres dans main.py :

download_manager = DownloadManager(
    download_dir="downloads",  # Répertoire de stockage
    max_parallel=3              # Téléchargements simultanés
)

🔧 Ajouter un Provider

Ajouter un Hébergeur de Fichiers

  1. Créez app/downloaders/myhost.py :
from .base import BaseDownloader
from bs4 import BeautifulSoup

class MyHostDownloader(BaseDownloader):
    def can_handle(self, url: str) -> bool:
        return "myhost.com" in url.lower()

    async def get_download_link(self, url: str) -> tuple[str, str]:
        # Extraire le lien de téléchargement direct
        response = await self.client.get(url)
        soup = BeautifulSoup(response.text, 'lxml')
        # ... logique d'extraction ...
        return download_url, filename
  1. Ajoutez-le dans app/providers.py :
FILE_HOSTS = {
    # ...
    "myhost": {
        "name": "MyHost",
        "domains": ["myhost.com"],
        "icon": "📁",
        "color": "#4ecdc4"
    }
}

Ajouter un Provider Anime avec Métadonnées

  1. Créez le downloader avec les méthodes requises :
class MyAnimeDownloader(BaseDownloader):
    async def search_anime(self, query: str, lang: str = "vostfr", include_metadata: bool = False):
        # Implémenter la recherche

    async def get_anime_metadata(self, anime_url: str) -> dict:
        # Extraire: synopsis, genres, rating, release_year, studio, etc.
        return {
            'synopsis': '...',
            'genres': ['Action', 'Aventure'],
            'rating': '8.5/10',
            'release_year': 2023,
            'studio': 'Studio Name',
            # ...
        }

    async def get_episodes(self, anime_url: str, lang: str = "vostfr"):
        # Retourner la liste des épisodes
  1. Enregistrez-le dans app/providers.py et main.py

🗺️ Roadmap / Plans Futurs

Version 2.2 - Système de Favoris (Terminé)

  • Favoris : Sauvegarder les animes favoris avec métadonnées complètes
  • API REST complète : 6 endpoints pour gérer les favoris
  • Tri et filtrage : Par titre, rating, année, provider, genre
  • Statistiques : Distribution par provider et genre
  • Stockage persistant : Base JSON (favorites.json)

Version 2.3 - Base de Données & Authentification

  • SQLite avec SQLAlchemy : Persistance complète des données
  • Système d'authentification local :
    • Inscription et connexion utilisateur
    • Tokens JWT avec expiration (7 jours)
    • Hachage de mot de passe bcrypt
    • Préférences utilisateur personnalisables
  • Profils utilisateurs :
    • Table User : username, email, preferences, admin
    • Historique de téléchargement par utilisateur
    • Historique de visionnage (position, progression)
    • Préférences : langue par défaut, thème, auto-download
  • Rétrocompatibilité : Accès anonyme toujours possible

Nouveaux endpoints :

  • POST /api/auth/register - Inscription
  • POST /api/auth/login - Connexion (JWT)
  • GET /api/auth/me - Profil utilisateur
  • PUT /api/auth/me/preferences - Préférences
  • GET /api/auth/me/download-history - Historique
  • GET /api/auth/me/watch-history - Visionnage

Version 2.4 - APIs Externes & Recommandations

  • Intégration Jikan API (MyAnimeList) :
    • Métadonnées enrichies (poster, notes, genres)
    • Limitation de débit : 3 req/sec
  • Intégration AniList API (GraphQL) :
    • Recommandations basées sur l'historique
    • Limitation de débit : 90 req/min
  • Système de cache :
    • Cache API dans la base de données
    • TTL configurable (168h par défaut)
    • Mécanisme de fallback (AniList → Jikan)
  • Enrichissement automatique :
    • Fusion des données providers + API externes
    • [ [ ] Affichage des posters dans les résultats

Nouveaux endpoints :

  • GET /api/anime/metadata?enrich=true - Métadonnées enrichies
  • GET /api/recommendations - Suggestions personnalisées

Version 2.5 - Webhooks & Automatisation (Terminé)

  • Support Sonarr Webhook :
    • POST /api/webhook/sonarr - Réception événements
    • Auto-téléchargement des nouveaux épisodes
    • Vérification HMAC SHA256 (optionnel)
    • Gestion des événements : Download, Rename, Delete
  • Automatisations :
    • Déclenchement automatique sur nouvel épisode
    • Analyse des infos épisodes depuis Sonarr
    • Mapping automatique vers les providers
    • Système de mapping series Sonarr → anime providers
    • Configuration API pour webhooks et mappings

Nouveaux endpoints :

  • POST /api/webhook/sonarr - Webhook principal Sonarr
  • POST /api/webhook/test/sonarr - Test de payload
  • GET /api/sonarr/config - Configuration webhook
  • PUT /api/sonarr/config - Mise à jour configuration
  • GET /api/sonarr/mappings - Liste des mappings
  • POST /api/sonarr/mappings - Créer mapping
  • DELETE /api/sonarr/mappings/{id} - Supprimer mapping
  • GET /api/sonarr/search - Rechercher anime
  • GET /api/sonarr/episodes - Liste épisodes
  • GET /api/sonarr/suggest - Suggestions mappings
  • POST /api/sonarr/download - Déclencher téléchargement manuel

Documentation : Voir docs/SONARR_INTEGRATION.md

Version 2.6 - Gestion de Bibliothèque Avancée

  • Bibliothèque personnelle : Gérer sa collection d'anime téléchargés
  • Statistiques détaillées :
    • Temps de visionnage total
    • Espace disque utilisé
    • Animes les plus regardés
    • Graphiques de statistiques
  • Marquage d'épisodes :
    • Marquer épisodes comme vus/non vus
    • Système de progression automatique
    • Reprendre la lecture là où on s'est arrêté
  • Listes de lecture : Créer des playlists personnalisées
  • Notes personnelles : Noter les animes et laisser des commentaires

Version 2.7 - Qualité et Formats

  • Sélection de qualité : Choisir entre 1080p, 720p, 480p
  • Conversion automatique : Convertir en différents formats
  • Compression : Réduire la taille des fichiers
  • Extraction de sous-titres : Télécharger les subs automatiquement
  • Multi-audio : Gérer les versions VF/VOSTFR

Version 3.0 - Fonctionnalités Sociales & Mobile

  • Fonctionnalités sociales :
    • Partage de listes avec amis
    • Système de commentaires et avis
    • Intégration Discord/Telegram (notifications)
  • Mobile & PWA :
    • Application mobile native iOS/Android
    • Progressive Web App pour offline
    • Chromecast/AirPlay support
    • Interface optimisée mobile

Version 4.0 - Fonctionnalités Avancées

  • Sauvegarde cloud : Sync avec Google Drive/Dropbox
  • Streaming distant : Regarder partout
  • Multi-utilisateurs : Profils et permissions
  • API publique : API pour développeurs tiers
  • Plugins : Système d'extensions

Améliorations Continues

  • Performance : Optimisation du chargement et de l'interface
  • Accessibilité : Support lecteur d'écran, clavier
  • Tests automatisés : Suite de tests E2E
  • Documentation : Guides d'utilisation et API
  • Internationalisation : Support multilingue complet

🤝 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

📝 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.

📧 Support

Pour les bugs et suggestions :

  • Ouvrez une issue sur GitHub
  • Discutez avec la communauté

Développé avec ❤️ pour la communauté anime

Version actuelle : 2.1 Dernière mise à jour : Janvier 2026