Skip to content

Instantly share code, notes, and snippets.

@mattb
Created September 14, 2025 16:47
Show Gist options
  • Save mattb/1c3f6dda110eb07bf151a6c69e862cef to your computer and use it in GitHub Desktop.
Save mattb/1c3f6dda110eb07bf151a6c69e862cef to your computer and use it in GitHub Desktop.
Rodecaster Video OSC protocol

OSC Protocol Documentation - RØDECaster Video

Last updated 14 September 2025

This document provides comprehensive documentation of all OSC (Open Sound Control) messages that can be sent to and received from the RØDECaster Video device.

It was reverse engineered by Claude Code by inspection of https://github.com/bitfocus/companion-module-rode-rcv and capture of a few OSC sessions with the device.

Connection Details

  • Protocol: OSC over TCP
  • Port: 10024 (default)
  • Message Format: Custom binary framing with 4-byte little-endian length prefix + standard OSC message

DOCUMENTED MESSAGES

These messages have verified implementation in the companion module codebase


1. System Control Messages

Sent to Device

/remote

Purpose: Enable remote control mode
Parameters: None
Description: Must be sent first to enable OSC control of the device
Implementation: oscController.ts:189

/device/refresh

Purpose: Request device state refresh
Parameters: None
Description: Triggers the device to send current state information
Implementation: commands.ts:91, sent in index.ts:83,108

/show

Purpose: Request complete show configuration
Parameters: None
Description: Returns complete XML configuration of current show
Implementation: commands.ts:92, sent in index.ts:84

/device

Purpose: Request device information
Parameters: None
Description: Triggers device to send hardware and configuration data
Implementation: commands.ts:93, sent in index.ts:85,109


2. Physical Button Control

Sent to Device

/device/button

Purpose: Simulate physical button press
Parameters:

  • button_id (int): Button identifier
  • press_state (int): 1 for press, 0 for release
    Button IDs (verified in commands.ts:30-83):
  • 1-14: Physical device buttons 1-14
  • 101: Media button (0x65)
  • 102: Overlay button (0x66)
  • 103: Multisource button (0x67)
  • 104: Key button (0x68)
  • 105: Cut button (0x69)
  • 106: Auto button (0x6a)
  • 108: Inspect button (0x6c)
  • 110: Monitor change button

Received from Device

/device/buttons/{id}/colour

Purpose: Physical button LED color updates
Parameters:

  • color (int): RGB color value
    Implementation: Handled in recievedDataHandler.ts:786-872 for buttons 101-110

3. Source Control Messages

Sent to Device

/device/input

Purpose: Select input source
Parameters:

  • input_number (int): Input ID (1-6)
    Implementation: commands.ts:45-51

/device/scene

Purpose: Select scene
Parameters:

  • scene_number (int): Scene ID (1-7)
    Implementation: commands.ts:52-58

/device/media

Purpose: Select media source
Parameters:

  • media_number (int): Media ID (1-7)
    Implementation: commands.ts:59-65

/device/toggleOverlay

Purpose: Toggle overlay on/off
Parameters:

  • overlay_number (int): Overlay ID (1-7)
    Implementation: commands.ts:66-72

Received from Device

/show/scene/{id}/name

Purpose: Scene name update
Parameters:

  • name (string): Scene name
    Implementation: recievedDataHandler.ts:595-623

/show/MediaFiles/{id}/name

Purpose: Media file name update
Parameters:

  • name (string): Media file name
    Implementation: recievedDataHandler.ts:718-767

/show/OverlayFiles/{id}/name

Purpose: Overlay file name update
Parameters:

  • name (string): Overlay file name
    Implementation: recievedDataHandler.ts:686-717

/show/pgmcurrent

Purpose: Current program source
Parameters:

  • source_id (int): Active program source ID
    Implementation: recievedDataHandler.ts:921-953

/show/pvwcurrent

Purpose: Current preview source (Studio mode only)
Parameters:

  • source_id (int): Active preview source ID
    Implementation: recievedDataHandler.ts:954-1038

/show/PgmOverlay

Purpose: Active program overlay
Parameters:

  • overlay_id (int): Active overlay ID
    Implementation: recievedDataHandler.ts:625-653

/show/PvwOverlay

Purpose: Active preview overlay
Parameters:

  • overlay_id (int): Preview overlay ID
    Implementation: recievedDataHandler.ts:655-684

4. Recording and Streaming

Sent to Device

/show/record

Purpose: Control recording
Parameters:

  • state (int): 1 to start, 0 to stop
    Implementation: commands.ts:85-86

/show/live

Purpose: Control streaming
Parameters:

  • state (int): 1 to start, 0 to stop
    Implementation: commands.ts:87-88

Received from Device

/show/recordEnabled

Purpose: Recording capability status
Parameters:

  • enabled (int): 1 if recording allowed, 0 if not
    Implementation: recievedDataHandler.ts:1081-1093

/show/liveEnabled

Purpose: Streaming capability status
Parameters:

  • enabled (int): 1 if streaming allowed, 0 if not
    Implementation: recievedDataHandler.ts:1039-1051

/show/record

Purpose: Current recording state
Parameters:

  • recording (int): 1 if recording, 0 if not
    Implementation: recievedDataHandler.ts:1094-1122

/show/live

Purpose: Current streaming state
Parameters:

  • streaming (int): 1 if streaming, 0 if not
    Implementation: recievedDataHandler.ts:1052-1080

5. Transition Control

Sent to Device

/show/transition

Purpose: Set transition type
Parameters:

  • type (string): "fade", "dip", or "wipe"
    Implementation: commands.ts:2-26

/show/transition_data

Purpose: Set transition parameters
Parameters:

  • data (string): Transition-specific data
    Valid Values: "dipBlack", "diagonal_1", "diagonal_2", "leftright", "top_bottom", "box_tl", "box_tr", "box_br", "box_bl", "corners", "barndoor-v", "barndoor-h"
    Implementation: commands.ts:4-26

/show/transition_time

Purpose: Set transition duration
Parameters:

  • time (float): Transition time in seconds
    Implementation: commands.ts:28

/show/invert_wipe

Purpose: Invert wipe direction
Parameters: None
Implementation: commands.ts:27

Received from Device

/show/transition

Purpose: Current transition type
Parameters:

  • type (string): Current transition type
    Implementation: recievedDataHandler.ts:1233-1250

/show/transition_data

Purpose: Current transition parameters
Parameters:

  • data (string): Current transition data
    Implementation: recievedDataHandler.ts:1251-1266

/show/transition_time

Purpose: Current transition duration
Parameters:

  • time (float): Current transition time
    Implementation: recievedDataHandler.ts:1280-1293

/show/invert_wipe

Purpose: Current wipe invert state
Parameters:

  • inverted (int): 1 if inverted, 0 if not
    Implementation: recievedDataHandler.ts:1294-1310

6. Audio Control

Sent to Device

/audioSource/{channel}/level

Purpose: Set audio source level
Parameters:

  • level (float): Audio level (0.0 to 1.0)
    Implementation: Used in actions.ts:669

/submix/live/{channel}/level

Purpose: Set live submix level
Parameters:

  • level (float): Audio level (0.0 to 1.0)
    Implementation: Used in actions.ts:742,825,856

/submix/stream/{channel}/level

Purpose: Set stream submix level
Parameters:

  • level (float): Audio level (0.0 to 1.0)
    Implementation: Referenced in actions.ts:824

/masterAudioProcessing/delay/value_ms

Purpose: Set master audio delay
Parameters:

  • delay (float): Delay in milliseconds
    Implementation: commands.ts:106

/device/HP1_VOL, /device/HP2_VOL, /device/MON_VOL

Purpose: Set headphone and monitor volumes
Parameters:

  • level (float): Volume level
    Implementation: commands.ts:97-99

/audioSource/{channel}/scene_mute

Purpose: Set scene-specific audio mute
Parameters:

  • muted (int): 1 to mute, 0 to unmute
    Implementation: Used in actions.ts:873,890

/audioSource/{channel}/scene_mute_ms

Purpose: Set scene mute with timing
Parameters:

  • timing (int): Mute timing value
    Implementation: Used in actions.ts:874,891

Received from Device

/audioSource/{channel}/level

Purpose: Audio source level update
Parameters:

  • level (float): Current level
    Implementation: recievedDataHandler.ts:1420-1524

/audioSource/{channel}/name

Purpose: Audio source name update
Parameters:

  • name (string): Source name
    Implementation: recievedDataHandler.ts:1420-1524

/audioSource/{channel}/scene_mute

Purpose: Scene-specific mute state
Parameters:

  • muted (int): 1 if muted, 0 if not
    Implementation: recievedDataHandler.ts:1494-1522

/submix/{type}/{channel}/level

Purpose: Submix level update
Parameters:

  • level (float): Current level
    Implementation: recievedDataHandler.ts:1340-1419

/masterAudioProcessing/delay/value_ms

Purpose: Master audio delay value
Parameters:

  • delay (float): Current delay in milliseconds
    Implementation: recievedDataHandler.ts:1575-1587

/device/HP1_VOL, /device/HP2_VOL, /device/MON_VOL

Purpose: Volume level updates
Parameters:

  • level (float): Current volume level
    Implementation: recievedDataHandler.ts:1329-1339

7. Wireless Audio Sources

Received from Device

/wirelessAudioSource/{channel}/state

Purpose: Wireless audio source state
Parameters:

  • state (int): Connection state
    Implementation: recievedDataHandler.ts:1531-1532

/wirelessAudioSource/{channel}/type

Purpose: Wireless audio source type
Parameters:

  • type (int): Device type (-1=none, 1=Wireless Go Pro, 3=Wireless Interview)
    Implementation: recievedDataHandler.ts:1534-1536

/wirelessAudioSource/{channel}/connected

Purpose: Wireless audio source connection status
Parameters:

  • connected (int): 1 if connected, 0 if not
    Implementation: recievedDataHandler.ts:1538-1539

/wirelessAudioSource/{channel}/signal_quality

Purpose: Wireless signal quality
Parameters:

  • quality (int): Signal quality percentage
    Implementation: recievedDataHandler.ts:1541-1542

/wirelessAudioSource/{channel}/battery_level

Purpose: Wireless device battery level
Parameters:

  • level (int): Battery percentage
    Implementation: recievedDataHandler.ts:1544-1545

/wirelessAudioSource/{channel}/charging

Purpose: Wireless device charging status
Parameters:

  • charging (int): 1 if charging, 0 if not
    Implementation: recievedDataHandler.ts:1547-1548

/wirelessAudioSource/{channel}/remote_mute

Purpose: Wireless device remote mute status
Parameters:

  • muted (int): 1 if remotely muted, 0 if not
    Implementation: recievedDataHandler.ts:1550-1551

/wirelessAudioSource/{channel}/record

Purpose: Wireless device recording capability
Parameters:

  • recording (int): 1 if can record, 0 if not
    Implementation: recievedDataHandler.ts:1553-1554

8. Audio Metering

Sent to Device

/meters/masks

Purpose: Request audio meter data
Parameters:

  • blob (binary): Meter request configuration
    Binary Format:
    • Byte 0: Mix type (uint8)
    • Bytes 1-8: Output channels mask (uint64 little-endian)
    • Bytes 9-16: Input channels mask (uint64 little-endian)
      Implementation: commands.ts:122, metersHelper.ts:58

Received from Device

/meters/values

Purpose: Audio meter values
Parameters:

  • blob (binary): Meter data
    Binary Format:
    • Bytes 0-15: Master meters (4x float32 LE)
    • Byte 16: Output mix type (uint8)
    • Bytes 17-24: Output channels mask (uint64 LE)
    • Following: Channel data (16 bytes per channel)
      Implementation: recievedDataHandler.ts:1670, metersHelper.ts:62-219

9. Show Configuration

Sent to Device

/show/frameRate

Purpose: Set frame rate
Parameters:

  • rate (int): Frame rate (23, 24, 25, 29, 30, 50, 59, 60)
    Implementation: commands.ts:108-115

/show/logoEnable

Purpose: Control logo watermark
Parameters:

  • enabled (int): 1 to enable, 0 to disable
    Implementation: commands.ts:101-102

/auto_switching/enabled

Purpose: Control auto switching
Parameters:

  • enabled (int): 1 to enable, 0 to disable
    Implementation: commands.ts:103-104

Received from Device

/show/name

Purpose: Show name
Parameters:

  • name (string): Current show name
    Implementation: recievedDataHandler.ts:540-550

/show/frameRate

Purpose: Current frame rate
Parameters:

  • rate (int): Current frame rate
    Implementation: recievedDataHandler.ts:553-563

/show/switchingMode

Purpose: Switching mode
Parameters:

  • mode (string): "studioLeft" for studio mode, other for instant mode
    Implementation: recievedDataHandler.ts:566-579

/show/logoEnable

Purpose: Logo watermark state
Parameters:

  • enabled (int): 1 if enabled, 0 if disabled
    Implementation: recievedDataHandler.ts:582-592

/auto_switching/enabled

Purpose: Auto switching state
Parameters:

  • enabled (int): 1 if enabled, 0 if disabled
    Implementation: recievedDataHandler.ts:1267-1279

10. Output Routing

Sent to Device

/show/hdmiOut/1

Purpose: Set HDMI B output source
Implementation: commands.ts:118

/show/hdmiOut/2

Purpose: Set HDMI A output source
Implementation: commands.ts:117

/show/usbOut/1

Purpose: Set UVC output source
Implementation: commands.ts:119

/show/ndisender/outputType

Purpose: Set NDI output type
Implementation: commands.ts:120

Received from Device

/show/hdmiOut/{port}

Purpose: HDMI output configuration
Implementation: recievedDataHandler.ts:1630-1643

/show/usbOut/{port}

Purpose: USB output configuration
Implementation: recievedDataHandler.ts:1644-1655

/show/ndisender/outputType

Purpose: NDI output configuration
Implementation: recievedDataHandler.ts:1656-1669


11. Device Status

Received from Device

/device/fan/speed

Purpose: Fan speed status
Implementation: recievedDataHandler.ts:770-785

/device/leds/{id}/colour

Purpose: Device LED status (120=record, 121=stream)
Implementation: recievedDataHandler.ts:1068-1122

/device/monitor_select

Purpose: Current monitor selection
Implementation: recievedDataHandler.ts:1311-1328

/diskStatus/{drive}

Purpose: Storage status
Implementation: recievedDataHandler.ts:1123-1154

/show/activeTimes

Purpose: Active timecodes
Implementation: recievedDataHandler.ts:1155-1168

/uiButtonMode/{button}

Purpose: UI button mode
Implementation: recievedDataHandler.ts:1169-1232


12. Video Input Status

Received from Device

/videoIn/{input}/signal

Purpose: Video input signal status
Implementation: recievedDataHandler.ts:1588-1629

/videoIn/{input}/name

Purpose: Video input name
Implementation: recievedDataHandler.ts:1588-1629

Sent to Device

/videoIn/{input}/bkg_source

Purpose: Set video input background source
Implementation: actions.ts:1515,1522,1525

/videoIn/{input}/source_file

Purpose: Set video input source file
Implementation: actions.ts:1516,1529


13. Keying Control

Sent to Device

/keying/{input}/enabled

Purpose: Enable/disable keying on input
Implementation: Referenced in actions but exact command structure varies

/keying/{input}/keyColour

Purpose: Set keying color
Implementation: Referenced in actions but exact command structure varies

/keying/{input}/keyMode

Purpose: Set keying mode
Implementation: Referenced in actions but exact command structure varies


14. Special Commands

Sent to Device

/actionCut

Purpose: Direct cut action
Parameters:

  • state (int): 1 to execute
    Implementation: commands.ts:76

/actionAuto

Purpose: Direct auto action
Parameters:

  • state (int): 1 to execute
    Implementation: commands.ts:77

15. Complete Show Data Response

/show Response

When sending /show, the device responds with a complete XML document: Implementation: Parsed in recievedDataHandler.ts:36-536

<RcvShow switching_mode="..." name="..." logoEnable="..." frameRate="..." 
         transition="..." transition_data="..." transition_time="..." 
         hdmi1_out="..." hdmi2_out="..." usb1_uvc_out="...">
  <NDISender>
    <outputType>...</outputType>
  </NDISender>
  <AudioMixer>
    <masteraudiodelay>
      <valueMs>...</valueMs>
    </masteraudiodelay>
    <audiosources>
      <value1 version="..." position="..." name="..." level="..." enabled="...">
        <submixes>
          <live level="..." mute="..." />
          <stream level="..." mute="..." />
        </submixes>
      </value1>
    </audiosources>
  </AudioMixer>
</RcvShow>

UNDOCUMENTED MESSAGES

These messages were observed in device responses but have no implementation in the companion module


Status and Configuration Messages

/show/LastRecording

Purpose: Information about the last recording
Observed: Device sends this on connection

/show/showfile

Purpose: Current show file information
Observed: Device sends path and status information

/show/sceneTransitionStatus

Purpose: Scene transition status information
Observed: Device sends 4 parameters of transition state

/show/mediaPath

Purpose: Media file path information
Observed: Device sends path and status

/device/language

Purpose: Device language setting
Observed: Device reports current language

/device/pipLayout/type

Purpose: Picture-in-picture layout type
Observed: Device reports PIP configuration

/device/pipLayout/element

Purpose: PIP layout element information
Observed: Device reports layout elements

/show/unsavedScene

Purpose: Indicates unsaved scene changes
Observed: Device reports save status


Network Status Messages

/device/wired/status

Purpose: Wired network connection status
Observed: Device sends 5 network parameters

/device/wifi/status

Purpose: WiFi connection status
Observed: Device sends 8 WiFi parameters

/device/wifi/dhcp

Purpose: WiFi DHCP status
Observed: Device reports DHCP configuration

/device/usbtether/status

Purpose: USB tethering status
Observed: Device reports tethering state

/device/bt/status

Purpose: Bluetooth connection status
Observed: Device sends 3 Bluetooth parameters


Extended Video Input Messages

/videoIn/{input}/source

Purpose: Video input source type
Observed: Device reports source for inputs 1-6

/videoIn/{input}/sub_source

Purpose: Video input sub-source information
Observed: Device reports sub-source details

/videoIn/{input}/standard

Purpose: Video standard for input
Observed: Device reports video standard per input


USB Hosting Audio Messages

/usbHostingAudioSource/{channel}/pid

Purpose: USB hosted audio device product ID
Observed: Channels 24-29

/usbHostingAudioSource/{channel}/update_required

Purpose: USB device firmware update status
Observed: Channels 24-29

/usbHostingAudioSource/{channel}/hpf

Purpose: USB device high-pass filter setting
Observed: Channels 24-29

/usbHostingAudioSource/{channel}/hfboost

Purpose: USB device high-frequency boost
Observed: Channels 24-29

/usbHostingAudioSource/{channel}/pad

Purpose: USB device pad setting
Observed: Channels 24-29


Additional Device Buttons

/device/buttons/107/colour

Purpose: Unknown button 107 LED color
Observed: Device reports color but function unknown

/device/buttons/109/colour

Purpose: Unknown button 109 LED color
Observed: Device reports color but function unknown


Miscellaneous Messages

/mediameta

Purpose: Media metadata information
Observed: No parameters sent

/show/FtbEnable

Purpose: Fade-to-black enable status
Observed: Device reports FTB state

/show/videoInRec

Purpose: Video input recording configuration
Observed: Device reports recording config

/menuSelected

Purpose: Currently selected menu item
Observed: Device reports menu state

/diskStatus/clear

Purpose: Disk status clear notification
Observed: No parameters


Notes

  1. Implementation Status: Documented messages have verified code implementation. Undocumented messages are sent by the device but not handled by the companion module.
  2. Binary Protocol: 4-byte little-endian length prefix + OSC message
  3. Connection Sequence: Send /remote/device/refresh/show/device
  4. Audio Channels: Sources 1-33, wireless 4-5, USB hosting 24-29
  5. Future Implementation: Undocumented messages could be added to expand module functionality
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment