Flags can be placed on timelines to indicate important waypoints in your lighting programming. Useful for creating interactions with other programming and controller IO, the Timeline Flag trigger is used to fire actions when timeline playback passes a flag. New in Designer 2.12, the Timeline Flag trigger now returns the name of the passed flag as a variable.
Creating a flag
To create a timeline flag, click the New Flag button in the Timeline menu and drop the flag onto the timeline at the required position.
💡 Tip: Hold down Ctrl (Cmd on macOS) to drop multiple flags in a single session.
Click on the flag and a properties dialog will appear. From here you can adjust the flag time, set the flag’s name or delete the flag.

Using the ‘Timeline Flag’ trigger
From the Trigger tab, click New… and select ‘Timeline Flag’ from the list of available triggers.
Select the newly created trigger to show its properties. Within this list you’ll see options for Timeline and Flag.
Timeline: Specify the timeline on which flags will activate the trigger.
Flag: Specify an individual flag which will activate the trigger.
There is an option to select ‘Any’ for either Timeline or Flag. When Timeline is set to Any, the Flag field is disabled and the trigger will fire when any flag is passed on any timeline.

Using Variables
Variables allow you to capture data from triggers to determine the behaviour of actions. Variables are a powerful programming tool and must be enabled before use. If you’re new to trigger variables, take a look at our dedicated online help pages.
To enable variables, click the three dots in the corner of a supported action’s properties and select ‘Enable Variables’.
Action properties that support variables show a toggle allowing you to select a variable as their value.

Timeline Flag Variables
The variables returned by a timeline flag are as shown in the tables below.
With timeline set to Any:
| Variable Number | Value |
|---|---|
| 1 | Timeline number |
| 2 | Flag time (ms) |
| 3 | Flag name |
With a specific timeline selected:
| Variable Number | Value |
|---|---|
| 1 | Flag time (ms) |
| 2 | Flag name |
Note: if both a specific timeline and a specific flag have been selected in the trigger properties, no variables are captured.
Capturing a flag’s name using variables unlocks convenient programming shortcuts which reduce programming complexity and save time. You can insert the value of a variable into trigger conditions and actions. To insert a variable into a trigger as a string, type <i,s> where i is the variable number. For example, to insert the name of a flag captured from a specific timeline, type <2,s>. Data types other than string are supported and these are documented in our online help pages.
Example: Media Server
We’re using a third party media server to run a live video mixing system which needs to integrate with a Pharos controller. The media server supports UDP commands over ethernet to change the live camera feed that is being displayed. Each camera has a name and can be activated by sending a UDP message with the payload /cue/camera/*name*/go where *name* is the name assigned to the camera.
In Designer 2, we can create flags at the key moments in our timeline where the media server’s active camera needs to change. The flag’s name property can be set to the name of the camera which should go live at that point.

From the Trigger tab, we can create a new Timeline Flag trigger which is activated by any flag on our timeline. We can add an Output Ethernet action and enable variables. Next, the IP address and Port of the media server’s UDP client need to be configured correctly. Finally, we enter the string to be sent using UDP when a timeline flag activates the trigger.

We’re using the string /cue/camera/<2,s>/go which will send the go command to the media server for the camera specified in the second variable (flag name) of the captured flag.
When the overhead_camera flag is passed 6.5s after starting Timeline 1, the controller will send the UDP message /cue/camera/overhead_camera/go to the external media server.

