remux

Live media for one person, from a shell.
Screen, camera, mic, music → one 1080p scene → Twitch, YouTube, any RTMP. Recorded.

Free. Source (GPL-3.0). macOS, Linux.


1. By hand

curl -fsSL https://github.com/remuxhq/core/releases/download/v0.3.0-rc.1/install.sh | sh

Asks before doing. Needs OBS (the engine is libobs). Puts remux on your PATH, starts the engine. Then:

remux health
remux sources
remux destination add twitch main --key -     # paste the key at its prompt; not echoed
remux scene layer add screen desk 1
remux scene layer add camera face FaceTime
remux audio mic Razer
remux plan
remux live
remux stop

remux guide prints the rest. Every verb takes --json. Something wrong: remux bug --open.

A relay or a chat bridge of your own, in any language: docs/relay.md and docs/wire.md are their contracts.

2. Or with an agent

For starting with nothing to read: paste into Claude Code, Codex or Cursor. It installs remux and sets up the live, and asks before every step.

Set me up to go live with remux (https://github.com/remuxhq/core), from this machine,
with no account. remux is a CLI over an engine (libobs): screen, camera, mic, music and
images become one 1080p30 scene, recorded, sent to Twitch, YouTube or any RTMP server.

How to work:
- The CLI is the manual. Read `remux guide` once, and `remux help <group> <command>`
  before a verb you have not used. Never guess a flag or edit remux's files by hand.
- Read before you change (`remux status --json`, `remux sources --json`); after a
  change, wait for its event (`remux events -f --json`), never a sleep.
- One line on what a command does before running it. On failure: the exact output,
  `remux log`, one fix at a time. A bug in remux: `remux bug`, and I decide to file it.
- Stop at every ASK. Never live, stop, cut or quit without my yes.
- Assume nothing installed beyond what remux's install script puts there: no clipboard
  tool, no image viewer, no package manager. The other scripts install what they need.
- A stream key never goes on a command line or into this chat. ASK me to run
  `remux destination add <platform> <name> --key -` in my own terminal: it asks for the
  key and does not echo it. Then check with `remux destination list`.

1. Machine: OS and CPU. remux runs on macOS 15+ on Apple silicon and Linux on X11, and
   needs OBS installed. ASK, then install:
   curl -fsSL https://github.com/remuxhq/core/releases/download/v0.3.0-rc.1/install.sh | sh
   Show me what it says first. Then `remux health`, and for each line it reports tell
   me what to do (on macOS, System Settings > Privacy & Security > Screen Recording >
   remuxd on, then `remux daemon restart`).
2. Destinations: ASK where it goes, then tell me where each key is.
   Twitch: dashboard.twitch.tv, Settings, Stream, Primary Stream key.
   YouTube: studio.youtube.com, Create, Go live, Stream, Stream key (a new channel can
   wait 24 hours for live access).
   I add each one myself, as above; you never see a key.
   One destination per platform; the engine sends to each. A relay is optional: a server
   of mine on a host, never this machine, to upload once
   (https://github.com/remuxhq/core/blob/main/docs/relay.md). With no account, the title
   and category are set on the platform's page; tell me where.
3. Picture: `remux sources`, ASK which screen, camera and windows. Two scenes, the live
   always opening on the second:
   - the live one, with those layers (`remux scene create <name>`, then the layers);
   - `remux scene duplicate "Starting soon"`: hide every capture in it, add a text layer
     saying the live starts soon, and leave it active. Hidden captures stay open, so the
     switch later is instant.
   `remux scene shot --out /tmp/scene.jpg` for each, look at the image yourself, tell me
   what is in it and ASK if it is right.
4. Sound: ASK which mic, `remux audio mic <name>`, `remux levels` while I talk, then
   `remux audio mute on`: the live opens with the music alone. The gate is on
   (`remux audio gate`). Music comes from the folder `remux config` names, one folder
   per genre. A call or another app: `remux audio layer add app <id> <app>`, muted
   until I start; a layer of an app ducks under my voice unless told `duck <id> off`.
5. Chat, if I want it (ASK): a bridge of my own, in a language I pick, on the contract in
   https://github.com/remuxhq/core/blob/main/docs/wire.md (a WebSocket server sending one
   line of chat per frame); then `remux chat url ws://...` and `remux chat read -f`.
6. Rehearse (ASK): `remux record start`, a minute, `remux record stop`, and ASK me to
   watch the file it names; or a sandbox (`remux destination sandbox <id> on`, which acts
   on Twitch alone; for YouTube, a private broadcast).
   Then `remux plan --json`, show me the plan, and on my yes
   `remux live --confirm <fingerprint>`.
7. On air: it opens on Starting soon. On my word, unmute the mic and the call and
   `remux scene switch <live scene>`. `remux events -f` for what happens and what is
   said; change things only when I ask. On my word, `remux stop`, then `remux history`.

Runs on

SystemNeedsStatus
macOS 15+, Apple siliconOBS 32yes
macOS on Intelnot yet
Linux on X11 (Ubuntu 24.04+)OBS 30+ from the distroyes
Linux on Waylandnot yet
Windowsnot yet

Plans

PlanAccountDestinationsWhat
FreenoanyCLI + engine. Your own relay and chat.now
Goyes3Our relay and chat. Platforms told what the live is.cooking
Studioyes3Go + the studio in a browser. No install.cooking
Nativeyes5Studio + the macOS app.cooking

No watermark. The paid parts live on our servers; the binary you run is whole.


github.com/remuxhq/core · GPL-3.0 · uninstall: ~/.local/share/remux/current/uninstall.sh