No commands match that search.
Live Control
54ClickLCTabMode
The ClickLcTabMode command is the same as clicking the Master, Cue, Zone, or ProTrack buttons in the Live Control tab. The command defines which Live Control is connected to the Live Control tab (UI). Use the following constants: 1-Master, 2-Cue, 3-Zone, 4-ProTrack
Syntax
clicklctabmode(float)Parameters
| Name | Type | Description |
|---|
param1 | float | |
Example
ClickLCTabMode 1 // 1-Master, 2-Cue, 3-Zone, 4-ProTrack
Notes
- Connect the Live Control tab to the Master LC
Syntax
size(float, float, float)Parameters
| Name | Type | Description |
|---|
x | float | Size X. Size in percent. 100 is default. |
y | float | Size Y |
z | float | Size x |
Examples
Size 100,100,100 // Size X,Y,Z axis
Size 200,200,200
Notes
- Set default Size X, Y and Z
- Twice as big
Syntax
sizex(float)Parameters
| Name | Type | Description |
|---|
param1 | float | |
Syntax
sizey(float)Parameters
| Name | Type | Description |
|---|
param1 | float | |
Syntax
sizez(float)Parameters
| Name | Type | Description |
|---|
param1 | float | |
Syntax
sizedelta(float, float, float)sizedelta(float, float)sizedelta(float)Parameters
| Name | Type | Description |
|---|
x | float | Size X delta |
y | float | Size Y delta |
z | float | Size Z delta |
x | float | Size X delta |
y | float | Size Y delta |
all | float | Size change on all 3 axes. |
Examples
SizeDelta 10,0,0
SizeDelta 0,-10,0
Notes
- Make size X 10% bigger
- Make Size Y ten percent smaller
Syntax
sizeindex(integer, float)Parameters
| Name | Type | Description |
|---|
index | integer | Axis index. 0 - x, 1 - y, 2 - z. |
value | float | Size in percent |
Syntax
position(float, float, float)Parameters
| Name | Type | Description |
|---|
x | float | Position X (-100 to 100) |
y | float | Position Y (-100 to 100) |
z | float | Position Z (-100 to 100) |
Syntax
positionx(float)Parameters
| Name | Type | Description |
|---|
x | float | X coordinate (-100 to 100); |
Example
PositionX 100 // -100 to 100
Syntax
positiony(float)Parameters
| Name | Type | Description |
|---|
y | float | Y coordinate (-100 to 100); |
Example
PositionY 100 // -100 to 100
Syntax
positionz(float)Parameters
| Name | Type | Description |
|---|
z | float | Z coordinate (-100 to 100); |
Example
PositionZ 0 // -100 to 100
Syntax
positiondelta(float, float, float)Parameters
| Name | Type | Description |
|---|
dx | float | X coordinate shift |
dy | float | Y coordinate shift |
dz | float | Z coordinate shift |
Example
PositionDelta 0,10,0 // X,Y,Z
Syntax
positionindex(integer, float)Parameters
| Name | Type | Description |
|---|
index | integer | 1 is X, 2 is Y, 3 is Z |
value | float | Position value (-100 to 100) |
Example
PositionIndex 1,0 // Axis, Value
Notes
- Set position using axis index
Syntax
anglex(float)Parameters
| Name | Type | Description |
|---|
angle | float | Absolute angle X |
Examples
AngleX 0
AngleX 45
Notes
- Reset angle X to zero
- Reset angle X to 45 degrees
- You can use AngleDelta 5,0,0 as the relative version of the command.
- You can use the AngleX property of Live Control objects. For example: Master.AngleX = Master.AngleX + 5
Syntax
angley(float)Parameters
| Name | Type | Description |
|---|
angle | float | Absolute angle Y |
Syntax
anglez(float)Parameters
| Name | Type | Description |
|---|
angle | float | Absolute angle Z |
Examples
AngleZ 0
AngleZ 45
Notes
- Set angle to zero
- Set angle to 45 degrees
Angle
The Live Control section for geometric operations includes both a static rotation angle and a rotation speed. The Angle command defines the static rotation angle for the X, Y, and Z axes. All angles are measured in degrees.
Syntax
angle(float, float, float)Parameters
| Name | Type | Description |
|---|
x | float | Absolute angle x |
y | float | Absolute angle y |
z | float | Absolute angle z |
Examples
Angle 0,0,0
Angle 0,0,90
Notes
- Reset angle to zero
- Rotate on Z by 90 degrees
AngleDelta
Increases or decreases Angle X, Y, and Z of the current Live Control by the supplied deltas, in degrees.
Syntax
angledelta(float, float, float)Parameters
| Name | Type | Description |
|---|
x | float | Add X value to current angle X |
y | float | Add Y value to current angle Y |
z | float | Add Z value to current angle Z |
Notes
- Increment X, Y, Z angles in degrees
Syntax
rotospeedx(float)Parameters
| Name | Type | Description |
|---|
x | float | |
Syntax
rotospeedy(float)Parameters
| Name | Type | Description |
|---|
y | float | |
Syntax
rotospeedz(float)Parameters
| Name | Type | Description |
|---|
z | float | |
RotoSpeed
Sets the rotation speed on X, Y, and Z for the current Live Control. If you need a static angle, use the Angle... commands.
Syntax
rotospeed(float, float, float)Parameters
| Name | Type | Description |
|---|
x | float | Rotation speed X (degrees per second) |
y | float | Rotation speed Y |
z | float | Rotation speed Z |
Example
RotoSpeed 0,0,0 // rotation speed by X,Y,Z axis. degree.
Syntax
rotospeeddelta(float, float, float)Parameters
| Name | Type | Description |
|---|
dx | float | Increase/decrease rotation (degrees) |
dy | float | Increase/decrease rotation (degrees) |
dz | float | Increase/decrease rotation (degrees) |
Example
RotoSpeedDelta 0,0,5 // increment of rotation speed. X,Y,Z axis.
Notes
- Increase rotation speed on Z
Syntax
brightness(float)Parameters
| Name | Type | Description |
|---|
value | float | Brightness value in the range 0 to 100 |
Examples
Brightness 100
Brightness 50
Notes
- Full brightness
- Half brightness
Syntax
brightnessdelta(float)Parameters
| Name | Type | Description |
|---|
delta | float | Value to add to current brightness |
Notes
- Increase brightness by 5%
Syntax
strobespeeddelta(float)Parameters
| Name | Type | Description |
|---|
delta | float | Negative values decrement the current Strobe value. |
Example
StrobeSpeedDelta 0.1 // period, flicker per second
Notes
- Increment the strobe of the Live Control
Syntax
visiblepoints(float)Parameters
| Name | Type | Description |
|---|
edge | float | Sets the end of visible points in percent. Value from 0 to 100 |
Examples
VisiblePoints 100 // 0..100 (percents)
VisiblePoints 50 // 0..100 (percents)
Notes
- Reset visible points to default
- Show half of the frame
- BEYOND also allows points to be blanked or deleted.
- While deleting points may seem useful, it increases scanner speed and FPS, which makes the visible parts of the frame progressively brighter.
- Be aware of these visual consequences when removing points!
Syntax
visiblepointsdelta(float)Parameters
| Name | Type | Description |
|---|
delta | float | Increase or decrease the Visible Points parameter |
Example
VisiblePointsDelta -2
Notes
- Decrease visible points by two percent
ColorSlider
Sets the Color slider position. The slider has a neutral range (0..31), then a color gradient, with white at the end. This is the old FB3 DMX profile style. Use Red, Green, Blue, and Alpha if you need exact color control.
Syntax
colorslider(float)Parameters
| Name | Type | Description |
|---|
pos | float | Color slider position (0..255) |
Examples
ColorSlider 0 // default pos
ColorSlider 255 // default pos
Notes
- Color slider
- Color slider set to white
ColorSliderDelta
Shifts the Color slider position. The slider has a neutral range (0..31), then a color gradient, with white at the end. This is the old FB3 DMX profile style. Use Red, Green, Blue, and Alpha if you need exact color control.
Syntax
colorsliderdelta(float)Parameters
| Name | Type | Description |
|---|
delta | float | Slider offset |
Example
ColorSliderDelta 0
AnimationSpeed
Sets the animation speed of the Live Control. The animation speed parameter works at the Cue and Master Live Control level. Live Control is also embedded in Projection Zones, but you cannot set the playback speed of a Zone: BEYOND plays content, not Zones.
Syntax
animationspeed(float)Parameters
| Name | Type | Description |
|---|
speed | float | Animation speed in percent. 100 is the default value. 0 is full stop. |
Examples
AnimationSpeed 100
AnimationSpeed 200
Notes
- Set default animation speed
- Play twice as fast
Warning
- AnimationSpeed was initially designed for use with clock-based time. The tempo (beats) is not meant to work with animation speed; use the Master.BPM property instead.
Syntax
animationspeeddelta(float)Parameters
| Name | Type | Description |
|---|
delta | float | Defines the relative change (current = current + delta) |
Example
AnimationSpeedDelta 0
Syntax
scanrate(float)Parameters
| Name | Type | Description |
|---|
rate | float | 100 is default value. Range 10 to 400 |
Syntax
scanratedelta(float)Parameters
| Name | Type | Description |
|---|
rate | float | Increment/decrement of the sample rate value |
Notes
- Decrease scan rate by 10 percent
Syntax
zoom(float)Parameters
| Name | Type | Description |
|---|
zoom | float | Zoom value in percent. 100 is default |
Syntax
zoomdelta(float)Parameters
| Name | Type | Description |
|---|
delta | float | Zoom change value |
Example
ZoomDelta 5 // add 5%
Notes
- Relative change of zoom value
Syntax
beambrush(float)Parameters
| Name | Type | Description |
|---|
brush | float | Width of the beam brush. Value range is 0 to 100, where 0 is min width and 100 is max |
Examples
BeamBrush 25
BeamBrush 0
BeamBrush 100
Notes
- Set 1/4 of the max width
- Zero-width sharp line
- Set widest line
- Requires a BeamBrush-equipped projector.
Syntax
beambrushdelta(float)Parameters
| Name | Type | Description |
|---|
delta | float | |
Syntax
coloron(float)Parameters
| Name | Type | Description |
|---|
enabled | float | 0 - disabled, 1 - enabled |
Example
ColorOn 1 // 1-enabled, 0-disabled
Notes
- Enable or disable Live Control recolor by RGB value
Syntax
colorrgb(integer)Parameters
| Name | Type | Description |
|---|
rgb | integer | 24-bit RGB color 0x0000FF // red color |
Example
ColorRGB 0x0000FF // red
Syntax
colorbgr(integer)Parameters
| Name | Type | Description |
|---|
bgr | integer | 24-bit BGR color 0x0000FF // red color |
Example
ColorBGR 0x0000FF // blue
RGBA
Sets the RGBA recoloring values in various combinations. Remember: if Alpha is 0, the RGB values have no effect. If Alpha is 255, Live Control applies full RGB recoloring (except on blanked points). The command has three overloads: 2 parameters — channel index and value. 3 parameters — R, G, and B (Alpha remains unchanged). 4 parameters — R, G, B, and Alpha.
Syntax
rgba(float, float, float, float)rgba(float, float)rgba(float, float, float)Parameters
| Name | Type | Description |
|---|
r | float | Red channel 0 to 255 |
g | float | Green channel 0 to 255 |
b | float | Blue channel 0 to 255 |
a | float | Alpha channel value 0 to 255 |
index | float | 0 red, 1 green, 2 blue, 3 alpha, 4 - all four to one value (reset) |
value | float | Channel value from 0 to 255 |
r | float | Red channel 0 to 255 |
g | float | Green channel 0 to 255 |
b | float | Blue channel 0 to 255 |
Examples
RGBA 255,255,255,255 //R,G,B,Alpha. 0..255
RGBA 255,0,0,128 //R,G,B,Alpha. 0..255
Notes
- Set white color
- Set half-transparent red
RGBADelta
Modifies the RGBA recoloring values in various combinations. The command has three overloads: 2 parameters — channel index and value change. 3 parameters — R, G, and B change; Alpha stays as it is. 4 parameters — R, G, B, and Alpha change.
Syntax
rgbadelta(float, float, float, float)rgbadelta(float, float)rgbadelta(float, float, float)Parameters
| Name | Type | Description |
|---|
r | float | Red channel change |
g | float | Green channel change |
b | float | Blue channel change |
a | float | Alpha channel change |
index | float | 0 red, 1 green, 2 blue, 3 alpha, 4 - all four to one value (reset) |
value | float | Increment/decrement value |
r | float | |
g | float | |
b | float | |
Example
RGBADelta 16,0,0,0
Notes
- Increase Red recolor (Alpha must be defined first)
Notes
- Reset Position X,Y, and Z.
ResetRotation
Resets Rotation X, Y, and Z of the current Live Control object. The command resets both the speed and the current value to zero.
Notes
- Reset Live Control Rotation X Y Z
Notes
- Reset Live Control Rotation X
Notes
- Reset Live Control Rotation Y
Notes
- Reset Live Control Rotation Z
Notes
- Reset current script to default state.
ResetLCTab
Resets the Live Control currently used in the UI. Most commands work with specific Live Control containers. The UI (Live Control tab) can be connected to various Live Controls, such as Cues, ProTracks, etc. This command is made for UI mapping.
Notes
- Reset the Live Control in the tab
Syntax
clicklocksize(float)Parameters
| Name | Type | Description |
|---|
state | float | 0 disabled, 1 enabled, 2 toggle |
Example
ClickLockSize 1 // 0,1,2 Off, On, toggle
FX
22ClickFXTabMode
The ClickFXTabMode command is the same as clicking the Master, Cue, Zone, or ProTrack buttons in the FX tab. The command defines which Live Control FX is connected to the QuickFX tab. Use the following constants: 1-Master, 2-Cue, 3-Zone, 4-ProTrack
Syntax
clickfxtabmode(float)Parameters
| Name | Type | Description |
|---|
index | float | 1-Master, 2-Cue, 3-Zone, 4-ProTrack |
Notes
- Connect the QuickFX tab to the Master Live Control
FX
Sets the effect index for FX layers. 0 means off; 1 to 100 is the effect index. The first argument is the index for the 1st layer, the second argument for the 2nd layer, etc. Up to 8 arguments.
Notes
- One or more layers. 0 stops. Effect 1..100
SetFX
The SetFX command assigns an FX (effect) from the QuickFX table to the current Live Control. Live Control includes eight layers, with one effect per layer. The command is overloaded: -The first argument specifies the layer index (1–8). -The second argument specifies the FX index for that layer. -Additional arguments define FX indexes for subsequent layers. The command is flexible: it can set a single FX layer or multiple layers at once. The layer index range is 1 to 8. The FX index range is 1 to 100.
Examples
SetFX 1, 10 // Layer number: 1..8, Effect index: 1..100
SetFX 1, 10,10,10,10 // set all 4 first layers to effect number 10
SetFX 5, 0,0,0,0 // just an example of addressing
Notes
- Set 1st layer of FX
- Set the first four layers of FX
- Reset 5..8 layers
Notes
- One or more layers. 0 stops. Effect 1..100
Syntax
stopfxcell(float)stopfxcell(float, float)Parameters
| Name | Type | Description |
|---|
layer | float | layer index |
layer | float | layer index |
item | float | effect index |
Notes
- Layer index, optional Cell index (relative, takes the scrollbar into account)
Syntax
togglefx(integer)Parameters
| Name | Type | Description |
|---|
layer | integer | 0 - all, 1..8 layer index. |
Syntax
shiftfx(integer, integer)Parameters
| Name | Type | Description |
|---|
layer | integer | Layer index 1 to 8 |
offs | integer | Offset (negative for backward) |
Syntax
setfxaction(integer, float)Parameters
| Name | Type | Description |
|---|
layer | integer | Layer index 1 to 8 |
action | float | Action of the effect in percent (0 to 100) |
Example
SetFXAction 1, 100
Notes
- Layer number: 1..4, Action 0..100 percent
FXAction
Sets the FX Action for FX layers. 0 - the effect does not work at all. 100 - the effect is applied fully, without modification. 1..99 - morph between the input and output frame (after the effect calculation). The command accepts up to 8 arguments, one per layer.
Example
FXAction 100,100,100,100
Notes
- One or more layers. Set effect action from 0% to 100%
Syntax
zonefxtimescale(float, float, float)Parameters
| Name | Type | Description |
|---|
layer | float | Layer index 1 to 8 |
clock | float | Clock speed (1 is default) |
beat | float | Metronome (beat) speed (1 is default) |
Example
ZoneFXTimeScale 1,2,1 // Layer, Clock multipler, Metronome multiplier
FXTimeScaleAx
Defines the scale (multiplier) for incoming time. In practice, this is a speed control for the clock and beat time. If you set the speed to anything other than 1, BEYOND automatically enables independent time calculation for this Live Control. You can reset it back to the default using FXTimeSync.
Syntax
fxtimescaleax(float, float, float)Parameters
| Name | Type | Description |
|---|
layer | float | Layer index 1 to 8 |
mask | float | Mask: 1 clock, 2 beat, 3 both. |
mul | float | Time multiplier, 1 is default. Range 0 to 100 |
Examples
FXTimeScaleAx 1,2,1 // Layer, Mask (1,2,3), multiplier
FXTimeScaleAx 1,3,1 // Layer, Mask (1,2,3), multiplier
Notes
- Reset the beat speed for FX on the 1st layer.
- Reset beat and clock for the 1st layer
Syntax
fxtimescaleaxreset(float, float)Parameters
| Name | Type | Description |
|---|
layer | float | FX layer 1 to 8 |
mask | float | 1 - clock, 2 - beat, 3 - clock and beat |
Example
FXTimeScaleAxReset 1,3 // Layer, Mask (1,2,3)
Notes
- Reset the speed of clock and beat time components.
FXTimeSync
FXTimeSync resets the time calculation for an FX layer to its default state, where the FX no longer uses its own time accumulation or speed. The first parameter specifies the FX layer, and the second parameter is the mode; a value of 1 resets the layer to the default (parent time). As with all Live Control commands, this instruction applies to the currently active Live Control.
Syntax
fxtimesync(float, float)Parameters
| Name | Type | Description |
|---|
layer | float | layer index (1 to 8) |
mode | float | 1 - default sync. 0 - own, custom sync |
Example
FXTimeSync 1,1 // Set to master/parent time.
Syntax
zonefxtimescaledelta(float, float, float, float)Parameters
| Name | Type | Description |
|---|
layer | float | |
clock | float | |
beat | float | |
param4 | float | |
Example
ZoneFXTimeScaleDelta 0,0,0,0
Syntax
zonefxtimeshift(float, float, float)Parameters
| Name | Type | Description |
|---|
param1 | float | |
param2 | float | |
param3 | float | |
Example
ZoneFXTimeShift 1,2,1 // Layer, Clock multipler, Metronome multiplier
Syntax
zonefxtimeshiftdelta(float, float, float, float)Parameters
| Name | Type | Description |
|---|
param1 | float | |
param2 | float | |
param3 | float | |
param4 | float | |
Example
ZoneFXTimeShiftDelta 0,0,0,0
Syntax
fxclick(integer, integer)Parameters
| Name | Type | Description |
|---|
layer | integer | Layer index 1 to 8 |
eff | integer | effect index 0 to 100 |
Notes
- Start the first effect on the 1st FX layer
FXCellClick
The FX table is wider than the available UI space. This command performs an FX table cell click using relative indexing, which accounts for any horizontal shift of the table. In practice, it clicks by column position rather than by the absolute effect index.
Syntax
fxcellclick(integer, integer)Parameters
| Name | Type | Description |
|---|
layer | integer | FX layer index |
item | integer | Effect index |
Syntax
fxscroll(integer)Parameters
| Name | Type | Description |
|---|
pos | integer | Absolute offset value |
Notes
- Set the FX table scroll position to default
Syntax
fxscrolldelta(integer)Parameters
| Name | Type | Description |
|---|
offs | integer | Scroll delta for FX table |
ClickFxVlj
ClickFxVlj is the action performed by the 8 VLJ buttons in the QuickFX tab. It enables, disables, or toggles the corresponding VLJ button state. You must specify the line index. Default action: toggle.
Syntax
clickfxvlj(float)clickfxvlj(float, float)Parameters
| Name | Type | Description |
|---|
line | float | FX line index |
line | float | FX line index |
action | float | 0 disable (default), 1 enable, 2 toggle |
Example
ClickFxVlj 2 // 0 off, 1 on, 2 toggle.
Pages
4Syntax
selectpagename(string)Parameters
| Name | Type | Description |
|---|
name | string | page name |
Example
SelectPageName "Graphics" // define Page name!
Notes
- Select page by name
- Page is an absolute index used as the cue address. Tab refers to the UI side. The Grid may display only a subset of pages depending on the selected category.
Syntax
selectpage(integer)Parameters
| Name | Type | Description |
|---|
page | integer | page index |
Example
SelectPage 1 // tab index, 1..N.
Notes
- Select page by index
- Page is an absolute index used as the cue address. Tab refers to the UI side. The Grid may display only a subset of pages depending on the selected category.
Notes
- Select next page
- Page is an absolute index used as the cue address. Tab refers to the UI side. The Grid may display only a subset of pages depending on the selected category.
Notes
- Select previous page
- Page is an absolute index used as the cue address. Tab refers to the UI side. The Grid may display only a subset of pages depending on the selected category.
Universe page navigation
12Syntax
setueditpage(float)setueditpage(string)Parameters
| Name | Type | Description |
|---|
index | float | Universe page index |
name | string | Universe page name |
Notes
- Set the Universe page in the editor
SetUCenterPage
This command selects a page of the Universe panel, located in the central area, using either its index or its name.
Syntax
setucenterpage(float)setucenterpage(string)Parameters
| Name | Type | Description |
|---|
index | float | Universe page index |
name | string | Universe page name |
Example
SetUCenterPage 1 // set first page
Notes
- Set the Universe page in the main area
SetUToolPage
This command selects a page of the Universe panel, located in the QuickTools area, using either its index or its name.
Syntax
setutoolpage(float)setutoolpage(string)Parameters
| Name | Type | Description |
|---|
index | float | Universe page index |
name | string | Universe page name |
Notes
- Set the Universe page in the QuickTools area
SetURightPage
This command selects a page of the Universe panel, located in the right-side area, using either its index or its name.
Syntax
seturightpage(float)seturightpage(string)Parameters
| Name | Type | Description |
|---|
index | float | Universe page index |
name | string | Universe page name |
Notes
- Set the Universe page in the right-side area
SetUPreviewPage
This command selects a page of the Universe panel, located in the preview area, using either its index or its name.
Syntax
setupreviewpage(float)setupreviewpage(string)Parameters
| Name | Type | Description |
|---|
index | float | Universe page index |
name | string | Universe page name |
Notes
- Set the Universe page in the Preview area
SetUMaxPage
This command selects a page of the Universe panel, located in UMAX, using either its index or its name.
Syntax
setumaxpage(float)setumaxpage(string)Parameters
| Name | Type | Description |
|---|
index | float | Universe page index |
name | string | Universe page name |
Notes
- Set the Universe page in UMAX
Syntax
toggleueditpage(float)toggleueditpage(string)Parameters
| Name | Type | Description |
|---|
offs | float | Offset; use negative to go to the previous page and positive to go to the next page |
pagename | string | Page name |
Example
ToggleUEditPage 1 // next page
Notes
- Universe page navigation (editor)
Syntax
toggleucenterpage(float)toggleucenterpage(string)Parameters
| Name | Type | Description |
|---|
offs | float | Offset; use negative to go to the previous page and positive to go to the next page |
pagename | string | Page name |
Example
ToggleUCenterPage 1 // next page
Notes
- Universe page navigation (center area)
Syntax
toggleutoolpage(float)toggleutoolpage(string)Parameters
| Name | Type | Description |
|---|
offs | float | Offset; use negative to go to the previous page and positive to go to the next page |
pagename | string | Page name |
Example
ToggleUToolPage 1 // next page
Notes
- Universe page navigation (QuickTools)
Syntax
toggleurightpage(float)toggleurightpage(string)Parameters
| Name | Type | Description |
|---|
offs | float | Offset; use negative to go to the previous page and positive to go to the next page |
pagename | string | Page name |
Example
ToggleURightPage 1 // next page
Notes
- Universe page navigation (right side)
Syntax
toggleupreviewpage(float)toggleupreviewpage(string)Parameters
| Name | Type | Description |
|---|
offs | float | Offset; use negative to go to the previous page and positive to go to the next page |
pagename | string | Page name |
Example
ToggleUPreviewPage 1 // next page
Notes
- Universe page navigation (preview)
Syntax
toggleumaxpage(float)toggleumaxpage(string)Parameters
| Name | Type | Description |
|---|
offs | float | Offset; use negative to go to the previous page and positive to go to the next page |
pagename | string | Page name |
Example
ToggleUMaxPage 1 // next page
Notes
- Universe page navigation (umax)
Waiting for events - time, beats, DMX, etc
15Syntax
waitformidi(integer, integer, integer)Parameters
| Name | Type | Description |
|---|
msg | integer | -1 for any 1st byte value, or 128..255 for a specific message |
data1 | integer | -1 for any value, or 0 to 127 for a specific value |
data2 | integer | -1 for any value, or 0 to 127 for a specific value |
Example
WaitForMidi 0x90, -1, -1
DisplayPopup param(1), param(2), param(3)
restart
Notes
- Wait for any NoteOn on MIDI channel 0
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
Syntax
waitfordmx(integer)Parameters
| Name | Type | Description |
|---|
ch | integer | DMX Channel index |
Example
WaitForDmx 1
DisplayPopup param(2)
restart
Notes
- Wait for a change of DMX IN Channel 1
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
Syntax
waitforchannel(integer)Parameters
| Name | Type | Description |
|---|
index | integer | channel index 1 to 255. -1 for any value |
Example
WaitForChannel -1
displaypopup param(1), param(2)
restart
Notes
- Wait for any channel change
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
WaitForCueStart
The WaitForCueStart command puts the script into a waiting state until a cue playback starts. This command is not related to UI cell interaction. The hook is placed in the playback engine that manages player allocation. If you click on an empty grid cell to start a new cue, this waiting operation will not respond. When triggered, the fired cue and page indexes are stored as script parameters. Use param(1) to get the page index and param(2) to get the cue index. Note that BEYOND uses zero-based indexing internally, so both param(1) and param(2) return zero-based values.
Syntax
waitforcuestart(integer, integer)Parameters
| Name | Type | Description |
|---|
page | integer | Page index, starting at 1 |
cue | integer | Cue index, starting at 1 |
Example
WaitForCueStart -1,-1
displaypopup param(1)+1, param(2)+1
restart
Notes
- Wait for any cue to start
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
WaitForCueStop
The WaitForCueStop command puts the script into a waiting state until a cue playback stops. The hook is placed in the playback engine that manages player allocation. When triggered, the stopped cue and page indexes are stored as script parameters. Use param(1) to get the page index and param(2) to get the cue index. Note that BEYOND uses zero-based indexing internally, so both param(1) and param(2) return zero-based values.
Syntax
waitforcuestop(integer, integer)Parameters
| Name | Type | Description |
|---|
page | integer | Page index, starting at 1 |
cue | integer | Cue index, starting at 1 |
Example
WaitForCueStop 1, 1 //page 1, cue 1
displaypopup "stopped..."
restart
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
WaitForCellDown
Waits for a click (cell down) on the content grid. Use -1 to wait for any click (cell down) on the grid; otherwise, specify the exact cell index. The function Param(1) returns the zero-based cell index.
Syntax
waitforcelldown(integer)Parameters
| Name | Type | Description |
|---|
cellindex | integer | Use -1 for any cell of the grid. Use 1..255 for a specific cell-down event |
Examples
// run this script in PangoScript tab
// click on left/top cell of content grid.
waitforcelldown 1
displaypopup "cell down"
restart
// run this script in PangoScript tab
WaitForCellDown -1 // -1 means any cell
displaypopup param(1)+1 // index is zero based internally
restart
Notes
- Wait for cell down on a Grid cell
- Any cell mouse down
- The BEYOND UI represents the content page as a 2D grid (matrix) with columns and rows. However, the internal implementation is a flat 1D array with indexing starting at zero.
- Cell operations relate to the UI Grid, which shows the current page of the workspace. This waiting operation is not connected to a specific cue; it is connected to a UI cell.
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
WaitForCellUp
Waits for a click release (cell up) on the content grid. Use -1 to wait for any click release (cell up) on the grid; otherwise, specify the exact cell index. The function Param(1) returns the zero-based cell index.
Syntax
waitforcellup(integer)Parameters
| Name | Type | Description |
|---|
cellindex | integer | Waits for a click (cell down) on the content grid. Use -1 to wait for any click (cell down) on the grid; otherwise, specify the exact cell index. |
Examples
// run this script in PangoScript tab
// click on left/top cell of content grid.
waitforcellup 1
displaypopup "cell down"
restart
// run this script in PangoScript tab
waitforcellup -1
displaypopup param(1)+1 // index is zero based internally
restart
Notes
- Wait for key up on a Grid cell
- Any cell mouse up
- Cell operations relate to the UI Grid, which shows the current page of the workspace. This waiting operation is not connected to a specific cue; it is connected to a UI cell.
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
Syntax
waitfortime(integer, integer, integer, integer)Parameters
| Name | Type | Description |
|---|
h | integer | hour |
m | integer | minute |
s | integer | second |
ms | integer | millisecond |
Example
// NOTE: THIS IS NOT GOOD FOR SCHEDULER.
// at 15:30
WaitForTime 15,30,0,0 // hours, minutes, seconds, ms
StartCue 1,1
// at 15:40
WaitForTime 15,40,0,0 // hours, minutes, seconds, ms
StartCue 1,2
Notes
- Example of chained waiting - PC clock
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
Syntax
waitfortimepos(integer, integer, integer, integer)Parameters
| Name | Type | Description |
|---|
h | integer | |
m | integer | |
s | integer | |
ms | integer | |
Example
// beginning
WaitForTimePos 0,0,0,0
StartCue 1,1
// minute later
WaitForTimePos 0,1,0,0
StartCue 1,2
// in 2 minutes
WaitForTimePos 0,2,0,0
StartCue 1,3
Notes
- Hours, minutes, seconds, ms
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
WaitForTC
The WaitForTC command puts the scripter into a waiting state until the specified TIMECODE time is reached. Once the incoming timecode passes the defined time, the waiting ends and the next command is executed. param(1) has current timecode time in seconds.
Syntax
waitfortc(integer, integer, integer, integer)Parameters
| Name | Type | Description |
|---|
h | integer | Hours 0 to 23 |
m | integer | Minutes 0 to 59 |
s | integer | Seconds 0 to 59 |
ms | integer | Milliseconds 0 to 9990 |
Example
// NOTE: THIS IS NOT TIMELINE. THIS JUST SEQUENTIAL WAITING
// at 00:00:00:000
WaitForTC 0,0,0,0 // hours, minutes, seconds, ms
StartCue 1,1
// at 00:00:30:000
WaitForTC 0,0,30,0 // hours, minutes, seconds, ms
StartCue 1,2
Notes
- Example of chained waiting - incoming timecode
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
Example
WaitForHotKey
DmxOut 1, 255
Sleep 1000
DmxOut 1, 0
restart
Notes
- Wait for the hotkey assigned to this script in the Code tab
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
Syntax
waitforaudiobeat(integer)Parameters
| Name | Type | Description |
|---|
count | integer | Specifies the number of events to wait before reacting. The default value is 1, meaning the command responds to every event. |
Example
WaitForAudioBeat 1 // waiting instruction, every beat
master.color = randomin(32,255) // example of action - random color of master lc.
restart // jump to script start, and immediatelly run into waiting state
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
Syntax
waitformanualbeat(integer)Parameters
| Name | Type | Description |
|---|
count | integer | Specifies the number of events to wait before reacting. The default value is 1, meaning the command responds to every event. |
Example
WaitForManualBeat 1 // every manual beat
displaypopup "Manual beat!" // ui message as an action
restart // jump to script start, and immediatelly run into waiting state
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
WaitForTimerBeat
Puts the Scripter into a waiting state for the timer-beat event. The best approach for waiting scripts is to put them in the PangoScript tab and use a structure like: WaitFor... // your action, executes once waiting completes. Restart
Syntax
waitfortimerbeat(integer)Parameters
| Name | Type | Description |
|---|
count | integer | Specifies the number of events to wait before reacting. The default value is 1, meaning the command responds to every event. |
Example
WaitForTimerBeat 4 // waiting instruction
master.brightness = randomin(0,100) // example of action - random brightness
restart // jump to script start, and immediatelly run into waiting state
Notes
- Wait for and react to every 4th beat
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.
Syntax
waitforbeat(integer, integer)Parameters
| Name | Type | Description |
|---|
mask | integer | Bit mask. 1 is timer beat. 2 is manual beat. 4 is audio beat. |
count | integer | Specifies the number of events to wait before reacting. The default value is 1, meaning the command responds to every event. |
Example
WaitForBeat 7, 1 // any and every of beats
displaypopup "Booom!" // ui message as an action
restart // jump to script start, and immediatelly run into waiting state
Notes
- Multi beat source waiting
Not in “Commands by category”
198DropFX
Runs an effect from the FX table as a “drop effect” for a specified duration. Drop effects are an additional list of effects: they are defined in the main FX table, but triggered temporarily on top of the fixed FX chain. They are intended for short actions such as flashes, triggers, or brief accents.
Syntax
dropfx(integer, integer, float)Parameters
| Name | Type | Description |
|---|
layer | integer | Effect layer index in the FX table |
index | integer | Effect index in the line (layer) |
duration | float | Execution duration |
Notes
- Layer, Index, duration ms
Syntax
setfxmute(integer, float)Parameters
| Name | Type | Description |
|---|
layer | integer | Layer index 1 to 8 |
action | float | 0 - off, 1 - on, 2 - toggle. |
Notes
- Toggle mute state of the first FX layer
SetFXMul
This is a tricky area. The LC object has a time accumulator per FX line. Each line has its own Clock and Metronome time (optional), and each time component has a speed control. Overall, you can control the speed of each FX line for the clock and metronome components of time.
Syntax
setfxmul(integer, float, float)Parameters
| Name | Type | Description |
|---|
layer | integer | Layer index (1..8) |
clock | float | Clock multiplier. 1 is the default value. |
metro | float | Metronome multiplier. 1 is the default value. |
Example
SetFXMul 2, 4,1 // Layer, Clock, Metronome multiplier
Notes
- Make the clock of FX layer 2 four times faster
ResetFxTiming
This command resets all time-related effects of the current Live Control, including DJ disk, time scale, time multiplier, time shift, and time value.
Notes
- Set the Time settings of the current Live Control
Syntax
setfxaction1(float)Parameters
| Name | Type | Description |
|---|
action | float | Action of the effect in percent (0 to 100) |
Notes
- Set the action of a specific FX Layer
Syntax
setfxaction2(float)Parameters
| Name | Type | Description |
|---|
action | float | Action of the effect in percent (0 to 100) |
Notes
- Set the action of a specific FX Layer
Syntax
setfxaction3(float)Parameters
| Name | Type | Description |
|---|
action | float | Action of the effect in percent (0 to 100) |
Notes
- Set the action of a specific FX Layer
Syntax
setfxaction4(float)Parameters
| Name | Type | Description |
|---|
action | float | Action of the effect in percent (0 to 100) |
Notes
- Set the action of a specific FX Layer
SetFXMulAx
Similar to SetFXMul, this command controls the speed of FX, but lets you define the Layer number (1..8), the Mask (1 is clock, 2 is beat, 3 is clock and beat), and the multiplier Value.
Syntax
setfxmulax(integer, integer, float)Parameters
| Name | Type | Description |
|---|
layer | integer | FX Layer index (1 to 8). |
mask | integer | 1 clock, 2 metronome, 3 is both. |
rate | float | Multiplier. The default value is 1. 0 is full stop. |
Example
SetFXMulAx 1, 3, 2 // layer, mask, multiplier
Notes
- Make both time components run 2 times faster
Syntax
fxtimescaledeltaax(float, float, float)Parameters
| Name | Type | Description |
|---|
layer | float | Layer index 1 to 8 |
mask | float | 1 - clock, 2 - beat, 3 - clock and beat |
delta | float | Increment/decrement of current speed |
Example
FXTimeScaleDeltaAx 1,2, 0.05
Notes
- Increase the beat speed slowly, by 0.05
Syntax
setfxaction5(float)Parameters
| Name | Type | Description |
|---|
action | float | Action of the effect in percent (0 to 100) |
Notes
- Set the action of a specific FX Layer
Syntax
setfxaction6(float)Parameters
| Name | Type | Description |
|---|
action | float | Action of the effect in percent (0 to 100) |
Notes
- Set the action of a specific FX Layer
Syntax
setfxaction7(float)Parameters
| Name | Type | Description |
|---|
action | float | Action of the effect in percent (0 to 100) |
Notes
- Set the action of a specific FX Layer
Syntax
setfxaction8(float)Parameters
| Name | Type | Description |
|---|
action | float | Action of the effect in percent (0 to 100) |
Notes
- Set the action of a specific FX Layer
Syntax
strobespeed(float)Parameters
| Name | Type | Description |
|---|
value | float | speed value |
Notes
- Period, flickers per second
Syntax
mulfxmulax(integer, integer, float)Parameters
| Name | Type | Description |
|---|
layer | integer | Fx layer 1 to 8 |
mask | integer | 1 - clock, 2 - beat, 3 - clock and beat |
value | float | Speed/multiplier. 1 is default. Range is 0 to 8. |
Example
MulFXMulAx 1, 3, 1 // Multiply multiplier... :-) Layer number: 1..4, Mask (1 is clock, 2 is beat, 3 is clock and beat), Value of multiplier
Notes
- Live Control FX time control
Syntax
hue(float)Parameters
| Name | Type | Description |
|---|
hue | float | Hue value (-1 to 720) |
Notes
- Set hue to the default value
Syntax
huedelta(float)Parameters
| Name | Type | Description |
|---|
delta | float | Increment/decrement value |
Notes
- Shift the current hue by 5 degrees
HueShift
Hue shift is an additional offset for the hue value, made for additional oscillation around the current hue. If you need to recolor, use Hue instead, which replaces the hue of the input color.
Syntax
hueshift(float)Parameters
| Name | Type | Description |
|---|
offs | float | Hue offset in degrees. |
Notes
- Set hue shift to 90 degrees
Syntax
hueshiftdelta(float)Parameters
| Name | Type | Description |
|---|
delta | float | The Shift delta |
Notes
- Add 5 degrees to the hue-shift property
Saturation
Sets the saturation level of the current Live Control. Saturation is not a direct value; in Live Control it works as an offset. The incoming color is transformed to HSV, modified, and transformed back.
Syntax
saturation(float)Parameters
| Name | Type | Description |
|---|
sat | float | Saturation level. 0 is neutral value. -100 is lowest offset down, and 100 is highest offset up. |
Syntax
saturationdelta(float)Parameters
| Name | Type | Description |
|---|
sat | float | Increase/decrease the saturation level. |
Syntax
setpage(integer)Parameters
| Name | Type | Description |
|---|
index | integer | Page index of the main grid. 1-based. |
Notes
- Set the first page of the Grid
LinePerCycle
LinePerCycle defines how many script lines are executed during a single iteration of the scripting core. BEYOND can run hundreds of scripts in parallel; some may be stopped, others waiting, and some running in endless loops. To prevent any single script from monopolizing processing time, a limit is imposed on the number of lines executed per cycle. For large or time-critical scripts that need to be processed more quickly, you can increase this value. The default setting is 30 lines per cycle.
Syntax
linepercycle(integer)Parameters
| Name | Type | Description |
|---|
count | integer | Script lines per iteration |
Example
LinePerCycle 100 // put at beginning of script.
Notes
- Increase lines per cycle limit to 100
DmxOutRange
DmxOutRange lets you write an array of DMX values. The first parameter is the channel index, 1 to 2048. The second, third, 4th, and so on are DMX values. -1 is the transparent DMX value; 0 to 255 are standard DMX values.
Example
DmxOutRange 1, 100,101,102,103,104 // send 5 DMX values, starting channel 1
Notes
- Set the first DMX OUT channel
SetMidiLayer
The command sets the layer index for the MIDI device currently selected in the active Scripter (range 1..4). Use SelectMidi to select the MIDI device. The default layer index is 1. After selecting the device, you can control which layer is active using SetMidiLayer.
Syntax
setmidilayer(integer)Parameters
| Name | Type | Description |
|---|
layer | integer | MIDI layer index |
Example
SetMidiLayer 1 // default is 1
Notes
- Set the MIDI layer of the current MIDI device related to this script
Syntax
controlprojector(integer)Parameters
| Name | Type | Description |
|---|
index | integer | projector index |
Example
ControlProjector 1
Notes
- Bind the script to the Live Control tab destination selection
Syntax
setdmxeditorchannel(float, float)Parameters
| Name | Type | Description |
|---|
chan | float | DMX channel index |
value | float | Channel value 0..255 |
Example
SetDmxEditorChannel 1, 128 // firsh slider/channel, and 128 as value
Notes
- QuickDMX editor slider control
Example
ProjectionZonesDialog
Syntax
makesecuredfile(string, string, float)Parameters
| Name | Type | Description |
|---|
infile | string | Input file name |
outfile | string | Output file name (secured input) |
serial | float | Hardware serial number. |
Example
MakeSecuredFile "Input file name", "Output file name", ClientHardwareSerial
Notes
- How to secure the show file from a script
Syntax
restoreplayer(float, float, float, float, string, float, float)Parameters
| Name | Type | Description |
|---|
page | float | Page index |
cue | float | Cue index |
options | float | Options (bit mask) |
UserID | float | Caller ID |
Routing | string | Routing (char based) |
Clock | float | Time in seconds |
Beat | float | Time in beats |
Examples
ExecCmd "Blackout"
var s
s = "Blackout"
ExecCmd s
Notes
- Simple direct call
- Command as a string in a variable
Example
write "*Add*/ " // run it a few times, it add to end of the current line.
Notes
- Script Universe component terminal
- This is a local command of the Scripter.
WriteLn
WriteLn provides terminal-style output for scripts. Both Write and WriteLn send text to the script’s own terminal output buffer. To test the command, place a Script component on the Universe page, then click the Script Edit button. Inside the OnMouseDown section, add: writeln "Hello World!"; Run the page and click the component; your message will appear. WriteLn appends a new line to the terminal’s string list, which can be viewed in the Script component on the Universe page.
Example
writeln "Hello world!"
Notes
- Script Universe component terminal
- This is a local command of the Scripter.
Syntax
resetmidifeedback(float)Parameters
| Name | Type | Description |
|---|
devind | float | MIDI device index (1 to 4) |
Notes
- Force MIDI feedback update for surfaces
Notes
- Force OSC feedback update for all variables
Syntax
definetctrigger(string)Parameters
| Name | Type | Description |
|---|
param1 | string | |
Example
DefineTCTrigger "TC Test"
Syntax
htmlhead(string)Parameters
| Name | Type | Description |
|---|
param1 | string | |
Example
HtmlHead "<html><head><title></title></head>"
HtmlBody
The Guide window contains an HTML Viewer component. Primary purpose: a styled info window for Universe or similar applications. This group contains commands for controlling the window and its HTML parts (head and body). Default initialization: HeadText:='<html><head><title></title></head>'; BodyText:='<body><p>Welcome to BEYOND Guide window</p></body></html>';
Syntax
htmlbody(string)Parameters
| Name | Type | Description |
|---|
txt | string | HTML body |
Example
var a
a='BEYOND'
HtmlBody "<body><p>Welcome to "+a+" Guide window</p></body></html>"
Notes
- Update the Guide window with the current HTML strings
Syntax
setrecordfile(string)Parameters
| Name | Type | Description |
|---|
fname | string | File name |
Example
SetRecordFile "C:\BEYOND50\MyFile.best"
Notes
- Set the file for recording
Syntax
masterspeed(float)Parameters
| Name | Type | Description |
|---|
ratio | float | 1 is default, 0 is stop, 10 is 10 times faster than normal |
Example
MasterSpeed 1 // From zero to one
Notes
- Set master speed to the default value
Example
TogglePrevious // "SWAP" button
Notes
- Toggle previous cue (swap)
Example
SelectFixt 0 // index(es) or name(s)
Example
UnselectFixt 0,2, "Spot 1" // two indexes and one name of the Fixture
Notes
- Toggle the Selected property of fixtures
FXCellDown
This command performs an FX table cell click using absolute indexing, which does not account for any horizontal shift of the table. It predates the FXCellClick command — in earlier versions, the number of effects was small and the FX grid was not scrollable. (The content grid is still not scrollable.) Consider this command as operating on absolute indexes, while FXCellClick is more UI-oriented.
Syntax
fxcelldown(integer, integer)Parameters
| Name | Type | Description |
|---|
layer | integer | layer index |
item | integer | effect index in the layer |
Example
FXCellDown 1, 1 // Layer number: 1..8, Effect number
Notes
- Unmute all Projection Zones
Notes
- Index(es) or name(s)
- 0-based indexes
Syntax
togglemutezoneofprojector(float)togglemutezoneofprojector(float, float)Parameters
| Name | Type | Description |
|---|
index | float | projector index |
index | float | projector index |
state | float | 0 - off, 1 - on, 2 - toggle |
Examples
ToggleMuteZoneOfProjector 1 // 1st projector
ToggleMuteZoneOfProjector 1, 0 // 1st projector, 0 unmute
Notes
- Toggle the mute state of the projector's zones
- Unmute zones of projector 1
Syntax
setaudiorelease(float)Parameters
| Name | Type | Description |
|---|
value | float | Release value (0.1 to 99) |
Example
SetAudioRelease 75
Syntax
setaudiogain(float)Parameters
| Name | Type | Description |
|---|
gain | float | audio gain (1 to 15) |
Syntax
muteselected(integer)Parameters
| Name | Type | Description |
|---|
action | integer | 0 - off, 1 - on, 2 - toggle |
Example
MuteSelected 2 // 0,1,2
Notes
- Toggle mute state of selected zones
SetGridSize
Sets the main grid size.
Syntax
setgridsize(float, float)Parameters
| Name | Type | Description |
|---|
col | float | column count |
row | float | row count |
Syntax
masterpausetime(integer)Parameters
| Name | Type | Description |
|---|
ms | integer | time in milliseconds |
Example
MasterPauseTime 1000 // set pause/unpause time to 1 second
Syntax
setgrid1page(integer)Parameters
| Name | Type | Description |
|---|
index | integer | Page index, 1-based |
Notes
- Set the 1st page visible on the Main Grid
Syntax
setgrid2page(integer)Parameters
| Name | Type | Description |
|---|
index | integer | Page index, 1-based |
Notes
- Set the 1st page on the secondary grid
Notes
- Mute all Projection Zones
PreviewNxN
Sets the Main Preview mode, same as the context menu. Modes: 1 - laser 2 - 2x2 3 - 3x3 4 - 4x4 11 - Custom 1 12 - Custom 2 13 - Custom 3 In custom modes you can specify the number of rows and columns.
Syntax
previewnxn(integer)previewnxn(integer, integer, integer)Parameters
| Name | Type | Description |
|---|
mode | integer | Fixed mode 1,2,3,4, 11,12,13 |
preset | integer | 1,2,3,4, 11,12,13 |
x | integer | X dimension for mode 11,12,13 |
y | integer | Y dimension for mode 11,12,13 |
Example
PreviewNxN 4 // 1 - laser, 2 - 2x2, 3 - 3x3, 4 - 4x4, 11-Custom1, 12-Custom2, 13-Custom 3
Notes
- Set the main preview panel view mode
Example
DisplayPreview "Hello world!", 0x0000ff
Notes
- Show a message in the main preview panel
Notes
- Set the main preview panel to master view mode
TapByCueClick
Enables, disables, or toggles Tap-Tempo on Cue click. When enabled, clicking a Cue in the Grid generates a Tap-Tempo (BPM) click. The command can turn this option on, off, or toggle its current state.
Syntax
tapbycueclick(integer)Parameters
| Name | Type | Description |
|---|
mode | integer | 0 - off, 1 - on, 2 - toggle |
Example
TapByCueClick On // options: On,Off, Toggle
ResyncByCueClick
This command sets the beat synchronization mode that is applied when a cue is clicked. You can use the predefined constants OFF, ON, and TOGGLE. The command is related to the master BPM (metronome) control, which also includes functions such as tap and resync.
Syntax
resyncbycueclick(integer)Parameters
| Name | Type | Description |
|---|
state | integer | 0 - off, 1 - on, 2 - toggle. |
Example
ResyncByCueClick On
SynchronizePlayerToBeat
Sets the global option for players to synchronize to the beat. Synchronization occurs on player start and restart. The idea is similar to quantize in audio software: it is nearly impossible to click exactly on the beat, so the timing will always be slightly off. This option corrects that by using the current sub-beat time as the alignment reference.
Syntax
synchronizeplayertobeat(integer)Parameters
| Name | Type | Description |
|---|
action | integer | 0 - off, 1 - on, 2 - toggle |
Example
SynchronizePlayerToBeat On
ResetCuesFX
Iterates through all cues in the workspace and performs the following actions: clears assigned FX, resets the FX Action parameter and timing, and clears the Drop-effect list. All these operations are part of the LiveControl object. The purpose of this command is to reset the entire playback FX state.
ResetZonesFX
Iterates through all Projection Zones and performs the following actions: clears assigned FX, resets the FX Action parameter and timing, and clears the Drop-effect list. All these operations are part of the LiveControl object. The purpose of this command is to reset the entire playback FX state.
Notes
- Reset Live Control of all Projection Zones
ResetProTrackFX
Iterates through all ProTracks and performs the following actions: clears assigned FX, resets the FX Action parameter and timing, and clears the Drop-effect list. All these operations are part of the LiveControl object. The purpose of this command is to reset the entire playback FX state.
ClickTCTabMode
The ClickTcTabMode command is the same as clicking the Master, Cue, Zone, or ProTrack buttons in the Time Control tab. The command defines which Live Control is connected to the Time Control tab. Use the following constants: 1-Master, 2-Cue, 3-Zone, 4-ProTrack
Syntax
clicktctabmode(float)Parameters
| Name | Type | Description |
|---|
param1 | float | |
Example
ClickTCTabMode 1 // 1-Master, 2-Cue, 3-Zone, 4-ProTrack
Notes
- Connect the Time Control tab to the Master LC
Example
InvertProTrackTime
Notes
- Invert time direction of selected ProTracks
Notes
- Set the jump point for the ProTrack
Notes
- Reset stored time of ProTracks
ProTrackSetLoop
Cycles loop setup on the selected ProTracks: the first call stores point A, the second stores point B and starts looping, and the third clears the loop.
Syntax
protracksetloop()Notes
- Playback A-B loop
- Applicable to ProTracks only.
ProTrackDisk
Time Control command, applied to ProTracks only. The DJ Disk located in the Time Control tab can slow down playback as well as time-shift (scratch). If you need a time-shift-only action, see the PlayerDiskShift command.
Syntax
protrackdisk(float)protrackdisk(float, float)Parameters
| Name | Type | Description |
|---|
speed | float | The speed ratio, in the 0 to 1 range. The DJ disk can slow down playback. |
speed | float | The speed ratio, in the 0 to 1 range. The DJ disk can slow down playback. |
offset | float | Time shift injected by the disk. Scratch effect. |
Example
ProTrackDisk 1, 0.1
Syntax
protrackdiskshift(float)Parameters
| Name | Type | Description |
|---|
shift | float | Time shift injected by the disk. Scratch effect. |
Example
ProTrackDiskShift 0.1
Syntax
masteraudiovolume(float)Parameters
| Name | Type | Description |
|---|
ratio | float | Audio volume ratio, 0 to 100 |
Example
MasterAudioVolume 100 // volume in percent.
Syntax
mastershowbrightness(float)Parameters
| Name | Type | Description |
|---|
b | float | Brightness in percent (0..100) |
Example
MasterShowBrightness 100
MasterClockShift
MasterClockShift sets the Master.MasterClockShift property. MasterClockShift is part of the base offset value applied to cue calculations on a per-zone basis. The offset is the sum of the master offset and the cue-level offset. A simple way to see it: route a cue to multiple zones and set the shift value.
Syntax
masterclockshift(float)Parameters
| Name | Type | Description |
|---|
shift | float | time in seconds |
Example
MasterClockShift 0 // in seconds
MasterMetroShift
MasterMetroShift sets the Master.MasterMetroShift property. MasterMetroShift is part of the base offset value applied to cue calculations on a per-zone basis. The offset is the sum of the master offset and the cue-level offset. A simple way to see it: route a cue to multiple zones and set the shift value.
Syntax
mastermetroshift(float)Parameters
| Name | Type | Description |
|---|
shift | float | time in seconds. |
Example
MasterMetroShift 0
Syntax
mastereffectclockshift(float)Parameters
| Name | Type | Description |
|---|
offset | float | time in seconds |
Example
MasterEffectClockShift 1 // 0 is default
Notes
- Application-wide effect shift (clock)
Syntax
mastereffectmetroshift(float)Parameters
| Name | Type | Description |
|---|
offset | float | Time in beats |
Example
MasterEffectMetroShift 1 // beats
Notes
- Application-wide effect shift (beats)
Syntax
mastercuespeed(float)Parameters
| Name | Type | Description |
|---|
param1 | float | |
Example
MasterCueSpeed 200 // twice faster
Notes
- Global cue playback speed
- This parameter is also available as a property of the global Master object.
MasterCueLcSpeed
The MasterCueLcSpeed command sets the CueLcSpeed value of the Master object. This parameter acts as a speed multiplier for all Live Control objects, including those embedded in cues, zones, and other elements. The value is measured in percent, with 100 as the default.
Syntax
mastercuelcspeed(float)Parameters
| Name | Type | Description |
|---|
speed | float | Speed in percent of normal. 100 is default speed. |
Example
MasterCueLcSpeed 100 // default speed
Notes
- Global Live Control speed
- This parameter is also available as a property of the global Master object.
Syntax
masterlcspeed(float)Parameters
| Name | Type | Description |
|---|
rate | float | Speed in percent; 100 is default speed. |
Syntax
masterfxspeed(float)Parameters
| Name | Type | Description |
|---|
rate | float | Speed in percent; 100 is default speed. |
Syntax
masterzonefxspeed(float)Parameters
| Name | Type | Description |
|---|
param1 | float | |
Example
MasterZoneFxSpeed 100 // in percents
Notes
- Set/reset zone master FX speed
Syntax
mastershowspeed(float)Parameters
| Name | Type | Description |
|---|
ratio | float | Speed in percent; 100 is default |
Example
MasterShowSpeed 100
Syntax
masteraudiovolumemute(float)Parameters
| Name | Type | Description |
|---|
mode | float | 0 - off, no mute. 1 - muted. 2 - toggle mute state |
Example
MasterAudioVolumeMute 1 // On(1), Off(0), Toggle(2)
Notes
- Mute BEYOND audio playback
EnableFb3StyleDmxIn
EnableFb3StyleDmxIn is a legacy-oriented command. BEYOND has multiple modules that react to DMX IN data. One of the oldest is FB3-style DMX IN, which came into BEYOND from QuickShow. It is a very simplified approach to DMX IN compared with modules like DMX to PangoScript and the BEYOND DMX Server. Anyway, this is a standard disable/enable/toggle command.
Syntax
enablefb3styledmxin(float)Parameters
| Name | Type | Description |
|---|
state | float | 0 - OFF, 1 - ON, 2 - TOGGLE |
Example
EnableFb3StyleDmxIn 1
Notes
- Enable legacy DMX IN module
Syntax
mastershowshift(float)Parameters
| Name | Type | Description |
|---|
ms | float | laser offset in milliseconds |
Syntax
clicktrack(float)Parameters
| Name | Type | Description |
|---|
grid | float | 1 for main grid. 2 for secondary grid |
Notes
- Optional argument: 1 or 2 (Grid number)
Notes
- Change BEYOND view to Grid
Notes
- Change BEYOND view to Timeline
Notes
- Change BEYOND view to Play List
Notes
- Change BEYOND view to Universe
CloseUmax
UMAX is a full-screen “universe” window designed to cover the entire display. It responds only to the Alt + F4 shortcut and normally prevents manual closing. To close it from a MIDI command or script, use the Close UMAX command.
EnableDmxIn
EnableDmxIn is a dual-action command that enables, disables, or toggles the DMX IN state, while also resetting the state of all DMX Server players. The reset of DMX Server players is always performed. When DMX IN is enabled, the command updates the state of the Script core and the FB3-style DMX IN object. It also updates the Master.DmxInButtonDown property and the corresponding UI button on the main toolbar.
Syntax
enabledmxin(float)Parameters
| Name | Type | Description |
|---|
state | float | 0 - OFF, 1 - ON, 2 - Toggle |
Examples
EnableDmxIn Toggle // 0,1,2 Toggle
EnableDmxIn 0
Notes
- Enable DMX IN toggle.
- Disable DMX IN
Syntax
seteffectchannelaction(float)seteffectchannelaction(float, float)Parameters
| Name | Type | Description |
|---|
value | float | effect action from 0 to 100 |
value | float | effect action from 0 to 100 |
index | float | 0 to 7 |
Example
SetEffectChannelAction 0 // 0..100
SetChannelToChannelRatio
A Channel is a shell of 4 values and 4 multipliers with auto-gain correction. ChannelToChannel is the multiplier for the original channel value. The additional parts are the DMX, VDJ, and FFT multipliers. Overall logic: Gain = ChannelRatio + DmxRatio + FFTRatio + VdjRatio; OutValue = ChannelVal * (ChannelRatio/Chain) + DmxVal * (DmxRario/Gain) + FFTVal * (*FFTRatio/Gain) + VdgValue * (VdjRatio/Gain)
Syntax
setchanneltochannelratio(float)Parameters
| Name | Type | Description |
|---|
ratio | float | ratio of Channel value (from 0 to 100) |
Example
SetChannelToChannelRatio 100
Notes
- Use the full channel value for output
SetDmxToChannelRatio
BEYOND Channels hide several internal mechanisms, one of which is the ability to mix DMX data with direct channel values. A channel is a general-purpose, global array of variables that can be used in Images and Effects. You can view them in the Channels tab. This command sets the multiplier (ratio) that defines how DMX data contributes to the Channel values. See SetChannelToChannel for more details.
Syntax
setdmxtochannelratio(float)Parameters
| Name | Type | Description |
|---|
ratio | float | 0 - no DMX at all, 100 - full DMX value from the channel value |
Examples
SetDmxToChannelRatio 50
SetDmxToChannelRatio 100
Notes
- Use 50% of DMX data in Channels output
- Enable DMX data in Channels
Syntax
setffttochannelratio(float)Parameters
| Name | Type | Description |
|---|
ratio | float | ratio of FFT value (from 0 to 100) |
Example
SetFFTToChannelRatio 100
Notes
- Enable use of the Audio signal in Channel output
Syntax
setvdjtochannelratio(float)Parameters
| Name | Type | Description |
|---|
ratio | float | ratio of VDJ value (from 0 to 100) |
Example
SetVdjToChannelRatio 0 // 0 to 100.
Notes
- Mute use of the VDJ signal in Channel output
Syntax
timelineplay()Notes
- PlayTimeline is an alias for the same operation.
TimelineStop
Stops timeline playback.
Syntax
timelinestop()Notes
- StopTimeline is an alias for the same operation.
Notes
- Save the current timeline
- BEYOND always creates a backup copy of the file and never deletes Workspace and Timeline file backups. Never. If you are using this command for timeline autosave, keep an eye on SSD usage.
Syntax
setlocation(integer, float, float, float)Parameters
| Name | Type | Description |
|---|
index | integer | "Location" index |
x | float | x coordinate |
y | float | y coordinate |
z | float | z coordinate |
Example
SetLocation 1, 0,0,0
Notes
- Set one of 256 positions/locations (index 1..256; X, Y, Z as normalized values (0..1))
Syntax
setzonemeshpointpos(float, float, float, float, float)Parameters
| Name | Type | Description |
|---|
zone | float | zone index |
col | float | mesh point X index |
row | float | mesh point Y index |
posx | float | mesh point new value of X (-32K..32K) |
posy | float | mesh point new value of Y |
Example
SetZoneMeshPointPos 1, 1,1, 0,0
Notes
- Zone index, X node index, Y node index, X coordinate (-32K..32K), Y coordinate
Example
UnselectAllProjectors
Example
SelectProjector 1 // index(es) (1..N) or name(string). Can be used more than one argument
Example
UnselectProjector 1 // index(es) (1..N) or name(s)
Example
ToggleSelectProjector 1 // index(es) (1..N) or name(s)
Notes
- Invert Projector selection state
Syntax
focusprojector(integer)focusprojector(string)Parameters
| Name | Type | Description |
|---|
index | integer | projector index |
name | string | projector name |
Example
FocusProjector 1 // Projector index, 1..N.
Syntax
starttvmode(float)Parameters
| Name | Type | Description |
|---|
FPS | float | Frames per second (from 0.1 to 500) |
Example
StartTvMode 30 // 30 FPS
Notes
- Set the FX table to drop-fx mode (1 per line, 4 per line, drop-fx)
Notes
- Set the default 1-per-line QuickFX mode
Syntax
previewasuninverse(integer)Parameters
| Name | Type | Description |
|---|
enabled | integer | 1 - display Universe page in this panel. 0 - classic preview modes. |
Example
PreviewAsUninverse 1
Syntax
previewzonematrix(integer)Parameters
| Name | Type | Description |
|---|
index | integer | 0 is the default preview. 1 and above select a zone matrix. |
Example
PreviewZoneMatrix 1
Notes
- 0 selects the default preview; 1 selects the first zone matrix.
Notes
- Unlock BEYOND screen (access)
Syntax
mobonotify(string)Parameters
| Name | Type | Description |
|---|
text | string | text message |
Example
MoboNotify "Hello!"
Notes
- Send a message to the MoboLaser mobile app
SetUiFPS
The command sets the frequency of the BEYOND UI repaint. The default frequency is relatively low, only 25 FPS. If you use BEYOND primarily for show design, it may be a good idea to increase the FPS to 50 or 60. Keep in mind that a higher FPS can increase CPU load and may slightly reduce keyboard responsiveness in the worst case. BEYOND is designed to handle dropped frames and will not lock up, but this is a reminder to maintain a balance and avoid overloading the main thread.
Syntax
setuifps(integer)Parameters
| Name | Type | Description |
|---|
FPS | integer | UI repaint frequency |
Notes
- Set the design-time UI FPS
Fb4DiscoveryMode
Sets the FB4 detection mode. By default, BEYOND always searches for FB4 and establishes a connection as soon as it is detected. However, this can be changed. Mode values: 0 - always. Default mode. 1 - auto. Checks whether there is another BEYOND on the network; if yes, discovery does not start. If not, it starts searching for hardware. 2 - manual. Enable or disable discovery by command. A good option if you want to control it manually.
Syntax
fb4discoverymode(integer)Parameters
| Name | Type | Description |
|---|
mode | integer | 0 - always, 1 - auto, 2 - manual |
Example
Fb4DiscoveryMode 0 // 0-always, 1-auto, 2-manual
Notes
- Set FB4 connection / discovery mode
- Using the mode makes sense only if you have multiple BEYOND PCs on the network.
Notes
- Enable FB4 discovery and auto-connect
Notes
- Disconnect FB4 and disable auto-connect
Syntax
setvdgplugin(integer)Parameters
| Name | Type | Description |
|---|
mode | integer | 0 - off, 1 - on, 2 - toggle |
Example
SetVdgPlugin 2 // 0 disable, 1 enable, 2 toggle
Notes
- Enable or disable VirtualDJ plugin
Syntax
setcuecaptioncolor(float, float, float)Parameters
| Name | Type | Description |
|---|
page | float | page index |
cue | float | cue index |
color | float | color in GDI format (0x0000FF is red) |
Example
SetCueCaptionColor 1,2, 0x0000FF // page 1, cue 2, color (windows, 24bit color)
Notes
- Set the cue caption color
Example
PulseEvent "MyEventName"
// OTHER SCRIPT
WaitForEvent "MyEventName"
DisplayPopup "It works!"
restart
Notes
- Activate an update of DMX IN reactions, whether or not the data changed
- In theory, DMX should define the control state and act as the sole source of input.
- In BEYOND, however, multiple sources can control the same objects, which can lead to out-of-sync states.
- For these modules, BEYOND responds to DMX value changes rather than the current state itself.
- The Refresh command forces an update to resynchronize the affected modules.
ShutDownWindows
This command is intended for companies that operate permanent installations, where BEYOND needs to run on a schedule or be controlled remotely. The command requires the ShutDownWindows.exe application to function. On the BEYOND side, it simply calls ShellExecute().
Example
ShutDownWindows // require ShutDownWindows.exe application
Example
CaptureToClipboard
Notes
- Create a Capture object and store it to the clipboard
Example
SelectZoneName "Main Graphics"
Notes
- Selection of zone by name
Example
UnSelectZoneName "Main Graphics"
Notes
- Unselect zone by name (legacy)
Syntax
focuszone(integer)focuszone(string)Parameters
| Name | Type | Description |
|---|
index | integer | zone index |
name | string | zone name such as Main Graphics |
Syntax
selectandfocuszone(integer)selectandfocuszone(string)Parameters
| Name | Type | Description |
|---|
index | integer | Projection zone index |
name | string | Projection zone name |
Example
SelectAndFocusZone 1
Notes
- Select zone by index or name
Example
MuteZonesOfProjector 1
Notes
- Mute zones of 1st projector
Example
UnMuteZonesOfProjector 1,2,3 // projector 1,2 and 3
Notes
- Unmute zones of multiple projectors
SetActiveGrid
Sets the active Grid to either the first (main) or second (secondary) Grid. The active Grid concept is used in many parts of BEYOND. In practice, the rule is simple: the last Grid you interacted with becomes the active one.
Syntax
setactivegrid(float)Parameters
| Name | Type | Description |
|---|
grid | float | 1 for main grid, 2 for secondary (located at QuickTools area) |
Example
SetActiveGrid 1 // 1 or 2
Notes
- Select the active grid for context-related operations
Example
SelectNextCatGrid1
Notes
- Select next category (main grid).
- Page is an absolute index used as the cue address. Tab refers to the UI side. The Grid may display only a subset of pages depending on the selected category.
Example
SelectPrevCatGrid1
Notes
- Select previous category (main grid).
Example
SelectNextPageGrid1
Notes
- Select next page (main grid).
- Page is an absolute index used as the cue address. Tab refers to the UI side. The Grid may display only a subset of pages depending on the selected category.
Example
SelectPrevPageGrid1
Notes
- Select previous page (main grid).
- Page is an absolute index used as the cue address. Tab refers to the UI side. The Grid may display only a subset of pages depending on the selected category.
Example
SelectNextTabGrid1
Notes
- Select next tab (main grid).
- Page is an absolute index used as the cue address. Tab refers to the UI side. The Grid may display only a subset of pages depending on the selected category.
Example
SelectPrevTabGrid1
Notes
- Select previous tab (main grid).
- Page is an absolute index used as the cue address. Tab refers to the UI side. The Grid may display only a subset of pages depending on the selected category.
Example
RebootConnectedFB4
Notes
- If you need to use this command, please contact Pangolin ([email protected]) and tell us what is wrong with your FB4. Thanks.
Syntax
pub(string, string)pub(string, string, integer)pub(string, string, integer, integer)pub(string, float)Parameters
| Name | Type | Description |
|---|
param1 | string | |
param2 | string | |
param1 | string | |
param2 | string | |
param3 | integer | |
param1 | string | |
param2 | string | |
param3 | integer | |
param4 | integer | |
param1 | string | |
param2 | float | |
Example
pub "data/", "test text"
Syntax
subprop(string, string)Parameters
| Name | Type | Description |
|---|
param1 | string | |
param2 | string | |
Syntax
subjson(string, string)Parameters
| Name | Type | Description |
|---|
param1 | string | |
param2 | string | |
Syntax
subcmd(string)Parameters
| Name | Type | Description |
|---|
param1 | string | |
Syntax
pubobject(string, string)pubobject(string, string, string)Parameters
| Name | Type | Description |
|---|
param1 | string | |
param2 | string | |
param1 | string | |
param2 | string | |
param3 | string | |
Syntax
chat(string)chat(string)Parameters
| Name | Type | Description |
|---|
text | string | |
text | string | |
Syntax
setprop(string, string)setprop(string, integer)setprop(string, float)Parameters
| Name | Type | Description |
|---|
name | string | object.property name |
strvalue | string | Property value |
name | string | object.property name |
intvalue | integer | Property value |
name | string | object.property name |
fvalue | float | Property value |
Example
SetProp "Master.bpm", 123
Notes
- Universal property setter
Example
QLog "Hello World!"
Notes
- Hello World in QuickLog tab
Example
LogInfo "My message to QLog tab"
Notes
- Add an info message to the log
Example
LogWarning "My message to QLog tab"
Notes
- Add a Warning message to the log
Example
LogError "My message to QLog tab"
Notes
- Add an error message to the log
AddSms
Adds a new message to the SMS FIFO queue for display on the laser projector. You can view the message FIFO in the QuickSMS tab, located at the bottom of the main window. This module was originally designed for compatibility with the Pangolin IMU software, which is now discontinued. However, the ability to add messages through scripting allows connectivity with various external input sources.
Syntax
addsms(string)addsms(string, string)addsms(string, string, string)addsms(string, string, string, integer)Parameters
| Name | Type | Description |
|---|
text | string | message text |
text | string | message text |
nick | string | Nickname |
text | string | message text |
nick | string | Nickname |
phone | string | phone number |
text | string | message text |
nick | string | Nickname |
phone | string | phone number |
color | integer | message color (GDI RGB color) |
Examples
AddSMS "This is my demo message"
AddSMS "Red text message", "","", 0x0000FF
Notes
- Add a basic text message to the text FIFO
- Red message
Syntax
showitnowsms(integer)Parameters
| Name | Type | Description |
|---|
online | integer | 0 - off, 1 - on (laser output enabled) |
Notes
- Enable laser output from the QuickSMS tab
RegisterOscFeedback
This command allows monitoring the state of a variable and sending an OSC message when the value of an object property changes. Implementation details: BEYOND maintains a dedicated list of property names to watch. Their values are checked periodically by a timer. When a value changes, BEYOND sends an OSC message automatically. This approach is somewhat CPU-intensive, but it is universal and works with all object properties accessible in PangoScript.
Syntax
registeroscfeedback(string, string)Parameters
| Name | Type | Description |
|---|
osc | string | OSC address |
prop | string | BEYOND Object property |
Example
RegisterOscFeedback "/beyond/master/brightness", "master.brightness"
Notes
- Add OSC feedback for object property
Example
ShowMasterHelpFile
Syntax
setaudioingain(float)Parameters
| Name | Type | Description |
|---|
gain | float | audio gain (1 to 15) |
Notes
- 1 is min, 15 is max, 10 is default
Syntax
setaudioinrelease(float)Parameters
| Name | Type | Description |
|---|
release | float | Release value for FFT peak detector. |
Example
SetAudioInRelease 75
Notes
- 1 is min, 99 is max (slowest), 75 is default
ShowHint
This command displays a popup window with hint text. It is useful for showing which slider is currently in motion and its value. This type of popup is used by the QuickShow MIDI-mapping system, and BEYOND allows you to use the same feature for any slider you are mapping.
Syntax
showhint(string)Parameters
| Name | Type | Description |
|---|
text | string | popup window text |
Notes
- Show a hint window in the center of the main window
Notes
- This entry is retained for reference only; it is not a callable PangoScript example.
Notes
- This entry is retained for reference only; it is not a callable PangoScript example.
WaitForEvent
WaitForEvent is a general-purpose waiting command that works in conjunction with the PulseEvent command. It must include at least one event name, defined as a string of your choice. Multiple event names can be specified. As soon as any of the listed events is pulsed, the script resumes execution. The main purpose of this command pair is to enable coordination and interaction between multiple scripts. The syntax: WaitForEvent "Event1" WaitForEvent "Event1", "Event2","Event3"
Examples
// script 1:
WaitForEvent "MyEventName"
DisplayPopup "MyEventName pulsed"
restart
// script 2
PulseEvent "MyEventName"
// script 1:
codename "DrumAction"
var a
a = 0
LoopPoint:
WaitForEvent "Kick", "Snare"
DisplayPopup "Boom!"
goto LoopPoint
// script 2
DrumAction.a = 100
PulseEvent "Kick"
// script 3
DrumAction.a = 200
PulseEvent "Snare"
PulseEvent "Snare"
Notes
- Single wait - pulse-script pair
- Multiple waiting
Warning
- Some contexts do not support waiting instructions.
- A waiting instruction introduces a delay in execution, requiring the scripter object to remain active until completion.
- In certain cases—such as during initialization or within timeline event input/output—scripts cannot wait because execution occurs synchronously in real time.
- In these situations, BEYOND creates the scripter object, executes all commands immediately, then destroys the scripter and continues execution.
- Waiting commands such as sleep, waitfor, and similar functions are not applicable in these contexts.
WaitForPageChange
The WaitForPageChange command puts the script into a waiting state, which ends when the main content grid page is changed. It does not apply to the secondary grid. param(1) returns the current page index (zero-based).
Warning
- Some contexts do not support waiting instructions. See WaitForEvent warning.