This is a customized fork of OBS Studio with a number of
quality-of-life and workflow features added on top of the upstream project. The
original project README is preserved in README.rst.
Everything below is additive — no stock functionality was removed except where explicitly noted. All customizations are Windows-focused.
Hovering the OBS icon on the Windows taskbar shows a live-preview popup with two media-player-style buttons beneath it (like Spotify's controls):
- ● Start Recording — enabled only while not recording.
- ■ Stop Recording — enabled only while recording; its tooltip shows the elapsed recording time (updates every second, freezes while paused).
Each button is contextual (the invalid one is greyed out), so you can start and stop recording without bringing the OBS window to the foreground. The Stop button still honors the "Warn before stopping recording" setting.
Implemented with the Win32 ITaskbarList3 thumbnail-toolbar API; clicks are routed
through OBS's native event filter to the existing record actions.
OBS can automatically begin recording as soon as it finishes loading — ideal for using OBS as a startup/kiosk app.
- Toggle under File → Start Recording on Startup (checkable, on by default).
- Persisted to user config (
BasicWindow/RecordOnStartup). - Fires right after the scene collection loads (outputs ready), and is skipped in Safe Mode.
File → Launch OBS at Login (Elevated) registers a Windows Scheduled Task that
starts OBS automatically at logon with administrator rights and no UAC prompt —
the only sanctioned way to auto-launch an elevated app at login (the normal Startup
Apps list and shell:startup folder silently refuse elevated programs).
The task points at the current OBS executable, runs with highest privileges, and fires a few seconds after logon. Combined with Start Recording on Startup, this gives a hands-off "boot → OBS runs elevated → recording begins" pipeline. Toggling it on requires OBS to currently be running as administrator (so it has permission to create the task); un-checking removes the task.
OBS watches recording health and raises a desktop notification + flashing red tray icon when something is wrong:
- Live watchdog — while recording, the encoder's skipped-frame counters are polled every 2 s; sustained skipping (encoder overload) alerts within seconds.
- File probe — when a recording (or split-file segment) finishes, a background thread demuxes it and analyzes video packets (no decoding): missing-packet gaps and "frozen content" collapse, where duplicate frames make footage a slideshow even though timestamps look normal. Detection compares against the file's own early baseline, so intentionally static footage doesn't false-alarm.
- Clicking the tray icon acknowledges the alert; the flash self-dismisses after 60 s.
- Diagnostic hook: set
OBS_HEALTH_CHECK_FILE=<path>before launch to probe any file.
When a recording is saved, the status bar shows an Open in Media Player link that
opens the finished file directly in the modern Windows Media Player app
(IApplicationActivationManager::ActivateForFile), with automatic fallback to
Windows Media Player Legacy and then the system default player.
(This replaces the earlier "Open in CapCut" link.)
A new Voice Level Match audio filter keeps your microphone's typical speaking level matched to the typical level of the voices in your voice call, so you sit at the same loudness as your friends without riding the fader.
- Multi-reference with auto-detection: the filter automatically attaches to every source that looks like voice-chat audio — Desktop Audio captures, Application Audio Captures (e.g. Discord), and any audio source named like a voice feed (discord/party/chat/voice/xbox/teamspeak/…), up to 8 at once, reconciled live as sources come and go. All of them feed one shared "Friends" level. You can also lock the reference to one specific source from the visualization dialog.
- Every side runs a lightweight vocal-isolation chain: 150 Hz–4 kHz speech band-pass split into low/high sub-bands (voiced + consonant energy both required), an SNR-vs-noise-floor gate, a syllabic modulation gate (speech pulses at 3–8 Hz; steady music/game beds don't), and an onset/hangover state machine. Only detected speech contributes to the level estimates.
- The level trackers are streaming medians, so yelling and whispering are outliers that barely move the baseline — your dynamics pass through untouched. Only your sustained "normal talking" level is matched.
- The correction is a slow-slewing trim (≈1 dB/s, configurable), not a compressor.
- Click the voice-match button (two facing voice waves with an equals sign) on your mic's Audio Mixer row for a live visualization: both voice-level estimates with voice-activity lights, the applied gain, a friends'-voice source picker (auto-detect or one specific source), the live reference count, and a scrolling 60-second history graph. The button auto-creates the filter on first use.
Audio-only sources are hidden from the Sources panel and managed entirely from the Audio Mixer, which gains per-source controls:
- Remove a source directly from the mixer.
- Toggle output/monitoring visibility.
- Toggle noise suppression with a dedicated icon.
Right-click any source → Output Visibility to show it in all outputs (default), stream only, or record only — e.g. keep an overlay on stream but out of the recording. Sources with a non-default mode show an indicator badge in the Sources panel; the setting persists with the scene collection.
The dedicated stream/record render passes are only created while at least one source actually uses the feature — with no filtered sources, outputs encode straight from the main mix, so there is no GPU/VRAM overhead for setups that don't use it.
Add an Application Audio Capture source (e.g. a browser or music player), then right-click its strip in the Audio Mixer → Subtract from Desktop Audio. Instead of adding its own audio, the source is removed from Desktop Audio, and its Output Visibility selects which output(s) it is removed from:
- Recording → app is dropped from the recording but stays on stream (e.g. keep copyrighted music out of a VOD while you still hear it live).
- Stream → app is dropped from the stream but stays in the recording.
- Both → app is removed everywhere.
The removal is clean, not phase-cancellation: Desktop Audio is captured in Windows' process-loopback exclude mode (capture everything except that app's process tree), and the app is re-added at its natural level only on the outputs it isn't subtracted from. The mixer strip's category bar turns red (vs. the normal blue) and shows which output(s) the source is subtracted from.
Notes and limits:
- Per-output subtraction (drop from one output but not the other) requires Advanced output mode with separate stream/record tracks; in Simple mode the setting always means "subtract from both".
- Windows can exclude only one app process-tree from Desktop Audio at a time, so mark a single source subtractive per Desktop Audio device.
- Exclusion is applied when capture (re)starts and when you toggle the setting; an app launched afterward is picked up on the next capture restart.
An opt-in tool (under Settings → Stream) that automatically updates your YouTube live broadcast thumbnail from the program feed while you stream:
- Periodic program-frame capture with quality filters.
- Per-scene exclusion.
- Upload de-duplication and a daily upload cap.
- Backoff handling to stay within YouTube API quota.
- Expanded Filters dialog functionality and UI refinements.
- Compact scene list items for a denser scene list.
- Removed the Check for Updates link (this is a custom build).
- Clean shutdown on OS session-end — fixes a WASAPI crash that could occur when Windows logs off or shuts down while OBS is running.
This fork builds with CMake using the windows-x64-local preset (Visual Studio /
MSVC, Qt 6). See README.rst and the upstream
build instructions
for prerequisites and full details.
cmake --preset windows-x64-local
cmake --build build_x64 --config RelWithDebInfoGPL-2.0-or-later, same as upstream OBS Studio. See COPYING.