Stream your Linux desktop to a Smart TV via Miracast/WFD, DLNA, or Chromecast
Project description
FluxCast
FluxCast streams a Linux desktop to a TV.
Demo
https://github.com/user-attachments/assets/ce01804c-2f86-4a5d-8ecf-d6f2a72f55d1
Project Status
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.
Quick Start
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
What Works Best
WFD (Primary)
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.
DLNA (Fallback)
desktop capture -> HTTP stream -> DLNA/UPnP AVTransport -> native TV player
- Prefer
--transport hlson Samsung TVs. progressive-tscan freeze or stutter on some models.
Cast (Optional)
- Requires a TV/device with real Google Cast support.
- Requires
pychromecast. - Not reliable on many Samsung TV models.
Installation
AppImage
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)
PyPI
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.
Arch Linux - AUR
yay -S fluxcast-git
# or
paru -S fluxcast-git
From source
git 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/hicolor
[!WARNING] If
PIPrefuses 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.
System tools (just as important)
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.
Documentation
Detailed flags, modes, and usage examples:
documentation/DOCUMENTATION.md
Tested Environment
Hardware:
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
- 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
Software:
Arch Linux
- Kernels: 7.0.8-arch1-1, 6.12.91-1-lts612
- WMs: Hyprland (0.55.2)
- DEs (for testing): KDE Plasma (6.6.5) | GNOME (50.1)
- Shell: zsh (5.9), fish (4.7.1)
- Terminal: kitty (0.46.2, 0.47.1)
CachyOS
- Kernels: 7.0.3-1-cachyos
- DEs (for testing): KDE Plasma (6.6.4)
- Shell: bash (5.3.9)
- Terminal: konsole (26.4.0)
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fluxcast-0.1.2.tar.gz.
File metadata
- Download URL: fluxcast-0.1.2.tar.gz
- Upload date:
- Size: 342.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1d98c640358d15c97a4d5d381b3aedf7e646961a1e15e7f0aa90b9919a9842f
|
|
| MD5 |
4d1ebbc0bc6d394284c19c61342cd48e
|
|
| BLAKE2b-256 |
bec024cde9da0683a450f6ce00166e9ea6ade051784bc2b56755be97ed72157b
|
File details
Details for the file fluxcast-0.1.2-py3-none-any.whl.
File metadata
- Download URL: fluxcast-0.1.2-py3-none-any.whl
- Upload date:
- Size: 177.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
88dfdb3665e0fce3604954dca6edb5da7145770457f81d49849a47ea81009df3
|
|
| MD5 |
81ae8781bc61b10710995f4b6898aa4f
|
|
| BLAKE2b-256 |
a032bbaaae3bbd7799e54621fc173fdcf38796e023403e0409a607d7317ca76f
|