Skip to content
TMCooperPublic

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

🌊 Nami — Service Self-Hosted Anime Streaming & Téléchargement

Service unifié et autonome pour rechercher, regarder à la volée (streaming direct M3U8) et télécharger vos animes préférés sur disque externe, propulsé par YoitsuWrap, AnimeSamaApi et VoirAnime_API. Conçu pour être léger, sobre, esthétique et optimisé pour tourner sur Raspberry Pi ou mini-PC.


✨ Fonctionnalités Clés

  • 📺 Visionnage à la volée & Lecture locale :
    • Streaming direct M3U8 / MP4 résolu à la volée via proxy CORS intégré.
    • Lecture ultra-rapide des fichiers téléchargés hors Docker grâce au protocole HTTP 206 Partial Content (Range requests) : reprise et recherche instantanées dans la vidéo sans surcharger le processeur du Raspberry Pi.
  • 💾 Stockage hors du conteneur Docker :
    • Les épisodes téléchargés sont rangés directement sur votre disque dur externe ou dossier local (/downloads), utilisables par n'importe quel lecteur multimédia (VLC, Plex, Jellyfin...).
  • ⚡ Catalogue incrémental & Découvertes aléatoires :
    • La page d'accueil s'incrémente intelligemment de vos recherches et visionnages.
    • Section "Continuer la lecture" avec barre de progression exacte, badge de saison/épisode et reprise en 1 clic.
    • Section "Découvertes & Aléatoire" pour explorer de nouveaux animes immédiatement.
    • Section "Médiathèque Locale Hors-Ligne" pour regarder vos animes téléchargés même sans Internet.
  • 📊 Système multi-utilisateurs & Statistiques détaillées :
    • Profils avec avatars personnalisés.
    • Tracking du temps total de visionnage (heures & minutes).
    • Nombre d'épisodes et de séries complétées.
    • Calcul en direct de l'espace disque occupé par vos téléchargements.
  • 🚀 Système de Cache JSON intelligent :
    • Les détails d'animes et listes d'épisodes sont mis en cache localement dans data/cache/ pour éviter de surcharger les APIs et offrir une vitesse de chargement instantanée.
    • Bouton "Actualiser" pour forcer la mise à jour quand un nouvel épisode sort.
  • 🐳 Prêt pour Docker & Docker Compose (Multi-Arch : PC x86 & Raspberry Pi ARM64) :
    • Finis les sous-modules Git instables : tout est embarqué et démarre en une seule commande.

🛠️ Démarrage Rapide

1. Avec Docker Compose (Recommandé pour Raspberry Pi & Serveurs)

docker compose up -d --build

L'application est immédiatement accessible sur :

http://<IP_DE_VOTRE_MACHINE>:8070

(ou sur le port 8080 en direct).

📁 Configuration des disques externes (docker-compose.yml)

Par défaut, les volumes sont montés dans le dossier du projet :

volumes:
  - ./data:/app/data                # Base de données, utilisateurs, historique & cache
  - ./downloads:/downloads          # Dossier des vidéos téléchargées

Pour enregistrer vos vidéos sur un disque dur externe branché à votre Raspberry Pi ou PC (ex: disque monté sur /media/pi/MonDisque), modifiez simplement la ligne du volume :

volumes:
  - ./data:/app/data
  - /media/pi/MonDisque/animes:/downloads

2. Lancement Local sans Docker (Mode Développement)

Prérequis

  • Python 3.10+
  • Node.js 18+ (pour le frontend)
  • FFmpeg installé sur le système

Backend :

pip install -r requirements.txt
python -m uvicorn backend.main:app --host 0.0.0.0 --port 8080 --reload

Frontend :

cd frontend
npm install
npm run dev

Tests (backend) :

pip install pytest flask
python -m pytest

Les tests n'écrivent que dans des dossiers temporaires (jamais dans data/).

Journaux des APIs :

Les sorties d'AnimeSamaApi et de VoirAnime_API sont dans data/logs/animesama.log et data/logs/voiranime.log (le lancement précédent est conservé en .log.1).


🏗️ Architecture du Projet

Nami/
├── backend/
│   ├── main.py                     # Serveur FastAPI principal + orchestration des sous-services
│   ├── routers/
│   │   ├── api.py                  # Endpoints REST (Catalogue, stream local HTTP 206, stats, auth)
│   │   └── stream_proxy.py         # Proxy HLS / M3U8 pour contourner les blocages CORS et headers
│   └── services/
│       ├── catalog_service.py      # Recherche multi-sources, résolution de liens & détails
│       ├── cache_service.py        # Gestion du cache JSON & scan du disque local
│       ├── download_service.py     # File d'attente asynchrone FFmpeg / HTTP
│       ├── history_service.py      # Tracking par utilisateur, reprise exacte & statistiques
│       ├── settings_service.py     # Configuration du stockage et options
│       └── user_service.py         # Gestion des comptes et profils
├── frontend/                       # Interface React + Vite (Vanilla CSS moderne, thème sombre)
│   ├── src/
│   │   ├── components/
│   │   │   ├── VideoPlayerModal.jsx     # Lecteur custom (M3U8 & Local, raccourcis, reprise auto)
│   │   │   ├── OfflineLibraryView.jsx   # Vue médiathèque locale hors-ligne
│   │   │   ├── StatsModal.jsx           # Modal des statistiques de visionnage
│   │   │   ├── AnimeDetailModal.jsx     # Fiche anime avec détection des épisodes téléchargés
│   │   │   ├── CatalogGrid.jsx          # Grille d'accueil avec étagères dynamiques
│   │   │   └── Header.jsx               # Navigation, recherche et switch de profil
├── AnimeSamaApi/                   # Moteur API Anime-Sama
├── voiranime_API/                  # Moteur API VoirAnime
├── data/                           # Données persistantes (utilisateurs, historique, cache)
├── downloads/                      # Dossier hôte des épisodes téléchargés
├── Dockerfile                      # Image multi-plateforme légère
└── docker-compose.yml              # Déploiement en 1 clic

🔐 Comptes & Sécurité

  • Connexion par pseudo et mot de passe (aucune liste de profils affichée). « Se souvenir de moi » garde la session 30 jours ; sinon elle se ferme après 12 h d'inactivité. Les mots de passe sont hachés (PBKDF2-SHA256) ; les anciens sont convertis à la connexion suivante.
  • Super administrateur : le premier compte créé. Il ouvre ou ferme la création de compte, crée, renomme, désactive, supprime les comptes et réinitialise leurs mots de passe, et peut transférer son rôle. Seul lui accède aux réglages du serveur, aux mises à jour, aux sources et à la suppression des fichiers téléchargés (icône 🛡️ Administration).
  • Installation qui avait déjà des comptes : aucun n'est administrateur. Un code d'installation est écrit dans data/admin-setup.txt (et dans les journaux) ; connectez-vous puis saisissez-le dans Mon compte pour devenir super administrateur.
  • Force brute : après 5 échecs en 15 min, l'adresse IP et le compte sont bloqués 1 min, puis 2, 4… jusqu'à 1 h. Les blocages, les sessions ouvertes et le journal de sécurité sont visibles (et levables) dans l'administration.
  • Téléchargements : l'administrateur peut réserver le téléchargement sur le serveur à lui seul (les autres enregistrent les épisodes sur leur appareil), garder un espace disque libre minimum, et limiter les épisodes demandés « Sur cet appareil ».
  • Derrière un reverse proxy, définissez NAMI_TRUST_PROXY=1 pour que l'adresse réelle des visiteurs (X-Forwarded-For) soit utilisée par la protection anti force brute.

🔄 Mises à Jour & Maintenance

1. Directement depuis l'application Web (Recommandé)

Ouvrez l'icône ⚙️ Paramètres en haut à droite :

  • Une section dédiée vérifie automatiquement l'état des versions de Nami lui-même, AnimeSamaApi, VoirAnime_API et YoitsuWrap.
  • Vous pouvez mettre à jour chaque composant individuellement ou cliquer sur « Tout mettre à jour » (APIs et wrapper).
  • Les APIs redémarrent seules ; une mise à jour de Nami ou de YoitsuWrap redémarre Nami, et la page se recharge d'elle-même.
  • Sécurité des données garantie : Aucun fichier utilisateur, historique ni téléchargement n'est modifié ou supprimé.

Mise à jour de Nami avec Docker

Le dépôt de Nami est privé et le conteneur n'a ni le dépôt git ni vos identifiants : c'est la machine hôte qui fait la mise à jour. Lancez une fois, dans le dossier de Nami (à côté de docker-compose.yml), l'outil qui reste à l'écoute de l'interface :

  • Linux / Raspberry Pi : ./updater.sh (dans tmux/screen, ou en service systemd : exemple en tête du script)
  • Windows : powershell -ExecutionPolicy Bypass -File .\updater.ps1

Il indique à Nami la version disponible et lance rebuild (git pull + nouvelle image) quand vous cliquez sur « Mettre à jour ». Journal de la dernière mise à jour : data/nami-update/last-update.log.

Sans Docker (dépôt cloné), Nami se met à jour lui-même : avance rapide de sa branche (refusée si des fichiers ont été modifiés localement), dépendances, interface (npm), puis redémarrage.

2. Via les scripts de reconstruction

Pour reconstruire proprement le conteneur Docker après de grosses modifications sans toucher à vos données :

  • Sous Windows : Double-cliquez sur rebuild.bat
  • Sous Linux / Raspberry Pi : Exécutez ./rebuild.sh

⌨️ Raccourcis Clavier du Lecteur Vidéo

Touche Action
Espace Lecture / Pause
← / → Reculer / Avancer de 10 secondes
↑ / ↓ Augmenter / Baisser le volume
F Basculer en Plein Écran
M Couper / Réactiver le son

📄 Licence

Ce projet est sous licence GPL v3. Propulsé avec ❤️ par les wrappers et APIs de TMCooper.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages