Switchboard Plugin Settings
Follow the steps below to modify the settings for the plugin.
- In the main menu of the Unreal Editor, choose Edit > Project Settings to open the Project Settings window.
- In the Project Settings window, find Switchboard in the Plugins section.

Parameter | Description |
---|---|
Switchboard | |
Python Interpreter Path | The default Python version for Switchboard is Python 3.7.7. To use a different version of Python, change this field to point to a different Python interpreter on your machine. |
Switchboard Path | The location of the Switchboard Python file. |
Commandline Arguments | Switchboard does not expect any command line arguments currently. |
Listener | |
Listener Path | The location of the SwitchboardListener executable. |
Listener Commandline Arguments | SwitchboardListener expects the following arguments:
|
OSC | |
Default Switchboard OSC Listener | Switchboard requires an OSC Listener to be able to use Take Recorder. See Take Recording with Switchboard for more details. |
Switchboard Settings
- Settings that are common to all device plugins are at the top of the Settings panel, including the values added during the initial project set up.
- After you add a device, settings for those devices are appended to the settings panel.
- Some general settings are repeated in a device’s settings so you can override the value per device if needed.
- If you override a setting in a specific device, a different background color appears. As long as the override is in place, changing the global setting will not cause a change for this setting in the device.

The following sections describe all the settings that can be modified in the Settings panel.

Parameter | Description |
---|---|
IP Address | The IP address of the machine running Switchboard and the internal OSC server. Change the address here if you have multiple network controllers in the computer running Switchboard. |
Transport Path | Currently not used in Switchboard. |
Project Settings
Parameter | Description |
---|---|
Project Name | The name of the Switchboard project. Will be used as a basis for the filename that settings and devices are stored in. |
UProject | The local path to the UE project file. |
Engine Dir | The local path to the Unreal Engine directory. |
Build Engine | The flag to enable building the engine from source in Switchboard. |
Map Path | The relative path from the Content folder to maps that will appear in the Level dropdown in Switchboard. |
Map Filter | The file filter for limiting what maps appear in the Level dropdown. |
OSC | |
Server Port | The port for the OSC server in Switchboard to listen on. |
Client Port | The port of the OSC client specified in the Unreal Editor. |
Source Control | |
P4 Project Path | The Perforce depot path for the Unreal project specified in UProject. Only the depot folder containing the uproject file needs to be specified. |
P4 Engine Path | The P4 Engine Path setting is only required if you plan to build the engine from source, and not just the project. See Syncing and Building for more details. |
Workspace Name | The name of the Perforce workspace that maps to the depot project path. |
Multi-User Server Settings
Parameter | Description |
---|---|
Server Name | The name appended to the Project Name to create the full server name. |
Command Line Args | Optional arguments passed to the Multi-User Server executable. |
Auto Join | Enable this option to have each Unreal or nDisplay device automatically join the Multi-User Server. |
Clean History | Passes the argument -ConcertClean to the server so the server session’s working directory is cleaned on launch. |
Auto Launch | Enable this option to launch the Multi-User Server the first time either an Unreal or nDisplay device is started. The server always runs on the same device as Switchboard. |
Unreal Device Settings

Parameter | Description |
---|---|
Is Recording Device |
Enable this option if this device type is going to record sequences. |
Buffer Size | The internal buffer size of the socket client connected to SwitchboardListener. |
Command Line Arguments | Optional command line arguments that are passed to Unreal on start. |
ExecCmds |
Sets |
DPCVars |
Pass Device Profile Console variables in a comma separated list. |
Listener Port |
The port number the listener listens on. The default port is 2980. |
Roles Filename |
The filename of the .ini file that contains the Virtual Production Roles. |
Stage Session ID |
An ID that groups Stage Monitor providers and monitors. Instances with different Session IDs are invisible to each other in Stage Monitor. |
UE4 Editor filename | The filename of the Unreal Editor executable. |
Number of GPUs |
The number of GPUs to use on a device in case there is more than one. |
Process Priority |
Overrides the priority of the process. |
Skip Package Recovery |
Automatically discards auto-saved packages at startup, skipping the restore prompt. Useful in multi-user scenarios, where restoring from auto-save may be undesirable. |
Instance Settings | |
IP address |
The remote address on which the SwitchboardListener listens. |
Roles |
Dropdown menu enabling selection of a Virtual Production Role from those provided in the Roles .ini file. |
Is Recording Device | Override for whether this device is used for recording. |
Command Line Arguments | Override for optional command line arguments. |
ExecCmds |
Override for exec commands for Unreal. |
DPCVars |
Override for the Device Profile Console variables. |
Number of GPUs |
Override for the GPU count to use. |
Process Priority |
Override for the priority of this instance. |
Skip Package Recovery |
Override for whether auto-saved packages are automatically discarded at startup. |
Engine Directory |
Override for the local path to the engine. |
uProject Path |
Override for the local path to the uproject file. |
KiPro Device Settings

Parameter | Description |
---|---|
Is Recording Device |
Enable this option if this device type is going to record sequences. |
IP address | The address of the KiPro web server. |
Auto Play After Stop | Enable this option to playback automatically when the recording ends. |
Live Link Face

Parameter | Description |
---|---|
Is Recording Device |
Enable this option if this device type is going to record sequences. |
IP address | Currently not used in Switchboard. |
nDisplay Device Settings

Parameter | Description |
---|---|
nDisplay Config File | Both the .cfg and the JSON formats are supported. |
Use All Available Cores | Enable this option to use all cores. |
Texture Streaming | Toggle texture streaming. |
Render API | The options are DirectX11 or DirectX12. |
Render Mode | Allows selection of nDisplay render modes. |
nDisplay Executable Filename | Sets the name of the executable for the project. This is useful for packaged builds. |
Extra Cmd Line Args | Optional command line arguments that are passed to nDisplay on start. |
ExecCmds |
Sets |
DPCVars |
Pass Device Profile Console variables in a comma separated list. |
Number of GPUs |
The number of GPUs to use on a device in case there is more than one. |
Process Priority |
Overrides the priority of the process. |
Listener Port |
The port number the listener listens on. The default port is 2980. |
Roles |
Dropdown menu enabling selection of a Virtual Production Role from those provided in the Roles .ini file. |
Stage Session ID |
An ID that groups Stage Monitor providers and monitors. Instances with different Session IDs are invisible to each other in Stage Monitor. |
For each nDisplay scene node:
Parameter | Description |
---|---|
IP address |
The remote address on which the SwitchboardListener listens. |
Roles |
Dropdown menu enabling selection of a Virtual Production Role from those provided in the Roles .ini file. |
Extra Cmd Line Args | Override for optional command line arguments. |
ExecCmds | Override for exec commands for nDisplay |
DPCVars |
Override for the Device Profile Console variables. |
Number of GPUs |
Override for the GPU count to use. |
Process Priority |
Override for the priority of this instance. |
Engine Directory |
Override for the local path to the engine. |
uProject Path |
Override for the local path to the uproject file. |
Shogun Device Settings

Parameter | Description |
---|---|
Is Recording Device |
Enable this option if this device type is going to record sequences. |
IP Address | The address of the device running Shogun. |
Save Path | Path to Shogun’s capture folder. |
SoundDevices Device Settings

Parameter | Description |
---|---|
Is Recording Device |
Enable this option if this device type is going to record sequences. |
IP Address | The address of the SoundDevices web server. |
Creating Your Own Device Plugin for Switchboard
Depending on your project’s needs and the devices you are using, you may need to add or extend the device functionality in Switchboard. This section covers creating your own device plugin in Python. With some C++ knowledge, it is possible to extend the listener to accept more types of messages but this is not covered here.
The following instructions step through how to create a new device plugin, SampleDevice, for Switchboard that you can use as a starting point.
- For the device plugin to be discoverable on load in Switchboard, you must create a folder and Python file with the naming convention
<plugin_name>\plugin_<plugin_name>.py
in\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard\devices\
.- For the SampleDevice plugin create the following file:
\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard\devices\sampledevice\plugin_sampledevice.py
.
- For the SampleDevice plugin create the following file:
- Extend the
Device
class defined in\Engine\Plugins\VirtualProduction\Switchboard\Source\Switchboard\switchboard\devices\device_base.py
in theplugin_sampledevice.py
file:- Import
Device
fromdevice_base.py
. - Create a new class
DeviceSampleDevice
which inherits fromDevice
. -
Import
LOGGER
fromswitchboard/switchboard_logging.py
to report errors.from switchboard.devices.device_base import Device from switchboard.switchboard_logging import LOGGER
class DeviceSampleDevice(Device):` def init(self, name, ip_address, kwargs): super().__init__(name, ip_address, kwargs)
Verify the file is discoverable by Switchboard. Launch Switchboard and expand the Add Device dropdown menu. SampleDevice appears in the list.
- Import
- Adding a SampleDevice to your Switchboard won’t create a widget in the view. To create a SampleDevice widget, extend
DeviceWidget
inplugin_sampledevice.py
:- Import
DeviceWidget
fromdevice_widget_base.py
. -
Create the new class
DeviceWidgetSampleDevice
which inherits fromDeviceWidget
.from switchboard.devices.device_base import Device from switchboard.devices.device_widget_base import DeviceWidget from switchboard.switchboard_logging import LOGGER
class DeviceSampleDevice(Device): def init(self, name, ip_address, kwargs): super().__init__(name, ip_address, kwargs)
class DeviceWidgetSampleDevice(DeviceWidget): def init(self, name, device_hash, ip_address, icons, parent=None): super().init(name, device_hash, ip_address, icons, parent=parent)
Verify the widget appears in Switchboard. Launch Switchboard and add a SampleDevice. A minimal SampleDevice widget appears in the view.
- Import
- Create a custom dialog when a new SampleDevice is added by creating a new class which inherits from
AddDeviceDialog
and assigning it to the static variableadd_device_dialog
in theDeviceSampleDevice
class:- Import
AddDeviceDialog
fromdevice_widget_base.py
. - Import Qt modules from PySide2
- Create a new class
AddSampleDeviceDialog
which inherits fromAddDeviceDialog
and set the device_type parameter to “SampleDevice” when calling the base class’s constructor. - In the new class’s constructor add a QLineEdit text field to the dialog.
-
Override the
add_device_dialog
static variable inDeviceSampleDevice
with the new class.from switchboard.devices.device_base import Device from switchboard.devices.device_widget_base import AddDeviceDialog, DeviceWidget from switchboard.switchboard_logging import LOGGER
from PySide2 import QtWidgets, QtGui, QtCore
class AddSampleDeviceDialog(AddDeviceDialog): def init(self, existing_devices, parent=None): super().init(device_type="SampleDevice", existing_devices=existing_devices, parent=parent)
# Create QTWidgets to add to the form self.additional_text_field = QtWidgets.QLineEdit(self)
# Append the new options to the QTWidgets.QFormLayout object defined in the parent class self.form_layout.addRow("Additional Text", self.additional_text_field)
class DeviceSampleDevice(Device): # Override the add device dialog object associated with the device plugin add_device_dialog = AddSampleDeviceDialog
def init(self, name, ip_address, kwargs): super().__init__(name, ip_address, kwargs)
class DeviceWidgetSampleDevice(DeviceWidget): def init(self, name, device_hash, ip_address, icons, parent=None): super().init(name, device_hash, ip_address, icons, parent=parent) `
Verify the new device dialog appears in Switchboard. Launch Switchboard and add a SampleDevice. The additional text field appears in the dialog.
- Import
- Devices can also have a widget on the right side of Switchboard, tabbed with other extension dialogs, to share more information. To create this tab, override the classmethod
plug_into_ui
from theDevice
base class.- Create a new class
SampleDeviceTabView
which inherits fromQtWidgets.QWidget
. - Create the class member
tab_view
inDeviceSampleDevice
to hold the instance of the widget. -
Override the classmethod
plug_into_ui
inDeviceSampleDevice
and initializetab_view
with the new classSampleDeviceTabView
.from switchboard.devices.device_base import Device from switchboard.devices.device_widget_base import AddDeviceDialog, DeviceWidget from switchboard.switchboard_logging import LOGGER
from PySide2 import QtWidgets, QtGui, QtCore
class AddSampleDeviceDialog(AddDeviceDialog): def init(self, existing_devices, parent=None): super().init(device_type="SampleDevice", existing_devices=existing_devices, parent=parent)
# Create QTWidgets to add to the form self.additional_text_field = QtWidgets.QLineEdit(self)
# Append the new options to the QTWidgets.QFormLayout self.form_layout object defined in the parent class self.form_layout.addRow("Additional Text", self.additional_text_field)
class DeviceSampleDevice(Device): add_device_dialog = AddSampleDeviceDialog # Override the default dialog for the plugin tab_view = None
def init(self, name, ip_address, kwargs): super().__init__(name, ip_address, kwargs)
@classmethod def plug_into_ui(cls, menubar, tabs): ''' Implementation of base class function that allows plugin to inject UI elements. '''
if not cls.tab_view: cls.tab_view = SampleDeviceTabView(parent=tabs)
tabs.addTab(cls.tab_view, 'SampleDevice Tab')
class DeviceWidgetSampleDevice(DeviceWidget): def init(self, name, device_hash, ip_address, icons, parent=None): super().init(name, device_hash, ip_address, icons, parent=parent)
class SampleDeviceTabView(QtWidgets.QWidget): def init(self, parent): QtWidgets.QWidget.init(self, parent)
- Create a new class
These steps showed how to create a new device plugin for Switchboard. For an advanced example, see the nDisplay device plugin for Switchboard.