OBS hotkeys and Stream Deck control Beta

Ultimo aggiornamento: 4 ottobre 2026 Per: Tech directors who automate OBS with hotkeys, Stream Deck or Companion

Questo articolo non è ancora disponibile nella tua lingua, quindi è mostrato in inglese.

In questa pagina

You can control SermonWave in OBS without touching the dock: with hotkeys, or from a Stream Deck or Bitfocus Companion through obs-websocket. Everything here works with the dock closed. In the dock, Stream Deck & control sets when translation starts by itself and shows a short summary under Hotkeys and Stream Deck.

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 plugin adds SermonWave entries to OBS Settings → Hotkeys:

  • SermonWave: Start translation, SermonWave: Stop translation and SermonWave: Start / stop translation (toggle).
  • Per language: SermonWave: Start translated stream … / Stop translated stream … and SermonWave: Start translated recording … / Stop translated recording ….
  • Per language: SermonWave: Toggle language … adds or removes that language from the device's languages. This changes the device for everyone, like Save languages.

Assign keys there like any other OBS hotkey. A Stream Deck can press them with its OBS hotkey actions.

Often you don't even need them, because translation follows OBS:

  1. In the dock, under Stream Deck & control, set Translate when to Streaming, Recording or Streaming or recording. See Set up audio, languages and start/stop in OBS.
  2. In OBS Settings → Hotkeys, assign keys to OBS's built-in Start Streaming / Stop Streaming and Start Recording / Stop Recording.
  3. Pressing those keys now starts and stops translation, translated streams and translated recordings together.
OBS Settings > Hotkeys with the SermonWave entries and Start Streaming assigned

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 typeRequest dataWhat it does
GetStatus—Pairing, connection, session state, device languages, each added language's stream/recording state and the hotkey names.
Start / Stop / Togglewait (true/false, optional)Starts, stops or toggles the translation session, like Start translation / Stop translation. With wait, the answer comes after SermonWave confirms (at most 10 s).
StartTranslatedStream / StopTranslatedStreamlanguageStarts or stops one language's translated stream, like its Start / Stop button.
StartTranslatedRecording / StopTranslatedRecordinglanguageTurns one language's recording copy on or off, like its REC button.
ToggleLanguagelanguageAdds or removes that language from the device's languages. Changes the device for everyone.
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_outputlanguage plus any of the fields belowChanges one added language's settings.
add_languagelanguageSame as Add language.
remove_languagelanguageSame as Remove.
set_sync_delaysync_delay_ms (4000–15000)Sets the Sync delay.
set_languagessource_language, target_languages (list of {"code": "es"})Saves the device's languages, like Save languages. Changes the device for everyone.
set_youtube_channelchannelSaves Channel for /listen.
youtube_state—YouTube sign-in and broadcast state.
youtube_settingsprivacy (unlisted, public, private), title_templateSets YouTube privacy and title.
youtube_keysrefresh (true/false)Lists your channel's stream keys.
collect_diagnosticsreasonSends a diagnostics report to SermonWave support now.

set_output fields#

All optional except language:

  • stream_now: "start" or "stop" — same as the language's Start / Stop button in the control bar.
  • video_quality: auto, 720p, 1080p, 480p or match — the language's Video quality (match = Same as the main stream).
  • 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; or destination: youtube_auto for 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 with Add language under Translated streams (or call add_language first). Per-language hotkeys appear in OBS Settings → Hotkeys once the language is offered by the device or added in the dock.

FAQ#

Do hotkeys work when the dock is closed?#

Yes. Hotkeys, obs-websocket requests and the automatic start and stop with your stream or recording all work with the dock closed.

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.