You can control SermonWave in OBS without touching the dock: with OBS's own hotkeys, or from a Stream Deck or Bitfocus Companion through obs-websocket. This article explains what's available and what isn't yet.
Who it's for#
Tech directors who already drive OBS with hotkeys, an Elgato Stream Deck, Bitfocus Companion or a similar controller.
Before you start#
- The plugin is installed and paired. See Pair OBS with SermonWave.
- For Stream Deck / Companion: the obs-websocket server is enabled in OBS (Tools → WebSocket Server Settings → Enable WebSocket server). It's built into OBS 28 and later.
- Your controller can send a raw obs-websocket request (for example Companion's OBS module with a custom request, or a Stream Deck plugin that supports
CallVendorRequest).
Hotkeys#
The SermonWave plugin does not add hotkeys of its own to OBS Settings → Hotkeys in this Beta. You won't find "SermonWave" entries there.
You usually don't need them, because translation follows OBS:
- In the dock, set Translate when to Streaming, Recording or Streaming or recording. See Set up audio, languages and start/stop in OBS.
- In OBS Settings → Hotkeys, assign keys to OBS's built-in Start Streaming / Stop Streaming and Start Recording / Stop Recording.
- Pressing those keys now starts and stops translation, translated streams and translated recordings together.
obs-websocket vendor requests#
The plugin registers an obs-websocket vendor named sermonwave. Any obs-websocket client can call it with the standard CallVendorRequest request:
{
"requestType": "CallVendorRequest",
"requestData": {
"vendorName": "sermonwave",
"requestType": "get_state",
"requestData": {}
}
}
Languages are given as short codes, for example es, fr, pt.
Useful requests#
| Request type | Request data | What it does |
|---|---|---|
get_state | — | Pairing, device number, device languages, caption language, health. |
get_outputs | — | Per language: stream/recording state, bitrate, dropped frames, re-sync progress, YouTube state and watch link. |
set_output | language plus any of the fields below | Changes one language's panel. |
add_language | language | Same as Add language. |
remove_language | language | Same as Remove. |
set_sync_delay | sync_delay_ms (4000–15000) | Sets the Sync delay. |
set_languages | source_language, target_languages (list of {"code": "es"}) | Saves the device's languages, like Save languages. Changes the device for everyone. |
set_youtube_channel | channel | Saves Channel for /listen. |
youtube_state | — | YouTube sign-in and broadcast state. |
youtube_settings | privacy (unlisted, public, private), title_template | Sets YouTube privacy and title. |
youtube_keys | refresh (true/false) | Lists your channel's stream keys. |
collect_diagnostics | reason | Sends a diagnostics report to SermonWave support now. |
set_output fields#
All optional except language:
stream_now:"start"or"stop"— same as Start now / Stop now.stream_enabled,record_enabled,room(true/false) — Stream …, Record a … copy, Play … in the room.preset:youtube_rtmps,youtube_rtmps_backup,youtube_rtmp,facebook,custom; ordestination:youtube_autofor YouTube (automatic).server,key— server and stream key for a manual platform.sync_video,stream_captions,record_captions,captions_default,resync,keep_live(true/false).bg_db,bg_off,duck_db— Original audio level, Original audio Off, and Under translation level, in dB.
Examples#
Start the Spanish translated stream now:
{
"requestType": "CallVendorRequest",
"requestData": {
"vendorName": "sermonwave",
"requestType": "set_output",
"requestData": { "language": "es", "stream_now": "start" }
}
}
Toggle in-room playback of French on:
{
"requestType": "CallVendorRequest",
"requestData": {
"vendorName": "sermonwave",
"requestType": "set_output",
"requestData": { "language": "fr", "room": true }
}
}
Lower the original sound under the Spanish translation to −25 dB:
{
"requestType": "CallVendorRequest",
"requestData": {
"vendorName": "sermonwave",
"requestType": "set_output",
"requestData": { "language": "es", "duck_db": -25 }
}
}
The response comes back in the responseData of the reply. Requests like set_output answer {"ok": true} right away; check the result with get_outputs.
Troubleshooting#
The request fails with an unknown vendor. obs-websocket was not running when OBS loaded the plugin, or the plugin isn't installed. Enable the WebSocket server and restart OBS.
set_output returns ok: false. The language field is missing.
Nothing happens for a language. Make sure that language was added under Languages (or call add_language first).
FAQ#
Will SermonWave hotkeys come later?#
Possibly. Today, use OBS's own stream and record hotkeys, or the requests above.
Is the obs-websocket connection secure?#
It's local to your network. Keep Enable Authentication on in the WebSocket Server Settings and use the password in your controller.