Software Documentation

Software Documentation

Firing SystemsDocumentation

Integration Intermediate Last updated: August 20, 2023

28 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.

In June 2022, Pyromac released a V2 script format to support its new DMX Box hardware product.  At the same time, Finale 3D released a software update that adds an Export Options dialog when you export to Pyromac, and the dialog gives you the choice of exporting a V1 script or V2 script.  If you choose V2, the dialog presents some additional options.  This article is based on the V1 format, except for the top of Table 2 which covers specific capabilities of the V2 format.

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 format Extension Text encoding Field delimiter End-of-line
Text .TXT ASCII Semicolon CRLF

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 characteristics Description
V2 script format The Export Options dialog gives you the choice of exporting in V1 format or V2 format.  The V2 format supports the DMX Box hardware in addition to the existing Pyromac “Master” modules.  As described below, the Pyromac Master modules serve DMX fixtures in a shared DMX Universe of 50 channels.  Each DMX Box serves its own DMX Universe of 512 channels.  When you design a DMX show in Finale 3D for Pyromac Master modules and DMX Boxes together, you will select, in the Export Options dialog, which DMX Universe in Finale 3D corresponds to the shared Pyromac Master module DMX Universe.  All other DMX Universes in Finale 3D will correspond to the DMX Box IDs.

DMX Box IDs range from 1-10.  To avoid confusion, it is a good practice to use select DMX Universe = 11 for the Pyromac Master modules, leaving DMX Universes 1-10 for the matching DMX Box IDs.

Sort order of rows Rows sorted ascending by effect time, then by module number, then by pin number.
What rows represent Each 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.

Header The 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 resolution The Pyromac system supports hundredths of a second resolution.
(semi-automatic firing)
The 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).  If you use tracks, please set the tracks to increasing numbers and make sure that every event in the show has a track number.

If the track name of an event begins with non-digit text characters, followed by the digits representing track number, the non-digit text characters will replace the row’s Note field in the exported script, which otherwise would contain the effect name.   Since the Pyromac controller displays the Note fields of the cues when shooting the show, and since each track comprises one cue in a semi-automatic show, the leading text characters in the Track field provide a way of naming the cues usefully.  Thus naming the tracks “Trk1” and “Trk2” and “Trk3” is not as useful as, for example, “Opening shot 1” and “Entrance 2” and “First song 3”.

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.

In the Finale 3D script, please arrange the tracks with no interwoven or overlapping events.  Separate tracks in DMX scripts therefore need separate safety channels.

DMX support Pyromac 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 state Pyromac 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 events Some 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 then (automatically) back to 0:

Time = 0 ms, DMX value = 128, duration = 59990 ms (59,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 events Pyromac DMX events are limited to 59990 ms (59,99 seconds). If a user adds a DMX event like a safety channel with a duration longer than 59,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 59,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 59,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 Types Finale 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 script DMX 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 name Description
Cue For 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.
Time The 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.
Delay The 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; or the Track name if the track begins with non-digit text characters as described in Table 2.
Duration For 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 link Explanation
magicfx_pyromac_standard.fin Example standard show using Pyromac, MAGICFX
magicfx_pyromac_standard.txt Example standard exported script using Pyromac, MAGICFX
magicfx_pyromac_semi_auto.fin Example semi-auto show using Pyromac, MAGICFX
magicfx_pyromac_semi_auto.txt Example semi-auto exported script using Pyromac, MAGICFX