// obs setup
Add LiveAudio captions to OBS in five steps.
LiveAudio renders into OBS through a Browser source that loads the included subtitulos_obs.html overlay and listens to a local WebSocket (ws://127.0.0.1:8765). Create the source, size it 1920×200, keep it always running, match the port, and start the system. Windows and Linux.
// the five steps
The exact Browser-source flow.
-
// browser source
Add a Browser source in OBS
In OBS, go to Sources → + → Browser. This creates the surface that LiveAudio draws captions onto inside your scene.
-
// local overlay
Point it at subtitulos_obs.html and size it 1920×200
Choose Local file and select subtitulos_obs.html (it ships in liveaudio/assets/). Not sure where that is? On the installed app it lives under your LiveAudio data folder — on Windows open %LOCALAPPDATA%\LiveAudio\data, on Linux ~/.local/share/liveaudio/data, then go into liveaudio/assets/. Set the source size to Width 1920 and Height 200 so the caption ribbon spans the bottom of a 1080p canvas.
-
// keep alive
Disable "Shut down source when not visible"
In the Browser source properties, turn off "Shut down source when not visible" (and "Refresh browser when scene becomes active"). This keeps the WebSocket connection open so captions never drop when you switch scenes.
-
// port match
Match the WebSocket port (default 8765)
LiveAudio broadcasts on ws://127.0.0.1:8765 by default. To change it, set ws_port in config.json; the OBS overlay reads its port from the ?port=XXXX query in the source URL. Keep both sides on the same port.
-
// go live
Apply changes, then START SYSTEM
In LiveAudio pick a profile, audio device, CPU or CUDA, and a Whisper model, then click Apply changes and START SYSTEM. Speak — captions appear in the OBS Browser source within about a second.
// the signal path
How the caption signal reaches OBS.
LiveAudio transcribes locally and broadcasts subtitle JSON over a local WebSocket. OBS connects through the included overlay, but any HTML or WebSocket client on localhost can receive the same broadcast. Connections are accepted only from localhost, with no authentication.
// websocket payload
What each caption frame contains.
Every caption is a small JSON frame broadcast on the local WebSocket. These are the documented fields you can read in your own overlay or client.
| field | description |
|---|---|
| id | Monotonic caption id for ordering. |
| text | The transcribed caption text. |
| style | Display style hint for the overlay. |
| created_at | When the audio segment was captured. |
| processed_at | When transcription finished. |
| queue_delay | Seconds spent waiting in the queue. |
| total_delay | End-to-end delay, capture to broadcast. |
| latency | Transcription latency in seconds. |
| is_replay | True when the frame is a backlog replay. |
| catchup_interval_sec | Spacing used when replaying backlog. |
Latency is low and tunable — sub-second to about one second on a typical setup (example frame: total_delay ~1.3s, latency ~1.1s), not milliseconds.
// download
Get LiveAudio and wire up OBS today.
Free & open-source (MIT). No subscription, no API key. You only pay your own electricity — hardware not included. Windows and Linux.
Download LiveAudio v1.2.0 (free)