Overlay is a browser-based lower-third control system for live production with synchronized Control / PVW / PGM / Output pipelines, multi-session operation, and ATEM-ready PNG export.
Live demo: https://overlay.simplifyed.in
“Freely you have received; freely give.”
- Matthew 10:8
npm install
npm startOpen:
- Control UI:
http://localhost:3333/ - Output window:
http://localhost:3333/output.html?session=<session-id>
Use the same session ID in both windows.
- Select mode:
Bible Reference,Speaker, orTicker. - Build and validate content in
PVW. - Click
CUT TO AIRto move PVW toPGMand Output. - Click
CLEARto remove active lower-third/ticker output.
Keyboard shortcuts:
Enter: Cut to AirEsc: ClearB: Bible modeS: Speaker modeT: Ticker modeO: Open Output WindowH: Open User Guide
- Every session is isolated via URL:
?session=<id>. - Control and Output must share session ID.
- You can run multiple sessions from one server at the same time.
- You can set a custom session at load time (URL/session switcher).
- Set
Book,Chapter,Verse(s),Translation, andReference Language. - Optional toggles:
Hide translation line (Line 2)Append translation abbreviation on line 1
Look Up Textfetches verse text (using configured source/fallback chain).Use verse text as line 2 in outputis intentionally independent from translation visibility.
Recommended runbook:
- Build reference.
- Optionally fetch verse text.
- Confirm line 1/line 2 behavior.
- Check PVW.
- Cut to air.
- Enter speaker name (required for meaningful on-air output).
- Role/title is optional.
- Preview first, then cut.
- Set message, badge, speed, style, position, colors, and size.
- Ticker can be operated independently from lower-third overlays.
- Includes classic, gradient, scripture/high-capacity, and modern inline variants.
- Supports line-1-only and line-1+line-2 workflows.
- Line 2 multiline can be enabled for longer scripture text.
Each line (Line 1 / Line 2) supports:
- Font family
- Supported font weight (filtered by selected font)
- Italic
- Font size scale
- Custom color
- Stroke (toggle + color + width)
- Drop shadow (toggle + direction/depth/blur/opacity/color)
Custom HTML Templatecan fully override built-in styles.- Supported variables:
{{line1}},{{line2}},{{accentColor}},{{font}},{{line1Font}},{{line2Font}},{{logoUrl}},{{bgUrl}}. Custom Image & Logosupports:- Lower-third background image
- PNG logo with transparency
- Reference presets
- Speaker presets
- Ticker presets
- Template presets
Global Save/Load/Export/Import for:
- Visual settings
- Layout options
- Mode defaults
- Presets bundle
Use profiles for rapid show setup reuse across sessions/devices.
Settings -> Output Setup
Use this when integrating with OBS/vMix/Wirecast:
- Copy Output URL.
- Add as Browser Source.
- Match source resolution with selected output resolution.
- Choose keying method:
Transparentmode for alpha-capable browser pipelines.- Blue/Green/Magenta/Custom for chroma-key pipelines.
Use this when feeding ATEM media workflow.
- Include/pin current session for export.
- Session-specific URLs are provided.
- Ticker is not included in ATEM PNG export; ATEM PNG output is lower-third graphics only.
- Export endpoints support both alpha models:
- Premultiplied (ATEM production use)
- Straight (browser QA/comparison)
Typical endpoints:
/atem-live.png(default export)/atem-live/<session>.png/atem-live/<session>.png?alpha=premultiplied/atem-live/<session>.png?alpha=straight
Recommended ATEM runbook:
- Pin the active session.
- Cut lower-third to air.
- Regenerate if you need immediate refresh.
- Use premultiplied URL for ATEM key workflow.
- If mismatch is suspected, compare straight variant first in browser.
Note: premultiplied images can look visually different in standard browser preview; validate in the target switcher/key pipeline.
- Default reference:
John 3:16-18 - Default translation selector:
None (hide translation) Hide translation line (Line 2): enabled by defaultUse verse text as line 2: disabled by default- Default ticker style:
Dark - Default ticker text:
The Live Stream has been restored. Thank you for your patience, and our sincere apologies for the interruption. - Settings panel default: collapsed/hidden for faster operation
curl -fsSL https://raw.githubusercontent.com/jabez4jc/Overlay/main/scripts/bootstrap_ubuntu_server.sh | sudo bashThis bootstrap updates the server, installs required tools, clones/updates repo, and runs the full installer (Node, service, Nginx, HTTPS).
Manual path:
sudo apt-get update -y && sudo apt-get upgrade -y
sudo apt-get install -y git curl ca-certificates
sudo git clone https://github.com/jabez4jc/Overlay /opt/overlay
cd /opt/overlay
sudo bash scripts/install_ubuntu_server.shRecommended for reliable ATEM PNG export: Dockerfile deployment (not Nixpacks).
- Repo:
https://github.com/jabez4jc/Overlay - Branch:
main - Build Pack: Dockerfile
- Dockerfile Path:
./Dockerfile - Port:
3333
Why Dockerfile mode:
- Uses Playwright official runtime image with Chromium + required OS libraries preinstalled.
- Avoids runtime dependency gaps that cause ATEM PNG to stay in placeholder mode.
Coolify settings:
- Expose port
3333. - Add domain (for example
overlay.simplifyed.in). - Keep persistent storage optional (not required for operation).
- Optional env vars:
ATEM_PNG_MODE=premultipliedATEM_PNG_SESSIONS=<comma-separated-session-ids>if you want pre-pinned sessions.
If you still prefer Nixpacks:
- Keep install command as
npm ci(do not use--ignore-scripts). - Ensure postinstall logs show Chromium installed.
- If browser download is blocked, ATEM export will remain placeholder-only.
- Output not syncing:
- Confirm same session ID in Control and Output URLs.
- Confirm active WebSocket connection.
- PVW/PGM vs Output mismatch:
- Verify mode and active cut state.
- Confirm custom template is not overriding expected style.
- ATEM PNG mismatch:
- Regenerate export.
- Compare
?alpha=straightvs?alpha=premultiplied. - Validate with actual ATEM key settings.
- Mobile UX issues:
- Keep settings collapsed unless editing.
- Use User Guide (
H) for fast-operate workflow.
index.html- Control UIoutput.html- Output rendererjs/control.js- control logic, sync, presets/profilesjs/output.js- output rendering logicjs/data.js- Bible data, translation/font metadatacss/control.css- control stylescss/output.css- output stylesserver.js- HTTP/WebSocket + ATEM PNG export pipelinescripts/bootstrap_ubuntu_server.sh- Ubuntu bootstrapscripts/install_ubuntu_server.sh- Ubuntu installer
- Copyright © 2026 Jabez Vettriselvan
- License: AGPL-3.0-only
- This project remains free software under AGPL-3.0-only.