root 01792e8a58 fix: Correct group toggle functionality
Fix the toggleGroup() function to properly collapse/expand grouped downloads:

- Use classList.contains('collapsed') to check state instead of checking style.display
- Properly add/remove 'collapsed' class on toggle
- Groups now correctly collapse when clicked and expand when clicked again
- Arrow rotates correctly with CSS transition

The previous implementation checked items.style.display which was initially empty,
causing the toggle to not work correctly. Now we use the CSS class as the source of truth.
2026-01-23 10:49:57 +00:00
2026-01-23 08:17:10 +00:00

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

  • 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

Nouveaux endpoints :

  • POST /api/webhook/sonarr - Webhook principal
  • POST /api/webhook/test/sonarr - Test de payload

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

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%