Cast your files, URLs, screen, an app window, or this PC's sound to Chromecast, AirPlay, UPnP/DLNA, Sonos, Roku, or Kodi. Screen-reader friendly.
  • Python 99.5%
  • Shell 0.5%
Find a file
serrebidev 4403a7cd80 docs: configure Matt Pocock engineering skills
Add docs/agents issue tracker, triage label and domain doc config, and
an Agent skills section in AGENTS.md, as written by setup-matt-pocock-skills.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 15:20:45 -07:00
.github/workflows Build: update dependencies and casting libraries 2026-10-03 17:33:26 -07:00
docs/agents docs: configure Matt Pocock engineering skills 2026-10-22 15:20:45 -07:00
scratchpad Remove the source's replayed audio and video from live streams 2026-09-07 20:21:40 -07:00
tests fix: only break away from a job object that allows it 2026-10-05 23:05:15 +00:00
tools Build: update dependencies and casting libraries 2026-10-03 17:33:26 -07:00
.gitattributes build: add macOS/Linux builds and a cloud release workflow for cloud agents 2026-09-22 22:07:38 -07:00
.gitignore chore: ignore the per-machine memory index 2026-09-15 00:32:51 -07:00
AGENTS.md docs: configure Matt Pocock engineering skills 2026-10-22 15:20:45 -07:00
build.sh build: add macOS/Linux builds and a cloud release workflow for cloud agents 2026-09-22 22:07:38 -07:00
caster.py Release v0.5.29 2026-10-05 23:06:57 +00:00
caster.spec build: add macOS/Linux builds and a cloud release workflow for cloud agents 2026-09-22 22:07:38 -07:00
caster_config.py fix: buffer live Cast startup and recover frozen receivers 2026-09-11 13:33:45 -07:00
caster_devices.py fix: repair AirPlay streaming, Cast stop and format handling 2026-09-14 23:14:34 -07:00
caster_extras.py fix: only break away from a job object that allows it 2026-10-05 23:05:15 +00:00
caster_ui.py build: add macOS/Linux builds and a cloud release workflow for cloud agents 2026-09-22 22:07:38 -07:00
caster_update.py fix: repair AirPlay streaming, Cast stop and format handling 2026-09-14 23:14:34 -07:00
LICENSE Fix live-stream playback, connect latency, and add a test suite 2026-09-04 14:11:05 -07:00
pytest.ini Fix live-stream playback, connect latency, and add a test suite 2026-09-04 14:11:05 -07:00
README.md Fix Windows portable updater paths, copying and failure recovery 2026-09-07 19:36:34 -07:00
release.py build: finish macOS and Linux from the host release 2026-09-23 01:54:55 -07:00
requirements.txt Build: update dependencies and casting libraries 2026-10-03 17:33:26 -07:00

Caster

A vibe-coded, screen-reader-friendly desktop caster for Windows. Send a file, a URL, your screen, one app window, or just this PC's sound to whatever is on your network — Chromecast, AirPlay, UPnP/DLNA, Sonos, Roku, or Kodi.

Join SerrebiProjects on Telegram

Have a question, hit a bug, or want early word on new releases? Join the SerrebiProjects Telegram group — the community hub for Caster and my other projects, and the fastest place to get help.

Features

  • Casts local media files, http(s) URLs, live IPTV channels, and YouTube links.
  • Casts your whole screen, a single app window, or this PC's sound on its own.
  • Speaks six protocols: Chromecast, AirPlay (RAOP), UPnP/DLNA, Sonos, Roku, and Kodi.
  • Multi-room: tick several devices and they all play at once.
  • Groups Sonos speakers and MusicCast zones so the receiver keeps them in step, rather than sending each its own copy and letting them drift.
  • Finds devices on all six protocols at once — a full scan takes about five seconds, not half a minute.
  • Reads what a UPnP renderer says it accepts, so a stereo amplifier is never sent a picture it will refuse.
  • Yamaha MusicCast support: turns the receiver on to cast, selects the right input, puts it back on the input it was showing when you stop, and controls volume on the receiver's own scale in real dB rather than a guessed percentage.
  • Remuxes MPEG-TS to HLS for receivers that will not take it raw, and transcodes only when the video codec leaves no choice.
  • Sends system audio as uncompressed PCM with no encoder in the path at all, which is as close to realtime as this gets.
  • Quality presets that trade delay against tolerance for a stuttering source, from lowest delay to best picture.
  • Microphone mixing, so you can narrate over whatever you are casting.
  • Audio/video offset control for receivers that run sound ahead of picture.
  • Six system-wide hotkeys, so casting never requires finding the window.
  • Sleep timer, tray controls, favourites, and a recent-URLs list.
  • An opt-in update check that downloads an official portable release and updates invisibly after Caster closes.
  • Speaks status through NVDA directly, rather than leaving it in a status bar nobody is reading.

Accessibility

Caster is built to be used without seeing it. Every control is created behind a real label so Windows gives it the right accessible name, the device list is a checklist rather than a multi-select, and progress chatter is deliberately kept out of the speech stream so the line that matters is not talked over.

If something announces wrongly or reads awkwardly, that is a bug — please report it.

Download and install

Grab the latest build from the Releases page.

Windows portable

  1. Download Caster-portable.zip.
  2. Extract it anywhere and run Caster.exe — no installation required.

ffmpeg.exe ships beside the executable, so there is nothing else to install.

Settings live in %APPDATA%\Caster\settings.json. Deleting the folder you extracted leaves them untouched.

To update an existing portable copy, choose Help > Check for updates. Caster checks its official GitHub Releases page, asks before downloading, then closes, replaces its portable files invisibly, and opens the new version. It never checks, downloads, or installs an update automatically.

If installation fails, the updater attempts to restore the previous files and keeps its downloaded archive. Details are saved in %LOCALAPPDATA%\Caster\updates\install.log.

Run from source

  1. Install Python 3.14.
  2. Install dependencies: pip install -r requirements.txt
  3. Make sure ffmpeg is on your PATH.
  4. Launch it: python caster.py

soco is optional — without it every other protocol still works and Sonos speakers simply do not appear.

Hotkeys

Keys Action
Ctrl+Alt+S Cast the screen
Ctrl+Alt+A Cast this PC's sound
Ctrl+Alt+X Stop casting
Ctrl+Alt+M Mute or unmute
Ctrl+Alt+Up / Down Volume up or down

These are system-wide. If another program already owns one, Caster says so in the status line rather than losing it silently.

Diagnostic trace

Set CASTER_TRACE to a file path before launching and Caster writes a timeline there — every probe, every encoder, every state the receiver reported, with timestamps. Buffering is a timing problem and timing problems are invisible from a status bar. With the variable unset, nothing is written and nothing is measured.

A note on IPTV sources

Live IPTV servers vary enormously. Many close the connection every ten to twenty seconds. Left alone, ffmpeg reconnects by asking to resume at a byte offset — a position a live stream does not have — so the server answers with its current live edge and the overlap is audio you have already heard. Caster declares those sources unseekable, which stops the request being made at all.

That one change fixed the startup delay as well as the jumping: the constant reconnects were disrupting the stream badly enough to slow segment production to a crawl. Two channels measured here now start in 0.7 and 2.8 seconds, where one of them used to take over twenty.

Contributing

Pull requests are welcome. If Caster has been useful to you, open a PR with a fix or feature and I'll review it.

License

Caster is under the MIT license — use it, change it, redistribute it, or package it for a distro repository, no permission needed. Every source file carries an SPDX-License-Identifier: MIT header so packaging tools can pick the license up automatically.

Community and support

Report bugs and request features in Issues. For questions, feedback, and release news, join the SerrebiProjects Telegram group.