A timecode-chased show caller. Feed it a cue sheet, feed it timecode, and it puts the right note on screen at the right moment and calls your spots out loud so everyone hears the same standby and the same GO.
Three things go in. One show comes out.
.csv or .xlsx · every cue is a timecode, a label, and the note to call.
MTC over USB MIDI, LTC over any audio input, or the built-in test clock.
The current note fills the screen and a voice calls every standby and GO, exactly on the stamp.
It was built for followspot calling, but it reads whatever you put in the Notes column: spot pickups, scenic moves, pyro standbys, mic handoffs, anything that happens on a timecode stamp. If the show jumps, rewinds, or the console restarts, it re-finds its place instantly. No stale GOs, no double calls.
The clock is the truth. Green clock means signal is locked and cues will fire. Red clock means signal is gone, and the clock freezes on the last frame it heard. If it's red mid-show, check your timecode feed, not the app.
Everything is built to be read from across a dark FOH riser.
The clock. Incoming timecode, frame-accurate. Green = locked, red = signal lost. Next to it: the source (MTC / LTC / TEST) and detected frame rate.
Signal pill + source. LOCKED · TEST when signal is good, red when it's lost, with the source and detected fps underneath. The CURRENT SONG readout sits just left of it.
The current cue. Label, stamp, and level in the eyebrow; the note fills the panel at reading-glasses size. The previous cue sits grayed above.
LD notes. The cyan line. Display-only, never spoken. Private notes from the sheet's LD NOTES column.
Next cue + countdown. What's coming and when. The orange bar drains and hits empty exactly on the stamp; it turns red in the last 5 seconds.
Set list. Tonight's show order. The active song lights up, played songs dim. Click a song to jump there in test mode.
Cue list. Every cue in setlist order with gold song separators. The live cue highlights and the list follows the show.
F fullscreen · S settings · Esc closes any drawer. That's all of them.
Use the VIP Tools login you were given. Your account is granted access to CueCaller specifically. No login? Ask Jake.
Drop a cue sheet on the landing screen, pull one from Sessions, or hit Test and poke around with the demo show first.
Open Sessions, set the artist filter to The Atlas Echo, and load VIP DEMO SHOW · Manual Example. Hit Test in the header. The demo show starts ten seconds later and every screenshot in this manual is exactly what you'll see. Click cues in the right-hand list to jump around.
One spreadsheet drives the whole show. Start from the template; the parser does the rest.
Hit Template in the header for the styled .xlsx (a plain .csv link sits underneath). The sheet has labeled sections; the app reads them all. You can also write your own sheet from scratch: the only thing the parser truly needs is a header row with Timecode, Label, Notes. Everything else is optional and just makes the tool smarter.
Or skip files entirely: load straight from a Google Sheet link and re-pull updates with one button mid-rehearsal. That flow is in Load & save.
| Section | What it does in the app |
|---|---|
| [ 01 ] SHOW INFORMATION | Artist, show, venue, city, date, fps, console, LD, SM contact. Shows in the footer and the header eyebrow, and powers {tokens} (below). |
| [ 02 ] REVISION | Rev label and notes. The loaded rev shows in the footer so nobody runs an old sheet without knowing. |
| [ 03 ] SPOT MEETING NOTES | Your pre-show speech. The Run Spot Meeting button reads it aloud once and shows it on a branded overlay. |
| [ 03B ] SHORT SPOT MEETING | Optional condensed version. If present, a Short Meeting button appears next to the full one. |
| [ SET LIST ] | Optional. Tonight's show order, one song per row. Powers the set list panel. Names match the song banners in the cue table. |
| [ 04 ] CUE SHEET | The cue table itself. Six columns, covered next. |
Anywhere in the meeting or in cue notes, write {artist} {show} {venue} {city} {date} {fps} {rev} {console} {ld} {sm} and the app fills them from the show info block at load time.
Write the meeting once: "Tonight we are at {venue} in {city}." Update two cells per city and the speech rewrites itself.
Want a known-good reference? Download the demo show .csv used for every screenshot here. Open it next to this page and the whole format explains itself.
Timecode and Notes do the heavy lifting. The other four sharpen the call.
| Column | Behavior | Voice / screen |
|---|---|---|
| TIMECODE | HH:MM:SS:FF. The moment the cue fires. Rows without a valid stamp are ignored, so notes-to-self rows are safe. | Drives GO |
| LABEL | Short name. Shows in the eyebrow and the cue list. Never spoken. | Shown |
| NOTES | The call itself. Spoken in the standby and shown full-screen. Write it the way you'd say it: "Spot 1 to the lead singer, center stage". | Spoken Shown |
| OUT TIME | Optional second stamp. At that moment the voice calls "Spot N fade out now" for the spots featured in this cue, plus a red on-screen toast. | Spoken |
| LEVEL | Optional intensity. Appended to the standby ("…at Half") and shown as a gold @ HALF chip in the eyebrow. | Spoken Chip |
| LD NOTES | Private line for the operator. Cyan text under the call. Never read aloud. | LD only |
At the standby lead (default 10 s before the stamp):
"Standby Spots. Spot 2 to the guitarist on the SR riser for a solo, at Half."
"Spots, GO!"
"Spot 2 fade out now."
The prefix ("Spots") is yours to change in Settings. Blank prefix = the note is read exactly as written, no wrapper.
The cue table is a song library. The set list is tonight's running order.
Inside the cue table, a row starting with ▼ is a song banner: ▼ Neon Skyline · offset 01:00:00:00. Every cue below it belongs to that song until the next banner. Banners give you the gold separators in the cue list, the CURRENT SONG readout in the header, and the names the set list matches against.
Each song lives on its own timecode island (its offset), so songs can sit in the sheet in any order. Cues fire by timecode no matter how the document is arranged, and the cue list still displays in document order.
One song name per row, in tonight's order. The set list panel numbers them, lights up the one you're in, dims the ones you've played, and shows each song's first stamp and cue count. Names match loosely (case and punctuation don't matter), and an entry with no matching banner shows no matching song in sheet instead of breaking, so a typo is loud during prep instead of quiet during the show.
No SET LIST section? The panel falls back to the order songs appear in the sheet.
Reorder the rows in [ SET LIST ], reload the sheet (or hit ↻ Sheet if it's a Google Sheet), done. The cue table never moves. That's the point: the library holds every song you've ever programmed; the set list picks tonight's show.
Click any song in the set list, or any cue in the cue list, and the test clock jumps straight there. Fastest way to rehearse one transition over and over.
Some things deserve a heads-up, not a standby and a GO.
Wrap a cue's NOTES cell in asterisks (or underscores) and it becomes a plain note:
*Confetti drop on the downbeat · no pickup*
A plain note is still automatic. It is spoken once, exactly at its timecode, and it gets no standby, no GO, and no fade-out. On screen it renders in italic gold with a [ NOTE ] eyebrow so it never reads as a pickup.
Use it for confetti and pyro warnings, scenic moves, guest walk-ons, anything the room should hear about without arming an operator.
Real formatting doesn't survive the trip. CSV files, Google Sheet links, and saved sessions all carry plain text only, so an italic cell would silently lose its meaning. The *…* marker rides through every load path unchanged. The app strips the stars before anyone sees or hears them.
Every cue gets a standby at the lead time and a GO on the stamp. The engine guarantees the GO always wins.
Calls queue instead of clipping each other. Three tiers: GO outranks fade-outs outranks standbys. A higher tier interrupts a lower one mid-sentence and fires exactly on its stamp; the interrupted call replays right after, in priority order. A standby whose cue has already fired is dropped instead of played late. Jump the timecode and the whole queue clears. The result: a GO has never once landed late because something else was talking.
Operators need a beat to react. GO pre fires the spoken GO early by up to 3 seconds so the pickup lands on the stamp instead of the word. Start at 0, watch your ops for a song, and dial in what the crew actually needs.
The header's Run Spot Meeting reads your [ 03 ] section aloud once and shows it on an overlay; cue calling pauses while it plays. If the sheet has a [ 03B ] short version, a Short Meeting button appears too. Run it at half-hour, run the short one at five, your call.
Rewinds, skips, and console restarts can't produce stale calls. The engine re-arms per cue and only speaks calls that are still ahead of the clock.
Any system voice works. Voices tagged · cloud need internet; for shows, pick one without the tag so the calls keep coming if the venue wifi dies. Much better offline voices can be installed in 2 minutes; see Offline.
Three sources. Arm one from the header; the clock follows whoever delivered signal last.
| Source | What it is | Field notes |
|---|---|---|
| MTC | MIDI Timecode over USB / a MIDI interface (Web MIDI). Reads quarter-frame and full-frame. | Chrome asks for MIDI permission the first time; allow it. Pick a specific device in Settings → Inputs if more than one is connected. |
| LTC | Audio timecode into any input: an interface, a mic line, a USB dongle. Decoded in the browser. | The decoder watches every channel of the input and locks onto the hottest one automatically, so a re-patch mid-show fixes itself. A per-channel meter lives in Settings → Inputs. |
| TEST | Internal free-running clock. No console, no cables. | Start TC and fps live in Settings [ 08 ]. While testing, click any cue or song to jump. The Test button always restarts from the start TC; arming MTC or LTC takes over from it. |
Auto-detected from the incoming signal: 24, 25, 29.97, 30. The detected rate shows under the clock. The sheet's fps field is the fallback before signal arrives.
Settings holds a global offset added to incoming TC before cue lookup. Console runs an hour ahead of the sheet? Set -01:00:00:00 and leave the sheet alone.
Open Settings → Inputs and read the meter. Meter dead on every channel: wrong device selected, or Chrome / macOS denied the mic permission. Meter moving but no lock: signal or level problem in the feed. That order, every time.
Three ways in. One cloud store so the same show follows you to any machine.
Load Sheet or drag a .csv / .xlsx anywhere onto the page. The classic way.
Paste a share link in Sessions → Load from Sheet. Edits in the doc? Hit ↻ Sheet in the header and the latest rows pull in live.
One click from the cloud store: cues, show info, meeting, and every setting restore together on any logged-in machine.
Update current overwrites the session you loaded, same name, same slot. Save as new makes a fresh one. Loading a file or a new sheet link unbinds you, so you can't accidentally overwrite last night's show with today's experiment.
Save while a Google Sheet is loaded and the session remembers its link (marked ↗ SHEET-LINKED in the list). Load it anywhere and ↻ Sheet still re-pulls the latest rows.
The link must be shared as Anyone with the link · Viewer. Same column layout as the template. If a sheet link ever loads weird (a few cues instead of all of them), load the saved session or the .xlsx instead; both bypass Google's CSV export quirks.
Cues, song banners, set list, show info, both meetings, and all settings: voice, rate, volume, prefix, leads, GO pre, hold, offset, fps, text style. A loaded session makes any machine yours.
One show file, a department per lane — spots, lighting, audio, video, lasers, pyro, automation, scenic, management, notes. Each seat picks its lane and hears only its own calls.
When a show has more than one department, a Department dropdown appears at the top of the screen. Pick a lane and the machine swaps the cue list and re-points the voice caller at that lane — so the spot op hears spot calls and the pyro tech hears pyro calls off the same file. A Now tracking banner confirms each switch.
The Production template ships 10 tabs, one per department. Every tab is an ordinary cue sheet, so load the workbook and each tab becomes a lane. Delete the tabs you don't need.
Prefer one tab? Add a Department column and tag each cue with its lane. The app splits them into the same dropdown.
Lanes survive a reload, a saved session, and an exported offline file. The dropdown comes back with them.
Multi-department is a Production and Tour feature. On Operator, a show opens to its first tab only and there's no dropdown — one clean lane.
Departments work from a Google Sheet link too — but only when your tabs are named exactly like the template: Spots, Lighting, Audio, Video, Lasers, Pyro & SFX, Automation, Scenic, Management, Notes. Rename a tab and it drops off the Google link — a Google-only limit; an .xlsx file always reads every tab regardless of name. A future release adds Google sign-in for name-free reading.
Bake the loaded show into a single .html that runs from a USB stick.
With a show loaded, hit ⇩ Offline File in the header. You get one file, named after the show, with every cue, the meeting, and all your settings baked in. Copy it to the show laptop, double-click, done. No internet, no VIP login, no Google. LTC, MTC, and the voice all work from the local file; Chrome asks for mic / MIDI permission once.
Cues change? Load the new sheet in the live tool and export a fresh file. Re-export anytime.
The offline file is run-only: load / sessions / template / export are stripped. Recipients run this show; they can't wander off into your store.
Fully offline, the display fonts fall back to system fonts. Cosmetic only; nothing functional changes.
The calls use your computer's speech engine. Voices tagged · cloud in the picker need internet; everything else runs with the network unplugged. The stock offline voices are robotic; the premium ones are not, and they're free:
System Settings → Accessibility → Spoken Content → System Voice → Manage Voices… Download a couple of (Premium) or (Enhanced) voices (Ava, Tom, Evan, the Siri set). Quit and reopen Chrome, then pick the voice in Settings and audition with ▶ Test call.
Settings → Time & language → Speech → Manage voices → Add voices. Install the "(Natural)" ones. Restart Chrome, pick the voice, test.
Press S. Everything persists per machine, and saved sessions carry it all.
| Setting | What it does |
|---|---|
| [ 01 ] Note hold | Until next cue (default) keeps a note up until the next stamp takes over, or Timed clears it after 1–120 s. |
| [ 02–04 ] Text | Note size 40–260%, any color, ten fonts, optional UPPERCASE. Make it readable from the spot chair, not from your desk. |
| [ 04b ] LD notes | Color and size for the cyan LD line, separate from the main note. |
| [ 04c ] Panel layout | Unlock, then drag the grips above and below the Current panel to resize Previous / Current / Next. Locks back for the show; sizes travel with the offline file. |
| Flash on new cue | The note panel flashes when a cue fires. Catches the corner of your eye when you're heads-down. |
| [ 07 ] Inputs | Pick a specific MIDI device and audio input; live per-channel LTC meter. |
| [ 08 ] Test clock | Start TC and frame rate for rehearsal mode. |
Load the show: session, sheet link, file, or the offline file on the show laptop.
Check the footer: right show, right rev, right cue count. Two seconds that save a night.
Arm MTC or LTC, roll timecode from the console, confirm the clock goes green and the fps reads right.
Voice check: ▶ Test call at house volume. Offline voice (no · cloud tag), rate and volume where the crew likes them.
Run the spot meeting from the overlay at the half hour.
F for fullscreen. Watch the first standby land. You're running.
| Symptom | Fix, in order |
|---|---|
| Clock red, no lock | Source armed? For LTC: Settings → Inputs meter. Dead meter = device / mic permission (Chrome site permission, then macOS → Privacy → Microphone → Chrome). Moving meter, no lock = check the feed level and the line itself. |
| Clock green, wrong cues | Wrong rev loaded, or the console clock disagrees with the sheet: set the offset in Settings [ 06 ] instead of re-stamping 60 rows mid-show. |
| No voice | Settings [ 05 ]: "Call cues out loud" on? Volume up? A · cloud voice with no internet is silent: pick an offline voice. Meeting playing also pauses cue calls until it ends. |
| Google Sheet loads few cues | Known Google export quirk on odd header cells. Load the saved session or the .xlsx file; flag the sheet to Jake after the show. |
| Test clock won't stop | By design the Test button restarts the run. Arm MTC / LTC to take over, or reload the page. |
| Browser tab hidden | Keep the tab visible on the show machine. Background tabs get throttled by Chrome; the decoders survive it, but the display is the whole point. Fullscreen it. |
Rehearse once in TEST before you ever plug into a console. Five minutes clicking through your cue list catches a bad stamp, a missing star, or a weird call long before soundcheck does.
F fullscreen · S settings · Esc close drawers
TIMECODE · LABEL · NOTES · OUT TIME · LEVEL · LD NOTES
*text* = spoken once at the stamp · no standby · no GO
{artist} {show} {venue} {city} {date} {fps} {rev} {console} {ld} {sm}
▼ Song Name · offset 01:00:00:00