Client terminal qui parse un site d'agrégation d'anime (compatible Anime-Sama/voiranime), choisit l'épisode, et le lance dans mpv — sans jamais ouvrir de navigateur (zéro pub, zéro popup, zéro lecteur cassé).
$ vrcli
? Que veux-tu faire ?
▶ Continuer One Piece S03E14
🔍 Rechercher un anime
📚 Parcourir le catalogue
🗓 Planning du jour
⏹ Quitter
⚠️ Avertissement légal. Ce projet est un client HTTP générique à usage strictement personnel et éducatif. Il ne stocke pas, ne re-diffuse pas, ne contourne aucune protection DRM ; il automatise les clics que tu ferais toi-même dans un navigateur. Le parseur HTML cible la famille Anime-Sama (voiranime.ripest l'URL par défaut, modifiable viavrcli config set base_url ...). Tu es seul responsable de vérifier la légalité de ton usage dans ta juridiction et le respect des CGU du site que tu pointes. Les auteurs déclinent toute responsabilité quant à l'usage qui peut être fait de ce logiciel.
- Recherche dans le catalogue du site configuré (
vrcli search <query>) - Liste de saisons / épisodes d'un anime (
vrcli info,vrcli episodes) - Lecture mpv directe avec headers HTTP corrects (
vrcli play) - Reprise auto depuis le dernier épisode regardé (
vrcli resume) - Mode interactif (sans argument) : recherche, choix, lecture, enchaînement
- Historique local SQLite (
vrcli history,--continue-watching) - Extraction d'URL brute pour yt-dlp / curl (
vrcli stream --json) - Bypass anti-blocage : Chrome TLS impersonation (curl_cffi) puis fallback proxy serveur si l'ISP coupe la connexion
- Architecture extensible : un host vidéo = un extractor plug-in (Sibnet, Vidmoly fournis)
Prérequis :
- Python 3.10+
- mpv sur le PATH (
winget install mpv/brew install mpv/apt install mpv)
git clone https://github.com/Zeyneell/anime-mpv-cli.git cd anime-mpv-cli pip install -e .
Deux commandes équivalentes sont installées : vrcli (court) et voiranime.
L'URL du site est configurable. Aucun site n'est forcé dans le code, mais le parseur HTML est calibré pour les templates de la famille Anime-Sama (voiranime.rip et clones).
vrcli config set base_url https://<ton-site>/
Ou via la variable d'environnement VRCLI_BASE_URL.
vrcli
Te propose : continuer un anime entamé, chercher, parcourir, planning.
# Recherche vrcli search one piece # Saisons d'un anime vrcli info one-piece # Liste des épisodes d'une saison vrcli episodes one-piece -s 3 # Lecture directe vrcli play one-piece -s 3 -e 14 --lang vostfr # Reprendre le dernier anime vrcli resume # Reprendre un anime précis vrcli resume one-piece # Historique vrcli history vrcli history --continue-watching vrcli history-clear # Planning du jour vrcli planning # Extraire juste l'URL (pour yt-dlp, curl, etc.) vrcli stream one-piece -s 3 -e 14 --json
vrcli ne télécharge pas — mpv suffit. Pour télécharger, branche vrcli stream sur yt-dlp :
vrcli stream one-piece -s 3 -e 14 --json \ | jq -r '.url, (.headers | to_entries | map("--add-header=\(.key):\(.value)") | join(" "))' \ | xargs yt-dlp
vrcli config show # Affiche la conf vrcli config path # Chemin du fichier vrcli config set default_lang vf vrcli config set base_url https://<ton-site>/ vrcli config set mpv_path "C:/Program Files/mpv/mpv.exe" vrcli config set proxy "http://user:pass@host:port" vrcli config set use_jina_fallback true
Le fichier vit sous %APPDATA%/voiranime-cli/config.json (Windows) ou ~/.config/voiranime-cli/config.json (Linux/Mac).
| Variable | Effet |
|---|---|
VRCLI_BASE_URL |
URL de base du site |
VRCLI_PROXY |
Proxy HTTP/SOCKS |
VRCLI_MPV |
Chemin vers mpv |
VRCLI_LANG |
Langue par défaut (vostfr/vf) |
src/voiranime_cli/
├── cli.py # Commandes click
├── client.py # HTTP : curl_cffi (TLS Chrome) + fallback proxy serveur
├── scraper.py # Parseurs catalogue / anime / saison / épisode
├── extractors/ # Plug-ins par host (sibnet, vidmoly, ...)
├── player.py # Lancement mpv + arguments
├── history.py # SQLite : historique, reprise, continue watching
├── config.py # Fichier conf + paths cross-platform
├── ui.py # Rich tables + questionary prompts
└── models.py # Dataclasses (AnimeCard, Season, Episode, Stream...)
- Créer
src/voiranime_cli/extractors/<name>.pyavec une classe qui hérite deExtractor, exposematches(url)etresolve(url) -> Stream. - L'ajouter à la liste
_REGISTRYdansextractors/__init__.py. - Ajouter un sample HTML dans
tests/fixtures/et un test danstests/test_extractors.py.
Plusieurs ISP français interdisent l'accès direct à certains sites (RST sur SNI). Le client essaie dans l'ordre :
- Connexion directe via
curl_cffi(impersonate Chrome TLS, défie les checks Cloudflare basiques) - Proxy HTTP/SOCKS si
config.proxyest défini - Fallback proxy serveur (r.jina.ai) si la connexion directe échoue
🔒 Le fallback envoie l'URL ciblée à un service tiers (Jina) qui la log probablement. Désactivable avec
vrcli config set use_jina_fallback falsesi tu préfères que la commande échoue plutôt que de passer par un tiers.
pip install -e ".[dev]"
pytest -qLe suite est offline : tous les parseurs et extracteurs tournent contre des copies HTML capturées dans tests/fixtures/.
MIT — voir LICENSE.