GrandMA3 Session Sync
TheatreWhat it's for — Session Sync moves your Theatre cue list between CueSync and a grandMA3 console without re-programming. Push your cue structure to the desk (so the LD programs looks against real cue numbers), read the desk's cue list back into CueSync, or hand-carry it on a USB stick as an MA3 macro — all from one dialog.
Compatibility. Session Sync works with grandMA3 2.3, 2.4 and 2.5 consoles and onPC, and has been run against a physical grandMA3 console. Connecting the console, the action verbs, Looks and panic are on the GrandMA3 page, which also covers compatibility. As with any console workflow, do one dry run on your own desk and software version before show use — the dialog previews every command it would send.
The dialog, region by region
Everything happens in one Sync to grandMA3 dialog:
Preview banner (top) — "PREVIEW — review the commands below. Nothing is sent until you explicitly Send and confirm." The dialog never changes your show on open. With the bridge running it may ask the plugin to re-send its sequences, which shows as one harmless line in Command Line History.
Bridge status row — Shows whether the optional read-back bridge is alive on the console: "Bridge: not detected — cue-list read-back off (optional)" or, when running, the bridge version, console device, and MA3 software version in green. Install on this computer (shown when grandMA3 onPC is installed here) puts the console plugin straight into onPC's plugin folder, and reads Update bridge when the plugin on the desk is outdated or was built for another listener; Install bridge… exports it to a folder for a USB stick or a desk on another machine (see below).
Target sequence — Type any sequence number, or tap a chip beside the field. The dialog opens on the song's own sequence — the one CueSync last synced it to, or its Setlist Book slot — and the chips are read off the show: This song, the other sequences CueSync has synced (with their names), and the Next free number (one no song, sync record or desk sequence claims): the scratch range first, then — with the bridge running — any other sequence the desk is seen to leave empty. Switching songs moves the field to that song's sequence, so song 2 is never sent onto song 1's. When the bridge is running, the line underneath annotates the number with the sequence's real name on the desk and Browse console lists the desk's own sequences to pick from.
Which numbers CueSync will actually write to is a separate question, and a deliberately careful one:
- the scratch range (900–999 out of the box, editable in Settings → Advanced → grandMA3 Sync) is always writable — it is CueSync's own workspace on the desk;
- any sequence CueSync holds a baseline for is writable too, and that is how you sync with a show the LD already programmed: install the bridge, select the sequence, click Adopt console as baseline, and from then on every push into it is a merge that never re-Stores a cue you have not changed;
- anything else asks first. Without a baseline there is nothing to diff against, so a push would
Storeover whatever is programmed there; the dialog says so in red, offers Adopt console as baseline when the bridge has read the sequence, and offers Write to sequence N anyway — a switch that opens that one sequence for that song's push, and is gone when the dialog closes or the push has left a record (from then on later syncs into it are merges). The confirm step repeats that the sequence's contents are replaced. To stop being asked at all, the same banner has Stop asking — allow any sequence, which is Settings → Advanced → grandMA3 Sync → Allow writing to any grandMA3 sequence (off by default).
Diff preview — A live dry-run of exactly what a push would do: "First push → sequence 900 · +12 added" on a fresh sequence, or "Merge sync → … · +2 added · ~3 updated · 7 unchanged" against an earlier push. Every MA3 command that would be sent is listed. If nothing differs, it says "Already in sync — nothing to send."
Which cues go to the desk — Only the cues that fire to a grandMA. A Part's cues whose lane routes only to other outputs (QLab, a media server, anything that is not a grandMA console) are left out of the sequence. The dialog, the push message and every export message count them by lane: "3 cues left off the desk (SFX 2, VX 1)". A cue with no routing at all, or routed to an output this machine has not set up, stays on the desk. On a sequence pushed earlier, cues the lane rule now leaves out show as removed (kept on console). Nothing is deleted unless you turn on Delete removed cues on console.
Pyro, lasers, flame and CO₂ are held back. A cue that sends MIDI Show Control to a pyro, fireworks, explosions, flame, CO₂, smoke-pot or laser format is left off the desk, and so is every cue on a lane whose name or group says pyro, laser, flame, fire, fireworks, CO₂, cryo, explosion, detonator or cannon — however it is written ("Lazer", "LaserShow", "CO 2", "Feuerwerk", "Pirotecnia"). The count is its own sentence, apart from the routing one: "2 cues held back from the desk (PYRO 2)". The hold decides only what CueSync writes to the desk — in a sync, the Timecode file, the macros, the Setlist Book and the desk timecode CSV for MagicQ, Hog 4 and Titan. It changes nothing about what a cue fires, where it routes, or what the panic does. A lane's name is a guess, not a check: a hazard on a lane called something else is not caught by its name, and any lane can be set to Off by hand. Because the hold follows the name, renaming a held lane so it no longer reads as pyro, laser, flame or CO₂ says so (with an Undo): its cues are no longer held back. Deleting a held lane that still has cues is refused until you move or delete those cues, because they would otherwise move onto a lane that sends them to the desk.
A lane's setting for the desk. Right-click a lane chip, choose Output Routing, and pick grandMA desk: Auto is the rules above; On sends every cue on the lane to the desk whatever its routing or name; Off sends none of them. On is how a pyro, laser, flame or CO₂ lane reaches the desk, and it is a decision you make for that lane — the lane table repeats "switched On" each time you read it. CueSync is not a firing system and must not be your only interlock (Safety and responsibility). Every lane starts on Auto, the setting is saved with the show, and a lane you never touch saves exactly what it saved before. The setting can be changed while a show is running; it only changes what the next sync writes. Cues already on the desk are not deleted by switching a lane Off — they show as removed (kept on console) until you turn on Delete removed cues on console.
Desk numbers and your paperwork — The desk numbers cues 1, 2, 3… on a first push and never renumbers them afterwards, because that is what keeps the looks stored in them safe. So a cue you numbered 1.5 in CueSync can be desk cue 2. Wherever the desk number is not your cue number, the cue's label on the desk starts with yours (Q1·5 - Storm wash). The LD finds the cue by its desk number (the plan lists it); nothing on the desk searches a cue by its label text.
Labels on the desk. The desk strips some characters from a label, so CueSync writes a decimal tag with a middle dot (Q1·5) and caps names at 120 characters. Avoid . , \ ; and " in cue names: the desk removes them, or cuts the name at a quote. grandMA3 2.5 also removes & * ? ^ { | } and ~, so a cue called Smoke & Haze shows on the desk as Smoke Haze. The comparison with the desk ignores exactly what the desk changes, so a cue nobody touched never reads as differs from the last sync.
Colours on the desk. Off by default. With Settings → Advanced → Write colours to the desk on, a push also colours the sequence and each cue the way the timeline draws them — a cue's own colour, else its lane's, else the Part's — so the desk's sequence sheet reads like the show. A lane's own sequence takes the lane's colour, and so does its Track in the Timecode object — the file and the network send alike: each Track carries its lane's (or the Part's) colour as an Appearance named "CueSync Track #RRGGBB", which the desk makes when it has none, reuses when it has, and never writes over, so the Track bars in the desk's timeline show the lane colours. The events inside a Track cannot be coloured one by one. Every sequence a push writes is coloured, whatever its number, and a sequence takes as many colours as the show uses. They are written as Appearances named "CueSync …" in CueSync's own range of the Appearance pool, Settings → Advanced → grandMA3 Sync → Appearances for colours (9000–9999 out of the box: the top of the pool, clear of the stock Appearances and of the numbers an LD's own show uses). The range says where the colours live, not which sequences get them; no two sequences of a show share an Appearance, and two shows that colour the same desk should each have their own range. A sequence you adopted from the desk keeps the colours the desk has until CueSync has pushed it. CueSync stays inside its range and does not touch the rest of the desk's Appearance pool, but it does not read what the desk holds first either: an Appearance that already sits at a number CueSync uses is renamed and recoloured, and the first time you turn the switch on, every cue on a sequence CueSync pushed takes its CueSync colour in place of the colour the desk had for it. From then on a push sends only what changed, and a colour you change on the desk by hand stays until the colour in CueSync for it changes. When a colour leaves the show, its Appearance is recoloured for the next new colour rather than a new one made, so the range does not fill up as you work. Only when every number in the range is in use are the cues past it shown in the sequence's colour, and the Sync dialog says how many. The macro file carries the colours too, re-applies all of them when it is run, and its README says so. The dialog says which way the switch is set, beside Send: Colours: On or Colours: Off, with one sentence on what that means for this push. A failure inside the colour step keeps the previous colour record. The cue list, the marker lane, the timeline and the printed cue sheet show one colour for a cue. In the lane table the swatch beside each lane is the lane's colour as the timeline draws it; a caption under the table says whether that colour reaches the desk, and a screen reader is told the colour in words and its hex value.
Options — Three toggles, all off by default:
- Delete removed cues on console. Off means additive-only: cues you removed in CueSync are listed but kept on the desk.
- Push follow times (auto-advance). Cues after the first get an MA3
Timetrigger with the gap to the previous cue, so one Go plays the sequence back at show spacing. Leave it off when the desk fires from timecode, otherwise cues would double-trigger. Only timecode, follow and auto-continue cues get one; GO and standby cues keep their Go trigger so the desk waits for the operator. - Assign to executor. Assigns the sequence to the Page and Executor you enter — the one this sequence was last assigned to, else 1.201 — replacing whatever the LD had there. With the bridge plugin running, the line under the fields says what the desk has on that executor now: already this sequence, or something else in amber (another sequence, a macro, a preset or a group), with the next free executor on the page, because the assignment replaces it.
Action buttons — Send to grandMA3… (the live push), Export MA3 macro (USB)… and Export Timecode XML (USB)… (the offline routes), Import Timecode XML… (the file pull), and — when the bridge has a usable snapshot of the selected sequence and its plugin is still running — Adopt console as baseline and Import as Theatre track (the network pull lanes). If the plugin has gone quiet the two pull buttons are hidden with a line saying why: a snapshot from a plugin that is no longer running can be a day old, and adopting it would open write access on the LD's sequence.
Files and the bridge plugin need a working licence. Install on this computer, Install bridge…, Export MA3 macro (USB)… and every Timecode XML export write files for the desk, and an install in read-only mode is told before it picks a folder: "Subscribe to export a grandMA3 macro — you're in read-only mode" (the action's name changes with the button), with a Subscribe button. Nothing is written and no folder chooser opens. Exporting diagnostics for support, Looks and tour packs stay open to every install.
Console to send to — with two or more grandMA3 consoles connected on different hosts, a row of choices appears (one selected at a time) and Send stays locked until you pick one. Every confirm and result names the desk it is about ("Sending to Main desk (10.0.0.9, UDP)"). While a write is running the choices are held: a lane set or a setlist goes to the desk you chose for every lane, and if that desk changes in the middle the push stops there and says so rather than sending the rest to the other one.
Layouts — one timeline, one lane, or several lanes
Under Theatre track to sync the song's layout decides how it reaches the desk:
- Timeline — every lane of the song merged into one cue list: one sequence, one Track on the desk. This is what Sync always did, and it is what you get when a song has only one lane that reaches the desk.
- Lanes — each lane that reaches the desk becomes its own sequence, so LX, movers and followspot run on separate playheads. The network push sends the sequences; the lanes' Timecode file gives each lane its own Track. A lane table lists every lane with its colour, what it holds (
6 desk · 5 timecode · 1 GO), and the sequence it will use; a lane that is not on the desk is greyed with the reason — switched Off, held back as pyro / laser / flame / CO₂, or routed to another system. Tick the lanes you want. Only keeps one; All and None do what they say. One ticked lane is a single-lane Send; several are a lane set: Push selected lanes… shows what each lane would write, asks once, writes the lanes one after another, and stops at the first failure — saying which lane it stopped at and which lanes were not sent. The confirm names each lane with its sequence and the desk it goes to, and says plainly when a lane is a first push (every cue is stored over whatever is programmed at its number on the desk). The result names the desk and the song, and the rows show what the colour write left out when colours are on. - Show lanes — appears when a lane runs through two or more songs (LX in Act I and in Act II). It puts that lane's cues from every song on one sequence, on the house clock, so the desk follows the whole show on one playhead. The songs should run end to end (Sequence Parts lays them that way): songs that overlap on the clock interleave their cues of that lane on the one Track, and the lane table, the file's README and the export message say which songs overlap — in the table the first overlap is written out under the lane and Show all N overlaps opens the rest. A lane that runs through the show but sends nothing to the desk — held back, switched Off or routed elsewhere — is listed greyed with its reason.
Each lane takes its own sequence number the way a song does, and keeps it across pushes and files. A lane's sequence and a whole song's are never mixed: pushing a lane into a sequence that holds the merged song, or the other way round, is refused with the reason, and Push everything is held to the same rule: it refuses rather than offering an overwrite.
Files for lanes. Export selected lanes (or Export all lanes from the Timeline layout) writes one Timecode XML with a Track per lane (on grandMA3 2.5 each Track carries its lane's name, and importing the file back — or the desk's own export of it — brings each Track in under that name). Export one Timecode XML per lane writes a separate object for each lane, each started on its own. Either way the events call the lanes' cues by number, so push the lanes first — until then the file imports cleanly and fires nothing. The ticked lanes are the ones both Timecode files take; the desk timecode CSV for MagicQ, Hog 4 and Titan is exported elsewhere and does not read them. There is no macro for several lanes — a macro is one sequence's full push — so tick a single lane (Only) to export its macro. One file per lane is written in one pass and ends in one note: the lanes written, what each file leaves out (the cues given no event), any lane the file could not write (every cue waits for a GO, say) or could not save, named with the reason. In the one-object file (for a song's lanes and for the show lanes alike), a lane with no cue on the desk is named in the README under NOT IN THIS FILE, with its reason.
What the dialog tells you before it writes.
- Before you send — a short list of what CueSync can and cannot see: the console, whether the bridge is running and confirmed on this console, whether the sequence is open for writing, whether the push would store over cues the desk already holds, and the programmer. Without the bridge, "overwrites" is shown as not counted rather than as none.
- Delete removed cues — when it is on, the confirm for a song or a lane set names, song by song, the cues it would delete. A cue is "removed" when it was deleted, disabled, moved to a lane that is not on the desk, on a lane switched Off for the desk, or held back as pyro, laser, flame or CO₂.
- The console you chose is no longer connected — if you chose a console while two were connected and it drops, the dialog asks you to choose again, even if only one is left. Nothing is sent to the other desk meanwhile.
- Sending is locked — when something stops Send (no console, two consoles and none chosen, a console that was chosen and dropped, a lapsed licence, a show that is live, a push blocked by a different-console notice), the Send button is replaced by a notice titled Sending is locked that says why and what to do, once. Each fact in the Before you send row also carries a word beside its dot (limited, needs a look, blocks the send), so the state does not rest on colour.
- The sequence field — if it is empty or half-typed, the macro and Timecode XML exports, and Send Timecode only…, wait until it is a complete number, instead of writing or sending for the number it held before.
- Assign to executor — the page must already exist on the desk. An assign to a page the show does not have is accepted by the desk and does nothing. When the bridge sees no executor assigned on that page, the line under the fields says CueSync cannot tell whether it exists.
Every confirm opens with Cancel focused, so pressing Enter on it never sends. While a write to the desk is running, Esc, the ✕ or a click outside the dialog is answered first ("A write to the desk is still running") and closes it only on the second request; closing does not stop the write, and its result is kept for when you open the dialog again.
The dialog opens on the song the Show Editor has open. It remembers the layout, the ticked lanes (for that song) and whether you were on the whole setlist while the app is open, so closing it to look at the desk and opening it again does not start over. Opening another show clears that, and any notice about the previous show.
The four workflows
1 · Push to the console (live, over the network)
- Connect a GrandMA3 (UDP) output in Network Outputs and confirm it shows connected. UDP is the recommended transport; a TCP output connects only to a desk OSC line set to TCP mode (see GrandMA3 §1). Then check the console's OSC page (Menu → In & Out → OSC) against the checklist below.
Console OSC settings CueSync depends on
Most items here fail the same way when they are wrong: CueSync reports the send succeeded and the desk does nothing. OSC over UDP is fire-and-forget, so there is no error to show you — check these once when you rig, not when a cue misses. (Fader Range is the exception: it doesn't silence anything, it scales it.)
| Setting | Required | What goes wrong otherwise |
|---|---|---|
| Enable Input + Receive Command | both on | The desk ignores every command CueSync sends. |
| Interface / Preferred IP | must match the network the CueSync machine is on | The console never opens its OSC port at all — nothing is listening, so nothing arrives. A stale 10.0.0.0/8 on a 192.168.x rig is the common case. |
| Prefix | empty | With a prefix set, none of CueSync's commands reach the desk while CueSync reports every one of them sent. The prefix is prepended to every OSC address, so this is total, not partial. |
| Port | matches the output's port (default 8000) | Nothing arrives. |
| Page / Fader / Key names | leave at Page / Fader / Key | CueSync addresses executor faders and keys as /Page<n>/Fader<id> and /Page<n>/Key<id>. Renaming these columns breaks fader and key moves; typed commands (Go, Off, levels) keep working, so the failure looks partial and random. |
| Fader Range | 100 | CueSync sends fader levels as 0–100. A different range scales every level wrongly rather than failing outright. |
If you want the console to report back to CueSync
The console's OSC output is a second, separate line on the desk — the table above is about the line CueSync sends to. A grandMA3 2.5 desk reports one message per sequence event (Go+, Goto, Off, a level, and for a Go the cue it is on) plus the Grand Master; an older desk or console may report executor fader and key movements instead. CueSync reads both, for display only: Diagnostics → GrandMA3 Feedback shows the desk's live cue per sequence, and Look tiles turn LIVE while the desk reports them active. On a 2.5 desk an Executor Look needs the Session Sync bridge, because the desk's messages name the sequence, not the executor, and the bridge tells CueSync which executor holds it; without the bridge the Look stays SENT and CueSync says so rather than guessing. CueSync never acts on these messages — nothing fires, advances or releases because one arrived — because the desk repeats CueSync's own commands on this line. Other grandMA3 Looks (a preset or command Look) read SENT.
| Setting | Required | What goes wrong otherwise |
|---|---|---|
| Enable Output + a destination pointing at the CueSync machine's OSC input port | on | No feedback at all. Set CueSync's port first: Settings → Advanced ships it at 0, meaning the listener is off; turn on Allow other devices on the network if the console is a different machine. |
| Send + Send Command | both on | The bridge plugin's SendOSC is refused with Illegal property unless the line has Send Command on. The bridge row then stays "not detected" and the console's history fills with red Illegal property: SendOSC 1 … lines. |
| Port on the OUT line, when the desk and CueSync are one computer | different from the input line's port | A line's port is also the port it listens on. Use two lines: one that only sends to CueSync's listener (loopback, e.g. 9001, Receive off) and a second that only receives commands on 8000 (Send off). |
| Prefix on the OUT line | empty | A prefix makes every message arrive under that prefix, which CueSync does not recognise. |
| Page / Fader / Key names on the OUT line | leave at Page / Fader / Key | For the executor form: renaming these means CueSync sees the traffic and can parse none of it. (A 2.5 desk's sequence events carry no such names.) |
This lane is advisory only — it never gates or delays a cue, so a mis-set OUT line costs you visibility, never control. Diagnostics → GrandMA3 Feedback (turn the Diagnostics screen on in Settings → Advanced) shows what the desk last reported and how long ago; an age that keeps growing means nothing is arriving. On a 2.5 desk it also lists each sequence the desk has spoken about — its live cue (cleared by Off), the last verb, the master level and the executor the bridge put it on, or "no executor named".
If commands stop arriving, the console's Command Line History window is the fastest check — CueSync's commands appear there as OK: lines when they land. An empty history during a send means the message never reached the desk, which points at this table rather than at CueSync.
- Open File → Sync, Import & Export → Sync to GrandMA3…, pick the target sequence, review the diff.
- Click Send to grandMA3…, read the confirmation summary, and click Confirm send.
- On success, a note stays under the preview banner until you dismiss it: "✓ Sent N commands to GrandMA3 sequence S on <name> (<host>, UDP|TCP)." Over UDP it carries the caveat that the datagrams left this machine and nothing more. Failures, the read-back verdict and export results are notes of the same kind (amber when they carry a caveat), each with a Dismiss button. While a write runs the block reads "Writing to the desk: sequence S. Send is locked until this finishes.", and Send, Confirm send, Push everything and Push whole setlist… are disabled ("A write to the desk is running"). After a failed send the button reads Send again….
The merge never re-stores existing cues. On a re-push, cues already on the desk are only relabelled or retimed — the looks your lighting designer stored into them survive untouched. Only genuinely new cues are stored, and those capture whatever is in the desk's programmer: the merge confirm says so — clear the programmer on the desk first. If a send fails partway, CueSync tells you exactly where it stopped and keeps its sync baseline as it was, so the next push re-sends the whole plan.
A first push names what it will overwrite. When the bridge has already reported cues in the sequence you are about to first-push into, the confirm shows, in red, "This first push will Store /Overwrite N cue(s) that sequence S already holds on the desk: 1, 2, 3 …" and offers Adopt the console's cues instead (when the read-back is usable). A line under the Send button says "Stores over N cue(s) the desk already holds — you will be asked to confirm which." The send itself refuses an overwrite the confirm did not name. Push everything names its overwrites and the desk cues it leaves behind, and the macro export warns beside its button; in the setlist pane a song whose slot is populated is skipped when slots are chosen and rows say "OVERWRITES N cue(s) the desk holds".
CueSync checks the desk after a push. Shortly after a push, whatever the transport, CueSync compares the bridge's read-back with what it recorded. If the desk lacks cues, CueSync takes them out of its record ("the next sync sends them again") and raises a sticky error: "GrandMA3 sequence S on the desk does not hold N cue(s) CueSync recorded as pushed (…)". If the sequence does not exist at all, the record is removed and the next push is a first push; the message names the output card's Desk refusing UDP badge and the desk's OSC line as the usual causes.
2 · Read the console back (the bridge)
The bridge is a read-only Lua plugin that runs on the console and streams its cue list to CueSync over OSC — so the dialog can warn you when someone edited the sequence on the desk.
- Same computer as grandMA3 onPC: click Install on this computer. CueSync writes
cuesync_bridge.luaandcuesync_bridge.xmlinto onPC's own plugin folder and puts the console's import line on the clipboard — there is no folder to find and nothing to copy. A desk, or onPC on another machine: click Install bridge… and pick a folder or a USB stick. CueSync writes three files:cuesync_bridge.lua,cuesync_bridge.xml, andINSTALL.txtwith the exact console steps. - Turn CueSync's OSC input on first. Settings → Advanced → OSC Input Listener ships its Listen Port at 0, which means the listener is off — nothing the plugin sends is received until you set a port (9001 is the conventional choice). If the console is a different machine, also turn on Allow other devices on the network; the listener accepts this machine only by default. Leave Require signed messages off: a console cannot sign, so every bridge message would be refused.
- On the console: (for a desk) copy the files to a USB stick under
gma3_library/datapools/plugins/; (for onPC on this computer they are already there) set up an OSC line pointing at the CueSync machine (port = whatever you set in step 2, with Send and Send Command on — see the table above), import the plugin into a Plugin pool slot —Import Plugin 900 "cuesync_bridge" /NCis the line, and Install on this computer has already copied it — and tap it to start. - Back in CueSync, the bridge row turns green while the plugin's messages keep arriving. It goes amber when they stop (the plugin stopped or the desk went away), asks you to restart the plugin if CueSync restarted under it, and flags an outdated plugin — click Update bridge (or re-export with Install bridge…), tap the running plugin off on the console, paste the import line again on the slot the bridge is already in, and tap it on. The token stays the same, so nothing needs re-entering. When CueSync can hear the plugin but a setting is wrong, or cannot hear it at all — Send Command off, or Preferred IP not matching the network — the row shows a short checklist ("OSC input is off", "could not bind port N"), and the plugin itself prints "CueSync Bridge: the console refused SendOSC … Illegal property …" on the desk.
The plugin only ever sends — it contains no Store, Delete, Label, or Go calls. If the row reports mismatches, re-export the plugin from the machine you're syncing from. Text the desk or plugin sends back (rejection reasons, plugin errors, versions, Timecode object names) is shown without control, zero-width or direction-changing characters.
2b · Send the Timecode object too (over the network)
The cues travel as commands; the Timecode object that fires them used to travel on a stick. It no longer has to. With the bridge plugin 1.7.0 or newer running on the console (it reports the console's Timecode pool — read only; the plugin still contains no Store, Delete, Label or Go call), the dialog's Send over the network section sends the same Timecode file the USB export writes, over the connection Session Sync already uses:
- Send sequence + Timecode… — the whole song behind one confirm: the sequence's push (the merge, or a first push — every guard it already has), then the song's Timecode object into its pool slot, then the console's own report of both. It stops at the first step that did not land and says which. The Timecode is written after the push because its events Goto the cue numbers the push just stored.
- Send Timecode only… — the object alone, for a re-time when the cues are already on the desk.
- Several lanes ticked — the lanes' Timecode object is one object with a Track for each lane: every lane on its own sequence, all started by the one clock. Send lanes + Timecode… pushes the ticked lanes to their sequences (stopping at the first failure) and then sends that one object into a pool slot of its own, with the console's report of both; Send Timecode object only… sends just the object. CueSync picks the slot (never a lane's own, so sending a single lane later does not replace it) and keeps it — sending again replaces the same object. To choose the slot yourself, type it in the card's Pool slot field and press Set (a slot another song or lane already holds is refused, and so is one outside 1–9999); Auto hands the choice back. A song's card has the same field.
- In the Whole setlist pane, Send setlist + Timecode… does it for every song: one object per song, in its own pool slot (the song's sequence number unless you set another), on the song's own clock — the exact objects the setlist auto-arm starts. A song with nothing timed to send is named and left out; the others go.
How it is kept safe. The file is carried to the console's own disk in small numbered pieces; the console imports it only when the whole file arrived — it checks the size and a checksum itself, so a lost or reordered UDP datagram makes it refuse, never import half a show. Then CueSync asks the plugin what the console's Timecode pool holds and says what it found: on the console, every event pointing at a cue it holds (green); on the console, but N events point at a cue the desk does not have (push the sequence first); not what was sent; no object in the slot; or sent — not confirmed, when no plugin 1.7.0 answered. An import onto an occupied slot replaces the object without asking — so before sending, CueSync compares the slot with what it last put there: an object it did not send, or one that was edited on the desk since, is shown in red and the button reads Replace and send. With no readable pool (no plugin) it says it cannot see the slot. Nothing is armed: arming stays the console's job, or the setlist auto-arm's.
If the console cannot be reached or refuses a line, the message says at which line it stopped and that the slot was not changed. Export Timecode XML (USB)… stays as the lane for a console CueSync cannot reach. Checked on onPC 2.5.0.3 and 2.5.1.0; not yet on a physical console — see desk verification 4x.
3 · Carry it on a USB stick (macro or Timecode XML)
No network to the desk? Two file exports, side by side in the dialog:
- Export MA3 macro (USB)… — writes
CueSync Export <seq> - <track>.xml, an MA3 macro pool containing the same commands as a push, plus a README of the same base name. The README opens with "RUNNING THIS MACRO OVERWRITES" and says to import into an empty slot. On the desk:Import Macro <slot> "CueSync Export <seq> - <track>" /NCand run it once (the bare form raises a confirmation dialog that blocks the console). A macro is always a full push (no merge/diff semantics), so it is only offered for the scratch range — or anywhere, once Allow writing to any grandMA3 sequence is on. For a sequence you adopted from the desk, use Sync instead: a macro would Store over every cue the LD programmed, the ones you never touched included. When CueSync has no record of the sequence yet, it remembers what the macro would write, and the next Sync asks whether it was run — yes makes that its record, so the push merges instead of re-storing every cue. - Export Timecode XML (USB)… — writes a native MA3 Timecode object named
CueSync TC <seq> - <track>.xml, with a README of the same base name (thegma3_library/datapools/timecodes/format the MA3 ecosystem exchanges). Exporting another track does not overwrite it, a re-export says it replaced a file, and the setlist README lists exactly its own files and names olderCueSync TCfiles left in the folder. Import it into an empty pool slot (/NCon an occupied one replaces it without asking — checked on a desk, hand edits included). The file is written for the grandMA3 release the bridge reports — 2.5.x by default — because the Timecode format differs between 2.4 and 2.5 and a file for the wrong release imports cleanly and fires nothing; see grandMA3 §6. Cues on the same instant, and cues clamped to 0:00, are reported and not nudged.
A Timecode object fires every event when the clock reaches it, so the file carries events only for cues CueSync fires from timecode. Each event sits at the cue's fire time with its trigger offsets applied (the cue's own offset frames plus the show-wide offset in Settings → Timecode, at the project frame rate). GO, standby and follow / auto-continue cues get no event. If they had one, the desk would fire them at their place on the timeline whether or not the stage was ready. They are still cues in the sequence, with the LD's looks stored in them, and the numbers of the cues after them do not change. Fire them from the console. The export message says how many cues were left off the timecode, and the README repeats it. A Part whose cues are all GO or follow cues has nothing to put on a clock and is refused by name.
Which clock the event times are on. Every Timecode file says so in its README, and the two kinds differ:
- The Timecode XML from this dialog and the Departments file are meant to be assigned to a TC slot and chase the show's timecode. Their event times are on the house clock: the show position plus the venue origin (Settings → Timecode). That is the timecode CueSync chases and what its own timecode output sends. At a venue whose clock starts at 01:00:00:00, a cue 4 minutes into the show has its event at 01:04:00. Started on its own clock from zero, such an object waits at least an hour before its first event.
- The Setlist Book writes one file per song, and CueSync's setlist auto-arm starts each with Go+. Those times count from the song's own start, so every song begins at 0:00 inside its own object. They are not the house clock; don't slave them to CueSync's timecode.
At 23.976 fps and 29.97 fps non-drop, a timecode label runs 3.6 seconds an hour behind real time. CueSync writes event times as real seconds, the way it counts them itself. Check one event late in the show against the desk before relying on it.
Both file lanes write the cue numbers CueSync's last sync put on that sequence, not a fresh 1…N count. That matters because a Timecode object addresses cues rather than creating them: after a merge sync has given an inserted cue a decimal number like 1.5, an export numbered 1, 2, 3, 4 would Goto the neighbouring cue — or a cue that doesn't exist — and the file would still import cleanly. So export after you sync, not before, and don't renumber CueSync's scratch sequences by hand on the desk.
The reverse also works from a file: Import Timecode XML… reads a Timecode XML the desk itself exported (Export Timecode X) and creates a CueSync Theatre track from it — cue numbers, names, and trig positions, no actions. Only Goto events become cues. Events with another token (Go+, Flash and so on) are not imported. Events with no readable time are skipped. Both are counted in the import message. If two events aim at the same cue number, the earlier one keeps it and the later one is numbered by position, with a note on that cue. The import works out which clock the file is on from its first event. If that event is at or after this show's venue origin, the file is on the house clock, and the origin is taken off every event, so the cues land where the house clock fires them. Otherwise the times are used as written, counted from the file's own start, which is how a Setlist Book song comes back. The import message says which it assumed. A house-clock file brought into a show with no venue origin set lands an hour or more into the Part, and the message says how to fix that. The importer also reads the desk's own spelling of an event time (30m00.000, 20h00m00.000), and a house-clock file whose events cross midnight comes in at the show's own times. A file with many duplicated events imports promptly, with the same numbers.
4 · Pull from the console
When the bridge has a usable snapshot of the target sequence, two pull actions appear:
- Adopt console as baseline — records the desk's current cue list as the sync baseline, so the next diff honestly reflects desk-side edits instead of fighting them. Use it after the LD renumbers or retimes cues on the console.
- Import as Theatre track — creates a new CueSync show track from the console's cue structure (numbers, names, trig-time positions and fades — no actions), fully undoable. Build on the desk, pull into CueSync, run with CueSync's transport.
Common tasks
- First push of a new show — Connect the GrandMA3 (UDP) output, open the dialog, pick sequence 900 (or any scratch-range number), review the "First push" diff, Send, Confirm.
- Re-sync after editing in CueSync — Open the dialog again; the diff shows only what changed. Send. Existing desk cues keep their looks.
- Catch desk-side edits — Install the bridge once. If the desk's sequence drifts from the last sync, the dialog warns you before you push and offers Adopt console as baseline.
- Rescue a console-only show into CueSync — Start the bridge, open the dialog, pick the sequence (Browse console lists what the desk holds), click Import as Theatre track.
- Sync with the show the LD already programmed — Start the bridge, pick the Theatre track you'll sync (with as many desk cues as the sequence holds — Import as Theatre track gives you one), type that sequence's number, click Adopt console as baseline to record what the desk holds and pair it with that track, then sync as normal. Every push after that is a merge: cues you have not changed are never re-Stored, so the looks programmed in them are untouched. When you adopt, have CueSync's GrandMA3 output connected to that desk and to no other: a baseline CueSync cannot tie to one console opens the sequence on no desk, and the dialog asks you to adopt again.
Tips & gotchas
- Everything is blocked during a live show. Syncing is an authoring-time operation; stop the show first. The push lane additionally requires CueSync Theatre or Production and a connected GrandMA3 output (UDP or TCP).
- Additive by default. Cues you deleted in CueSync stay on the console (listed in the diff) unless you explicitly enable "Delete removed cues" — deletes skip the console's confirmation pop-up, so review the diff before sending. They stay listed on every later diff too, and CueSync keeps their numbers reserved so a cue you add later can never be stored on top of one.
- Moving a cue past its neighbour needs a renumber. A cue keeps its console number for as long as it exists — that's what protects the looks stored in it. Drag one to a new time and the desk's numbering would no longer run in show order, so CueSync refuses the merge and names Push everything — a full re-Store of every cue in the sequence, which overwrites what's programmed in them; do it while the desk is still yours to renumber, not after the LD has worked in it. The Push everything (overwrites) button appears when the show was last synced to a different console, so for a reorder the practical route is to move the cue back, or to renumber on a fresh scratch sequence.
- Adopt needs a non-empty read-back. If the bridge reports the sequence as empty, "Adopt console as baseline" refuses: an empty read can't tell "this sequence has no cues" apart from "the plugin couldn't read the sequence pool", and recording the wrong one would make the next sync re-Store the whole cue list. Check the sequence on the desk and sync as a first push instead.
- The scratch-range sequences are yours. 900–999 out of the box; treat them as CueSync's workspace on the desk. Program looks into the cues there, but let CueSync own the cue numbering and timing. To sync with a sequence outside that range — the LD's own show — adopt it as a baseline first; see Target sequence above.
- The bridge reads the whole sequence pool. The console plugin reports every sequence the desk holds, which is what lets Browse console and Import as Theatre track see a show CueSync did not write. If your MA3 version will not list the pool the plugin says so on the console feedback line and falls back to watching the scratch range. Install the plugin again (Update bridge) and re-import it after changing anything in Settings → Advanced → grandMA3 Sync — the settings are baked in at install time.
- CueSync will not refuse an address your desk accepts. Executor pages, executor and sequence numbers, macro/group/effect/preset numbers, cue numbers, timecode slots and speed masters are all checked before a command leaves the app, and most ceilings are editable in Settings → Advanced → grandMA3 Address Limits (raise one if your rig numbers past it); the page and cue ceilings are the desk's own limits and can only be lowered.
- grandMA2 has the same card. Settings → Advanced → grandMA2 Address Limits. Its executor default is 90; if your desk addresses the button rows above the faders (commonly 101+), raise it there.
- A partial send is recoverable. "Send FAILED at … — X/Y sent" means the console sequence may be half-written: check it, fix the connection, and push again. CueSync keeps its record as it was, so the next push re-sends the whole plan; the desk's merge never re-stores a cue that is already there.
- The bridge is optional. Pushing and macro export work without it; the bridge only adds read-back (drift warnings and the pull lanes).
Related
- GrandMA3 — Connecting the console, the action verbs, Looks, Theatre firing, panic and the full workflow
- Network Outputs — Add the GrandMA3 (UDP) connection the push lane uses
- Looks — The looks your cues fire, grandMA3 included
- Show Editor — Build the Theatre cue list you're syncing
- Timecode — Run the synced show against a shared clock
Looking for a quick fix?
The Help Center has short task-focused articles and a support team that responds within 24 hours.