<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/github---stupside-castor-vtxut14aj" -->

---
title: GitHub - stupside/castor | daily.dev
description: Castor is an open-source Go CLI tool that extracts video streams from websites and casts them to smart TVs over DLNA/UPnP or Chromecast. It uses a headless...
canonical: https://daily.dev/posts/github---stupside-castor-vtxut14aj
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: GitHub - stupside/castor | daily.dev
og:description: Castor is an open-source Go CLI tool that extracts video streams from websites and casts them to smart TVs over DLNA/UPnP or Chromecast. It uses a headless...
og:url: https://daily.dev/posts/github---stupside-castor-vtxut14aj
og:image: https://api.daily.dev/og/posts/vtXuT14AJ.png
og:image:alt: GitHub - stupside/castor
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# GitHub - stupside/castor

**[Hacker News](https://daily.dev/sources/hn)** · 6 min read · 2 upvotes · 0 comments

## Summary

Castor is an open-source Go CLI tool that extracts video streams from websites and casts them to smart TVs over DLNA/UPnP or Chromecast. It uses a headless Chrome with randomized fingerprinting and stealth scripts to bypass bot detection, captures streams via Chrome DevTools Protocol, transcodes with ffmpeg, and optionally burns in auto-generated subtitles using whisper.cpp. An interactive TUI lets users browse TMDB titles, search, and cast directly from the terminal. Installation is available via Homebrew, Docker, or source build. Supported devices include virtually all DLNA-compatible smart TVs from major brands.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://github.com/stupside/castor>

## Questions this post answers

### How does castor extract video streams from streaming websites?

Castor launches a headless Chrome instance with a randomized browser fingerprint and stealth scripts to avoid automation detection, then listens to all network activity through the Chrome DevTools Protocol to capture video streams. It runs an action pipeline that clicks the page, navigates into the largest iframe, solves Cloudflare Turnstile if detected, and retries by clicking again. This approach works on most streaming sites but fails against sophisticated bot protection.

_daily.dev surfaces tool-building writeups like headless browser automation for developers exploring similar extraction pipelines._

### Why do I need --network host when running the castor Docker image?

Host networking is required because device discovery uses SSDP multicast and the TV streams back from castor's replay server, neither of which survives Docker's bridge network. Host networking only works properly on Linux; on Docker Desktop for macOS or Windows it cannot reach the TV, so the binary should be run natively on those platforms instead.

_Developers debugging Docker networking quirks for local device discovery can find similar deep-dives on daily.dev._

### What do I need installed to build castor from source with Go?

Building castor from source requires Go 1.26+ and cmake, since the whisper.cpp bindings are cgo-based and link a locally built libwhisper.a static library. Running go install alone will not work because the vendored whisper.cpp bindings come in through a local Go module replace directive and require that prebuilt static library to already exist.

_daily.dev helps Go developers track cgo and native dependency build quirks like this one._

## Similar posts on daily.dev

- [I finally found an open-source tool that casts web video to my TV without hijacking my PC screen](https://daily.dev/posts/i-finally-found-an-open-source-tool-that-casts-web-video-to-my-tv-without-hijacking-my-pc-screen-if09mo0tk) · XDA Developers · 0 upvotes · 0 comments
- [I use this open-source tool to easily cast any video to my smart TV](https://daily.dev/posts/i-use-this-open-source-tool-to-easily-cast-any-video-to-my-smart-tv-cv7olskem) · XDA Developers · 0 upvotes · 0 comments
- [I ditched Chromecast for an open-source casting tool, and my home network finally felt mine again](https://daily.dev/posts/i-ditched-chromecast-for-an-open-source-casting-tool-and-my-home-network-finally-felt-mine-again-clhoxks1v) · XDA Developers · 0 upvotes · 0 comments
- [Scrcpy 5.0 adds hardware decoding for Android mirroring](https://daily.dev/posts/scrcpy-5-0-adds-hardware-decoding-for-android-mirroring-c2erzqjzu) · omg\! ubuntu\! · 0 upvotes · 0 comments
- [Control any computer remotely](https://daily.dev/posts/control-any-computer-remotely-stneklera) · Hacker News · 15 upvotes · 0 comments

---

Tags: [#golang](https://daily.dev/tags/golang)

[View this post on daily.dev](https://daily.dev/posts/github---stupside-castor-vtxut14aj)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"GitHub - stupside/castor","url":"https://daily.dev/posts/github---stupside-castor-vtxut14aj","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/github---stupside-castor-vtxut14aj"},"datePublished":"2026-07-19T02:47:00.856Z","dateModified":"2026-09-14T08:02:52.169Z","description":"Castor is an open-source Go CLI tool that extracts video streams from websites and casts them to smart TVs over DLNA/UPnP or Chromecast. It uses a headless...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/fe2b8c0efcab0002e86322a9ec7a4495?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/fe2b8c0efcab0002e86322a9ec7a4495?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Hacker News","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Hacker News","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/hn","url":"https://daily.dev/sources/hn"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/github---stupside-castor-vtxut14aj","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":2},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"golang","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Hacker News","item":"https://daily.dev/sources/hn"},{"@type":"ListItem","position":3,"name":"GitHub - stupside/castor"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/github---stupside-castor-vtxut14aj#faq","mainEntity":[{"@type":"Question","name":"How does castor extract video streams from streaming websites?","acceptedAnswer":{"@type":"Answer","text":"Castor launches a headless Chrome instance with a randomized browser fingerprint and stealth scripts to avoid automation detection, then listens to all network activity through the Chrome DevTools Protocol to capture video streams. It runs an action pipeline that clicks the page, navigates into the largest iframe, solves Cloudflare Turnstile if detected, and retries by clicking again. This approach works on most streaming sites but fails against sophisticated bot protection. daily.dev surfaces tool-building writeups like headless browser automation for developers exploring similar extraction pipelines."}},{"@type":"Question","name":"Why do I need --network host when running the castor Docker image?","acceptedAnswer":{"@type":"Answer","text":"Host networking is required because device discovery uses SSDP multicast and the TV streams back from castor's replay server, neither of which survives Docker's bridge network. Host networking only works properly on Linux; on Docker Desktop for macOS or Windows it cannot reach the TV, so the binary should be run natively on those platforms instead. Developers debugging Docker networking quirks for local device discovery can find similar deep-dives on daily.dev."}},{"@type":"Question","name":"What do I need installed to build castor from source with Go?","acceptedAnswer":{"@type":"Answer","text":"Building castor from source requires Go 1.26+ and cmake, since the whisper.cpp bindings are cgo-based and link a locally built libwhisper.a static library. Running go install alone will not work because the vendored whisper.cpp bindings come in through a local Go module replace directive and require that prebuilt static library to already exist. daily.dev helps Go developers track cgo and native dependency build quirks like this one."}}]}
```

