Settings
Open Settings… from the application menu on macOS, or File → Settings… on Windows and Linux. The shortcut is Cmd+, on macOS and Ctrl+, elsewhere.
Settings opens a working copy of your profile. Apply validates the changes and asks the engine to accept them. Cancel or closing the Settings window discards edits since the last successful Apply. The window stays open after Apply so you can continue editing.
The section list stays on the left; the selected page fills the rest of the window and scrolls vertically, with its scroll bar at the window’s right edge.
Sections
- Output: switch between Simple presets and Advanced controls for existing outputs. Switching views keeps the advanced values you have chosen.
- Video: change the base canvas size and frame rate. Each output has its own canvas settings in Output. Base canvas changes require every output, including interchange senders, to be stopped.
- Audio: choose the Default input and the monitoring device. The default input is always on the mixer as the Microphone strip; Default (<device>) follows the OS default input and names it (the device list is refreshed when you open the dropdown, or with Refresh devices). The mixer runs at 48 kHz stereo. Input changes apply at once, even while outputs run: the strip reopens on the new device in the background. Add more devices from the mixer’s Add input ▸ Audio device (see Audio). Monitoring changes apply when accepted; using speakers near a microphone can cause acoustic feedback, so start with monitoring muted or use headphones.
- Streaming Services: your streaming-service accounts, one row each: the service (from the service catalogue), a display name, the Server (the catalogue’s servers; a Server URL field for a dashboard-issued or custom server), the Stream key (masked, with Show and Copy) and the Login, which is Manual key today (a disabled Sign in… button marks where connected accounts will go). + adds an account, − removes one; an account that outputs use shows “used by N outputs”, and its − asks first: those outputs keep a copy of its service, server and key, so nothing stops working. Add to Outputs creates a stream output that streams with the account, at the canvas with the service’s recommended settings, and shows it on the Output page. An output bound to an account takes the account’s server and key when it starts, so a key you rotate here needs no output edit. See Outputs › Streaming Services accounts.
- NDI: how NDI sources are discovered and received. The top line says
whether the NDI runtime is installed (or shows the install message when
it is not). Groups lists the
NDI groups to search (comma-separated; empty means the default
Publicgroup, so a sender published to another group only appears once its group is listed here). Extra IPs names hosts outside mDNS reach — another subnet, a VPN peer — or an NDI Discovery Server, comma-separated. Receive bandwidth picks the stream NDI source layers ask for: Highest (the full program stream), Lowest (the sender’s low-bandwidth preview, a few hundred pixels wide — for multiviews) or Audio only (no video is transferred). Receive colour is BGRA (the NDI runtime converts, no work in the app) or UYVY (the app converts instead, for a machine where the runtime’s decode thread is the bottleneck). Discovery changes apply at once; receive options apply to NDI sources added afterwards. Senders are configured per output in the Outputs panel. NDI® is a registered trademark of Vizrt NDI AB. - Web: the Memory ceiling for web overlays’ helper processes (default 1024 MiB, 0 = off). Over it for two samples in a row, the longest-running overlay is reloaded, at most once a minute. See Web overlays.
- RTMP Server: the RTMP/RTMPS server that other encoders publish
into: the Enable RTMP Server switch and status line, the
listeners (label, bind, port, Open port with UPnP, and each running
listener’s address, UPnP status and copyable public URL), the server options
(TLS, allow-list, failed-publish limit, target latency) and the stream keys
(generate, copy, regenerate, revoke). The switch and keys apply at once; the
listeners and server options are applied with Apply. Beside each running
listener’s Listening on … line, a Local URLs (n) dropdown lists
every URL the listener can be reached on, each with a 📋 button that
copies exactly that URL (never a stream key; the key goes in the encoder’s
own stream key field). For a listener bound to
0.0.0.0the list holds every IPv4 address of this machine: the LAN address that routes to your router first, then the other addresses (VPN, virtual adapters), then link-local (169.254.x.x) and127.0.0.1for an encoder on this machine last; a::bind adds the IPv6 addresses (notfe80::ones, which need a zone a URL cannot carry) and::1. A listener bound to one address lists just that address. URLs startrtmps://when TLS is on. When UPnP has mapped the port, the public URL is shown under the list as well. The list is re-read when Settings opens and when a listener starts or stops or a mapping changes, so an address that changes while Settings stays open shows the next time you open it. See Sources. - Appearance: the UI theme (see Theme). Unlike the other pages, a theme choice applies at once and is saved straight away; Apply and Cancel do not affect it. The Behaviour group below it holds Ask before quitting while streaming or recording (on by default; applied with Apply), see Quitting while live.
- Hotkeys: choose the keys for each action (record, replace, remove, several per action), make them global, reset them; applied with Apply. See Control surfaces.
- MIDI: choose MIDI input devices and bind pads, buttons and faders to actions, with Learn and a last-message readout. Applied with Apply; see Control surfaces.
- Remote control: the OBS-compatible websocket server (obs-websocket 5) for Stream Deck plugins and other controllers: enable, port, LAN access, password (Show, Copy, Regenerate), and a status line with the connected-client count. Applied with Apply; see Remote control.
- Licence: this build’s version, channel and build date, when an alpha or beta stops working, your licence and its year of updates, and the buttons to enter, buy or remove a licence; see Licence.
- OpenH264: Cisco’s OpenH264 module for the software H.264 encoder, which stream-concern does not include; see OpenH264.
- About: the version (and a downloaded build’s channel, build date, commit and platform), the FFmpeg notice, and buttons that open the End User License Agreement, the third-party licences and the documentation; see About and documentation.
Destination, recording and encoder edits take effect on that output’s next start. Starting and stopping outputs remains in the Outputs panel. There is no Recording page: recording outputs (format, encoder, folder, filename and splitting) are edited on the Output page’s Advanced view and in the Outputs panel. A new recording output starts with the folder, filename template and split rule of your first recording output.
Profile keys for services and encoder presets
Profile keys for Streaming Services accounts
Accounts are a top-level [[accounts]] array; a stream output bound to one
carries account = <id> in its [outputs.kind.stream] table.
| Key | Values | Default |
|---|---|---|
id |
the account’s number, unique in the profile | required |
service |
a catalogue id (see service_id below) |
required |
name |
the display name | required |
server |
a catalogue server id of that service | absent: the service’s default |
server_url |
the URL for a dashboard-issued or custom server | empty |
key |
the stream key (the profile file is readable by you only) | empty |
key_ref |
reserved for the OS credential store | absent |
login |
{ kind = "manual" }; oauth is reserved for connected accounts |
manual |
go_live |
reserved: title and category for go-live metadata | absent |
The profile stays readable by older versions: they ignore [[accounts]] and
account, and each bound output’s own service, service_id, server_id,
server_url and key are rewritten from its account on every save, as is
the legacy [stream] section, so an older version streams to the same place
with the same key. The first time a profile from before accounts is loaded,
a configured [stream] section (a key or a server URL) becomes one account
named after its service, and the stream outputs with that same service,
server and key are bound to it. Every profile this version writes records
that this ran (accounts_migrated = true), so a key you type on an output
later, or removing every account, never creates one. Opening the profile in
an older version and saving it there removes every account and binding (the
outputs keep streaming with their own copies); the next time this version
loads it, the first stream output becomes one account again and your other
accounts are gone, so avoid switching versions on the same profile.
Profile keys for services and encoder presets
These keys sit on a stream output ([outputs.kind.stream], mirrored in
[stream]) and on any output’s video settings ([outputs.video], mirrored in
[stream.video] and [recording.video]). Each is written only when it
differs from its default, so older profiles load and re-save unchanged. The
tuning keys live in a [outputs.video.tuning] table.
| Key | Values | Default |
|---|---|---|
service |
twitch, youtube, custom: how the engine publishes (Twitch ingest discovery, bandwidth test and Enhanced Broadcasting; YouTube; plain RTMP(S)) |
twitch |
service_id |
a catalogue id: twitch, youtube-rtmps, youtube-rtmp, kick, facebook, x, tiktok, trovo, vimeo, restream, amazon-ivs, cloudflare, mux, livepush, castr, dlive, picarto, nimo, bilibili, soop, niconico, steam, linkedin, instagram, dacast, wowza, owncast, custom |
empty: follows service |
server_id |
the catalogue server id (auto, primary, backup, eu-frankfurt, dashboard, …) |
empty: matched by server_url |
preset |
the encoder’s preset (veryfast, p5, quality, medium, camera, …) |
empty: the default for the encoder in use |
tuning.tune |
x264 tune or NVENC tuning (hq, ll, ull) |
empty: none (x264), hq (NVENC) |
tuning.multipass |
NVENC disabled, qres, fullres |
empty: qres |
tuning.lookahead |
NVENC look-ahead, true/false |
absent: on |
tuning.psycho_visual |
NVENC psycho-visual tuning, true/false |
absent: on |
tuning.allow_software |
VideoToolbox software fallback, true/false |
absent: off |
Theme
Choose a look from View → Theme (the macOS menu bar, or the in-window
menu on Windows and Linux) or from Settings → Appearance. The switch is
immediate, applies to every window including a detached mixer, and is saved
in the profile as [ui] theme = "<name>". A profile without a [ui] section
uses Classic.
Classic (classic) |
Mac Native (mac-native) |
Flat Dark (flat-dark) |
Soft Light (soft-light) |
|
|---|---|---|---|---|
| Intent | egui’s stock look, unchanged | at home next to native macOS apps | dark “studio console” | calm, airy light workspace |
| Light / dark | follows the system | follows the system | always dark | always light |
| Button, field, menu-button corners | 2–3 | 30 (pill) | 4 | 12 |
| Group / separator corners | 2 | 8 | 4 | 12 |
| Window and menu corners | 6 | 10 | 4 | 12 |
| Outlines | egui default | 1 px low contrast on groups; faint on resting controls (so text fields show); accent when focused | faint on resting controls and separators; blue when focused | soft grey on groups and resting controls |
| Panel vs window fill | same (27 / 248) | panel a step lighter (38 over 30; 248 over 240) | panel 18, window 22 | panel #F5F5F7, window white |
| Selection | egui teal | system accent #0A84FF (dark, white text) / #007AFF (light, black text so the focused-field outline shows on white) | egui teal | light blue #A0C8FF |
| Text fields | same as groups’ fill | a step off the group fill (gray 22 / 250), faint outline, 1 px accent focus ring | gray 20 on the gray 8 group well, faint outline, 1 px blue focus ring | #F8F8FA on white groups, grey outline |
| Links | egui blue | system accent | egui blue | egui blue |
| Item spacing | 8 × 3 | 8 × 6 | 6 × 2 | 10 × 8 |
| Button padding | 4 × 1 | 5 × 2.5 | 4 × 1 | 10 × 5 |
| Control height | 18 | 24 | 18 | 28 |
| Slider trailing fill | off | on | off | on |
| Shadows | egui default | egui default | tight, darker | soft, diffuse |
| Panel sections (scenes, layers, mixer strips, controls) | not grouped | filled groups | filled groups | filled groups |
Filled groups use the theme’s deepest background colour: near-black in the dark themes, white in the light ones. Text fields inside them use a colour a step away so they stay visible. Slider trailing fill is drawn in the selection colour; in Soft Light that is a light blue, so the fill is deliberately gentle.
Licence
Settings ▸ Licence shows, in order:
- Version: the version, the commit it was built from, the channel (Alpha, Beta, Release or Development build) and the day it was built, e.g. “0.1.0 (abc1234) · Alpha · built 16 October 2026”;
- Expires (alpha and beta builds only): the day this build stops, e.g. “30 October 2026 (in 14 days)”;
- Licence: “Licensed to <name>”, “Account only (no licence bought)” or “No licence”, or why the licence file you have could not be used;
- Updates until (with a licence): the last day of your year of updates;
- Account (beta builds, or when you are signed in): “Signed in as <name>” or “Not signed in”.
Under the rows:
- Enter licence…: paste the licence text from your account page on stream-concern.com into the box and press Apply. The app checks it without going online; if it is not a valid licence, the reason shows under the buttons and your text stays in the box.
- Buy a licence opens the site’s buy page in your browser.
- Sign in (a beta build without an account) opens your account page, where the licence text to paste is shown.
- Remove licence deletes the licence from this computer.
The licence is kept in your profile folder as licence.token. When there is
something to know (an alpha or beta stopping within 3 days, a beta without
an account, the last month of your year of updates), the same line shows at
the bottom of the main window with a Licence… button that opens this
page. It never stops you working. See Versions and licences
for what each channel and licence allows.
OpenH264
The Software (OpenH264) encoder, which needs no GPU, uses Cisco’s OpenH264 module. stream-concern does not include it: Cisco’s patent licence covers its module only when you download it from Cisco yourself and can turn it off again. Until you download it, the encoder is listed in the encoder menus but disabled with Download OpenH264 first; the hardware encoders (VideoToolbox, NVENC, AMF, Quick Sync, VA-API) and Auto with a hardware encoder do not need it.
Settings ▸ OpenH264 shows, in order:
- OpenH264 Video Codec provided by Cisco Systems, Inc., the notice Cisco requires;
- the state: Not installed, Downloading… 40 % (250 KB of 634 KB), Installed: OpenH264 2.6.0, verified against Cisco’s SHA-256, or Download failed: and the reason;
- Download, which fetches Cisco’s unmodified module for this computer
from Cisco’s server (
ciscobinary.openh264.org, about 0.7 MB), checks it against the SHA-256 Cisco publishes, and keeps it only if it matches. A failed or altered download leaves nothing behind; press Download again; - Remove, which deletes the module: the software encoder is disabled again until the next download. On Windows a recording that is using the encoder holds the file open, so stop it first;
- the AVC Patent Portfolio notice from the End User License Agreement (Section 5.3), Cisco’s binary licence, and the OpenH264 source licence.
The module is kept in your profile folder, in openh264/:
~/Library/Application Support/stream-concern/openh264/ on macOS,
%APPDATA%\stream-concern\openh264\ on Windows and
~/.config/stream-concern/openh264/ on Linux. stream-concern checks it
again each time it starts; a file that is not Cisco’s shows as an error, with
Remove offered. On a machine you reach over the network, the remote control
server serves the same page in a browser (see
Remote control › Components page).
About and documentation
Settings ▸ About shows the version and build, and for a downloaded build a line with its channel, build date, commit and platform (for example “Alpha build, 2026-10-17 · commit 1a2b3c4 · universal-apple-darwin”; a build you compiled yourself has none), the sentence “This software uses libraries from the FFmpeg project under the LGPLv2.1”, Cisco’s OpenH264 notice, and buttons that open:
- End User License Agreement, the
LICENSEfile installed with the app (stream-concern.app/Contents/Resources/LICENSEon macOS, the install folder on Windows, the package folder on Linux); - Third-party licenses,
THIRD_PARTY_LICENSES.mdbeside it (FFmpeg, OpenH264, Syphon, CEF and the other components); - Documentation, the user guide for your platform.
Help ▸ Documentation opens the same guide. The macOS and Windows apps show it in a Documentation window inside the app, with Open in browser to continue in your browser; the Linux app and the classic app open your browser directly.
Quitting while live
With Ask before quitting while streaming or recording on, closing the main window or quitting while an output is running opens Stop and quit?, which names what is running (for example “Streaming to Twitch and recording”). Outputs that count: a stream (including one connecting or reconnecting), a recording, and an interchange sender such as the virtual camera, Syphon, Spout, PipeWire or NDI, since closing cuts off whatever is receiving it.
- Keep running (the default; also Escape or a click outside the prompt) leaves everything running and the app open.
- Stop and quit stops every output, lets recordings finish writing their files, then quits.
The prompt covers the window’s close button, Cmd+W on the main window,
stream-concern ▸ Quit stream-concern (Cmd+Q) on macOS and File ▸
Quit on Windows and Linux. Closing a detached window such as the mixer never
asks. When nothing is running, or the option is off, the app quits at once as
before. Quitting from the Dock icon’s menu, or a logout or shutdown, still
quits without asking. The option is saved in the profile as
[ui] confirm_close_while_live = true; a profile without it asks.
Conflicts and saving
You can edit other panels while Settings is open. Apply preserves unrelated changes. If the same setting or the output list changed in both places, close and reopen Settings to review the current values before trying again.
While Apply is running, the other editors pause until the engine replies. Stop all outputs remains available in the progress bar. An invalid or unavailable setting leaves an error in the Settings window.
Accepted changes are saved in the background. If saving fails, the app shows Profile changes have not been saved with a Retry save button. The error stays visible until the current profile is successfully written. Retry after resolving the reported filesystem problem; unsaved changes may be lost when the app exits. Profile files retain the existing atomic replacement and owner-only permission behavior.