Electron now provides the operator control panel, while the Python backend remains the single source of truth for hymn state, overlay visibility, and live style settings. OBS or vMix still loads overlay pages from a localhost URL.
server.py: HTTP + WebSocket backend bound to127.0.0.1electron/: desktop app main process, preload bridge, and renderer UIoverlays/: browser-source layouts forlowerthird,stage, andlyricsassets/: shared overlay assets and legacy static styleshymns/: flat*.txthymn files
py -3.12 -m venv env
.\env\Scripts\activate
pip install -r requirements.txtImportant
Incase those versions above are not found then please install python3.12 using this link Python3.12
bun install
bun devThe Electron app starts the backend automatically, chooses open ports if 9999 or 8765 are busy, and shows the active overlay URLs inside the UI.
Typical local URLs look like:
http://127.0.0.1:9999/overlays/lowerthird.html?token=...&wsPort=8765
http://127.0.0.1:9999/overlays/stage.html?token=...&wsPort=8765
http://127.0.0.1:9999/overlays/lyrics.html?token=...&wsPort=8765
Paste the URL shown in the Electron app into an OBS or vMix browser source.
Build the backend executable first:
bun run build:icons
bun run build:backendIf generated icons are missing, packaging commands now fail early with a clear preflight error telling you to run bun run build:icons.
Then package the desktop app:
bun run distPlatform-specific packaging commands:
bun run dist:win
bun run dist:mac
bun run dist:linuxelectron-builder is configured for Windows (nsis), macOS (dmg), and Linux (AppImage, deb).
Pushes to main run semantic-release, update CHANGELOG.md, create a GitHub release, generate app icons from assets/logo.png, and then build platform installers for:
- Windows:
.exe - macOS:
.dmg - Linux:
.AppImageand.deb
Those installer files are uploaded to the GitHub release automatically.
Optional code-signing and notarization secrets for CI:
WIN_CSC_LINKWIN_CSC_KEY_PASSWORDCSC_LINKCSC_KEY_PASSWORDAPPLE_IDAPPLE_APP_SPECIFIC_PASSWORDAPPLE_TEAM_ID
Add New Browser Source URL: Replace ... with the token and wsPort shown in the Electron app
# For the lower third overlay
http://127.0.0.1:9999/overlays/lowerthird.html?token=...&wsPort=8765
# For the stage overlay
http://127.0.0.1:9999/overlays/stage.html?token=...&wsPort=8765
# For the lyrics overlay
http://127.0.0.1:9999/overlays/lyrics.html?token=...&wsPort=8765Size:
1920 -->width
1080 -->heightContributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated. Please check out the Contributing Guide to get started.
Made with love 💖 by @vernonthedev