Skip to main content

yt-dlp-kinopub

A yt-dlp extractor plugin for kino.pub / kino.watch: every quality, every audio track (labelled by studio) and all subtitles, whole series as playlists. Log in with your browser's cookies (--cookies-from-browser), or authorize the JSON API once for headless machines. The documentation below is in Russian.

Плагин-экстрактор для yt-dlp: kino.pub / kino.watch. После установки сайт работает в yt-dlp как любой другой:

yt-dlp --cookies-from-browser safari "https://kino.watch/item/view/38290/s1e1"

Это отдельная реализация в идиомах yt-dlp (куки браузера, аргументы экстрактора, кэш сессии, -f/-S), не обёртка над утилитой kinopub. Утилита и плагин друг от друга не зависят и могут жить рядом.

Быстрый старт

pip install yt-dlp-kinopub
yt-dlp --cookies-from-browser safari "https://kino.watch/item/view/38290/s1e1"

Нужны yt-dlp и ffmpeg: видео и звук в HLS лежат отдельно, и yt-dlp склеивает их через ffmpeg (brew install ffmpeg, apt install ffmpeg). Вместо safari подставьте браузер, в котором вы залогинены на сайте. Посмотреть, что доступно, до скачивания:

yt-dlp --cookies-from-browser safari -F "https://kino.watch/item/view/38290/s1e1"

Ссылка на сериал без /sNeM скачает все серии всех сезонов. Остальное ниже: другие способы входа, формы ссылок, выбор дорожек и субтитров.

Установка

Любой из способов:

# 1. С PyPI
pip install yt-dlp-kinopub

# 2. Из git, без клонирования
pip install "git+https://github.com/niazlv/yt-dlp-kinopub"

# 3. Клоном прямо в папку плагинов yt-dlp; обновление — git pull
git clone https://github.com/niazlv/yt-dlp-kinopub ~/.config/yt-dlp/plugins/yt-dlp-kinopub

Проверка: в yt-dlp -v появится строка [debug] Extractor Plugins: KinoPubIE.

Авторизация

Основной путь — куки браузера, как у любого сайта в yt-dlp. Сессия API — для машин без браузера. Логин и пароль от сайта плагин не принимает: их некуда отправить.

1. Куки браузера (рекомендуется).

yt-dlp --cookies-from-browser safari "https://kino.watch/item/view/38290/s1e1"

Поддерживаются brave, chrome, chromium, edge, firefox, opera, safari, vivaldi, whale, с выбором профиля и контейнера; Safari на macOS требует Full Disk Access для терминала. Сайт за Cloudflare: если он отвечает челленджем (плагин скажет об этом прямо), передайте User-Agent того же браузера (--user-agent "…"), а при необходимости --impersonate safari (нужен curl_cffi: pip install "yt-dlp[default,curl-cffi]"). Куки уходят только на сайт и никогда на CDN.

2. Своя сессия API по коду. Для серверов и cron, где браузера нет: плагин авторизуется как самостоятельное устройство, токен обновляется сам. Это единственное место, где плагин использует --username, потому что другого слота для разовой интерактивной авторизации у yt-dlp нет.

yt-dlp --username oauth --password "<CLIENT_SECRET>" "kinopub:38290"

На экране появится ссылка и код: откройте ссылку, введите код, подтвердите. Сессия сохраняется в кэше yt-dlp (~/.cache/yt-dlp/kinopub/oauth.json), и дальше флаги не нужны. Секрет тот же, что для kinopub login --qr: kino.pub не выдаёт публичного OAuth-клиента, поэтому нужен секрет приложения. Он есть в kinopub sessions export (поле app_client_secret) после login --app на рутованном телефоне. Плагин его не содержит и не скачивает.

Через .netrc, чтобы не держать секрет в истории команд:

machine kinopub login oauth password <CLIENT_SECRET>

и затем yt-dlp --netrc "kinopub:38290". Секрет нужен один раз: пока в кэше есть refresh-токен, --username oauth с пустым паролем ничего не запрашивает. Когда сессия API есть, плагин предпочитает её кукам: API не за Cloudflare и отдаёт все сезоны одним запросом.

3. Готовый токен API. Например, токен приложения из kinopub login --app (sessions exportapp_token). Это значение конфигурации, поэтому передаётся аргументом экстрактора и удобно живёт в ~/.config/yt-dlp/config. Плагин его не обновляет: ротация разлогинила бы приложение. Когда токен истечёт, API ответит 401, и плагин попросит новый.

yt-dlp --extractor-args "kinopub:token=<ACCESS_TOKEN>" "kinopub:38290/s1e1"

Формы ссылок

Ссылка Результат
https://kino.watch/item/view/38290 весь элемент: фильм → одно видео, сериал → плейлист всех серий всех сезонов
https://kino.watch/item/view/38290/s1e1 одна серия
kinopub:38290, kinopub:38290/s1e1 то же по id, без домена (только API)
https://kino.pub/item/view/38290 принимается; страницы запрашиваются с kino.watch

Зеркало сайта задаётся аргументом экстрактора, как --site у утилиты:

yt-dlp --extractor-args "kinopub:site=kino.example" "https://kino.watch/item/view/38290"
Аргумент (--extractor-args "kinopub:…") Назначение
site=<хост или origin> сайт для веб-пути (по умолчанию из ссылки, kino.pubkino.watch)
api_base=<origin> адрес API (по умолчанию https://api.service-kp.com, зеркало https://api.srvkp.com)
token=<access_token> готовый токен API (см. «Авторизация», способ 3)
audio=<шаблон>[,<шаблон>…] предпочтение аудиодорожек, как --audio у утилиты: подстрока студии, языка или идентификатора без учёта регистра; первый шаблон важнее второго; без совпадений остаётся дефолт сайта

Примеры

# Что доступно: качества, аудиодорожки (с названием студии), субтитры
yt-dlp -F "kinopub:38290/s1e1"

# Серии 1–12 первого сезона: лучшее видео + дорожка AniLibria, все субтитры внутрь mkv
yt-dlp --playlist-items 1-12 -f "bv+ba[format_note*=AniLibria]" \
  --embed-subs --sub-langs all --merge-output-format mkv "https://kino.watch/item/view/38290"

# Конкретная дорожка по идентификатору из -F: вторая дорожка группы 1080
yt-dlp -f "bv+audio-1080-2" "kinopub:38290/s1e1"

# Оригинальная озвучка по языку
yt-dlp -f "bv+ba[language=jpn]" "kinopub:38290/s1e1"

# Постоянное предпочтение: сначала AniLibria, иначе оригинал, иначе дефолт сайта (удобно в config)
yt-dlp --extractor-args "kinopub:audio=anilibria,jpn" "kinopub:38290"

# Все аудиодорожки в один файл
yt-dlp --audio-multistreams -f "bv+mergeall[vcodec=none]" --merge-output-format mkv "kinopub:38290/s1e1"

# Предпочесть h265, если он есть
yt-dlp -S "vcodec:h265" "kinopub:38290/s1e1"

# Имена файлов для сериала
yt-dlp -o "%(series)s/S%(season_number)02dE%(episode_number)02d - %(title)s.%(ext)s" "kinopub:38290"

Идентификаторы форматов читаемые и одинаковые от серии к серии:

Идентификатор Что это
hls-1080p, hls-720p, hls-480p видео (через API с кодеком: hls-h264-1080p, hls-h265-1080p)
audio-1080-1, audio-1080-2, … аудио: группа качества и номер дорожки, как его нумерует сам сайт
http-h264-1080p прогрессивный mp4 с одной вшитой дорожкой; в сортировке по умолчанию ниже HLS

Подписи качества берутся у сайта (720x406 он называет 480p). Название студии лежит в format_note, язык в language, и -F показывает их в колонке MORE INFO. Если у одного качества несколько битрейтов, к идентификатору добавляется битрейт: hls-1080p-3805k. Обычный запуск без -f берёт лучшее видео и дорожку, которую сайт играет по умолчанию, из группы лучшего качества.

Что нужно знать

  • Секрет и refresh-токен лежат в кэше yt-dlp открытым текстом, как и любые сессии, которые yt-dlp хранит сам. --no-cache-dir отключает сохранение (плагин предупредит), yt-dlp --rm-cache-dir удаляет всё.
  • Сессия плагина и сессия утилиты — разные устройства. Не передавайте плагину refresh-токен из kinopub login --qr: ротация одним разлогинит другого. Токен приложения через kinopub:token= передавать можно, его никто не обновляет.
  • CDN отвечает 429 на агрессивную параллельность. У yt-dlp нет адаптивного снижения, как у утилиты, поэтому оставьте -N 1 (по умолчанию) и при необходимости добавьте --retry-sleep fragment:exp=1:20.
  • В апстрим yt-dlp это не пойдёт: проект не принимает сайты с пиратским контентом, а для API нужен секрет, который в код не кладётся. Поэтому плагин живёт здесь.

Тесты

Офлайн, без сети и аккаунта: локальный сервер изображает API, OAuth-эндпоинт, CDN и сайт.

python -m unittest discover -s tests

Download files

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

Source Distribution

yt_dlp_kinopub-0.1.1.tar.gz (47.9 kB view details)

Uploaded Source

Built Distribution

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

yt_dlp_kinopub-0.1.1-py3-none-any.whl (39.3 kB view details)

Uploaded Python 3

File details

Details for the file yt_dlp_kinopub-0.1.1.tar.gz.

File metadata

  • Download URL: yt_dlp_kinopub-0.1.1.tar.gz
  • Upload date:
  • Size: 47.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for yt_dlp_kinopub-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a1886c37ed74b53ea8c0619391d115b0267ba6070e716cd515ae99c5b5c634ac
MD5 b9080fcb9cf5a9724b67b64c3409ddc6
BLAKE2b-256 7229472dea589cac88f6855531deb381cca1aa013adbfbc3ad3e8c10efceed63

See more details on using hashes here.

Provenance

The following attestation bundles were made for yt_dlp_kinopub-0.1.1.tar.gz:

Publisher: publish.yml on niazlv/yt-dlp-kinopub

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file yt_dlp_kinopub-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: yt_dlp_kinopub-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 39.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for yt_dlp_kinopub-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0a84237657de07ccd4461b2f5bd5984783347fda9a74cdbe66b8a46d3755fcbf
MD5 2a7b8051f59ceb84d64297e79c5117df
BLAKE2b-256 6af35dd14ff3a974db8b815d86960ac28e642ed1b0607efc893257b9841c3675

See more details on using hashes here.

Provenance

The following attestation bundles were made for yt_dlp_kinopub-0.1.1-py3-none-any.whl:

Publisher: publish.yml on niazlv/yt-dlp-kinopub

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 files

0.1.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page