Skip to main content

tuxcast: the toolkit for streaming on Linux

CI Latest release Python 3.11+ Zero dependencies No root needed MIT license Documentation

English · Français

tuxcast finds what will break your stream before you go live, then fixes it. It converts your Elgato Stream Deck profiles, connects the apps Flatpak and snap keep apart, and splits your audio so every source gets its own fader. One command each, no root, no dependencies.

pipx install git+https://github.com/achedon12/tuxcast.git
tuxcast doctor

Watch tuxcast in 22 seconds
▶ Watch tuxcast in 22 seconds

tuxcast doctor checking a Stream Deck, Discord, Spotify and the network

Why

Streaming on Linux works well, until it doesn't, and it always breaks in the same places:

  • 🎛️ Your Stream Deck. Elgato's app does not exist for Linux, and your 8 pages of keys need rebuilding by hand.
  • 🔇 Discord keys that do nothing. Your Stream Deck app is a Flatpak, Discord is a snap, and neither can see the other.
  • ⏯️ Media buttons that do nothing either. The Spotify snap ignores remote control.
  • 🎚️ One audio mix. You can't keep the music out of your VODs or lower Discord alone.
  • 📶 "Unstable bitrate." Twitch blames your connection and your speed test says it's fine (it's the Wi-Fi).

Each of these has a fix buried in a forum thread. tuxcast checks for all of them and applies the fixes.

What it does

Command
tuxcast ui Opens a control desk for everything below: a go-live tally, your Stream Deck and its pages, a mixer with faders, one-click fixes (live demo)
tuxcast doctor Checks display server, audio, GPU encoder, OBS, Stream Deck, Discord, Spotify and network. Each problem comes with its fix
tuxcast convert Turns Elgato .streamDeckProfile exports into StreamController pages: images, folders, multi actions, hotkeys (AZERTY and QWERTZ aware), OBS, Discord and Twitch keys
tuxcast bridge discord Exposes Discord's socket (snap, Vesktop, native) to Flatpak clients, and recreates the bridge at every login
tuxcast audio Separate PipeWire sinks for game, music, voice and alerts, and routes apps to them
tuxcast deck Lists Stream Decks, prints the udev rule they need, and resets one that froze after a crash, without unplugging it
tuxcast patch Re-applies the fixes you made to app files every time an update wipes them

Or run it from a control desk

tuxcast ui opens a dashboard on your machine: a tally that tells you whether you can go live, your Stream Deck with its real pages, a mixer with a fader per audio channel, and a button for every fix. Try the live demo, no install needed.

The tuxcast dashboard: the tally, a Stream Deck with its pages, the checks and the audio mixer

Bring your Stream Deck profiles from Windows

tuxcast convert turning an Elgato profile into StreamController pages

Install

You need Python 3.11 or newer, which every current distribution ships.

pipx install git+https://github.com/achedon12/tuxcast.git

or uv tool install git+https://github.com/achedon12/tuxcast.git, or the installer script (curl -fsSL https://raw.githubusercontent.com/achedon12/tuxcast/main/install.sh | sh). Then start with tuxcast doctor.

Guides

The website (also in the wiki) has a guide for each part of a Linux streaming setup, with the manual steps for people who prefer to do it by hand:

Streaming on Linux in 2026 · OBS on Linux · Stream Deck on Linux · Audio routing · Discord and Spotify in sandboxes · Music without claims · Network

Principles

  • Reads before it writes. doctor never changes anything. Other commands say what they wrote, and most take --dry-run.
  • Never needs root. Everything happens in your user session. The one privileged step (the udev rule) is printed for you to run.
  • Zero dependencies. Python's standard library only, so it installs in seconds and keeps working.
  • Explains itself. Every warning says why it matters on stream and how to fix it.

Roadmap

  • Doctor, converter, Discord bridge, audio sinks, deck tools, patch keeper
  • tuxcast obs: apply encoder presets and multistream outputs to an OBS profile
  • More Elgato plugins in convert (soundboard, Spotify, Voicemeeter equivalents)
  • A doctor --watch mode to keep in an OBS dock while live
  • Packages on PyPI and the AUR

Ideas and votes go to Discussions.

Contributing

Every Linux setup is a little different, so your reports matter as much as code: a doctor check that got your machine wrong, an Elgato action that didn't convert, a guide missing your desktop. See CONTRIBUTING.md. Issues labelled good first issue are a good start; most Elgato mappings are one line.

If tuxcast saved your stream, a ⭐ helps other Linux streamers find it.

License

MIT. tuxcast is not affiliated with Elgato, OBS, Discord, Spotify or Twitch.

Metadata

Release files for tuxcast 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tuxcast 0.1.0
File Size Uploaded
tuxcast-0.1.0.tar.gz 217.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tuxcast 0.1.0
File Interpreter ABI Platform
tuxcast-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 433.9 kB

Release files / tuxcast-0.1.0.tar.gz

Download URL tuxcast-0.1.0.tar.gz
Size 217.6 kB
Tags Source
SHA-256 checksum
How to use checksums
b7c3f463201c71f6634d58b0d03c00806a32badc532769d75e07707839dd9de5
BLAKE2b-256 checksum
How to use checksums
9528b877fc943e728503010c06e06df504e635b366fd7d29364ec621feae4a20
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release files / tuxcast-0.1.0-py3-none-any.whl

Download URL tuxcast-0.1.0-py3-none-any.whl
Size 216.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2ede451fec1281c26c94f4479f79399e6f284f45d69d8420c90e36d6d729805f
BLAKE2b-256 checksum
How to use checksums
ccbaec684ef68ff3d48c0479a213ba0110a9a2fa3407e0f4354b207718f37b6a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page