The Parameter Reference (aka IO Reference)

One of the fundamental concepts in Reactor is the Parameter Reference, also sometimes referred to as IO Reference. This is a text string used to address any parameter within Reactor. Parameter References are similar to URLs, 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 its settings
  • A value from a specific Settings Table

Additionally, the parameter reference can also include simple (literal) values, like a number or a text string.

Configuring Parameter References using the helper window

In Reactor, wherever you encounter a Parameter Reference, you can open a helper window to select what you need easily. You can also configure the Parameter Reference manually if you wish.

parameter reference helper window
Parameter Reference helper window

The helper window consists of several parts:

  1. The top displays the actual text string 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, select the parameter of a device. The form will show more options as you make selections.
  4. Click the Edit Raw button to directly edit the Parameter Reference text string.

Manual Configuration

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

Basic Format

The basic format looks like this:

Type:part1/part2/part3:modifier1:modifier2:modifier3

Some parts can include nested Parameter References using curly brackets { }, allowing a different Parameter Reference to select a certain device ID for example. This is valid in some combinations but not universally. Refer to the specific option in the reference for more information about templating.

It is also possible to create a Parameter Reference that points to multiple parameters 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 be written as they are, provided they do not include a colon.

For example: 3, true, or page1

To specify an array of values, enclose the values in brackets and separate them with commas, for example, [red, green, blue].

In cases where your value contains special characters, prefix the value with String: to explicitly indicate 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:)

Device parameters follow this syntax:

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

The device ID and dimension values can be set in different ways, as they are Parameter References themselves, meaning they can be Variables, Behavior Constants, or any other reference. If the reference includes slashes (/), it must be wrapped in curly braces {}.

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

This references AUX sources on the ATEM switcher with Device ID found in "Var:DeviceIndex" and the AUX Channel denoted by "Var:AuxChannel".
In this case, wrapping the nested Parameter Reference is not required, as there are no forward slashes that might interfere with parsing, but it improves readability to do so.

Panel Settings (Panels)

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

The basic format is:

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 its ID.
  • Panel - Address a specific panel by its ID.
  • CanvasOfPanel - Address the whole canvas (panel group) of the panel specified by the target ID.

The target index can be a Parameter Reference, which means it can be a Variable, Behavior Constant, or any other reference. If the reference includes slashes (/), it must be wrapped in curly braces {}.

Important: Reactor typically addresses panel parameters like this: Panels:CanvasOfPanel/Behavior:Panels/[panel parameter type], ensuring the full panel group is addressed. In most cases, this is the best method.

Panel Parameter Types:

  • SleepTime (minutes)
  • DimTime (minutes)
  • DisplayBrightness (0-8)
  • LEDBrightness (0-8)
  • GlobalBrightness (0-8)
  • Sleep (binary: "on", "off")
  • ResetSleepTimer (one-shot trigger)
  • Name (read-only)
  • Model (read-only)

System Values (System:)

System variables can be accessed using the System parameter type.

Available options:

  • System:PanelLock - Locks the entire Reactor system.

  • System:IPAddress - Displays the IP address of Reactor. It can also be used to change the system IP with a set value command or the SKAARHOJ:ChangeIP Template Behavior.

  • System:CurrentProject - Triggers a project change using Set Value.

  • System:RestartEngine - Restarts Reactor's engine, similar to switching projects.

  • System:ProjectTitle - Displays the current project title.

  • System:ConfigTitle - Shows the current name of the root layer.

  • System:UptimeFormatted - Displays the 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, e.g., "Down (T)" if the top edge of a Four-Way button was pressed down.

  • System:Panels:LastEventSource - The HWC source of the last hardware event, including panel ID, in the 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 - The name of a device, where idx is an index number.

  • System:Warnings - Total number of warnings in Reactor.

  • System:Errors - Total number of errors in Reactor.

The current Behavior and its settings (Behavior)

Behavior parameters reference values configured for the current Behavior or display related information. These are often used in Template Behaviors.

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

Examples include accessing the main parameter’s value or name using Behavior:IOReference:Name (to display the name) or Behavior:IOReference:Current (to display the current value).

Subtypes

  • IOReference (main parameter reference)

Using this subtype, the main parameter in the behavior can be referenced. Additionally, modifiers can be added. This allows you to refer to the main parameter's value or name without hardcoding it in other parts of a behavior (such as Feedbacks or Actions).

Examples:
Behavior:IOReference:Name (Displays the main parameter's name) or
Behavior:IOReference:Current (Displays the main parameter's current value).

IOReference Example
  • Const (BehaviorConstant)

Using Behavior:Const:[constant key], you can access constant fields of the behavior. This allows you to create SettingsTemplates for behaviors with customizable constant fields. It is used in many built-in Template Behaviors.

Custom Constant Example

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, e.g., "0/3/0/A3".

  • ID - Returns the behavior's 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 the currently running scripts of this behavior. See Scripting Engine.

  • 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]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 Action executed on the behavior.

    Behavior:Events/[Action Name]:TimeToNow:[Limit]

    Returns the time in milliseconds since the last accepted trigger for the specified action. Setting a maximum limit is recommended for performance reasons in Reactor.

    Behavior:Events/[Action Name]:SequenceStep
    The current sequence step being executed (see Binary Sequence).

Presets (Presets)  

Preset Parameters control Reactor’s Parameter Preset Engine.

The basic format:

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

Command can be one of the following:

  • Store
  • Recall
  • Delete

The preset index and device indexes can be set in different ways. They are Parameter References, meaning they can be a Variable, Behavior Constant, or any other reference. If the reference includes slashes (/), it needs to be wrapped in curly braces {}.

Flags (Flag)  

Flags can be set, cleared, or displayed. The format:

Flag:[flag group name]/[flag color]/[flag number]:modifier1:modifier2:modifier3 Flags can be referenced to set, clear, or display them. The basic format is:

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

Make sure you have created a flag group before using this. More information can be found here: Flag Groups.

The Flag color can be selected from the fixed list of [Red, Green, Blue, White].

Finally, an index between 0 and 99 can be selected.

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

Value from Settings Tables (Const)  

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

It can be useful for accessing settings values defined on the home screen or values from 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. Settings Tables in Reactor are essentially tables of related constants.

The basic format is:

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

The Row Index can be set in different ways. It is a Parameter Reference, meaning it can be a Variable, BehaviorConstant, or any other reference. If the reference includes slashes (/), it must be wrapped in curly braces {}.

Examples:

Const:CameraSelector/0/CameraName

Returns the value of the constant "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), as the variable's value is reduced by one when inserted as the row index (:Current:Offset:-1).

## General Modifiers

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

ParameterReference:Modifier1:Modifier2 ...

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

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

Here is a complete list for reference:

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 integer ranges with fewer than 100 values, it will calculate and return that as an option list.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 the "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, concatenating all values it had, separated by the Token string.YesYesYes
Current:SingleValue:IndexReturns a single value from the current values by index.YesYesNo
Current:Offset:[int]Returns the value with [int] added to it.YesYesYes
Current:BufferTimeToNowReturns the time in milliseconds from the buffered value timeout 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 / Constant or Variable Reference]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 / Constant or Variable Reference]:NameReturns the name of the option value with index [int].YesYesNo
Index:[integer comma list incl. "Last" keyword / Constant or Variable Reference]:ExistsReturns true if the index exists.YesYesNo
Index:[integer comma list incl. "Last" keyword/ Constant or Variable Reference]:Offset:[int]Returns the value at index with a numeric offset (can be negative).YesYesNo
Index:[integer comma list incl. "Last" keyword / Constant or Variable Reference]: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 two integers are specified, returns the name of the specified element.YesNoNo
ID
ID:[integer / Constant or Variable Reference]Returns an option by its value ID (different than index on some cores). Also supports :Name and :Exists.YesYesNo
1

without core- prefix