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 Public group, 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.0 the 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) and 127.0.0.1 for an encoder on this machine last; a :: bind adds the IPv6 addresses (not fe80:: ones, which need a zone a URL cannot carry) and ::1. A listener bound to one address lists just that address. URLs start rtmps:// 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-websocket 5 compatible server for Stream Deck plugins and other OBS 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 OBS 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 LICENSE file installed with the app (stream-concern.app/Contents/Resources/LICENSE on macOS, the install folder on Windows, the package folder on Linux);
  • Third-party licenses, THIRD_PARTY_LICENSES.md beside 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.