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.
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.
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`.
| System | Needs | Status |
|---|---|---|
| macOS 15+, Apple silicon | OBS 32 | yes |
| macOS on Intel | not yet | |
| Linux on X11 (Ubuntu 24.04+) | OBS 30+ from the distro | yes |
| Linux on Wayland | not yet | |
| Windows | not yet |
| Plan | Account | Destinations | What | |
|---|---|---|---|---|
| Free | no | any | CLI + engine. Your own relay and chat. | now |
| Go | yes | 3 | Our relay and chat. Platforms told what the live is. | cooking |
| Studio | yes | 3 | Go + the studio in a browser. No install. | cooking |
| Native | yes | 5 | Studio + 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