Type any phrase to search documentation

Software Documentation

Exporting a firing system scriptDocumentation

IntegrationIntermediateLast updated: February 27, 2021

3 Cobra

To create and export a script for the Cobra firing system, please follow these three steps:

  1. Address the show (“Addressing > Address show”).
  2. Export the script to a USB thumb drive (“File > Export > Export firing scripts“). Save the file as “cobra.csv” on the USB drive.
  3. Insert the USB thumb drive into the 18R2 (To start your show, press cue #1 on channel 00!).

Step 2 creates the script file, which is a standard format CSV file with a “CSV” extension. The file format details are described below in this section.


Figure 1 – Cobra firing system


Cobra modules have 6, 18, 36, or 72 pins (cues), but as far as addresses are concerned the modules with more than 18 pins are just two or four 18-pin modules combined, with each of the 18-pin modules having a separately assignable module number (channel number). If you use 36 or 72 pin modules, simply treat them as multiple 18-pin modules stuck together, and assign their separate module numbers to whatever is needed at their physical locations. If you use 6-pin modules, take care to avoid assigning pins above 6 or create a custom module with a 6-pin limit.


Table 1 – File format and encoding

File formatExtensionText encodingField delimiterEnd-of-line

The script contains rows for the firing events, i.e., unique combinations of module, pin, and ignition-time. Multiple effects can be combined on a single cue. The special characteristics of the script are shown in the following table:


Table 2 – Special characteristics

Special characteristicsDescription
Script formats for different Cobra firmware versionsFinale 3D can export COBRA v3.0, COBRA v4.0, COBRA v5.0, and COBRA v6.0 format scripts. COBRA v3.0 and v4.0 scripts have 10th second resolution; later versions have 100ths second resolution. Beginning with COBRA v6.0, the script supports launch position coordinates, hazard class, definable pulse time, and embedded part numbers.
Sort order of rowsEvent rows in each section of the script are sorted ascending first by Event Time.
What rows representRows represent firing events, i.e., unique module-pin-ignition-time events. If multiple effects are triggered on the same cue, the effects are combined in name field, but the row is still just one row.
Structure of script fileThe script file begins with a header with position coordinates, followed by one or more sections (one for non-semi-automatic) of event rows, each section with its own two-row header, followed by “end” as a row by itself.
Header with position coordinatesThe script includes a version comment in the header. Optionally, the script can be set to include position coordinates. The rows indicate the coordinates of the positions and the list of modules at each position, in a simple syntax illustrated by this example:

##version 6

The three coordinates following the position name are in meters: right (East), out toward viewer (South), and up toward the sky. The fourth field is the diameter of the position in meters. The remaining fields are the module channel numbers at that position.

Semi-automatic firingCobra firing systems support three types of semi-automatic and step firing methods: 1) “Separate Scripts By Tracks”, 2) “Step Script By Tracks”, and 3) “Step Script By Events”. In Finale 3D, you can select any of these semi-automatic methods from the addressing menu, or select “Standard Script” for the fully-automatic method used for pyromusicals. The Separate Scripts By Tracks method splits the script into multiple scripts that are triggered on demand by pressing the corresponding cue button on the Cobra controller. The Step Script By Tracks method is similar, but advances through the tracks of the show sequentially with the step button on the controller, instead of by random access. The Step Script By Events method advances one event at a time sequentially with the step button. Examples of all four script formats are provided in Table 4.

For both the Separate Scripts By Tracks method and the Step Script By Tracks method, in Finale 3D the Track property in script rows indicates the section of the show to which the row belongs. For Separate Scripts By Tracks the Track also indicates the button on the Cobra controller that triggers the section, which is the Track value itself, a number 1-18 (please unhide the Track property in the script to use this feature). In Finale 3D, the Track field in the script table is hidden by default; unhide it from the blue gear menu. In the Cobra script file, sections are listed sequentially with a comment row and header row above the event rows, e.g.,

#Track 1

The Track value in the 3D script is the number in the #Track comment row, and also in the following header row after the word “cue”. The rows in each section of a semi-automatic script have time values relative to the first event in the section, which is always time zero. In the Finale 3D script, the sections can be in any order and can even have interwoven events, but generally people place the sections one after another in the Finale 3D script, with some space in between to tell the apart.

See semi-automatic-firing for further instructions.

Special charactersTo avoid the need for an escaping convention, Finale 3D filters out comma, semicolon, double-quote, backslash, and all control characters from the exported script. The Cobra controller implements the Excel escaping convention, but Finale 3D filters the characters anyway to avoid types of errors that are common when users import and export from Excel and text editors.
Minimum separation between cuesNone
Hazard classCOBRA v6.0 and later firmware recognizes the “Hazard” field of Finale 3D, which is exported as a text field identifying a class of events that can be disabled on the fly based on conditions during the show.
Pulse TimeCOBRA v6.0 and later firmware supports a user-defined pulse duration for which cue is to be energized.
Multi-hit pinsSupported in the script format and with manual addressing in Finale 3D, for non-pyro effects like flames and relays that can be triggered multiple times. Finale 3D handles multi-hit pins in the Cobra exporter the same as it handles single-hit pins — whatever pin address is in the script row in Finale 3D will be copied to the exported script row for Cobra, whether or not the pin address is unique. The standard pyro addressing functions in Finale 3D assign pins sequentially, so it may be easiest to address multi-hit pins in Finale 3D by editing the script table by hand and then locking the edited rows so the show can be re-addressed for pyro without affecting them.
DMXCOBRA v6.0 and later firmware with 36M and 72M modules supports DMX output for separate or shared DMX universes on each module.

After the header, each row in the script has a number of fields separated by the vertical bar character. The names of these fields and their descriptions are shown in Table 3.


Table 3 – Specifications of script fields

Field nameDescription
Event TimeIgnition time of the event, in the format: 00:00:01.00s.
ChannelChannel number (same as the Module Number and Rail Address), in the format: channel 10. (Blank for DMX rows.)
CueCue number (same as the Pin Address), in the format: cue 1. (Blank for DMX rows.)
NameEffect name, a text string, at most 80 characters long; (COBRA v6.0 and later: field includes the part number in curly braces immediately following the description, e.g., “Description {Part Number}”.
Hazard(COBRA v6.0 and later) Text string identifying a class of events that can be disabled on the fly based on conditions during the show.
Pulse Time(COBRA v6.0 and later) Duration for which cue is to be energized, in floating point format (0.01 second resolution); or blank for the default duration. Finale 3D writes the empty string value, unless the cue contains an event of type sfx, flame, light, or not_an_effect, in which case Finale 3D writes the duration of the event as shown in the script row. See Why is ‘Type’ so important? What depends on it?.
Auxiliary Parameter(COBRA v6.0 and later) Not used. Finale 3D leaves this field blank.
DMX Universe(COBRA v6.0 and later) Integer from 1-100, identifying the DMX universe. (Blank for non-DMX rows.)
DMX Channel(COBRA v6.0 and later) Integer from 1-512 identifying the DMX channel of the row. (Blank for non-DMX rows.)
DMX Channel Value(COBRA v6.0 and later) Integer from 0-255 identifying the value for the DMX channel. (Blank for non-DMX rows.)
DMX Duration(COBRA v6.0 and later) Duration of DMX command, at which point the DMX channel value will be reset to zero, or, blank to leave the DMX channel value as is until a subsequent script row for the same channel changes the value. (Blank for non-DMX rows.)

An example semi-automatic script with two sections is shown below. The first track section contains two events with hazard classes (wind, rain), and a third event with an explicit pulse duration.

##version 6
#Track 1
00:00:00.00s,channel 1,cue 1,White Chrysanthemum {G2SH1000},wind,
00:00:02.90s,channel 2,cue 1,White Chrysanthemum {G2SH1000},rain,
00:00:05.40s,channel 2,cue 4,Long Flame Projector Shot {GXX1101},,0.41
#Track 2
00:00:00.00s,channel 5,cue 1,Green Chrysanthemum {G2SH1001},,
00:00:01.00s,channel 6,cue 1,Green Chrysanthemum {G2SH1001},,
00:00:02.00s,channel 7,cue 1,Green Chrysanthemum {G2SH1001},,
00:00:03.00s,channel 8,cue 1,Green Chrysanthemum {G2SH1001},,

Figure 2 – Example Cobra script


Table 4 – Example files

Download linkExplanation
test_cobra.finExample show
test_cobra_standard_script.csvExample exported standard script (fully-automatic)
test_cobra_separate_scripts_by_tracks.csvExample exported semi-automatic script (separate scripts by tracks)
test_cobra_step_script_by_tracks.csvExample exported step script by tracks
test_cobra_step_script_by_events.csvExample exported step script by events
magicfx_cobra_standard.finExample DMX show using MagicFX flame projector
magicfx_cobra_standard.csvExample exported DMX script using MagicFX flame projector


Table 5 – Tutorial videos

Download linkExplanation
cobra_finale_standard_script_tutorial.mp4Introduction: addressing and exporting a standard script for Cobra
cobra_finale_separate_scripts_by_tracks.mp4Exporting a script divided into separate “mini-scripts” by track
cobra_finale_step_by_events.mp4Exporting a manual-style script that advances when you press the step button on the 18R2
cobra_finale_step_by_tracks.mp4Exporting a script divided into stepped sections by track


Video 1 – Introduction: addressing and exporting a standard script for Cobra