Some checks failed
dev release / build (push) Failing after 12s
Builds out the full v1 scope: a vendored+patched openscreen subset for low-latency Cast Streaming (Mirroring receiver 0F5096E8) alongside the existing Cast V2/HLS and new DLNA/AVTransport casting paths, breadcastd's Idle/Casting state machine with a private IPC socket, the breadcast GTK4 popup as a thin IPC client, and bread.cast.*/bread.command.cast.* breadd integration (device discovery, start/stop, mirroring lifecycle events). Also adds bakery/systemd/Forgejo CI packaging. Validated end-to-end against a real Chromecast/Google TV: negotiated Cast Streaming session, live pipeline playback, and daemon+GUI click-to-cast/ stop through the actual popup.
97 lines
2.9 KiB
Markdown
97 lines
2.9 KiB
Markdown
# breadcast
|
|
|
|
Cast your screen to any Chromecast/Google TV, for Hyprland. It consists of
|
|
two binaries:
|
|
|
|
- **`breadcastd`** — a background daemon that discovers Cast devices on the
|
|
LAN and (once built — see Status) owns the screen-capture/encode/serve
|
|
pipeline and the live Cast V2 session.
|
|
- **`breadcast`** — a GTK4 Layer Shell popup for picking a device and
|
|
starting/stopping a cast.
|
|
|
|
## Status
|
|
|
|
This is early: device discovery (mDNS) and the Cast V2 sender (real device
|
|
control — connect, launch the receiver, load media) are built and validated
|
|
against real Chromecast/Google TV hardware. The actual screen-mirroring
|
|
pipeline (portal-based screen capture → GPU-accelerated encode → HLS →
|
|
local HTTP server) and the GTK4 device-picker UI are not built yet.
|
|
`breadcastd` today only does discovery and optional breadd event
|
|
publishing; `breadcast` is a stub binary. See `CLAUDE.md`'s Status section
|
|
for more detail.
|
|
|
|
## Requirements
|
|
|
|
- Rust toolchain (edition 2021)
|
|
- GTK 4.12+ and `gtk4-layer-shell` (once the UI lands)
|
|
- GStreamer + `gst-plugin-pipewire`, `gst-plugins-bad` (VA-API `va` plugin),
|
|
`gst-plugin-hlssink3` (once the capture pipeline lands)
|
|
- Hyprland (or any Wayland compositor with Layer Shell and the
|
|
`xdg-desktop-portal` ScreenCast interface)
|
|
|
|
## Build
|
|
|
|
```sh
|
|
git clone https://git.breadway.dev/breadway/breadcast
|
|
cd breadcast
|
|
cargo build --release
|
|
```
|
|
|
|
The compiled binaries are at `target/release/breadcast` and
|
|
`target/release/breadcastd`.
|
|
|
|
## Try device discovery today
|
|
|
|
```sh
|
|
cargo run -p breadcast-core --example discover
|
|
```
|
|
|
|
Prints Chromecast/Google TV devices as they appear/disappear on the LAN.
|
|
|
|
## Install
|
|
|
|
Copy the binaries to somewhere on your `$PATH`, e.g.:
|
|
|
|
```sh
|
|
cp target/release/breadcast target/release/breadcastd ~/.local/bin/
|
|
```
|
|
|
|
### systemd user service
|
|
|
|
A unit file is provided in `contrib/`:
|
|
|
|
```sh
|
|
cp contrib/breadcastd.service ~/.config/systemd/user/
|
|
systemctl --user daemon-reload
|
|
systemctl --user enable --now breadcastd
|
|
```
|
|
|
|
### Hyprland keybind
|
|
|
|
For stock Hyprland, add the contents of `contrib/hyprland.conf` to your
|
|
`hyprland.conf`:
|
|
|
|
```
|
|
layerrule = blur, breadcast
|
|
layerrule = ignorezero, breadcast
|
|
|
|
bind = $mainMod, C, exec, breadcast
|
|
```
|
|
|
|
On BOS, Hyprland config is Lua+JSON-driven instead — see
|
|
`contrib/binds.json` for the equivalent keybind entry to merge into your
|
|
`binds.json` by hand (there's no per-app self-registration mechanism yet).
|
|
There is currently no BOS-native equivalent for the `layerrule` blur lines.
|
|
|
|
## bread event integration
|
|
|
|
`breadcastd` optionally publishes into the shared bread automation fabric
|
|
(`bread.cast.*`) when `breadd` is running, and works identically without
|
|
it. See `EVENTS.md` for the full, honest-about-scope contract — most of the
|
|
eventually-planned events (mirroring start/stop) aren't implemented yet,
|
|
since the mirroring pipeline itself isn't built yet.
|
|
|
|
## Theming
|
|
|
|
`breadcast` will inherit its colour palette from `bread-theme`, matching
|
|
the rest of the ecosystem, once its GTK4 UI is built.
|