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.
Graded on onPC 2.4.2.2. The push command set, cue deletion, follow-time pushes, and the macro / Timecode XML / bridge-plugin imports were checked against grandMA3 onPC 2.4.2.2, reading the console's own Command Line History. onPC is console software, not a physical desk driving fixtures, and no other software version has been checked. 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 touches the console on open.
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. The Install bridge… button exports the console plugin (see below).
Target sequence — A segmented control choosing which console sequence to write into: 900 / 950 / 999 (deliberately high "scratch range" numbers so you never collide with the LD's programming).
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."
Options — Two safety toggles, both off by default: Delete removed cues on console (off = additive-only; cues you removed in CueSync are listed but kept on the desk) and Push follow times (auto-advance) (cues after the first get an MA3 Time trigger 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).
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 verified snapshot of the selected sequence — Adopt console as baseline and Import as Theatre track (the network pull lanes).
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 — current consoles don't open an OSC-over-TCP listener, so a TCP output may never connect. On the console's OSC line, enable both Enable Input and Receive Command — without Receive Command the desk silently ignores every command CueSync sends.
- Open File → Sync to GrandMA3…, pick the target sequence, review the diff.
- Click Send to GrandMA3…, read the confirmation summary, and click Confirm send.
- On success: "✓ Sent N commands to GrandMA3 sequence 900."
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. If a send fails partway, CueSync tells you exactly where it stopped, keeps its sync baseline, and the next push re-plans just the unsent changes.
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.
- Click Install bridge… and pick a folder. CueSync writes three files:
cuesync_bridge.lua,cuesync_bridge.xml, andINSTALL.txtwith the exact console steps. - On the console: copy the files to a USB stick under
gma3_library/datapools/plugins/, set up an OSC line pointing at the CueSync machine (port = CueSync's OSC input, default 9001), import the plugin into a Plugin pool slot, and tap it to start. - Back in CueSync, the bridge row turns green when messages arrive.
The plugin only ever sends — it contains no Store, Delete, Label, or Go calls. Messages carry a per-machine session token; if the row reports token mismatches, re-export the plugin from the machine you're syncing from.
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.xml, an MA3 macro pool containing the same commands as a push, plus a README with the import command. On the desk:Import Macro "CueSync Export"and run it. A macro is always a full push (no merge/diff semantics). - Export Timecode XML (USB)… — writes a native MA3 Timecode object (the
gma3_library/datapools/timecodes/format the MA3 ecosystem exchanges). Import it on the desk to get a timecode show whose events Goto your cues at their trig positions.
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.
4 · Pull from the console
When the bridge has a verified 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 — no actions), fully undoable. This replaces the old export-timecode-to-USB round trip: 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, 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, click Import as Theatre track.
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 asks you to Push everything instead. That re-Stores 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.
- Adopt needs a non-empty read-back. If the bridge reports the sequence as empty, "Adopt console as baseline" refuses: an empty dump 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 (900/950/999) are yours. Treat them as CueSync's workspace on the desk. Program looks into the cues there, but let CueSync own the cue numbering and timing.
- 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 — the diff re-plans only what's missing.
- The bridge is optional. Pushing and macro export work without it; the bridge only adds read-back (drift warnings and the pull lanes).
Related
- Network Outputs — Add the GrandMA3 (UDP) connection the push lane uses
- Looks & Scenes — The GMA3 Stage Brain looks your cues fire
- 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.