DeviceJockey Interfaces

OBS Studio Interface

Control OBS Studio and keep your DeviceJockey panel synchronized with its current state.

OBS WebSocket

One interface controls OBS and receives its state.

DeviceJockey connects to the WebSocket server built into OBS Studio. Commands send JSON requests to OBS. Events use incoming JSON to update Items or perform their actions.

Commands

Send requests to OBS Studio.

DeviceJockey → OBS Studio

Change scenes, control inputs, start recording, trigger hotkeys, operate media, and use other OBS WebSocket functions.

Events

Use the state reported by OBS.

OBS Studio → DeviceJockey

Events react to configured JSON by lighting an Item, moving a Slider, updating a label, protecting an Item, or performing commands.

Add one OBS Studio interface to the Scene.

The same connection carries outgoing requests, request responses, and events sent by OBS Studio.

Toolbox

Build your panel from a prepared OBS Scene.

A Toolbox is a ready-made DeviceJockey Scene for an interface or application. The OBS Studio Toolbox contains prepared Panels and Items that demonstrate common OBS controls and feedback. Import the Scene, try its functions, then copy useful Items into your own Scene and change them for your workflow.

1

Import the Toolbox

Download the DJX file and import it into DeviceJockey as a Scene.

2

Explore the prepared Panels

Connect the included OBS interface and try the configured Commands, Events, and feedback functions.

3

Copy and adapt Items

Copy useful Items into your own Scene. Change scene names, input names, ranges, colors, and layout as required.

Setup

Connect DeviceJockey to OBS Studio.

1

OBS Studio

Prepare the WebSocket connection.

1

Open WebSocket Server Settings

In the OBS Studio menu, open Tools and select WebSocket Server Settings.

OBS Studio Tools menu with WebSocket Server Settings highlighted
Open the server settings

Choose WebSocket Server Settings from the Tools menu.

2

Enable authentication

Enable Enable Authentication. Let OBS generate a password or enter your own password.

OBS WebSocket Server Settings with authentication and password controls
Set the password

Enable authentication and generate or enter a password.

3

Show the connection information

Select Show Connect Info. Leave this window open for the DeviceJockey setup.

OBS WebSocket connection information with QR code
Keep the QR code open

DeviceJockey will scan this connection information in the next part.

2

DeviceJockey

Add the interface and scan the QR code.

1

Add an interface

Open the Interfaces list in the required Scene, select +, then choose add Interface.

DeviceJockey Interfaces list with add Interface highlighted
Add an interface

Use + in the Interfaces list and choose add Interface.

2

Select OBS Studio

Choose OBS Studio from the list of available interfaces.

DeviceJockey Add Interface list with OBS Studio highlighted
Choose OBS Studio

Add the OBS Studio interface to the current Scene.

3

Scan the QR code

Open the new interface's settings, select Scan QR Code, and scan the code shown in OBS. Confirm the settings with the check mark.

DeviceJockey OBS Studio interface settings with Scan QR Code highlighted
Scan the OBS connection

Scan QR Code fills in the host, port, and password from OBS.

Commands →

Build an OBS request from JSON.

OBS Commands send JSON requests. DeviceJockey's general Template workflow is used here as a list of OBS Request Templates. A selected template prefills the request for a standard OBS function; it remains fully editable afterward.

Start with a Request Template.

1

Add an OBS Command

Add OBS Value or OBS Range to the required Item action.

2

Open Request Templates

In the Command settings, select the Template button Template button above the JSON editor.

3

Choose a request

Search for the required OBS function and select it. DeviceJockey generates the JSON for you to adapt.

OBS Request Templates list with Set current program scene selected
Choose a Request Template

Search the template list and select the OBS function the Command should perform.

Adapt the generated JSON.

The following request was generated from Set Current Program Scene. Only the required scene name was changed to Main.

{
  "op": 6,
  "rpcVersion": 1,
  "d": {
    "requestType": "SetCurrentProgramScene",
    "requestId": "scene-main",
    "requestData": {
      "sceneName": "Main"
    }
  }
}
requestType

Tells OBS what to do. In this example, SetCurrentProgramScene changes the program scene.

requestData

Contains the values needed by that request. Here, sceneName identifies the destination scene.

requestId

Uniquely identifies a request. Templates generate an ID automatically, but you can replace it with your own. OBS includes the same ID in its response, allowing an Event to recognize and react to that specific request.

op and rpcVersion

Describe the OBS WebSocket message. The template supplies these values, so you normally do not need to edit them.

OBS Value

Send a configured JSON request. Use it when the request does not need a changing value from the Item.

OBS Range

Map the Item's current position between the configured Minimum and Maximum.

Dynamic Value Attribute: Enter the name of the value-holding JSON attribute, such as inputVolumeDb. When the Command is performed, DeviceJockey calculates the value and replaces the first matching attribute's value before sending the JSON. A suitable Request Template prefills the attribute name, value type, Minimum, and Maximum.

OBS Clear Buffer

Remove all received messages from the OBS Event buffer. This is useful before producing the event you want to capture.

OBS Set Swap from list

Request Scenes, Inputs, Outputs, Hotkeys, Transitions, or Collections from OBS. The user selects an entry and DeviceJockey stores its name in a Swap.

A template is a starting point, not a locked configuration.

Edit the generated JSON and other Command settings as required. When you switch templates, DeviceJockey preserves compatible existing values such as input names, scene names, hotkeys, profiles, or volume settings when possible.

Command examples

Build three common OBS controls.

← Events

Let an incoming OBS message control an Item.

DeviceJockey receives two useful kinds of JSON from OBS. An OBS Event is sent when something changes in OBS. An OBS Request Response is sent after DeviceJockey requests the current state. Both can be used by an Item Event.

OBS Event

OBS reports a change.

For example, OBS sends CurrentProgramSceneChanged when its current program scene changes.

Caused by
DeviceJockey, OBS itself, or another controller
Useful for
Keeping Items synchronized while the state changes
{
  "op": 5,
  "d": {
    "eventType": "CurrentProgramSceneChanged",
    "eventData": { "sceneName": "Main" }
  }
}
Request Response

OBS answers a status request.

For example, OBS returns the current scene after DeviceJockey sends GetCurrentProgramScene.

Caused by
An OBS Value Command that requests a state
Useful for
Initializing Items after opening a panel or connecting
{
  "op": 7,
  "d": {
    "requestType": "GetCurrentProgramScene",
    "requestId": "current.scene.request",
    "responseData": { "currentProgramSceneName": "Main" }
  }
}
eventType and eventData

eventType identifies the change. eventData describes its new state, such as the active scene name.

requestType and responseData

requestType identifies the status request. responseData contains the state returned by OBS.

requestId

A Request Response repeats the ID of its request. Using a recognizable ID makes the response easy to identify in the Event buffer.

op

Determines which parts of an incoming message DeviceJockey checks before the Event can react. With op: 5, it checks eventType and eventData. With op: 7, it checks requestId and responseData. Keep op in the captured JSON so DeviceJockey applies the correct check.

Required attributes

Configured attributes and values must match. A different event type, input name, scene name, or request ID prevents the Event from reacting.

Additional incoming attributes

Attributes that exist only in the incoming OBS message are ignored. The Event can therefore still react when OBS includes information that is not relevant to it.

Dynamic Value Attribute

Its value is excluded from comparison. DeviceJockey reads the incoming value and applies it to the Item.

Label Attribute

Its value is also excluded from comparison. DeviceJockey formats the incoming value and uses it as the Item label.

OBS Value

The Event reacts to the configured OBS Event or Request Response and performs the Item action.

OBS Range

Read the Dynamic Value Attribute, map it between Minimum and Maximum, and apply the result to a ranged Item.

OBS Label

When the Event reacts, read the Label Attribute from the incoming message and display its formatted value as the Item label.

OBS Enable and Disable

React to the configured JSON by enabling or protecting supported Item interaction.

OBS Stats

Display a selected value returned by GetStats, including CPU, memory, disk space, FPS, render time, frame counts, and WebSocket message counts.

The available Events depend on the Item.

DeviceJockey only shows the OBS Event variants supported by the selected Item and Item action.

1

A message arrives

OBS sends an Event or a Request Response to DeviceJockey.

2

The Event checks it

The configured JSON acts as a filter. Every attribute and value kept in the Event must exist and match in the incoming message. Additional attributes are allowed, so unrelated information sent by OBS does not prevent the Event from reacting.

3

The Item reacts

The Event performs the Item action or reads a dynamic value for its range or label.

Create an Event

Capture the message and choose how the Item reacts.

Use the JSON as a filter.

The configured JSON acts as a filter. Every attribute and value kept in the Event must exist and match in the incoming message. Additional attributes are allowed, so unrelated information sent by OBS does not prevent the Event from reacting.

Configured Event JSONIncoming OBS JSONResult
{"inputName":"Mic"}{"inputName":"Mic","inputMuted":false}Event reacts
Extra attribute allowed
{"inputName":"Mic"}{"inputName":"Camera","inputMuted":false}No reaction
Required value differs

Use the Buffer to find an OBS Event or Request Response.

The Buffer stores the last 50 relevant OBS Events and Request Responses received by DeviceJockey. Use it to find the JSON produced by an action in OBS and transfer that JSON to the Event editor.

OBS Event JSON editor with the Buffer button highlighted
Open the Event buffer

Activate Buffer in the JSON editor to inspect recently received OBS messages.

1

Open the Buffer

Tap Buffer. The JSON editor becomes gray and read-only. It now shows the currently selected Buffer entry.

2

Produce and find the entry

Use the bin to clear old entries if needed. Perform the required action in OBS, then use minus and plus to find the corresponding OBS Event or Request Response.

3

Keep the selected JSON

While the required entry is visible, tap Buffer again. The editor becomes editable and keeps the selected JSON as the Event filter.

Buffer controls with minus, plus, position counter, and bin
Navigate through the Buffer

Minus and plus select an entry, the counter shows its position, and the bin clears the Buffer.

Not every request acknowledgement enters the Event buffer.

Successful responses without response data only confirm the request and are not useful as Item Events. Responses containing data and failed responses are retained.

Event examples

Build three common OBS feedback functions.

Events can perform commands.

When an Event reacts to an OBS message, Remote Options can start one or more Item Commands.

Learn about Remote Options →

Troubleshooting

If DeviceJockey cannot connect or an Item does not react.

Check the OBS server.

Confirm that the WebSocket server is enabled in OBS Studio.

Verify host and port.

Compare the DeviceJockey settings with the address and port shown by OBS. The standard port is 4455.

Check authentication.

Enter the current password again or scan a newly displayed OBS connection QR code.

Check the network.

Make sure both devices can reach each other and that a firewall is not blocking the WebSocket port.

Inspect the Event buffer.

Confirm that the expected message arrives and compare its identifying attributes with the configured Event JSON.

Check dynamic attributes.

For Range or Label Events, verify the attribute name, value type, Minimum, and Maximum.