{"id":50932501,"url":"https://github.com/IlyaP358/fluxcast","last_synced_at":"2026-07-04T23:00:32.823Z","repository":{"id":355947145,"uuid":"1226871398","full_name":"IlyaP358/fluxcast","owner":"IlyaP358","description":"Stream your Linux desktop to a Smart TV via Miracast/WFD, DLNA, or Chromecast.","archived":false,"fork":false,"pushed_at":"2026-07-03T00:16:02.000Z","size":1439,"stargazers_count":251,"open_issues_count":11,"forks_count":9,"subscribers_count":5,"default_branch":"main","last_synced_at":"2026-07-03T02:15:16.153Z","etag":null,"topics":["cast","gnome","hyprland","kde-plasma","linux","miracast","pipewire","python","screencast","screencasting","screensharing","screensharing-tool","sway","xdg-portal"],"latest_commit_sha":null,"homepage":"https://fluxcast.secweb.cloud/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/IlyaP358.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"ko_fi":"fluxcast"}},"created_at":"2026-05-01T23:23:33.000Z","updated_at":"2026-07-02T20:02:52.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/IlyaP358/fluxcast","commit_stats":null,"previous_names":["ilyap358/fluxcast"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/IlyaP358/fluxcast","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaP358%2Ffluxcast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaP358%2Ffluxcast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaP358%2Ffluxcast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaP358%2Ffluxcast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/IlyaP358","download_url":"https://codeload.github.com/IlyaP358/fluxcast/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/IlyaP358%2Ffluxcast/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35138078,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cast","gnome","hyprland","kde-plasma","linux","miracast","pipewire","python","screencast","screencasting","screensharing","screensharing-tool","sway","xdg-portal"],"created_at":"2026-06-17T06:00:22.345Z","updated_at":"2026-07-04T23:00:32.815Z","avatar_url":"https://github.com/IlyaP358.png","language":"Python","funding_links":["https://ko-fi.com/fluxcast"],"categories":["Cross-platform tools"],"sub_categories":["Google Chromecast"],"readme":"# FluxCast\n\n\u003cimg src=\"https://fluxcast.secweb.cloud/flcast_logo_512x512.png\" width=\"150\" display=\"block\"\u003e\n\nFluxCast streams a Linux desktop to a TV.\n\n[![Release](https://img.shields.io/github/v/release/IlyaP358/fluxcast?style=flat-square\u0026color=green)](https://github.com/IlyaP358/fluxcast/releases)\n[![Python](https://img.shields.io/badge/python-3.10+-blue?style=flat-square\u0026logo=python\u0026logoColor=white)](https://www.python.org/)\n[![Platform](https://img.shields.io/badge/platform-Linux-lightgrey?style=flat-square\u0026logo=linux)](https://www.linux.org/)\n[![Issues](https://img.shields.io/github/issues/IlyaP358/fluxcast?style=flat-square\u0026color=red)](https://github.com/IlyaP358/fluxcast/issues)\n[![PRs](https://img.shields.io/github/issues-pr/IlyaP358/fluxcast?style=flat-square)](https://github.com/IlyaP358/fluxcast/pulls)\n\n## Demo\n\nhttps://github.com/user-attachments/assets/ce01804c-2f86-4a5d-8ecf-d6f2a72f55d1\n\n## Project Status\n\nCurrent validated scope:\n\n- `wfd` is the primary path and the only mode tested as release-ready.\n- `dlna` works as fallback.\n- `cast` is experimental and currently not working in the tested Samsung setup.\n\nThe project currently focuses on **WFD/Miracast on Linux (Hyprland/wlroots class setups)**.  \nDLNA and Cast are available, but they are best treated as fallback or experimental paths.\n\nCurrent limitation:\n\n- KDE/GNOME Wayland desktop capture uses `xdg-desktop-portal` in WFD mode.\n- For portal mode, install Python dependency `dbus-next` and allow screen-share in the desktop picker dialog.\n\n## Quick Start\n\nDefault WFD run (interactive monitor/peer selection):\n\n```bash\npython3 src/main.py\n```\n\nWFD with latency/session JSONL log:\n\n```bash\npython3 src/main.py --wfd-latency-log\n```\n\nDLNA fallback:\n\n```bash\npython3 src/main.py --protocol dlna --transport hls\n```\n\nCast mode (optional, if your TV supports it):\n\n```bash\npython3 src/main.py --protocol cast\n```\n\nForce backend manually (if auto is not suitable on your session):\n\n```bash\npython3 src/main.py --capture-backend wf-recorder\npython3 src/main.py --capture-backend x11grab\npython3 src/main.py --protocol wfd --wfd-capture-backend portal\npython3 src/main.py --protocol wfd --wfd-capture-backend wf-recorder\npython3 src/main.py --protocol wfd --wfd-capture-backend x11grab\n```\n\n## What Works Best\n\n### WFD (Primary)\n\n```text\nscreen + audio capture -\u003e H.264/AAC RTP -\u003e Wi-Fi Direct + RTSP -\u003e TV WFD receiver\n```\n\nThis is the lowest-latency and most predictable path in the current codebase.\n\n### DLNA (Fallback)\n\n```text\ndesktop capture -\u003e HTTP stream -\u003e DLNA/UPnP AVTransport -\u003e native TV player\n```\n\n- Prefer `--transport hls` on Samsung TVs.\n- `progressive-ts` can freeze or stutter on some models.\n\n### Cast (Optional)\n\n- Requires a TV/device with real Google Cast support.\n- Requires `pychromecast`.\n- Not reliable on many Samsung TV models.\n\n\n## Installation\n\n### AppImage\n\nDownload the latest `FluxCast-x86_64.AppImage` from the [Releases](https://github.com/IlyaP358/fluxcast/releases) page, then:\n\n```bash\nchmod +x FluxCast-x86_64.AppImage\n./FluxCast-x86_64.AppImage\n```\n\nOn first launch FluxCast will ask for your password once to install a system file for Wi-Fi Direct.\n\nDepending on your desktop environment, you may need to install:\n- Hyprland / Sway: `wf-recorder`, `ffmpeg`\n- KDE / GNOME: `gst-plugins-ugly` (package name varies by distro)\n\n### PyPI\n\n```bash\npip install fluxcast\nsudo fluxcast-install-system\n```\n\n`fluxcast-install-system` installs the D-Bus policy, desktop entry, and system packages (GStreamer, ffmpeg, NetworkManager, etc.). Run it once after the pip install.\n\n\n### Arch Linux - AUR\n\n```bash\nyay -S fluxcast-git\n# or\nparu -S fluxcast-git\n```\n\n### From source\n\n```bash\ngit clone https://github.com/IlyaP358/fluxcast.git\ncd fluxcast\npip install -r requirements.txt\nsudo meta/install.sh\nsudo systemctl reload dbus\nsudo gtk-update-icon-cache /usr/share/icons/hicolor\n```\n\n\u003e [!WARNING]\nIf `PIP` refuses to install the required libraries to your system, you will need to do that yourself using your distro's package manager.\n\nDLNA/Cast features require additional packages listed in `requirements.txt`.\n\n### System tools (just as important)\n\nWFD mode also depends on system binaries, not only Python packages:\n\n- `ffmpeg`\n- `wf-recorder` (Wayland/wlroots capture path)\n- `xdg-desktop-portal` (+ desktop backend: `xdg-desktop-portal-kde` / `xdg-desktop-portal-gnome` / `xdg-desktop-portal-wlr`)\n- `nmcli`, `gdbus`, `iw`, `wpa_cli` (Wi-Fi Direct and diagnostics)\n- `pactl` (audio monitor autodetect)\n\nUse:\n\n```bash\npython3 src/main.py --doctor\n```\n\nto check your machine before running WFD.\n\nNote: on KDE/GNOME Wayland, WFD auto backend now prefers `portal` first.\n\nNote: 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](documentation/DOCUMENTATION.md) -\u003e \"WFD and firewalld\".\n\n\n## Documentation\n\nDetailed flags, modes, and usage examples:  \n[documentation/DOCUMENTATION.md](documentation/DOCUMENTATION.md)\n\n## Tested Environment\n\n### Hardware:\n\n\u003cdetails\u003e\n\u003csummary\u003eThinkBook 14 G4+ IAP\u003c/summary\u003e\n\n- CPU: Intel i5-1240P (16 threads) up to 4.40 GHz\n- GPU: Intel Iris Xe Graphics\n- RAM: 16 GB\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eDell XPS 13 Plus\u003c/summary\u003e\n\n- CPU: Intel i5-1260P (16 threads) up to 4.70 GHz\n- GPU: Intel Iris Xe Graphics\n- RAM: 16 GB LPDDR5\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eThinkPad T14 Gen 4\u003c/summary\u003e\n\n- CPU: Intel i7-1355U (12 threads) up to 5.00 GHz\n- GPU: Intel Iris Xe Graphics\n- RAM: 32 GB\n\n\u003c/details\u003e\n\n\n### Software:\n\n\u003cdetails\u003e\n\u003csummary\u003eArch Linux\u003c/summary\u003e\n\n- Kernels: 7.0.8-arch1-1, 6.12.91-1-lts612\n- WMs: Hyprland (0.55.2)\n- DEs (for testing): KDE Plasma (6.6.5) | GNOME (50.1)\n- Shell: zsh (5.9), fish (4.7.1)\n- Terminal: kitty (0.46.2, 0.47.1)\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003eCachyOS\u003c/summary\u003e\n\n- Kernels: 7.0.3-1-cachyos\n- DEs (for testing): KDE Plasma (6.6.4)\n- Shell: bash (5.3.9)\n- Terminal: konsole (26.4.0)\n\n\u003c/details\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIlyaP358%2Ffluxcast","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FIlyaP358%2Ffluxcast","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FIlyaP358%2Ffluxcast/lists"}