Headless Electron application that broadcasts LyricDisplay output pages over NDI® for use in OBS, vMix, and other NDI-capable production software.
- The main LyricDisplay app launches this companion automatically.
- The companion opens invisible (offscreen) browser windows that load the same output pages you see on screen.
- Each frame is captured via Chromium's offscreen rendering and sent over NDI using the grandi native module.
- NDI receivers on the local network (OBS, vMix, Wirecast, etc.) pick up the streams with full transparency support.
End users do not need to install this manually. The main LyricDisplay app downloads, installs, and manages the companion automatically from the NDI settings panel.
cd lyricdisplay-ndi
npm installThe companion is launched automatically by the main app during development. You can also run it standalone:
npx electron . --host 127.0.0.1 --port 9137 --app-url http://localhost:5173 --no-hash| Flag | Default | Description |
|---|---|---|
--host <ip> |
127.0.0.1 |
IPC server bind address |
--port <port> |
9137 |
IPC server port |
--app-url <url> |
http://127.0.0.1:4000 |
Base URL of the LyricDisplay backend |
--no-hash |
(hash routing) | Use path-based routing (for dev with Vite) |
npm run buildProduces a platform-specific .zip archive in dist/ via electron-builder.
npm run releaseBumps the version, commits, tags, and pushes. GitHub Actions builds and uploads platform archives to the release.
src/
main.js – Electron entry point
cli.js – CLI argument parser
settings.js – Persistent settings (electron-store)
outputManager.js – Offscreen BrowserWindow lifecycle and frame capture
ndiSender.js – grandi NDI sender wrapper
ipc.js – TCP JSON-line protocol server
NDI® is a registered trademark of Vizrt NDI AB. This project is not affiliated with or endorsed by Vizrt NDI AB. For more information about NDI, visit ndi.video.
This project is part of LyricDisplay and is licensed under the GNU General Public License, version 3 or later. See the main repository for full license details.