To create and export a script for the MainFX firing system, please follow these three steps:
- Design the show.
- Address the show (“Addressing > Address show”).
- 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