Endless Cues public alpha

Public alpha · built to run a puppet show at La MaMa

Show control with an open show file.

Open-source show control for live theatre and events. QLab’s cue list, a sound designer’s tools, OSC to the rest of the rig, and a show you can open in a text editor.

Free and open source (AGPL-3.0). Nothing to download yet. Built for macOS, Windows and Linux; so far run only on macOS.

running standing by, holding panic, broken The demo show in Show mode, drawn in HTML from the app’s own styles.

01The cue list

GO is sacred.

If you know QLab you know this. One GO button, a playhead, and a list of cues that run in order. Everything around the button exists so that the right thing happens when you press it, and as little as possible happens when you press it by mistake.

Cue types today

  • ▤Group
  • ♪Audio
  • ◢Fade
  • ■Stop
  • ▶Start
  • ❙❙Pause
  • ⤴Devamp
  • ⤓Load
  • ↪GoTo
  • ◉Arm
  • ◌Disarm
  • ◷Wait
  • ✎Memo
  • ⇄Network
  • ☀Light
  • ⎚Mix
  • ⤳Jump
GO Space
Fires the cue at the playhead and moves the playhead on. A second GO within 0.3 seconds is ignored, and you can change that window.
Standing by
The next cue’s number, name and notes sit beside the button, big enough to read without leaning in.
Waits and continues
Pre-wait and post-wait on any cue. Auto-continue fires the next cue when this one starts; auto-follow fires it when this one finishes.
Groups
A group fires its cues together on one GO. Give it “fade & stop others” and it is a scene change: everything else fades out as the group comes in.
Arm and disarm
Cut a cue for tonight without deleting it. The GO skips it, and the standby display says so before you press.
Panic Esc
Fades everything out. Press it again and everything stops dead. Pause all, Resume all and Reset are next to it.
Show mode
Locks editing for the performance. Nobody renames cue 14 at the half.
Saving ⌘S
Nothing is kept until you save. A change is heard and seen at once, and each changed control is marked in yellow with its saved value and a way to put it back. A knob brushed during a run does not become the show. Unsaved changes survive a crash.
A screenshot of Endless Cues in Edit mode with the demo show running. The title bar says 2 unsaved beside a Save button. Above the cue list is a toolbar with one button per cue type. Cue 3, Thunder, is standing by, and the inspector below the waveform shows its number, name, notes, colour and continue mode. In the mixer the Music knob is marked as changed.
A screenshot of the app in Edit mode. The title bar counts 2 unsaved; in the mixer the Music knob carries a yellow dot and an arrow that puts it back.

02Sound

A sound designer’s tools.

A show does not run to the second. A change runs long, an actor takes the pause, and the music has to wait without sounding like it is waiting. These tools come from how DJs and Ableton users deal with that. Here they are part of the cue list.

Not yet: microphones and live ducking in the mixer. They are on the list further down.

Holds
Mark loop regions on a track. When the scene runs long, hold the track in one. It loops sample-exact until you let go, then plays on as if nothing happened.
Quantised GO
Set a cue to wait for the next beat or the next bar of the music that is playing. You press GO on the line; the cue lands in time.
Jumps
A Jump cue moves a playing track to another place in itself: a cut, a crossfade, or a bar-long blend with a bass swap, the way a DJ would do it.
Mark a place
Click a playing track’s waveform and a marker stays there. Skip jumps to it. Fade to crossfades to it inside the track. For the rehearsal where the director says “take it from the bridge.”
Voice-band ducks
A fade can dip only the band a voice sits in. The music stays full under the line and the words still read.
Knobs
One knob per bus with its meter around it, a master fader, and a safety limiter on the output. Turn one while the sound plays; it is yours to keep or put back.

03Network

It talks to the rest of the rig.

Everything Endless Cues says to other equipment, and hears from it, is OSC over the network. You name each piece of equipment once. Cues refer to it by name, so moving to another venue is one edit.

A screenshot of the Network settings. One patch, Lighting desk (example), at 127.0.0.1 port 8000 over UDP, with its status and a Test button. Below it, Incoming OSC on port 53000, and the Monitor listing a message sent to the desk: /eos/cue/1/2/fire.
A screenshot of Settings ▸ Network: a patch with its status and Test button, the incoming port, and the monitor.
Patches
One per piece of equipment, over UDP or TCP. Each shows whether it is sending, connected or answering, and has a Test button.
Monitor
Everything sent and received, live, with the time, who it was for, and why it failed if it did.
Device templates
Pick the command from a list instead of typing an address: ETC Eos, grandMA3, X32 and M32, X Air, QLab, REAPER, Resolume. They are written from the published OSC documentation and have not yet been checked against the hardware.
Faded values
A Network cue can send a value that moves over time: a submaster up over ten seconds, a channel fader down over three.
Triggers
Any cue can be fired by an incoming OSC message. Press Learn, send the message, done.
Feedback
A module tells other systems what the show is doing: each GO, each cue starting and stopping, what is standing by.

Modules, switched on per show

OSC control

Answers to the well-known part of QLab’s addresses on port 53000, so a Bitfocus Companion or Stream Deck page made for QLab can press GO here.

/go  /panic  /cue/{number}/start

Lighting desk

Light cues fire cues on ETC Eos-family desks. The app shows whether the desk is answering, so you find out at the check and not at the top of the show.

/eos/cue/1/2/fire

Web remote

The cue list and a GO button in the browser of any phone or tablet on the show network. There is no app to install.

the show computer port 8137

Show feedback

Sends what the show is doing to a patch, for a tally light, a stage manager’s display or another computer.

/endlesscues/go  /endlesscues/playhead
Syx, a jointed tabletop puppet with fins at her head, arms and legs, painted in iridescent blue and orange, reaching upward as if swimming.

Where it came from

Endless Forms

a scifi puppetry myth for a post-human future

Endless Cues was built to run a puppet show. Endless Forms, by Endless Forms Puppetry, was created by Monica Lerch and Jeshua Bratman and had its world premiere at the La MaMa Puppet Festival in New York in November 2026.

It blends tabletop puppetry, shadow play, digital projection and electronic music, and follows Syx through a series of changes as she seeks a form always just beyond reach.

Partway through the production the show moved off QLab, and this is what replaced it. In the booth it was one operator and one cue list:

  • The show’s sound, every scene.
  • The lighting cues, called by the operator and fired on the desk over OSC.
  • Cues to the wireless LED props.
  • Music held in a loop when a scene ran long, and moved to its next section on the bar.

endlessformspuppetry.com

Syx seen from the side, mid-stroke, one arm trailing a long fin.
Syx. Photographs from the show’s own site.

04The show file

A show file you can read.

A show is a folder. In it, show.json is the whole cue list as plain, pretty-printed JSON with its keys in a fixed order, so a diff shows what changed and nothing else. Open it in a text editor. Put it in git. Send it to someone who does not have the app.

Demo.ecshow/show.jsonexcerpt
{
  "format": "endless-cues-show",
  "version": 1,
  "title": "Demo show",
  …
  "lists": [
    {
      "name": "Main",
      "cues": [
        …
        {
          "id": "c_28493eb8",
          "notes": "On “…and the sky answered.”",
          "type": "group",
          "number": "3",
          "name": "Thunder (rain ducks under it)",
          "color": "orange",
          "children": [
            …
            {
              "id": "c_6aa41695",
              "type": "fade",
              "name": "Rain dips",
              "target": "c_09dda5b8",
              "db": -10,
              "duration": 0.4,
              "relative": true
            },
            …
          ]
        }
      ]
    }
  ]
}

The folder

MyShow.ecshow/
show.jsonthe show, as you last saved it
media/the sound files, referred to by relative path
versions/one for every time you saved

A dry run, from a terminal

$ ec simulate Demo.ecshow 2 2from cue 2, two GOs
   0.00 s  GO 2 Scene 1 — the storm arrives
   0.00 s  ▶ Rain plays (media/rain.wav) at silence on effects, looping
   0.00 s  ◢ Rain → -6 dB over 2 s
   0.00 s  ⇄ /eos/cue/1/2/fire  → Lighting desk (example)
   2.00 s  ▶ Bell plays (media/bell.wav) at -4 dB on effects
   2.00 s  GO 3 Thunder (rain ducks under it)
   2.00 s  ▶ Thunder plays (media/thunder.wav) at 0 dB on effects
   2.00 s  ◢ Rain → -16 dB over 0.4 s
   6.00 s  ◢ Rain → -6 dB over 2.5 s

Still sounding afterwards: Rain at -6 dB (looping); Bell at -4 dB; Thunder at 0 dB
Standing by: #4 Beat

What pressing GO does, second by second, on the real cue engine with no sound and no waiting. ec validate lists what would not work on the night, and ec diff says what changed between two shows, cue by cue.

Versions

Save writes show.json and records a version, with a note written for you if you do not type one. Compare any version with the show as it is now and read the difference cue by cue, field by field. Restore one, and if that was wrong, undo the restore.

05The assistant

The assistant proposes. You decide.

Describe a change in plain language: “duck the rain under the thunder and bring it back after four seconds.” The assistant is an agent. It works on a private draft of the show, in as many steps as the job needs, and hands you one change to review.

What it does
Searches the cues, looks at the sound files, edits the draft, checks for broken cues, and dry-runs the result on the real cue engine before you see it.
What it cannot do
Play the show, or save it. Accepting its change is one undo step, and like every edit it is not kept until you save.
What is sent
Your message and an outline of the show: cue numbers, names, settings and file names. Never audio. Nothing unless you ask.
Your own model
Your key from Anthropic, OpenRouter, OpenAI or any OpenAI-compatible service. A local model through Ollama, with no internet. Or Claude Code or Codex, if you already have one installed: Endless Cues gives them its tools.
The paid option
An Endless Cues account, with no key to manage. Pricing to be announced. The app itself is free, and the assistant is off until you set it up.

06Where it stands

Open, offline, and early.

This is a public alpha. The cue engine has run a real show; the app around it is new. Here is what you can count on, and what is not there yet.

Open source

Free, under the AGPL-3.0. The repository goes public with the first build. The show file format is free for anyone to implement, so your show does not depend on this app continuing to exist.

Offline

It runs entirely offline. No account. No telemetry. The booth computer never has to see the internet, and many should not.

Three platforms, one tested by hand

Built for macOS, Windows and Linux, and the tests run on all three. The app itself has so far only been run on macOS.

macOS · Windows · Linux

Not built yet

None of this exists today. It is listed so you can tell whether Endless Cues fits your show now, and so you can tell us what matters most.

  • MIDI and MSC
  • Timecode (LTC, MTC)
  • Video and projection cues
  • Microphones and ducking in the mixer
  • Main and backup machines with lock-step failover
  • Scripting with variables
  • QLab workspace import
  • Real-time collaboration
  • A full timeline view

QLab is the industry standard, and it is excellent. It is also Mac-only, and a full licence is US$1,399 (November 2026). Endless Cues is for people who need Windows or Linux, want a show file they can read, or do not have that budget.

One request

If you use it, credit the show.

Endless Cues is free. If you use it in a production, please credit Endless Forms Puppetry: a line in your programme or on your website is plenty.

A line you can use

Show control: Endless Cues, by Endless Forms Puppetry (endlesscues.com)

This is a request, not a condition. The licence is the AGPL-3.0 and it asks for nothing of the kind. It is how a small puppet company hears that its tool was used, and how the next show finds it.

Standing by

Hear about it when the first build is out.

Write to [email protected] and we will tell you when there is something to download. Tell us what you run shows on, if you like. It helps decide what gets built next.