Software Documentation

Firing SystemsDocumentation

Integration Intermediate Last updated: November 22, 2024

19 MainFX

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

  1. Design the show.
  2. Address the show (“Addressing > Address show”).
  3. Export the script (“File > Export > Export firing scripts“).

Step 3 creates the script file, which is a JSON file that you can import into your firing system.

 

Figure 1 – The MainFX firing system

 

The MainFX script is a JSON text file that supports 30, 100, and 10k pin modules. 

 

Table 1 – File format and encoding

File format Extension Text encoding Field delimiter End-of-line
JSON .out UTF-8 Not applicable Not applicable

 

The script is a JSON array of objects (“rows”) for 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 characteristics Description
Sort order of rows Rows sorted ascending first by event time.
What rows represent Rows 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.
Supported modules S-BOX 30, S-BOX 100, and Custom 10K modules are supported, with 30, 100, and 10k pins respectively.
Minimum separation between cues 10ms

 

The JSON objects include the necessary information for each ignition event, consisting of some values derived from the show data in Finale 3D and other values with hard coded, constant values. 

 

Table 3 – Specifications of script fields

Field name Description
action (int) The value 1
between (int) Time in milliseconds between the previous row’s event time and this row’s event time, or zero for the first row
ch (int) Pin number
delay (int) Event time in milliseconds with 10ms resolution (last digit is always zero)
freeze (bool) The value false
id (int) The row number, beginning with 0
position (int) The module number, beginning with 1 (not the “launch position” in Finale 3D, which is not represented in the MainFX script)
time (int) The value 100
type (int) The value 2
name (string) The effect name, or effect names if the row represents multiple rows with different names
size (string) The size of the first effect
quantity (int) The number of devices represented by the row
angle (string) ASCII graphics angle representation of all effects represented by the row, preceded by a list of angles followed by a dot character if any angles are non-zero

The example script below is from a show with nine positions, illustrating rows with various combinations of effects.  The first eleven rows each have a single effect.  The next three rows have 2, 2, and 3 effects respectively.  The first of those three has two effects of different names, which are combined in the name property separated by comma.  The remaining rows have homogeneous effects, so their name properties consist of a single name.

 

[{"action":1,"between":0,"ch":1,"delay":2760,"freeze":false,"id":0,"position":1,"time":100,"type":2,"name":"Red Chrysanthemum","size":"50mm","quantity":1,"angle":"|"},
{"action":1,"between":500,"ch":1,"delay":3260,"freeze":false,"id":1,"position":2,"time":100,"type":2,"name":"Red Chrysanthemum","size":"50mm","quantity":1,"angle":"|"},
{"action":1,"between":500,"ch":1,"delay":3760,"freeze":false,"id":2,"position":3,"time":100,"type":2,"name":"Red Chrysanthemum","size":"50mm","quantity":1,"angle":"|"},
{"action":1,"between":500,"ch":2,"delay":4260,"freeze":false,"id":3,"position":4,"time":100,"type":2,"name":"Red Chrysanthemum","size":"50mm","quantity":1,"angle":"|"},
{"action":1,"between":500,"ch":2,"delay":4760,"freeze":false,"id":4,"position":5,"time":100,"type":2,"name":"Red Chrysanthemum","size":"50mm","quantity":1,"angle":"|"},
{"action":1,"between":500,"ch":2,"delay":5260,"freeze":false,"id":5,"position":6,"time":100,"type":2,"name":"Red Chrysanthemum","size":"50mm","quantity":1,"angle":"|"},
{"action":1,"between":500,"ch":1,"delay":5760,"freeze":false,"id":6,"position":7,"time":100,"type":2,"name":"Red Chrysanthemum","size":"50mm","quantity":1,"angle":"|"},
{"action":1,"between":500,"ch":1,"delay":6260,"freeze":false,"id":7,"position":8,"time":100,"type":2,"name":"Red Chrysanthemum","size":"50mm","quantity":1,"angle":"|"},
{"action":1,"between":500,"ch":1,"delay":6760,"freeze":false,"id":8,"position":9,"time":100,"type":2,"name":"Red Chrysanthemum","size":"50mm","quantity":1,"angle":"|"},
{"action":1,"between":2220,"ch":1,"delay":8980,"freeze":false,"id":9,"position":4,"time":100,"type":2,"name":"Indigo Chrysanthemum","size":"3\"","quantity":1,"angle":"|"},
{"action":1,"between":0,"ch":1,"delay":8980,"freeze":false,"id":10,"position":6,"time":100,"type":2,"name":"Indigo Chrysanthemum","size":"3\"","quantity":1,"angle":"|"},
{"action":1,"between":3000,"ch":1,"delay":11980,"freeze":false,"id":11,"position":5,"time":100,"type":2,"name":"Indigo Chrysanthemum, Yellow Chrysanthemum","size":"3\"","quantity":2,"angle":"-45 +45. \\/"},
{"action":1,"between":6000,"ch":3,"delay":17980,"freeze":false,"id":12,"position":6,"time":100,"type":2,"name":"Yellow Chrysanthemum","size":"3\"","quantity":2,"angle":"-45 +45. \\/"},
{"action":1,"between":9000,"ch":2,"delay":26980,"freeze":false,"id":13,"position":7,"time":100,"type":2,"name":"Yellow Chrysanthemum","size":"3\"","quantity":3,"angle":"|||"}]

Figure 2 – Example MainFX script