Type any phrase to search documentation

Software Documentation

Exporting a firing system scriptDocumentation

IntegrationIntermediateLast updated: February 19, 2021

24 Pyromac

To create and export a pyro script for the Pyromac firing system in Finale 3D, please follow these steps:

  1. Address the show (“Addressing > Address show…”).
  2. Export the firing system script (“File > Export > Export firing script(s)…“).
  3. Import the script into your Pyromac controller.

To export a DMX or DMX + pyro script, please see Flame systems basic instructions and Exporting a firing system script for flame systems for further instructions. Also, the article Example: Explo X2 Wave Flamer with Pyromac firing system provides an end-to-end example of setting up, designing, and exporting a DMX + pyro script for Pyromac.

The exported Pyromac script is a text file with a “TXT” extension. While it is possible to open this file in a text editor, the file is not meant for humans to read or write. It contains only the data that the controller requires for shooting the show. For pyro, most Pyromac users will not need to concern themselves with the file format described in this section. DMX setup and configuration are complicated, so you may want to examine the script visually to ensure it represents what you expect. The file format described in this section provides the necessary details.

Figure 1 – The Pyromac firing system



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
Sort order of rowsRows sorted ascending by effect time, then by module number, then by pin number.
What rows representEach row represents a unique firing event, a module/pin/event-time combination. For example, a chain of five shells will be one row, not five. A pair of shells shot together from the same position will be one row, not two, even if the shells are different effects. A flight of shells shot together from multiple positions with the same module-pin using scab wire is still one row.

Events at different ignition times are necessarily different rows, even if their addresses or effect times are the same. For example, two flame projector shots at different times, triggered by the same module-pin address, will be two rows because they are at different times.

HeaderThe file contains a two-line header row with boilerplate text that defines the columns:

Pyromac firing system
Cue;Time;Delay;Address (Mod,Pins);"Note";Duration
Time resolutionThe Pyromac system supports hundredths of a second resolution.
Semi-automatic firingThe exported script will be semi-auto if any event contains a valid “Track” in Finale 3D; tracks may be integers 1-9999 or letters followed by integers in that range (example: “1” and “Trk1” are both okay). In the exported script, the “Cue” field contains the track number formatted with four digits 0001-9999 (letters stripped out), if set; otherwise it contains the same-time cue count in the same four digit format. Tracks must be in chronological order in the Finale 3D show.
DMX supportPyromac supports DMX devices in a single, global DMX universe shared across all modules. See Table 2 in Exporting a firing system script for flame systems for details. As of July 22, 2019 the Pyromac system limits the DMX channel range to channels 1-50. Please consult your Pyromac user’s manual to confirm the supported channel range if you want to use DMX channels outside of the range 1-50.
DMX resting statePyromac asserts that the resting state for DMX channels is value = 0. All DMX events in the Pyromac script contain a duration. The Pyromac system sets the DMX channel to the specified value for the duration of the effect, and then automatically sets the channel value back to zero.
Overlapping DMX eventsSome types of DMX devices like flame systems with rotating nozzles have DMX channels that may need to remain in a resting state with a non-zero value in between events. In the case of the Explo X2 Wave Flamer, the nozzle angle should not return to a rest position after every shot because multiple shots from the same angle in quick succession would require leaving the nozzle where it is, since it cannot rotate instantaneously. So how do Finale 3D and Pyromac support events that do not return the DMX value to zero at the end of the event duration, given that Pyromac automatically resets the DMX value to zero at the end of the event duration?

Overlapping DMX events provides an answer. If Pyromac encounters a second event for a DMX channel during the duration period of a first event for the same DMX channel, the second event will overwrite the DMX value and duration immediately to whatever its value and duration should be for the second event. For example, consider three events setting the value of a DMX channel to 128, then 64, then 192, and them (automatically) back to 0:

Time = 0 ms, DMX value = 128, duration = 99990 ms (99,99 seconds)
Time = 1000 ms, DMX value = 64, duration = 1000 ms
Time = 1500 ms, DMX value = 192, duration = 1000 ms

  • If the second event had a duration of 500 ms, the output value would change directly from 64 to 192 at 1500 ms, and then from 192 back to 0 at 2500 ms.
  • If the second event had a duration of 400 ms, the output value would change from 64 to 0 (not 128) at 1400 ms and then to 192 100 ms later, and finally back to 0 at 2500 ms.
  • If the second event had a duration of 600 ms, the output value would change directly from 64 to 192 at 1500 ms when the third row arrives, and back to 0 at 2500 ms.

The overlapping DMX mechanics facilitate a strategy for representing events that have long lasting effects — simply set their duration to “forever”! The long duration, in combination with the ability to interrupt the duration period with a different event, provide a means of representing a persistent state change event that holds its value until another event changes it.

Long-lasting DMX eventsPyromac DMX events are limited to 99990 ms (99,99 seconds). If a user adds a DMX event like a safety channel with a duration longer than 99,99 seconds, Finale 3D will automatically partition the long-lasting event into a string of multiple shorter events back to back. No event in the exported script will be longer than 99,99 seconds. DMX effects that set a persistent value (i.e., a value that lasts “forever” or until overwritten by another event) face a similar problem, since “forever” is longer than 99,99 seconds. For all long-lasting effects, including “forever” effects, Finale 3D exports strings of multiple events back to back to hold DMX channel values until the end of the show.
Module TypesFinale 3D supports four Pyromac module types for pyro ignitions, Pyromac 10 Channel, Pyromac 15 Channel, Pyromac 16 Channel, Pyromac 32 Channel, in addition to the module type Pyromac DMX Device, which represents the DMX side of a Pyromac module.
DMX representation in the scriptDMX rows are mixed in with pyro rows in the script, sorted by effect time. DMX rows are distinguished by the module number field: if module number <= 900, then the module number represents a true module number, for pyro ignitions; if the module number > 900, then the number is actually the DMX channel number + 900 (i.e., the number is not a module number at all!). DMX rows re-use the pin column to hold the DMX value for the event, from 0-255. DMX rows have an additional required field — duration — after the notes field (the duration field is optional for pyro ignitions, but not optional for DMX). The Pyromac system limits the DMX channel range to channels 1-50, so the DMX module number field contains numbers in the range 901 to 950.

After the header, each row in the script has a number of fields separated by the semicolon character. The names of these fields and their descriptions are the following:

Table 3 – Specifications of script fields

Field nameDescription
CueFor standard pyromusicals, the Cue field is the sequential count of unique firing times. Two events having the same effect time would have the same value in the Cue field. For semi-automatic firing, the cue field contains the track number from the “Track “field in the script in Finale 3D.
TimeThe effect time in the format HH,MM,SS.DD. For standard pyromusicals, the effect time is relative to zero; for semi-automatic firing, the effect time is relative to the first ignition time in the track (the event time). The first event in a semi-automatic track thus must have the same value its Time field and its Delay field, since Delay is the time difference between the ignition time and the effect time.
DelayThe prefire time in the format HH,MM,SS.DD; for DMX rows this value must be 00,00,00.00 .
Address (Mod,Pins)The value 1-900 for module number, or 901-999 for DMX channel numbers 1-99; comma; then the pin number from 1-32 or the DMX value from 0-255.
“Note”The effect name, in double quotes.
DurationFor DMX events, the duration field (required) is the duration of the effect in the format HH,MM,SS.DD. For pyro ignition events, this field is optional (but if the semicolon is present, the field must be included in the valid time format).


An example script containing six (6) shells, three (3) DMX safety channel events, and sixty-three (63) DMX flame shots across nine MAGICFX Flamaniac flame units. Please see Exporting a firing system script for flame systems for a full description of this example.

Pyromac firing system
Cue;Time;Delay;Address (Mod,Pins);"Note";Duration
0001;00,00,03.58;00,00,02.24;010,01;"White Chrysanthemum"
0002;00,00,04.08;00,00,02.24;010,02;"Red Chrysanthemum"
0002;00,00,04.08;00,00,02.24;010,03;"Blue Chrysanthemum"
0003;00,00,04.90;00,00,00.00;901,128;"MAGICFX DMX Safety Channel";00,00,01.50
0004;00,00,05.00;00,00,00.00;913,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0005;00,00,05.10;00,00,00.00;923,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0006;00,00,05.20;00,00,00.00;933,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0007;00,00,05.30;00,00,00.00;943,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0008;00,00,05.40;00,00,00.00;953,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0009;00,00,05.50;00,00,00.00;963,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0010;00,00,05.60;00,00,00.00;973,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0011;00,00,05.70;00,00,00.00;983,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0012;00,00,05.80;00,00,00.00;993,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0013;00,00,06.67;00,00,00.00;901,128;"MAGICFX DMX Safety Channel";00,00,02.00
0014;00,00,06.76;00,00,00.00;911,255;"MAGICFX L45 Medium DMX Mode1";00,00,00.50
0014;00,00,06.76;00,00,00.00;921,255;"MAGICFX L45 Medium DMX Mode1";00,00,00.50
0014;00,00,06.76;00,00,00.00;931,255;"MAGICFX L45 Medium DMX Mode1";00,00,00.50
0014;00,00,06.76;00,00,00.00;941,255;"MAGICFX L45 Medium DMX Mode1";00,00,00.50
0014;00,00,06.76;00,00,00.00;951,255;"MAGICFX L45 Medium DMX Mode1";00,00,00.50
0014;00,00,06.76;00,00,00.00;961,255;"MAGICFX L45 Medium DMX Mode1";00,00,00.50
0014;00,00,06.76;00,00,00.00;971,255;"MAGICFX L45 Medium DMX Mode1";00,00,00.50
0014;00,00,06.76;00,00,00.00;981,255;"MAGICFX L45 Medium DMX Mode1";00,00,00.50
0014;00,00,06.76;00,00,00.00;991,255;"MAGICFX L45 Medium DMX Mode1";00,00,00.50
0015;00,00,06.96;00,00,00.00;912,255;"MAGICFX L22.5 Medium DMX Mode1";00,00,00.50
0015;00,00,06.96;00,00,00.00;922,255;"MAGICFX L22.5 Medium DMX Mode1";00,00,00.50
0015;00,00,06.96;00,00,00.00;932,255;"MAGICFX L22.5 Medium DMX Mode1";00,00,00.50
0015;00,00,06.96;00,00,00.00;942,255;"MAGICFX L22.5 Medium DMX Mode1";00,00,00.50
0015;00,00,06.96;00,00,00.00;952,255;"MAGICFX L22.5 Medium DMX Mode1";00,00,00.50
0015;00,00,06.96;00,00,00.00;962,255;"MAGICFX L22.5 Medium DMX Mode1";00,00,00.50
0015;00,00,06.96;00,00,00.00;972,255;"MAGICFX L22.5 Medium DMX Mode1";00,00,00.50
0015;00,00,06.96;00,00,00.00;982,255;"MAGICFX L22.5 Medium DMX Mode1";00,00,00.50
0015;00,00,06.96;00,00,00.00;992,255;"MAGICFX L22.5 Medium DMX Mode1";00,00,00.50
0016;00,00,07.16;00,00,00.00;913,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0016;00,00,07.16;00,00,00.00;923,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0016;00,00,07.16;00,00,00.00;933,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0016;00,00,07.16;00,00,00.00;943,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0016;00,00,07.16;00,00,00.00;953,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0016;00,00,07.16;00,00,00.00;963,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0016;00,00,07.16;00,00,00.00;973,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0016;00,00,07.16;00,00,00.00;983,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0016;00,00,07.16;00,00,00.00;993,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0017;00,00,07.36;00,00,00.00;914,255;"MAGICFX R22.5 Medium DMX Mode1";00,00,00.50
0017;00,00,07.36;00,00,00.00;924,255;"MAGICFX R22.5 Medium DMX Mode1";00,00,00.50
0017;00,00,07.36;00,00,00.00;934,255;"MAGICFX R22.5 Medium DMX Mode1";00,00,00.50
0017;00,00,07.36;00,00,00.00;944,255;"MAGICFX R22.5 Medium DMX Mode1";00,00,00.50
0017;00,00,07.36;00,00,00.00;954,255;"MAGICFX R22.5 Medium DMX Mode1";00,00,00.50
0017;00,00,07.36;00,00,00.00;964,255;"MAGICFX R22.5 Medium DMX Mode1";00,00,00.50
0017;00,00,07.36;00,00,00.00;974,255;"MAGICFX R22.5 Medium DMX Mode1";00,00,00.50
0017;00,00,07.36;00,00,00.00;984,255;"MAGICFX R22.5 Medium DMX Mode1";00,00,00.50
0017;00,00,07.36;00,00,00.00;994,255;"MAGICFX R22.5 Medium DMX Mode1";00,00,00.50
0018;00,00,07.56;00,00,00.00;915,255;"MAGICFX R45 Medium DMX Mode1";00,00,00.50
0018;00,00,07.56;00,00,00.00;925,255;"MAGICFX R45 Medium DMX Mode1";00,00,00.50
0018;00,00,07.56;00,00,00.00;935,255;"MAGICFX R45 Medium DMX Mode1";00,00,00.50
0018;00,00,07.56;00,00,00.00;945,255;"MAGICFX R45 Medium DMX Mode1";00,00,00.50
0018;00,00,07.56;00,00,00.00;955,255;"MAGICFX R45 Medium DMX Mode1";00,00,00.50
0018;00,00,07.56;00,00,00.00;965,255;"MAGICFX R45 Medium DMX Mode1";00,00,00.50
0018;00,00,07.56;00,00,00.00;975,255;"MAGICFX R45 Medium DMX Mode1";00,00,00.50
0018;00,00,07.56;00,00,00.00;985,255;"MAGICFX R45 Medium DMX Mode1";00,00,00.50
0018;00,00,07.56;00,00,00.00;995,255;"MAGICFX R45 Medium DMX Mode1";00,00,00.50
0019;00,00,08.83;00,00,00.00;901,128;"MAGICFX DMX Safety Channel";00,00,01.50
0020;00,00,08.93;00,00,00.00;993,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0021;00,00,09.03;00,00,00.00;983,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0022;00,00,09.13;00,00,00.00;973,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0023;00,00,09.23;00,00,00.00;963,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0024;00,00,09.33;00,00,00.00;953,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0025;00,00,09.43;00,00,00.00;943,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0026;00,00,09.53;00,00,00.00;933,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0027;00,00,09.63;00,00,00.00;923,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0028;00,00,09.73;00,00,00.00;913,255;"MAGICFX Up Medium DMX Mode1";00,00,00.50
0029;00,00,10.71;00,00,02.24;010,04;"White Chrysanthemum"
0030;00,00,11.21;00,00,02.24;010,05;"Red Chrysanthemum"
0030;00,00,11.21;00,00,02.24;010,06;"Blue Chrysanthemum"

Figure 2 – Example Pyromac script


Table 4 – Example files

Download linkExplanation
magicfx_pyromac_standard.finExample standard show using Pyromac, MAGICFX
magicfx_pyromac_standard.txtExample standard exported script using Pyromac, MAGICFX
magicfx_pyromac_semi_auto.finExample semi-auto show using Pyromac, MAGICFX
magicfx_pyromac_semi_auto.txtExample semi-auto exported script using Pyromac, MAGICFX