Skip to content

Latest commit

 

History

96 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Presentation Commander — Server

AI-assisted project. This codebase was created with Claude (Anthropic), directed and reviewed by a human author — including architecture, implementation, and documentation. Review it accordingly before relying on it in production.

The master control application for live event production: a real-time NDI video matrix router, layered scene compositor, and presenter-notes hub, built as an Electron + React + TypeScript desktop app.

Pairs with presentation-commander-client, the companion app that runs on each presentation laptop.

Watch it running — 43 seconds

A 43-second tour. Every frame is the real application, recorded on screen and driven over the automation API on :9700 — the same endpoint the Companion module uses. It runs on the shipped demo data, and does not show a presentation laptop paired to the server.

Presentation Commander Server main window: scene compositor, source pool, matrix inspector, control deck, and control surface

Download

v1.1.1 — prebuilt for macOS, Windows and Linux. Pick your platform:

macOS — Apple Silicon, Intel
Build Download Size
Apple Silicon · .dmg disk image presentation-commander-server-1.1.1-arm64.dmg 138 MB
Intel · .dmg disk image presentation-commander-server-1.1.1-x64.dmg 143 MB
Apple Silicon · .pkg installer presentation-commander-server-1.1.1-macos-arm64.pkg 138 MB
Intel · .pkg installer presentation-commander-server-1.1.1-macos-x64.pkg 143 MB
Apple Silicon · .zip archive Presentation.Commander.Server-1.1.1-arm64-mac.zip 138 MB
Intel · .zip archive Presentation.Commander.Server-1.1.1-mac.zip 144 MB
Windows — x64
Build Download Size
x64 · .exe installer presentation-commander-server-1.1.1-x64-setup.exe 118 MB
x64 · portable .exe presentation-commander-server-1.1.1-x64-portable.exe 118 MB
.zip archive Presentation.Commander.Server-1.1.1-win.zip 156 MB
Linux — x64
Build Download Size
x64 · .deb package (Debian/Ubuntu) presentation-commander-server_1.1.1_amd64.deb 118 MB
x64 · .rpm package (Fedora/RHEL) presentation-commander-server-1.1.1.x86_64.rpm 93 MB
x64 · AppImage presentation-commander-server-1.1.1-x86_64.AppImage 146 MB

All builds, checksums and release notes: github.com/stoatworks-labs/presentation-commander-server/releases.

macOS builds are signed and notarised and open normally. The Windows builds are unsigned, so SmartScreen warns once — see Windows SmartScreen & Defender Firewall for the one-time click-through.

What it does

  • Source Pool — add/edit/delete NDI and web sources, or pick a real NDI sender discovered live on the network (mDNS _ndi._tcp.local)
  • Scenes — layered scene compositor: build scenes from multiple layered sources, drag to reposition, drag a corner to resize, toggle visibility. Layers backed by a real network source show a live video preview rendered from actual received NDI frames, not a placeholder box
  • Matrix Inspector — route any physical/stream/stage output to a source or a full composited scene
  • Control Deck — live presenter notes and slide position per connected Client Node
  • Control Surface — a button-grid control surface: scene recall, blackout, next/previous slide, send-note-to-stage — all backed by the same command path used by the JSON-RPC automation API (:9700), which also powers the Bitfocus Companion module for Stream Deck integration
  • Confidence Monitor — a Presenter Notes source type composites live presenter notes over video into one real NDI output (native/ndi-send, the same addon architecture as the Client's NDI send), so a physical stage monitor gets an actual broadcast signal instead of a text box in the operator's own window
  • Client Hub (:9800) — WebSocket server that Client Nodes register with; connected clients automatically appear as routable sources, and next/previous-slide commands are forwarded live to the client instead of being simulated locally

Architecture

graph LR
    subgraph laptop["Presentation Laptop (Client Node)"]
        SS["SlideSource<br/>PDF · Keynote · Google Slides"]
        NDIsend["NDI Send<br/>native/ndi-send"]
        ProgOut["Program Out window"]
        SL["serverLink.ts"]
        SS --> NDIsend
        SS --> ProgOut
        SS --> SL
    end

    subgraph browser["Browser (optional)"]
        GSExt["Google Slides<br/>MV3 extension"]
    end
    GSExt -- "ws://localhost:9801" --> SL

    subgraph server["Master Server"]
        Hub["Client Hub<br/>WS :9800"]
        Matrix["NDI Matrix /<br/>Scene Compositor"]
        Auto["Automation API<br/>HTTP :9700"]
        ConfMon["Confidence Monitor<br/>NDI Send"]
        Hub --> Matrix
        Matrix --> ConfMon
        Auto --> Matrix
    end
    SL -- "register / slide-state / command" --> Hub

    NDIsend -- "NDI network" --> Matrix
    ConfMon -- "NDI network" --> Monitor["Physical stage<br/>confidence monitor"]

    Companion["Bitfocus Companion<br/>module"] -- "GET /state, POST /rpc" --> Auto
    Deck["Stream Deck / any<br/>Companion surface"] --> Companion
Loading

What's real vs. mocked

NDI discovery and receive are real, built directly against the official Vizrt NDI SDK via a small native N-API addon (native/ndi-receive) — no third-party NDI wrapper. Source discovery uses mDNS; the scene compositor's layer previews are actual decoded video frames pulled from the network with NDIlib_recv_capture_v3. DeckLink capture cards and other physical broadcast hardware are still out of scope — this project has no way to test against hardware it doesn't have.

Building from source

The native receive addon links against the NDI SDK at build time. Install the NDI SDK first (macOS default: /Library/NDI SDK for Apple; override the location with NDI_SDK_DIR if yours lives elsewhere). npm install rebuilds the addon automatically via @electron/rebuild.

Documentation

Doc Contents
docs/USER-GUIDE.md Operating it: sources, scenes, routing, client nodes, troubleshooting — and what is real vs. mocked
docs/API.md Automation API (:9700), Client Hub protocol (:9800), domain model, IPC channels
docs/DEVELOPING.md Setup, the NDI SDK build dependency, packaging traps, architecture

Two things worth knowing before a show, both covered in the user guide: nothing is persisted — quitting discards every source, scene and route — and the app starts with demo data that looks like a configured rig but isn't.

Roadmap / TODO

  • Physical capture hardware — DeckLink capture cards and other broadcast I/O are currently out of scope; the project has no way to test against hardware it doesn't have. NDI discovery/receive and the compositor are real (see "What's real vs. mocked" above).

Project Setup

Install

npm install

Development

npm run dev

Build

# Windows
npm run build:win

# macOS
npm run build:mac

# Linux
npm run build:linux

Windows SmartScreen & Defender Firewall

macOS builds are Developer ID-signed and notarised by Apple — they open normally, with no Gatekeeper warning and no quarantine step. The Windows binaries are not code-signed, so Windows still warns you the first time.

  • Windows — SmartScreen shows "Windows protected your PC"More infoRun anyway.
  • Windows Defender Firewall — first launch pops "Allow Presentation Commander Server to communicate on these networks". Tick Private (and Domain on a managed network) — Presentation Commander Server needs it to serve its JSON-RPC control API and route NDI video. Deny it and clients, Companion and the automation API will all fail to connect.
  • Linux — no signing gate.

Per-artifact steps, self-signing, checksum verification and the Defender Firewall reset procedure: docs/UNSIGNED.md.

Recommended IDE Setup

Trademarks and third-party licences

NDI® is a registered trademark of Vizrt NDI AB. See https://ndi.video. This project is not affiliated with or endorsed by Vizrt.

The NDI runtime is obtained separately under Vizrt's own terms and is not redistributed here. NDI Tools are not redistributed either — get them from https://ndi.video/tools.

H.264, H.265 and AAC are separately licensable formats. The NDI SDK grant does not cover them, and the obligation sits with whoever ships a product using them.

This project is built on other people's work — see ATTRIBUTIONS.md.

About

Master control app for live event production: a real-time NDI video matrix router, layered scene compositor, presenter-notes hub, and Control Surface with a JSON-RPC automation API. Electron desktop app; pairs with the Client. Downloads: https://stoatworks-labs.com/software/presentation-commander-server/

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Sponsor this project

Packages

Used by

Contributors

Languages