Skip to content

Repository files navigation

EasyCue

A simple theatrical lighting console I've been building for my school and my community theatre group. I wanted something small, fast, and easy enough that students and amateur operators could pick it up easily, but also useful enough that I could run my own shows. It's a hobby project. The scope is deliberately narrow: small venues, simple shows, and a user-friendly interface.

EasyCue3 screenshot


What it does

  • Combined Lighting & Audio cue list with simple navigation, timing and auto-follows
  • Record & update cues from current channel state
  • EOS-style command line (1 Thru 10 At 50) and mouse-friendly adjustments
  • Fixture patching with parameter-based control (color pickers, intensity sliders)
  • Channel grid, fixture list and magic sheet for live control
  • Effects: sine/square/sawtooth/random waveforms on intensity, hue, saturation, or pan/tilt — with phase spread for chases, cue-triggered with fade in/out
  • Remote control: run the console from any phone or tablet browser on the venue wifi — no app install. Cue playback, fixture/color control, raw channel grid, patching, and the command line, all live-synced
  • Script viewer: load a PDF of your show script, drop cue markers on it, and click them during the show to fire cues — selection is synced with the Cue list
  • Save and load show files (JSON, human-readable)
  • USB DMX output (Enttec USB Pro, Enttec Open DMX USB, and generic FTDI-based Open DMX clones e.g. DSD TECH USB-to-DMX512)
  • Check for updates (Help menu, plus a quiet once-a-day background check) — notify-only, links to the GitHub release page

What it doesn't do (yet)

  • Pallettes or presets
  • Video playback — planned, not started
  • Support more than 1 universe
  • Moving light features (can do basic pan/tilt, and other straight DMX channels, but that's it)

Download

  • Just visit the releases page to download an executable for Windows, Mac or Linux. (note: Windows drivers for ENTTEC DMXUSB Pro will need to be downloaded from the source

Building

You'll need Rust. The default build has no media dependencies:

cargo build --release
cargo run --release

With audio support (requires ALSA on Linux):

cargo run --release --features audio

With everything:

# Linux: needs libudev-dev, libasound2-dev (video support also needs GStreamer)
cargo build --release --features full

Linux system libraries

For the default build (USB + audio):

sudo apt-get install build-essential pkg-config libx11-dev libxi-dev \
    libxcursor-dev libxrandr-dev libxinerama-dev libgl1-mesa-dev \
    libudev-dev libasound2-dev

For video (when that's eventually working):

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev

On Linux, you'll also need to be in the dialout group for USB DMX:

sudo usermod -a -G dialout $USER

Open DMX USB support on Linux also depends on getting exclusive access to the FTDI serial port. If another service probes the adapter at startup, wait a moment and reconnect, or disable that service.

Cheap FTDI-chip "USB to DMX512" cables (e.g. DSD TECH's) have no onboard microcontroller — same as the genuine Enttec Open DMX USB — so pick Enttec Open DMX USB in Settings, not Enttec USB Pro (which expects Enttec's framed protocol and firmware). Select the device's serial port from the dropdown; it'll show up even if its product string doesn't say "Enttec" since any USB-serial port is listed.


Keyboard shortcuts

Key Action
Space GO (fire next cue)
Shift+Space BACK (fire previous cue)
S STOP
Escape Pause — freeze lighting in place, fade out audio
↑ / ↓ Move selection and set on-deck cue (cue list)
Ctrl+G Open goto prompt — type a number then Enter to fire
Ctrl+R Record cue
Ctrl+S Save show
Ctrl+O Open show

Command-line cue navigation

Command Action
go12 / goto12 Go to and fire cue 12
q12 Arm cue 12 as on-deck without firing it
g1 Select group 1 (existing group command, unchanged)

Command line

EOS-style command syntax. Type directly — no need to click a text field first.

4a50          → Channel 4 at 50%
1thru10a75    → Channels 1-10 at 75%
1t10a75       → Same (t is shorthand for thru)
1-10a75       → Same (hyphen works too)
1+3+5afull    → Channels 1, 3, 5 at 100%
4aout         → Channel 4 to 0%
a50           → Set currently selected channels to 50%
4a255         → Channel 4 at raw DMX 255

Click channels to build a selection, then type just the level (a50 then Enter). Shift+click adds a range; Ctrl+click toggles individual channels. The command line always reflects your current selection.

The command line is context-aware: lighting commands activate when the Channels or Lighting Cues panel is focused.


Media files

Put audio files in the media/ directory next to your project. Show files reference them by filename only (song.mp3 rather than a full path), so shows stay portable across machines. Absolute paths still work.


Audio output devices

EasyCue3 can route each audio cue to any combination of output devices (speakers, a USB interface, etc.) independently, with its own volume/pan per route, and crossfade between them with an Adjust cue — useful for multi-room or multi-speaker setups.

Multi-channel interfaces are supported natively: each stereo pair of the device (e.g. a Rubix24's front and rear output pairs) shows up as its own entry in the output dropdown — "Rubix24 · Out 1-2", "Rubix24 · Out 3-4" — and cues can play on or crossfade between pairs just like between separate devices. If you only ever use the default device, none of this appears; the dropdown stays as simple as before.

On Linux, secondary devices need a small one-time ~/.asoundrc setup (PipeWire doesn't expose them to ALSA apps by default, and multi-channel devices need their channel count pinned). See docs/AUDIO_DEVICES.md for the setup steps and known limitations (no hot-plug; Windows/macOS need no setup).


Custom fixtures

13 fixture profiles ship with the app: dimmer, RGB/RGBA/RGBW/RGBAW/RGBAWUV variants, LED PAR, and moving head. Add your own in fixture_profiles/ (bundled) or ~/.config//fixture_profiles/ (user, survives updates).

{
  "id": "my_fixture",
  "manufacturer": "MyBrand",
  "name": "Custom RGB",
  "channel_count": 3,
  "parameters": [
    { "parameter": "Red",   "channel_offset": 1 },
    { "parameter": "Green", "channel_offset": 2 },
    { "parameter": "Blue",  "channel_offset": 3 }
  ]
}

Restart EasyCue and the profile appears in the Patching panel dropdown. See fixture_profiles/rgb.json for a working example.


Remote control

Control the console from a phone or tablet on the same wifi network — no app to install, no App Store. Enable it in Settings → Remote Control..., then scan the QR code or open the shown IP address in the phone's browser. For the full-screen app-like experience, use the browser's "Add to Home Screen" option.

  • Cue playback: GO / BACK / STOP, double-tap a cue to jump to it, grand master, blackout
  • Fixture control: intensity, color picker, and profile-driven parameter sliders
  • Raw channel grid across all active universes
  • Patching: add, edit, renumber, re-address, and remove fixtures
  • Command line, mirroring the desktop's EOS-style syntax

An optional PIN can be set to stop other people on the venue wifi from connecting. This is a LAN-only feature — there's no internet/remote-WAN access.


Script viewer

Run a show straight off your PDF script instead of (or alongside) the cue list. Open View → Script Viewer, load the show's script, and click anywhere to drop a marker linked to a cue — the marker sits on the exact line you want the cue to land.

  • Two-way sync with the Cue list: clicking a marker selects its cue everywhere (Cue list, Cue Properties); selecting a cue from the list or keyboard (row click, context menu, or ↑/↓ arrows) highlights the matching marker and brings it into view if it isn't already on screen.
  • Click to fire: in playback the markers are read-only — click one to fire its cue exactly as if you'd hit it from the cue list.
  • Navigate with / or PageUp/PageDown; scroll to zoom, drag to pan. Zooming in re-rasterizes the page at display resolution so text stays sharp.
  • Markers persist in the show file, and the PDF is referenced by filename via the media/ directory (same portable convention as audio cues).

The script feature needs a PDFium library, which is bundled in a lib/ subdirectory of every download — nothing to install separately.


Show mode

An operator-safe mode for running the show. Toggle it from View → Show Mode: the workspace swaps to a minimal two-panel layout (Cue list + Script Viewer), the Cue list shrinks to big GO / BACK / STOP buttons with read-only labels, and the Script Viewer is locked to Playback mode. Only transport operations remain — GO, BACK, STOP, goto, cue-list scrolling and script page-turning. Design and Show layouts save independently, so switching back restores your full workspace. See docs/SHOW_MODE.md.


Show files

JSON format, lives in shows/. Human-readable and git-friendly — you can diff them between rehearsals.


Disclaimer

This is a hobby project I've built and tested at my local theatre group and school. I've put genuine care into making it reliable, but I can't guarantee it'll work flawlessly in production. If you do use it, I'd really appreciate hearing about any issues you run into — bugs and feedback help me make it better. But please test thoroughly before relying on it for a show.


Open Source Credits

EasyCue is built on top of excellent open source projects. Thank you to all maintainers and contributors.

Core app and UI

  • Rust - Systems language used for the application.
  • egui - Immediate mode GUI framework.
  • eframe - Native app framework for egui.
  • egui_dock - Dockable/tabbed panel layout.
  • egui_extras - Extra widgets such as table support.
  • egui-phosphor - Phosphor icon integration for egui.

Audio and media

  • rodio - Audio playback (feature-gated).
  • lumina-video - Video playback backend (feature-gated).

DMX, data, and platform integration

  • serialport-rs - USB serial communication for DMX interfaces (feature-gated).
  • artnet_protocol - Art-Net packet structures and protocol support.
  • serde - Serialization framework.
  • serde_json - JSON read/write support.
  • tokio - Async runtime.
  • rfd - Native file dialogs.
  • image - PNG/image loading.
  • dirs - Cross-platform user config/data directory resolution.

Remote control

  • axum - Web server framework for the embedded remote-control server (feature-gated).
  • futures-util - Async stream/sink utilities for the WebSocket bridge.
  • qrcode - QR code generation for the pairing dialog.
  • Framework7 - Mobile UI framework powering the phone/browser client (vendored, MIT licensed).

Logging, errors, and utility crates

  • anyhow - Application-level error handling.
  • thiserror - Custom error types.
  • log - Logging facade.
  • env_logger - Logger implementation for development/runtime logs.
  • chrono - Date/time utilities.

For a complete, reproducible dependency graph (including transitive crates), see Cargo.lock.


License

GPL-3.0-or-later

About

A friendly theatrical DMX lighting console with audio playback, designed for small-scale theatres and schools.

Topics

Resources

Stars

8 stars

Watchers

2 watching

Forks

Releases

Sponsor this project

Contributors

Languages