- Castor es una herramienta de terminal que encuentra el flujo de video real desde una página web o una URL directa de stream, lo convierte para la TV y lo transmite en tiempo real con la calidad original, sin duplicación de pantalla
- Observa el tráfico de red con Chrome en modo headless y Chrome DevTools Protocol, y extrae el stream pasando por clic en la página, entrada al iframe más grande y un nuevo clic, pero puede no funcionar en páginas que no permiten reproducción automática
- Puede usarse con Smart TVs compatibles con DLNA/UPnP y con Kodi, VLC y Plex; el soporte para Chromecast está implementado, pero sigue siendo experimental y no ha sido probado
- Los videos H.264 reproducibles se envían sin recodificación y, si hace falta, se convierten con un codificador por hardware o
libx264; también puede insertar en el video subtítulos generados con whisper
- No ofrece videos, catálogos ni fuentes ni evade DRM; está diseñado para transmitir solo páginas y streams que el usuario indique directamente y para los que tenga autorización de uso
Transmitir video web como stream real
- Castor transmite el stream de video real con calidad completa, como alternativa a las Smart TVs que no pueden enviar video web directamente y al screen mirroring con latencia y pérdida de resolución
- Si ingresas una página web o una URL directa de stream, busca el video, extrae el stream y lo transcodifica para la TV para transmitirlo en tiempo real
- Puede consultar IDs de IMDB/TMDB desde fuentes configuradas por el usuario o insertar en el video subtítulos generados automáticamente
- Al ejecutar
castor cast, puedes explorar títulos y transmitirlos desde un navegador interactivo basado en terminal
Cómo extrae el stream y sus límites
- Ejecuta Chrome en modo headless y observa el tráfico de red con Chrome DevTools Protocol para encontrar el stream
- Realiza un pequeño pipeline de acciones para iniciar la reproducción
- Clic en la página
- Ir al iframe más grande
- Volver a hacer clic como acción alternativa
- Funciona en páginas que permiten reproducción automática, pero no es compatible con todos los sitios
Requisitos de instalación y ejecución
- La forma recomendada es usar un binario nativo que se ejecute en la misma red que la TV
- En el
PATH del entorno de ejecución se necesitan estas herramientas
- Chrome o Chromium: extracción de stream en modo headless
ffmpeg: transcodificación
ffprobe: detección del formato multimedia
- En macOS puede instalarse con Homebrew
brew install --cask stupside/tap/castor
- Para compilar desde el código fuente se necesitan Go 1.26+ y CMake
- El binding de whisper.cpp usa cgo y se enlaza con
libwhisper.a compilado localmente
- Como requiere
replace local y bibliotecas estáticas precompiladas, go install no funciona
git clone --recurse-submodules https://github.com/stupside/castor.git
cd castor
make
Flujo básico de uso
- Usa
castor scan para encontrar el nombre de la TV y especifica en config.yaml el nombre exacto y el tipo de dispositivo en device
device:
name: "Living Room TV"
type: dlna
- Una página web o una URL directa de stream se transmite con
cast player
castor cast player https://example.com/watch/some-video
- La búsqueda interactiva de títulos requiere una clave API de TMDB y fuentes configuradas por el usuario; los comandos completos y las flags pueden consultarse con
castor --help
Configuración y fuentes aportadas por el usuario
config.yaml se lee desde el directorio actual o desde la ruta indicada con --config, y el único elemento obligatorio es la configuración del dispositivo de destino
- Hay valores predeterminados para tiempos límite, navegación, captura, transcodificación, interfaz de red y navegación de Chrome
- Los valores secretos pueden sobrescribirse con
config.local.yaml, excluido de Git, o definirse como variables de entorno con el formato CASTOR_SECTION__FIELD
cast movie, cast episode y el navegador interactivo insertan el ID del título en las fuentes configuradas por el usuario
- Castor no incluye por sí mismo fuentes, catálogos ni funciones de consulta
- Inserta el ID en
templates escritos por el usuario, abre la página anteponiendo cada uno de los proxies y luego extrae el stream del mismo modo que cast player
- Si hay varios proxies, se prueban en el orden especificado
sources:
- proxies: ["https://your-source.example"]
templates:
movie: "/embed/movie/{itemID}"
episode: "/embed/tv/{itemID}/{season}-{episode}"
Búsqueda en TMDB y subtítulos automáticos
- El navegador interactivo usa una clave API de TMDB para buscar títulos
- La clave puede obtenerse en themoviedb.org
- Los comandos directos como
cast movie <id> no requieren clave de TMDB
- Los subtítulos automáticos transcriben el audio con whisper y los insertan en el video; están desactivados por defecto
- El idioma predeterminado es inglés
- El modelo predeterminado es
ggml-tiny.en, de unos 75 MB, y se descarga automáticamente
Dispositivos compatibles
- Es compatible con TVs que implementan el perfil DLNA/UPnP
MediaRenderer:1
- Samsung ha sido probado, y LG, Sony Bravia, Panasonic Viera, Philips, Hisense, TCL, VIZIO y Sharp figuran entre los equipos compatibles
- También pueden usarse reproductores de red como Kodi, VLC y Plex
- Usa
castor scan para consultar dispositivos en la misma red
- El soporte para Chromecast está implementado, pero es experimental y no ha sido probado
Restricciones de Docker y configuración de red
- La imagen Docker solo para Linux incluye Chrome,
ffmpeg y ffprobe
- En Docker se necesita un host Linux en la misma LAN que la TV, y debe usarse
--network host para el descubrimiento multicast SSDP y la conexión con el servidor de reproducción de Castor
- En Docker Desktop para macOS y Windows,
--network host no se conecta a la LAN
- El contenedor queda ubicado en la subred de la VM interna de Docker Desktop, por lo que
scan no encuentra dispositivos y la transmisión también falla
- En macOS y Windows debe usarse el binario nativo o hacer bridge de una VM Linux hacia la LAN
- Puedes montar
/config.yaml para proporcionar la configuración y conservar en un volumen el modelo de whisper descargado automáticamente
- Si usas una etiqueta de release en vez de
latest, puedes fijar la versión
Passthrough multimedia y codificación
- Si la TV ya puede reproducir video H.264 con el perfil y nivel permitidos, usa copiado de stream para reducir el uso de CPU casi a cero
- Si la TV rechaza el códec o hay que incrustar subtítulos, vuelve a codificar
- Da prioridad a codificadores H.264 por hardware que realmente funcionen, como VA-API en Linux o VideoToolbox en binarios nativos de macOS
- Si no hay uno disponible, usa
libx264 por software
- Para usar VA-API de una GPU Intel dentro de un contenedor Docker se necesita
--device /dev/dri; --network host por sí solo no expone la GPU
Uso y limitaciones
- Castor no es un servicio vinculado a un sitio específico, sino una herramienta de transmisión de propósito general
- No aloja ni incluye videos, catálogos ni fuentes; solo procesa páginas, streams y fuentes que el usuario indique y para los que tenga autorización de uso
- No descifra ni evade DRM, y no puede transmitir servicios protegidos con DRM
- La responsabilidad de cumplir los términos de uso del sitio y las leyes locales recae en el usuario, y se ofrece tal cual para usos personales y educativos legítimos
2 comentarios
Vaya, y el enlace de abajo en los comentarios, https://tvexplorer.live/channel/EBS1TV.kr.SD/country/KR, está súper práctico. jaja
Parece que en Corea está bloqueado, ¿pero en el extranjero se podrá ver de inmediato?
Comentarios de Hacker News
Hicieron TV Explorer, que reproduce directamente en el navegador los streams HLS publicados por los propios canales, sin rodeos adicionales. Usa una lista pública de GitHub con más de 10 mil canales gratuitos
https://tvexplorer.live
Me pregunto qué hacen otros servicios de TV que aquí no hacen
Es absurdo que un bot tenga que lanzar un navegador headless con un perfil nuevo cada vez. Cloudflare no logra bloquear bots y solo hace que ambos lados desperdicien recursos, además de prácticamente entregarle a la NSA los registros de acceso y las contraseñas; dan ganas de volver al viejo internet
Dicen que “lo hicieron porque no tenían Chromecast ni AirPlay para enviar video web de la laptop a la TV”, pero parece hecho por Claude
Entendía que la clave de Turnstile era detectar navegadores headless para que fuera difícil evadirlo, así que me cuesta creer que de verdad se pueda pasar solo imitando el clic en la marca de verificación
Parece importar más esa falsa seguridad, que Cloudflare usa en marketing con la cantidad de usuarios bloqueados sin distinguir entre personas y bots, que la seguridad real
La casilla es solo una parte; antes de eso observan todo el comportamiento del navegador y su respuesta a los eventos para decidir si exigir verificación adicional según la probabilidad de que sea un bot
Normalmente las herramientas de piratería al menos dejan cierta negación plausible, pero aquí presumen que te ayudan a streamear hasta un blockbuster de 250 millones de dólares que se estrena este fin de semana
Azahar, el emulador, y Azahar Plus, su fork ilegal que descifra juegos automáticamente, son parecidos; pero al revisarlo de nuevo, este proyecto lleva sitios de streaming ilegal integrados
Funcionó al instante en una TV Samsung común de hace más de 15 años. Me pregunto si lo mejor es escribir una función de búsqueda propia que analice todas las páginas JSON como https://vsembed.ru/movies/latest/page-1.json
A la explicación le falta contexto, así que cuesta saber para qué sirve la herramienta o si es para piratería
Requiere casi el mismo esfuerzo que usar torrents, así que no veo por qué usarlo
En la versión de Docker para macOS, puede que no encuentre la TV
La parte de “ejecuta Chrome headless ocultando la automatización con huellas aleatorias y scripts stealth” me hizo perder la confianza
navigator, la API de Audio y la API de Canvas. Es un nivel muy básico, así que es muy probable que se detecte fácilmente