Skip to main content

cli tool for watching anime

Project description

anicli-ru


CLI приложение и локальный вебсервер для поиска и просмотра аниме из терминала с русской озвучкой или субтитрами. Поддерживает unix, linux, windows 10/11 (через windows terminal)

Demonstration

CLI:

https://github.com/user-attachments/assets/77298253-4e3d-4420-8891-ee821d4834a6

WEB:

https://github.com/user-attachments/assets/d8bf90aa-a2df-48fe-a625-5e3a30a5cf67

Index

Установка

  • Требуется python 3.9 или выше
  • Для CLI требуется mpv видеоплеер
  • Проект поставляется через pip, рекомендуется устанавливать через uv или pipx
  • Минимальная установка, только CLI клиент
    • UV - uv tool install anicli-ru (рекомендуется)
    • PIPX - pipx install anicli-ru

Опциональные зависимости:

  • Установка всех зависимостей (CLI + webserver + browser cookie extractor)

    • uv tool install anicli-ru[all]
    • pipx install anicli-ru[all]
  • Извлечение cookies из браузера в клиент (используется для редкого обхода ddos-guard/cloudflare, требуется зависимость rookiepy)

    • uv tool install anicli-ru[cookies]
    • pipx install anicli-ru[cookies]
  • Локальный веб клиент

    • uv tool install anicli-ru[web]
    • pipx install anicli-ru[cookies]
  • termux webclient (TODO, untested)

TODO: add install script for termux (кто протестирует - можете закинуть PR с shell скриптом установки)

Предполагаю, что локальный клиент должен работать в android termux эмуляторе. Для работоспособности требуются следующие зависимости:

pkg install python-dev libxml2-dev libxslt-dev libiconv-dev

Затем скачать проект, установить пакеты и запустить

API interface

Клиент и парсеры умышленно разделены в отдельные репозитории: чтобы мне было удобнее экспериментировать и исправлять и сторонним пользователям использовать в проекте.

Если только нужны готовые парсеры и API интрефейс, используйте библиотеку https://github.com/vypivshiy/anicli-api

Usage

Для вывода информации о коммандах используйте:

anicli-ru --help

доступных опции:

anicli-ru cli --help 

Вывод установленной версии клиента и API

anicli-ru version

Check Updates

работает если установлен через uv или pipx, иначе необходимо вручную обновлять

Проверить обновления

anicli-ru check-updates

Установить обновления:

anicli-ru update

принудительно переустановить:

anicli-ru update --force 

CLI

Реализован поверх prompt-toolkit, визуализация вывода идёт через rich, воспроизведение видео через mpv плеер.

Вывод всех доступных источников:

Дополнительная информация об источниках описана в anicli-api/source-description

anicli-ru cli

Запуск поиска при старте.

anicli-ru cli -s animego --search isekai

Запуск ongoing при старте

anicli-ru cli -s animego --ongoing

Понижение качества доступных видео (выбирает самый ближайший)

# например, для kodik это 360, для dreamcast - 1080
anicli-ru cli -s animego -q 360

interface

  • Нажимайте <tab> кнопку или начинайте вводить - выведутся доступные команды
  • search, ongoing - есть простой фильтр по названию тайтла - вводите символы в назваии тайтла - они поднимутся вверх в автодополнении

Episodes:

Для эпизодов есть фильтр по номерам. Индекс начинается с 1.

Примеры:

  1. выбрать 1, 3 и 5 эпизод:
1 3 5
  1. выбрать 1, 3 и с 5 по 10:
1 3 5-10
  1. если ошибетесь и добавите лишние данные - фильтр откорректируется автоматически:

например при вводе

1 1 2 3 1-2

финальный фильтр:

1-3
  1. Воспроизведение серии видео
  • создаёт временный файл-плейлист.
    • в unix/linux записывает в директорию /tmp,
    • в windows - в директорию %TMP% (по умолчанию C:\Users\<USERNAME>\AppData\Local\Temp)
  • размер плейлиста зависит от ключа --m3u-size (по умолчанию, значение 6).
  • не рекомендуется увеличивать значение если не планируете всё смотеть "в один присест", так как ссылки на видео живут примерно 24 часа
  • автоматически собирает плейлист на основе значений источника и даббера.
    • Например, если вы выбрали Ongoing и озвучку "Субтитры", а для последнего он отсутвует (но есть Animevost) - поток прервётся.

WEB

[!warning] Реализован для локального использования, категорически не рекомендуется применять в production и(или) публичной сети. Не рассчитан для выполнения 24/7

Да я ваибкодил его, но также затерпел и вайбдебажил и вайбтестил его

Простой вебклиент со статическим рендером страниц и встроенным reverse-proxy трансляции видео в плеер.

Стек сервера:

  • backend: fastapi
  • frontend: pure js, water.css
  • видеоплеер - Artplayer.js и плагины hls.js, dash.js
  • не применяются базы данных - данные кешируются в ОЗУ процесса сервера

Для запуска требуется установить зависимость: - uv tool install ani-cli-ru[web] - pipx install ani-cli-ru[web]

запускать командой:

anicli-ru web

Для прочих настроек (ip, port, ttl) введите

anicli-ru web --help

Входить по ссылке со сгенерированным токеном или сканировать QR код. Пример вывода ссылки для входа:

Server started at: http://127.0.0.1:8000/?token=HSB6l1qzoBogpPNpBakXhA

В search/ongoing/episode страницах доступны фильтры по заголовку и номерам эпизодов. Синтаксис поиска номера эпизода идентичен как в CLI

Command Reference

Commands

version

Description: Напечатать версию приложения и anicli-api

Usage:

anicli version

update

Description: Обновить приложение

[!note] Работает если установлено в pipx или uv, в обычном pip нужно обновлять вручную

Usage:

anicli update [--force]

Options:

  • --force: Принудительно обновить api и клиент

check-updates

Description: Проверить наличие обновлений на pypi

Usage:

anicli check-updates

web

Description: Запустить локальный сервер (experimental, LOCAL USE ONLY)

Usage:

anicli web [OPTIONS]

Options:

  • -h, --host TEXT: IP host (default: 127.0.0.1)
  • -p, --port INTEGER: Port (default: 8000)
  • -mw, --max-workers INTEGER: Uvicorn max workers (default: 1)
  • -c, --chunk-size TEXT: Размер чанка видеопотока для трансляции в вебплеер. Поддерживает суффиксы: k/K (kbytes), m/M (mbytes), или число (bytes) (по умолчанию: 1M - 1 мегабайт)
  • -s, --source TEXT: Источник (можно переключить в веб интерфейсе)
  • --ttl TEXT: Cache TTL - через сколько уничтожишь извлеченные объекты. Поддерживает суффиксы: h/H (hours), m/M (minutes), или число (seconds) (default: 12h)

cli

Description: Запуск интерактивного cli приложения (требуется mpv видеоплеер) Usage:

anicli cli [OPTIONS]

Required Options:

  • -s, --source TEXT: Источник (можно изменить в приложении)

Optional Options:

  • -q, --quality INTEGER: Качество видео по умолчанию. Если оно недоступно - выберет близжайшее значение. (default: 2060)
  • --search TEXT: При запуске вывести результат поиска тайтлов по запросу
  • --ongoing: При запуске вывести доступные онгоинги
  • -mo, --mpv-opts TEXT: Дополнительные MPV опции. Должны быть одной строкой. Пример: "-config=/.config/mpv/mpv.conf --no-audio"
  • --m3u-size INTEGER: Максимальный размер плейлиста (slice-play) (default: 6). Не рекомендуется увеличивать размер - извлечённые ссылки имеют срок жизни и не живут долго!
  • --timeout INTEGER: HTTP client timeout (seconds) (default: 60)
  • --proxy TEXT: Прокси для клиента. поддерживает http(s), socks4/5. Имеет формат scheme://user:password@host:port
  • --cookies-from-browser TEXT: Извлечь cookies из браузера и загрузить в httpx клиент. Требуется зависимость anicli[cookies]
  • --cookies PATH: прочитать cookie из файла (должны быть в netscape формате)
  • -H, --header TEXT: Добавить http заголовки в клиент, можно передать несколько раз (формат: Key=Value)
  • --header-file PATH: Путь до файла с заголовками headers (формат на одну строку:, Key=Value)

Notes

  • The web command is experimental and intended for local network use only, not suitable for production deployment
  • The cli command requires an MPV player to be installed and available in your system PATH
  • Both --search and --ongoing options cannot be used simultaneously in the cli command
  • Chunk size and TTL options support various suffixes for convenience:
    • Chunk size: k/K for kilobytes, m/M for megabytes, or plain integer for bytes
    • TTL: h/H for hours, m/M for minutes, or plain integer for seconds

License

GPL3

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

anicli_ru-6.1.0.tar.gz (573.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

anicli_ru-6.1.0-py3-none-any.whl (526.4 kB view details)

Uploaded Python 3

File details

Details for the file anicli_ru-6.1.0.tar.gz.

File metadata

  • Download URL: anicli_ru-6.1.0.tar.gz
  • Upload date:
  • Size: 573.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for anicli_ru-6.1.0.tar.gz
Algorithm Hash digest
SHA256 e4ad08157bd02e528a1a993279e874cd88680ea7104af47e4f1494c2d1624686
MD5 79fc2d2bf25351a7649012b77d3eeef9
BLAKE2b-256 0d4d635a38446f3b4b6d749c2228eec9294f64a301affb515294f4bc63ef4be3

See more details on using hashes here.

File details

Details for the file anicli_ru-6.1.0-py3-none-any.whl.

File metadata

  • Download URL: anicli_ru-6.1.0-py3-none-any.whl
  • Upload date:
  • Size: 526.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.22 {"installer":{"name":"uv","version":"0.9.22","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"CachyOS Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for anicli_ru-6.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 be4065d79807baeef8b9fdbe183a5bfdf2020c483585b7f6427944acbe2d969a
MD5 590d46d5f7ca6cbc09c00fcfe81cff26
BLAKE2b-256 b740894d20882a9e5ddf5a5ce29dacd6ddbebf37b767acef860fe8edcb6ed017

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page