The Parameter Reference (IOReference)

One of the fundamental concepts in reactor is the Parameter Reference, also called IO Reference. This is a text string that can be used to address any kind of parameter inside of Reactor. Parameter References are similar to URLs as encountered on websites, providing a consistent method for accessing and manipulating data. The main groups of addressable parameters are:

  • Device Core Values
  • Variables and Flags
  • System Values
  • Presets
  • Panel Settings
  • The current Behavior and it's settings
  • A value of a specific Constant Set Table

Additionally the parameter reference can also include a simple value, like a number or a text string

Configuring Parameter References using the helper window

Everywhere in Reactor where you find a Parameter Reference you can open a helper window. This will allow you to select what you need in the easiest way. You can also choose to configure the parameter reference manually if you wish.

parameter reference helper window
parameter reference helper window

There are several parts to the helper window:

  1. In the top you can see the actual text string that is being built by the options you choose
  2. Select the type of parameter reference you want to create
  3. Configure the parameter reference, in this case we select the parameter of a device. The form will show more options when you make your selections.
  4. Click the Edit Raw button to directly edit the text string of the parameter reference

Manual Configuration

To manually configure a parameter reference you must first understand the format, and then the possible options that make up the reference.

Basic Format

The basic format looks like this:

Type:parameter1/parameter2/parameter3:modifier1:modifier2:modifier3

Additionally some of the parameter fields can be nested using curly brackets { }. This means for example that you can use a different IOReference to select a certain device id. While this is possible on some combinations it is not universally valid. See the specific option in the reference below for more info on if it can be templated.

It is also possible to create an ioref that points to multiple parameters by using array syntax with [ ] for ids.

Types and their Options

Different Types of Parameter References can have different options or modifiers.

Literal Values

Literal values can simply be written as they are, as long as they do not include a colon.

For example: 3, true, or page1

Sometimes you might also want to specify an array of values. In this case the values are enclosed in brackets, with individual values separated by commas, for example, [red, green, blue].

In special cases where your value contains a lot of special character you might want to prefix the value with String: to explicitly tell reactor that the rest of the value is a literal value.

Eg: String:{"DATA":"Custom JSON value"}

Variables (Var:)

Variables can be referenced by combining the type and the variable key.

For example: Var:SEC_Page or Var:DeviceIndex

Modifiers can be added at the end

For example: Var:SEC_Page:Name (displays the friendly name of the variable) or Var:DeviceIndex:Current:Name (displays the label of the current value)

Device Core Parameters (DC:)

Parameters of devices follow the following syntax:

DC:[name of the core1]/[device index]/[name of parameter]/[dimension1 index]/[dimension2 index]/...:Modifiers

The device index and the dimension indexes can be set in different ways. They are IOReferences itself, meaning that it can be a Variable, BehaviorConstant or any other reference. If this reference would include slashes (/) it needs to be wrapped in curly braces {}

Examples: DC:bmd-atem/{Var:DeviceIndex}/AuxSource/{Var:AuxChannel}/

Reference to AUX sources on the ATEM switcher with Device ID found in "Var:DeviceIndex" and in the AUX Channel denoted by "Var:AuxChannel".
Both examples provided are identical. In this scenario, encapsulating the nested IO Reference is not required, as there are no forward slashes included that might interfere with the parsing process.

Panel Settings (Panels)

Panel Parameters like brightness and sleep can be controlled using this type of parameter reference

The basic format looks like this:

Panels:[target type]/[target index]/[panel parameter type]

Target Type can be one of the following:

  • Canvas - Directly address the whole canvas (panel group) by it's id
  • Panel - Address a specific panel by it's id
  • CanvasOfPanel - Address the whole canvas (panel group) of the panel specified by the target ID

The target index can be set in different ways. It is an IOReferences itself, meaning that it can be a Variable, BehaviorConstant or any other reference. If this reference would include slashes (/) it needs to be wrapped in curly braces {}

Important: Normally the way addressing is done in reactor for panel parameters is like so: Panels:CanvasOfPanel/Behavior:Panels/[panel parameter type]. This makes sure we always address the full panel group of the panel that the behavior is mapped to. In most cases this is the best way to do it.

Panel Parameter Type can be one of the following:

  • SleepTime (minutes)
  • DimTime (in minutes)
  • DisplayBrightness (0-8)
  • LEDBrightness (0-8)
  • GlobalBrightness (0-8)
  • Sleep (binary: "on", "off") - (Is reset by the panel when it wakes up again. It's probed once a second, so it can feel a little like a "hold down" function)
  • ResetSleepTimer (one-shot trigger)
  • Name (read only)
  • Model (read only)

System Values (System:)

System Variables can be accessed using the System parameter Type.

Current list of possible options:

  • System:PanelLock - Lock function for the whole of reactor

  • System:IPAddress - Show the IP Address of reactor. Can also change the system IP using a set value command or the SKAARHOJ:ChangeIP Settings Template

  • System:CurrentProject - Allows to trigger a change of projects using SetValue

  • System:RestartEngine - Perform a restart of reactors engine, like switching projects

  • System:ProjectTitle - Show current Project title

  • System:ConfigTitle - Show current name of root layer

  • System:UptimeFormatted - Show uptime since Reactor was started

  • System:Panels:Connected - Number of currently connected panels

  • System:Panels:Warnings - Number of panels with warnings

  • System:Panels:Unconnected - Number of unconnected panels (errors)

  • System:Panels:LastEvent - Last event as a string, eg. "Down (T)" if a four way buttons top edge was pressed down.

  • System:Panels:LastEventSource - The HWC source of last event, including panel ID, on form "P[panel id]#[HWC id]", for example "P1#43"

  • System:Devices:Connected - Number of connected devices

  • System:Devices:Warnings - Number of devices with warnings

  • System:Devices:Unconnected - Number of unconnected devices (errors)

  • System:Devices/[idx]:Name - Name of devices. idx is just an index.

  • System:Warnings - Total number of warnings in Reactor

  • System:Errors - Total number of errors in Reactor

The current Behavior and it's settings (Behavior)

Using Behavior Parameters you can reference some of the values configured for the current Behavior or show some information about it. This is used in many of the built in Settings Templates

Format: Behavior:[sub type]:[additional type]:Modifiers...

Subtypes

  • IOReference (main parameter reference)

Using this subtype the main Parameter in the Behavior can be referenced. Additionally Modifiers can be added. This way you can refer to the main parameters value or name without having to hardcode it in other parts of a behavior (like feedbacks or event handlers)

Examples: Behavior:IOReference:Name (Display the main parameters Name) or Behavior:IOReference:Current (Display the main parameters current value)

  • Const (BehaviorConstant)

Using Behavior:Const:[constant key] you can access constant fields of the behavior. This way you can create SettingsTemplates for behaviors that have certain constant fields that can be customized in an easy way. This is used in many of the built in Settings Templates

Advanced Subtypes

Several other subtypes exist to access information about the current behavior:

  • Name The friendly name of the behavior

  • Path - Returns the "path" of the behavior in the layer tree. Eg. "0/3/0/A3"

  • ID - Returns the behaviors main mapping to a panel, for example "_p4.32" (panel Id 4, Hardware Component (HWC) 32)

  • Panels - An array of all Panel Ids this behavior is mapped to (used mainly for accessing panel parameters, see below at Panel Settings)

  • Script - Using the Script subtype you can access information about current running scripts of this behavior. See

  • LastEvent Access information about the last hardware event (trigger) received by the behavior.

    IO ReferenceComment
    Behavior:LastEvent:TypeType of last event. Options: Binary, Pulsed, Analog, Speed
    Behavior:LastEvent:TimeToNow:[Limit]This returns the time in milliseconds that has passed since the last event. Although setting a limit is optional, it's recommended to set it at or above the comparison value for performance efficiency. If a limit is set, it designates the maximum returned value.
    Behavior:LastEvent/Binary:PressedReturns whether the last binary trigger was pressed (ActDown) or not (ActUp). Options: true, false
    Behavior:LastEvent/Binary:EdgeReturns which edge the last binary trigger sent. Options: NoEdge, Top, Left, Bottom, Right, Encoder
    Behavior:LastEvent/Pulsed:DirectionReturns the direction of the last pulsed trigger received
    Options: Up, Down
    Behavior:LastEvent/Pulsed:ValueReturns the value of the last pulsed trigger
    Behavior:LastEvent/Analog:ValueReturns the value of the last analog trigger (0 to 1000)
    Behavior:LastEvent/Speed:ValueReturns the value of the last intensity trigger (-500 to 500)
  • Events
    Access information about the last event handler received by the behavior.

    Behavior:Events/[event handler key]:TimeToNow:[Limit]

    Returns the time in milliseconds that has passed since the last accepted trigger for the specified event handler. It is recommended to set a maximum limit for performance reasons in reactor.

    Behavior:Events/[event handler key]:SequenceStep: The current sequence step being executed (See Binary Sequence)

Presets (Presets)  

Preset Parameters are used to control reactors Parameter Preset Engine. You can learn more about here: Parameter Preset Engine

The basic Format looks like this:

Preset:[preset kind name]/[command]/[preset index]/[device index]/

Command can be one of the following:

  • Store
  • Recall
  • Delete

The preset index and the device indexes can be set in different ways. They are IOReferences itself, meaning that it can be a Variable, BehaviorConstant or any other reference. If this reference would include slashes (/) it needs to be wrapped in curly braces {}

Flags (Flag)  

Flags can be referenced to set, clear or display them. The basic format looks like this:

Flag:[flag group name]/[flag color]/[flag number]:modifier1:modifier2:modifier3

Make sure you have created a flag group before to use this. More info can be found here Flag Groups

The Flag color can be selected from the fixes list of [Red, Gree, Blue, White]

Finally a index between 0 and 99 can be selected

Note: Flags are generally used for SKAARHOJ Default Tally Forwarding and Routing Triggers. otherwise most things that can be done with flags can also be achieved with variables.

Value from Constant Set Tables (Const)  

This type of parameter reference allows read only access to a value in a constant set table directly.

This can be useful to access settings values defined on the home screen or access values of a constant set in virtual triggers.

Reactor's constants are unchangeable values embedded in the configuration code, used for various purposes within the configuration. Unlike variables, constants can only be modified by altering the configuration. Constant Sets in Reactor are essentially tables of related constants.

The basic format looks like this:

Const:[constant set name]/[row index]/[constant name (column)]/:Modifiers...

Row Index can be set in different ways. It is an IOReferences itself, meaning that it can be a Variable, BehaviorConstant or any other reference. If this reference would include slashes (/) it needs to be wrapped in curly braces {}

Examples:

Const:CameraSelector/0/CameraName

Returns the value of the constant called "CameraName" in the first row (index 0) of the constant set "CameraSelector".

Const:CameraSelector/{Var:CameraIndex:Current:Offset:-1}/CameraName

This retrieves the value of the constant CameraName from the row in the CameraSelector constant set, as indicated by the CameraIndex variable. If the CameraIndex variable is set to 1, it refers to the first row (index 0), because the variable's value is reduced by one when inserted as the value for the row index. (:Current:Offset:-1)

General Modifiers

Modifiers are used by certain Parameter References to access additional information from the parameter or present the data in a different format. Modifiers are simply appended to the Parameter reference like so:

ParameterReference:Modifier1:Modifier2 ...

Most of the time modifier combinations are dependent on their order.

Not all Parameter types support all modifiers. Reactor will actively limit the selection based on your Parameter Selection in the helper window.

For reference here is a complete list:

ModifierCommentDCVarConst
(no modifiers)Without any modifiers, returns the values.YesYesYes
NameReturns the name of the reference, such as a parameter or variable name.YesYesYes
DefaultReturns the default values of the IO reference.YesYes-
Default:NameReturns the names/labels of the default values of the IO reference.YesYes-
AllReturns all option values for a parameter. For an integer range with less than 100 values, it will calculate and return that as an option list. (June 23)YesYesNo
ExistsReturns "true" if the reference exists.YesYesYes
MutableReturns "true" if the reference can be changed.YesYesYes
AssumedReturns "true" if a parameter is assumed in the core.Yes--
FineStepsReturns the recommended fine steps for a Device Core; otherwise, returns 1.Yes--
CoarseStepsReturns the recommended coarse steps for a Device Core; otherwise, returns 10.Yes--
ASCIIOnlyReturns true if only ASCII characters are found in the return value.YesYesYes
Current
CurrentReturns the current values. Same as not using "Current" modifier.YesYesYes
Current:NameReturns the names of the current values.YesYesYes
Current:NormalizedReturns the normalized value in the range of 0-1000.YesYesNo
Current:NormalizedInvertedReturns the normalized value in the inverted range of 1000-0.YesYesNo
Current:PercentReturns the normalized value in the range of 0-100.YesYesNo
Current:Remap:[low int]:[high int]:[optional integer divisor, default to 1]Returns the value normalized to the range [low int]-[high int], divided by the divisor.YesYesNo
Current:IndexReturns the index of the current value from the option list, starting with zero. Works only for parameters and variables with Option Lists, not ranges.YesYesNo
Current:CountReturns the number of values in the IO reference array.YesYesYes
Current:Join:TokenReturns an IO reference with a single value, a concatenation of all values it had, separated by the Token string.YesYesYes
Current:SingleValue:IndexReturns a single value out of the current values by indexYesYesNo
Current:Offset:[int]Returns the value with [int] added to it.YesYesYes
Current:BufferTimeToNowReturns the time in milliseconds from the buffered value time out to the current time.Yes--
Confirm:[int]Changes the value only locally, waiting to be confirmed for [int] milliseconds.Yes--
Wait:[int]Similar to Confirm, but the change is automatically accepted after the time expires.Yes--
Index
Index:[integer comma list incl. "Last" keyword / HWC behavior constant ref]Returns option value with index [int] or if it's a string, the constant of the HWC Behavior.YesYesNo
Index:[integer comma list incl. "Last" keyword / HWC behavior constant ref]:NameReturns the name of the option value with index [int].YesYesNo
Index:[integer comma list incl. "Last" keyword/HWC behavior constant ref]:ExistsReturns true if the index exists.YesYesNo
Index:[integer comma list incl. "Last" keyword / HWC behavior constant ref]:RawReturns the raw index value of the option value with index [int].YesYesNo
DimensionName
DimensionName:[int]:[optional int]Returns the name of the specified dimension (0 index) if 2 integers are specified returns the name of the specified ElementYesNoNo
ID
ID:[integer / HWC behavior constant ref]Return an option by its value ID (different than index on some cores) also supports :Name and :ExistsYesYesNo
1

without core- prefix