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.
There are several parts to the helper window:
- In the top you can see the actual text string that is being built by the options you choose
- Select the type of parameter reference you want to create
- 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.
- 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:part1/part2/part3:modifier1:modifier2:modifier3
Additionally some of the parts can include nested IOreferences 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 IOReference 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:
)
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:
)
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
)
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:
)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 Template Behavior
-
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
)
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 Template Behaviors
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 Actions)
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 Template Behaviors
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 Reference Comment Behavior:LastEvent:Type Type 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:Pressed Returns whether the last binary trigger was pressed (ActDown) or not (ActUp). Options: true, false Behavior:LastEvent/Binary:Edge Returns which edge the last binary trigger sent. Options: NoEdge, Top, Left, Bottom, Right, Encoder Behavior:LastEvent/Pulsed:Direction Returns the direction of the last pulsed trigger received Options: Up, Down Behavior:LastEvent/Pulsed:Value Returns the value of the last pulsed trigger Behavior:LastEvent/Analog:Value Returns the value of the last analog trigger (0 to 1000) Behavior:LastEvent/Speed:Value Returns 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 that has passed since the last accepted trigger for the specified Action. It is recommended to set a maximum limit for performance reasons in reactor.
Behavior:Events/[Action Name]:SequenceStep: The current sequence step being executed (See Binary Sequence)
Presets (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
)
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
)
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. Settings Tables 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:
Modifier | Comment | DC | Var | Const |
---|---|---|---|---|
(no modifiers) | Without any modifiers, returns the values. | Yes | Yes | Yes |
Name | Returns the name of the reference, such as a parameter or variable name. | Yes | Yes | Yes |
Default | Returns the default values of the IO reference. | Yes | Yes | - |
Default:Name | Returns the names/labels of the default values of the IO reference. | Yes | Yes | - |
All | Returns 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) | Yes | Yes | No |
Exists | Returns "true" if the reference exists. | Yes | Yes | Yes |
Mutable | Returns "true" if the reference can be changed. | Yes | Yes | Yes |
Assumed | Returns "true" if a parameter is assumed in the core. | Yes | - | - |
FineSteps | Returns the recommended fine steps for a Device Core; otherwise, returns 1. | Yes | - | - |
CoarseSteps | Returns the recommended coarse steps for a Device Core; otherwise, returns 10. | Yes | - | - |
ASCIIOnly | Returns true if only ASCII characters are found in the return value. | Yes | Yes | Yes |
Current | ||||
Current | Returns the current values. Same as not using "Current" modifier. | Yes | Yes | Yes |
Current:Name | Returns the names of the current values. | Yes | Yes | Yes |
Current:Normalized | Returns the normalized value in the range of 0-1000. | Yes | Yes | No |
Current:NormalizedInverted | Returns the normalized value in the inverted range of 1000-0. | Yes | Yes | No |
Current:Percent | Returns the normalized value in the range of 0-100. | Yes | Yes | No |
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. | Yes | Yes | No |
Current:Index | Returns the index of the current value from the option list, starting with zero. Works only for parameters and variables with Option Lists, not ranges. | Yes | Yes | No |
Current:Count | Returns the number of values in the IO reference array. | Yes | Yes | Yes |
Current:Join:Token | Returns an IO reference with a single value, a concatenation of all values it had, separated by the Token string. | Yes | Yes | Yes |
Current:SingleValue:Index | Returns a single value out of the current values by index | Yes | Yes | No |
Current:Offset:[int] | Returns the value with [int] added to it. | Yes | Yes | Yes |
Current:BufferTimeToNow | Returns 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 / Constant or Variable Reference] | Returns option value with index [int] or if it's a string, the constant of the HWC Behavior. | Yes | Yes | No |
Index:[integer comma list incl. "Last" keyword / Constant or Variable Reference]:Name | Returns the name of the option value with index [int]. | Yes | Yes | No |
Index:[integer comma list incl. "Last" keyword/ Constant or Variable Reference]:Exists | Returns true if the index exists. | Yes | Yes | No |
Index:[integer comma list incl. "Last" keyword / Constant or Variable Reference]:Raw | Returns the raw index value of the option value with index [int]. | Yes | Yes | No |
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 Element | Yes | No | No |
ID | ||||
ID:[integer / Constant or Variable Reference] | Return an option by its value ID (different than index on some cores) also supports :Name and :Exists | Yes | Yes | No |
without core- prefix