Castor, консольная утилита для трансляции видео из браузера на смарт-ТВ без Chromecast

Castor, консольная утилита для трансляции видео из браузера на смарт-ТВ без Chromecast

Автор проекта (пользователь GitHub stupside, ник на Hacker News, xonery) столкнулся с обычной проблемой: многие смарт-телевизоры не умеют кастовать произвольное веб-видео, а зеркалирование экрана ноутбука на ТВ работает с задержками и падением разрешения. У него не было ни Chromecast, ни AirPlay, поэтому он написал утилиту Castor, консольный (CLI) инструмент на Go, который берёт реальный видеопоток со страницы и передаёт его на телевизор напрямую, в полном качестве.

Механика извлечения устроена так: Castor запускает headless-браузер Chrome с рандомизированным цифровым отпечатком и скриптами, маскирующими автоматизацию, затем через протокол Chrome DevTools отслеживает весь сетевой трафик страницы, чтобы поймать сам видеопоток. Дальше идёт короткий сценарий действий: клик по странице, переход в самый большой iframe, при появлении, решение капчи Cloudflare Turnstile, и повторный клик как запасной вариант. По словам автора, это работает на большинстве стриминговых сайтов, но не пробьёт по-настоящему серьёзную защиту от ботов.

Кастовать можно тремя способами: указать прямой URL видеопотока, передать ID фильма/сериала из IMDB или TMDB (тогда адрес резолвится через список прокси-источников в конфиге), либо просто открыть интерактивный TUI-браузер с постерами и метаданными через TMDB (нужен бесплатный API-ключ). Отдельная опция, автоматически сгенерированные субтитры, вшиваемые прямо в видео: они работают через встроенный whisper.cpp (модель ggml-tiny.en, ~75 МБ, скачивается один раз), функция отключена по умолчанию.

Рекомендованный способ установки, нативный бинарник (brew install --cask stupside/tap/castor): он работает прямо на локальной машине и делит с телевизором домашнюю сеть, что нужно для обнаружения устройств. Требуются Chrome/Chromium, ffmpeg и ffprobe в PATH. Сборка из исходников требует Go 1.26+ и cmake, потому что привязки whisper.cpp собираются через cgo в локальную статическую библиотеку. Есть и готовый образ Docker, но только для Linux-хоста: обнаружение устройств идёт через SSDP-мультикаст, а поток обратно на ТВ отдаёт встроенный сервер повторов Castor, оба механизма не проходят через bridge-сеть Docker, поэтому обязателен флаг --network host. На Docker Desktop под macOS и Windows этот флаг молча не работает: контейнер получает адрес во внутренней VM-подсети Docker Desktop, а не в реальной домашней сети, поэтому сканирование ничего не находит. Для macOS/Windows автор советует нативный бинарник либо Linux-VM, подключённую к сети напрямую (например, через Lima и socket_vmnet).

Настройка, один файл config.yaml: в нём указывается точное имя устройства (телевизора) и тип рендерера, а также список источников (прокси и шаблоны URL для фильмов/серий). Работает Castor с любым телевизором, поддерживающим профиль DLNA/UPnP MediaRenderer:1, это фактически все смарт-ТВ, выпущенные за последнее десятилетие: Samsung (протестировано автором лично), LG, Sony Bravia, Panasonic Viera, Philips, Hisense, TCL, VIZIO, Sharp, а также сетевые плееры Kodi, VLC и Plex.

Автор отдельно оговаривает: Castor не хранит и не раздаёт никакого видео сам по себе, это общий инструмент для трансляции потока на ТВ, не привязанный к конкретному сайту. Примеры источников в конфиге, просто примеры; какие сайты указывать и соблюдение при этом закона и условий использования этих сайтов, ответственность пользователя. На Hacker News пост набрал 138 очков и 36 комментариев.

Ключевые факты

  • Castor, консольная (CLI) утилита на Go, которая перехватывает видеопоток прямо со страницы браузера и транслирует его на смарт-ТВ в полном качестве, в обход Chromecast/AirPlay и без потерь от зеркалирования экрана
  • Извлечение потока идёт через headless Chrome с маскировкой автоматизации и перехват трафика по протоколу Chrome DevTools; при необходимости решается капча Cloudflare Turnstile, но против серьёзной защиты от ботов инструмент бессилен
  • Кастовать можно по прямому URL, по ID фильма/сериала из IMDB/TMDB (через настроенные прокси-источники) или через интерактивный TUI-браузер с постерами; есть опциональные автосубтитры на базе whisper.cpp
  • Работает с любым ТВ на профиле DLNA/UPnP MediaRenderer:1, практически все смарт-ТВ последнего десятилетия (Samsung, LG, Sony, Panasonic, Philips, Hisense, TCL, VIZIO, Sharp), а также Kodi, VLC, Plex
  • Docker-версия работает только с Linux-хоста из-за особенностей сетевого обнаружения устройств; на Docker Desktop для macOS/Windows кастинг не находит ТВ, там нужен нативный бинарник

Почему это важно

Castor закрывает конкретный технический пробел: многие смарт-ТВ не умеют кастовать произвольное веб-видео, а зеркалирование экрана компьютера медленное и режет разрешение. Автор построил рабочее инженерное решение, перехват потока напрямую с сетевого уровня браузера вместо захвата картинки с экрана, что даёт полное качество без задержек. Это нишевый инструмент для разработчиков и энтузиастов домашних медиацентров, не связанный с ИИ или крупными технологическими сдвигами, но интересный как пример продуманной инженерии: headless-браузер со скрытой автоматизацией, перехват трафика по DevTools-протоколу и обход капчи в едином пайплайне.

Кому это важно

В первую очередь, разработчикам и техническим энтузиастам, которые держат домашний медиацентр без Chromecast или AirPlay и хотят кастовать видео с произвольных сайтов на смарт-ТВ, NAS-плееры или Kodi/VLC/Plex. Инструмент требует установки в терминале, настройки config.yaml и понимания сетевых нюансов (Docker, DLNA-обнаружение), то есть ориентирован не на массового пользователя, а на тех, кто готов повозиться с консолью ради контроля над потоком.

Как это применить

Проще всего поставить нативный бинарник через Homebrew (brew install --cask stupside/tap/castor), имея в PATH Chrome/Chromium, ffmpeg и ffprobe. Дальше нужен один файл config.yaml с именем телевизора (из castor scan) и списком источников, и кастинг фильма или серии сводится к одной команде с ID из IMDB/TMDB. Есть готовый Docker-образ, но он гарантированно работает только с Linux-хоста с флагом --network host, на Docker Desktop под macOS/Windows кастинг не находит устройства в сети. Автогенерация субтитров через whisper.cpp включается отдельной опцией в конфиге и по умолчанию выключена.

Можно ли доверять

Проект открытый (исходники на GitHub), автор подробно и честно документирует ограничения: чем сложнее защита от ботов на сайте-источнике, тем меньше шансов, что извлечение сработает; список протестированных лично автором телевизоров ограничен Samsung, для остальных производителей заявлена лишь совместимость по протоколу DLNA/UPnP. Отдельно указано, что сам инструмент не хранит и не раздаёт видео, источники в примере конфига условны, и легальность их использования лежит на пользователе.

Риски и подводные камни

Castor намеренно маскирует автоматизацию браузера и обходит защиту сайтов от ботов (включая решение капчи Cloudflare), это ставит пользователя в серую зону с точки зрения условий использования сайтов-источников, и автор прямо снимает с себя ответственность за соблюдение закона. Прокси-источники в конфиге, внешние сайты, которые могут исчезнуть или измениться без предупреждения, тогда кастинг по ID перестаёт резолвиться и требует ручной правки конфига. Сетевая часть тоже хрупкая: на Docker Desktop для macOS/Windows кастинг тихо не работает из-за виртуальной подсети контейнера, а часть функциональности (например, поддержка отдельных типов ТВ) в документации помечена как экспериментальная и непротестированная.

«Я написал его, потому что не мог кастовать веб-видео с ноутбука на телевизор: ни Chromecast, ни AirPlay.»

— автор проекта, README Castor на GitHub