FluxCast streams a Linux desktop to a TV.
Release Python Platform Issues PRs
🌐 Need a free subdomain for your project? Check out sub.fluxcast.dev (GitHub repo) — a free GitOps subdomain registry for developers!
web_demo.mp4
Current validated scope:
wfdis the primary path and the only mode tested as release-ready.dlnaworks as fallback.castis experimental and currently not working in the tested Samsung setup.
The project currently focuses on WFD/Miracast on Linux (Hyprland/wlroots class setups).
DLNA and Cast are available, but they are best treated as fallback or experimental paths.
Current limitation:
- KDE/GNOME Wayland desktop capture uses
xdg-desktop-portalin WFD mode. - For portal mode, install Python dependency
dbus-nextand allow screen-share in the desktop picker dialog.
The tray picks your language up from the system locale, no configuration needed.
| Language | Maintainer |
|---|---|
| English | IlyaP358 |
| Русский | IlyaP358 |
| Čeština | IlyaP358 |
| Danish | normann |
| Deutsch | therealresonix |
| Français | t0mab |
Adding your language means editing one JSON file and no code at all. See CONTRIBUTING.md.
Default WFD run (interactive monitor/peer selection):
python3 src/main.py
WFD with latency/session JSONL log:
python3 src/main.py --wfd-latency-log
DLNA fallback:
python3 src/main.py --protocol dlna --transport hls
Cast mode (optional, if your TV supports it):
python3 src/main.py --protocol cast
Force backend manually (if auto is not suitable on your session):
python3 src/main.py --capture-backend wf-recorder python3 src/main.py --capture-backend x11grab python3 src/main.py --protocol wfd --wfd-capture-backend portal python3 src/main.py --protocol wfd --wfd-capture-backend wf-recorder python3 src/main.py --protocol wfd --wfd-capture-backend x11grab
WFD P2P connection troubleshooting - talk to wpa_supplicant directly instead of going through NetworkManager, and optionally pin the group to a 2.4GHz channel for sinks that don't support Wi-Fi Direct on 5GHz:
python3 src/main.py --protocol wfd --wfd-p2p-backend wpas python3 src/main.py --protocol wfd --wfd-p2p-backend wpas --wfd-p2p-channel 6
Needs the D-Bus policy in meta/zz-dev.fluxcast.wpa-supplicant.conf
installed to /usr/share/dbus-1/system.d/. On Debian/Ubuntu, a user in the
netdev group can then run it without sudo; elsewhere (including Arch)
it falls back to sudo - see the file for details.
screen + audio capture -> H.264/AAC RTP -> Wi-Fi Direct + RTSP -> TV WFD receiver
This is the lowest-latency and most predictable path in the current codebase.
desktop capture -> HTTP stream -> DLNA/UPnP AVTransport -> native TV player
- Prefer
--transport hlson Samsung TVs. progressive-tscan freeze or stutter on some models.
- Requires a TV/device with real Google Cast support.
- Requires
pychromecast. - Not reliable on many Samsung TV models.
Download the latest FluxCast-x86_64.AppImage from the Releases page, then:
chmod +x FluxCast-x86_64.AppImage ./FluxCast-x86_64.AppImage
On first launch FluxCast will ask for your password once to install a system file for Wi-Fi Direct.
Depending on your desktop environment, you may need to install:
- Hyprland / Sway:
wf-recorder,ffmpeg - KDE / GNOME:
gst-plugins-ugly(package name varies by distro)
pip install fluxcast sudo fluxcast-install-system
fluxcast-install-system installs the D-Bus policy, desktop entry, and system packages (GStreamer, ffmpeg, NetworkManager, etc.). Run it once after the pip install.
yay -S fluxcast-git
# or
paru -S fluxcast-gitgit clone https://github.com/IlyaP358/fluxcast.git
cd fluxcast
pip install -r requirements.txt
sudo meta/install.sh
sudo systemctl reload dbus
sudo gtk-update-icon-cache /usr/share/icons/hicolorWarning
If PIP refuses to install the required libraries to your system, you will need to do that yourself using your distro's package manager.
DLNA/Cast features require additional packages listed in requirements.txt.
WFD mode also depends on system binaries, not only Python packages:
ffmpegwf-recorder(Wayland/wlroots capture path)xdg-desktop-portal(+ desktop backend:xdg-desktop-portal-kde/xdg-desktop-portal-gnome/xdg-desktop-portal-wlr)nmcli,gdbus,iw,wpa_cli(Wi-Fi Direct and diagnostics)pactl(audio monitor autodetect)
Use:
python3 src/main.py --doctor
to check your machine before running WFD.
Note: on KDE/GNOME Wayland, WFD auto backend now prefers portal first.
Note: on firewalld systems, FluxCast opens the WFD RTSP port (7236/tcp) for the duration of a session and closes it on exit (no-op without firewalld; disable with --wfd-no-firewall). See DOCUMENTATION.md -> "WFD and firewalld".
If you use ufw, open the WFD RTSP port before connecting:
sudo ufw allow 7236/tcp
Detailed flags, modes, and usage examples:
documentation/DOCUMENTATION.md
| Device | Protocol | Source |
|---|---|---|
| Samsung UE55TU7092U | WFD, DLNA | IlyaP358 |
| LG OLED55B87LC | WFD | #72 |
| LG OLED55BX9LB | WFD | #11 |
| LG webOS UN8000PTA | WFD | #10 |
| LG webOS SM8100PTA | WFD | #30 |
| LG LED-43UD81 | WFD | #44 |
| Hisense VIDAA 32A5NQ | WFD | #56 |
| X1BQ-8461 projector | WFD | #84 |
| Samsung UN55DU8000GXZD | WFD | #12 |
| Samsung Galaxy Tab S9 FE | WFD | #48 |
| Microsoft 4K Wireless Display Adapter | WFD | #40 |
| Vizio TV with built-in Chromecast | Cast | #51 |
| Adapter | P2P support | Source |
|---|---|---|
| Intel AX201 | yes | #12, #72 |
| Intel AX210 | yes | #87 |
| TP-Link Archer T4U Plus (USB) | yes | #56 |
| Realtek RTL88x2bu (USB) | no | #56 |
| Realtek RTL8822CE | no | #45 |
ThinkBook 14 G4+ IAP
- CPU: Intel i5-1240P (16 threads) up to 4.40 GHz
- GPU: Intel Iris Xe Graphics
- RAM: 16 GB
Dell XPS 13 Plus — @alba4k
- CPU: Intel i5-1260P (16 threads) up to 4.70 GHz
- GPU: Intel Iris Xe Graphics
- RAM: 16 GB LPDDR5
ThinkPad T14 Gen 4
- CPU: Intel i7-1355U (12 threads) up to 5.00 GHz
- GPU: Intel Iris Xe Graphics
- RAM: 32 GB
HP ZBook Fury G8, i9 and i5 — #72, #87
- Wi-Fi: Intel AX210
- OS: EndeavourOS, KDE Plasma (X11)
Lenovo ThinkBook 16 G6 ABP — #40
- CPU: AMD Ryzen 5 7530U
- OS: Fedora Linux 44
Lenovo IdeaPad Slim 7 Pro 14IHUS — #53
- CPU: Intel i7-11370H (8 threads) 3.30 GHz
- OS: Arch Linux
ASUS VivoBook X515JF — #44
- OS: Arch Linux (zen kernel)
Desktop PC — #12
- Wi-Fi: Intel AX201
- OS: EndeavourOS
Steam Deck — #45
- Wi-Fi: Realtek RTL8822CE
- OS: SteamOS Holo 3.7.25
Arch Linux
- Kernels: 7.1.3-arch2-1, 7.0.8-arch1-1, 6.12.91-1-lts612
- WMs: Hyprland (0.55.4)
- DEs (for testing): KDE Plasma (6.6.5) | GNOME (50.1)
- Shell: zsh (5.9.2), fish (4.7.1)
- Terminal: kitty (0.47.4)
- Also reported: kernels 7.0.10-arch1-1, 7.0.10-zen1-1-zen, 7.0.12-arch1-1, 7.1.6-arch1-1 on KDE Plasma (#30, #44, #53, #89)
CachyOS
EndeavourOS — #12, #72, #87
- Kernels: 7.0.5-arch1-1, 6.18.38-3-lts
- DEs: KDE Plasma (X11)
Fedora Linux 44 — #40
- Kernels: 7.0.11-200.fc44
Manjaro Linux — #84
- Kernels: 6.18.39-1-MANJARO
- DEs: GNOME (50.3)
Linux Mint 22.3 — #56
- Kernels: 6.17.0-35-generic
Xubuntu — #51
- Kernels: 6.17.0-7-generic
- DEs: XFCE (X11)
SteamOS Holo 3.7.25 — #45
- Kernels: 6.11.11-valve27