# johnbatey/bible-song-pro architecture

> Architecture diagram of the GitHub repository johnbatey/bible-song-pro, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/johnbatey/bible-song-pro
- Repository: https://github.com/johnbatey/bible-song-pro

## Overview

Bible Song Pro is a church presentation system: an operator selects scripture or lyrics in the control panel, formats the presentation, and sends it to an OBS Browser Source for live display. The README also documents customizable output, multilingual support, media and production controls, live scripture transcription, and feedback submission. The tree omits the HTML control and output pages, and several panel excerpts are incomplete, so their internal wiring is shown only where README documentation or sampled code supports it.

Main entry points: [`js/panel/songs-and-bible.js`](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/songs-and-bible.js) (Songs and Bible), [`helper-app/main.js`](https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/main.js) (Live scripture helper), [`js/panel/program-display-and-transform.js`](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/program-display-and-transform.js) (Program display), [`js/panel/render-and-selection.js`](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/render-and-selection.js) (Render and selection)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_presentation["Presentation control"]
  node_panel["Control panel"]
  node_bootstrap["Panel initialization"]
  node_commands["Commands and shortcuts"]
  node_state["State and storage"]
  node_program["Program display"]
  node_render["Render and selection"]
  node_sync["Output synchronization<br/>[sync-and-output.js]"]
  node_obsoutput["OBS browser output"]
end

subgraph group_content["Scripture and lyrics"]
  node_bible["Bible versions<br/>[manifest.js]"]
  node_bibledata["Bundled translations<br/>[KJV.js]"]
  node_songs["Songs and Bible<br/>[songs-and-bible.js]"]
  node_localization["Reference localization"]
end

subgraph group_production["Broadcast production"]
  node_workspace["Workspace and editor"]
  node_scenes["Scenes and sources"]
  node_media["Media workspace<br/>[media-workspace.js]"]
  node_source["Source runtime and mixer"]
  node_recording["Recording and livestream"]
end

subgraph group_transcription["Live scripture"]
  node_helper["Live scripture helper<br/>[main.js]"]
  node_localengine["Local transcription<br/>[engine-local.js]"]
  node_offlineworker["Offline model worker"]
  node_deepgram["Deepgram transcription<br/>[engine-deepgram.js]"]
  node_relay["WebSocket relay<br/>[relay.js]"]
end

subgraph group_integrations["External integrations"]
  node_feedback["Feedback endpoint"]
  node_github[("GitHub issues")]
end

node_operator(("Church operator"))

node_operator -->|"controls"| node_panel
node_panel -->|"initializes"| node_bootstrap
node_panel -->|"accepts commands"| node_commands
node_songs -->|"loads versions"| node_bible
node_bible -->|"indexes translations"| node_bibledata
node_songs -->|"uses references"| node_localization
node_songs -->|"selects content"| node_program
node_program -->|"formats display"| node_render
node_render -->|"sends updates"| node_sync
node_sync -->|"BroadcastChannel sync"| node_obsoutput
node_state -.->|"persists settings"| node_obsoutput
node_workspace -->|"manages production"| node_scenes
node_media -.->|"synchronizes media"| node_obsoutput
node_source -->|"controls sources"| node_scenes
node_recording -.->|"streams output"| node_obsoutput
node_helper -->|"runs engine"| node_localengine
node_localengine -->|"transcribes audio"| node_offlineworker
node_helper -.->|"runs engine"| node_deepgram
node_helper -->|"relays messages"| node_relay
node_feedback -.->|"creates issues"| node_github

click node_bootstrap "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/bootstrap-and-init.js"
click node_commands "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/app-commands-and-shortcuts.js"
click node_state "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/state-and-storage.js"
click node_bible "https://github.com/johnbatey/bible-song-pro/blob/main/bibles/manifest.js"
click node_bibledata "https://github.com/johnbatey/bible-song-pro/blob/main/bibles/KJV.js"
click node_songs "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/songs-and-bible.js"
click node_localization "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/reference-localization-theme.js"
click node_program "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/program-display-and-transform.js"
click node_render "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/render-and-selection.js"
click node_sync "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/sync-and-output.js"
click node_workspace "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/workspace-and-editor-tools.js"
click node_scenes "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/scene-and-source-tools.js"
click node_media "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/media-workspace.js"
click node_source "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/source-runtime-and-promixer.js"
click node_recording "https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/recording-and-livestream-tools.js"
click node_helper "https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/main.js"
click node_localengine "https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/engine-local.js"
click node_offlineworker "https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/live-scripture-offline-worker.js"
click node_deepgram "https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/engine-deepgram.js"
click node_relay "https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/relay.js"
click node_feedback "https://github.com/johnbatey/bible-song-pro/blob/main/server/feedback-backend.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_panel,node_bootstrap,node_commands,node_state,node_program,node_render,node_sync,node_obsoutput toneBlue
class node_bible,node_bibledata,node_songs,node_localization toneAmber
class node_workspace,node_scenes,node_media,node_source,node_recording toneMint
class node_helper,node_localengine,node_offlineworker,node_deepgram,node_relay toneRose
class node_feedback,node_github,node_operator toneIndigo
```

## Components

### Presentation control

- **Control panel**
- [Panel initialization](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/bootstrap-and-init.js): `js/panel/bootstrap-and-init.js`
- [Commands and shortcuts](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/app-commands-and-shortcuts.js): `js/panel/app-commands-and-shortcuts.js`
- [State and storage](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/state-and-storage.js): `js/panel/state-and-storage.js`
- [Program display](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/program-display-and-transform.js): `js/panel/program-display-and-transform.js`
- [Render and selection](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/render-and-selection.js): `js/panel/render-and-selection.js`
- [Output synchronization](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/sync-and-output.js): `js/panel/sync-and-output.js`
- **OBS browser output**

### Scripture and lyrics

- [Bible versions](https://github.com/johnbatey/bible-song-pro/blob/main/bibles/manifest.js): `bibles/manifest.js`
- [Bundled translations](https://github.com/johnbatey/bible-song-pro/blob/main/bibles/KJV.js): `bibles/KJV.js`
- [Songs and Bible](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/songs-and-bible.js): `js/panel/songs-and-bible.js`
- [Reference localization](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/reference-localization-theme.js): `js/panel/reference-localization-theme.js`

### Broadcast production

- [Workspace and editor](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/workspace-and-editor-tools.js): `js/panel/workspace-and-editor-tools.js`
- [Scenes and sources](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/scene-and-source-tools.js): `js/panel/scene-and-source-tools.js`
- [Media workspace](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/media-workspace.js): `js/panel/media-workspace.js`
- [Source runtime and mixer](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/source-runtime-and-promixer.js): `js/panel/source-runtime-and-promixer.js`
- [Recording and livestream](https://github.com/johnbatey/bible-song-pro/blob/main/js/panel/recording-and-livestream-tools.js): `js/panel/recording-and-livestream-tools.js`

### Live scripture

- [Live scripture helper](https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/main.js): `helper-app/main.js`
- [Local transcription](https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/engine-local.js): `helper-app/engine-local.js`
- [Offline model worker](https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/live-scripture-offline-worker.js): `helper-app/live-scripture-offline-worker.js`
- [Deepgram transcription](https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/engine-deepgram.js): `helper-app/engine-deepgram.js`
- [WebSocket relay](https://github.com/johnbatey/bible-song-pro/blob/main/helper-app/relay.js): `helper-app/relay.js`

### External integrations

- [Feedback endpoint](https://github.com/johnbatey/bible-song-pro/blob/main/server/feedback-backend.js): `server/feedback-backend.js`
- **GitHub issues**

### Other components

- **Church operator**

## Connections

- Church operator → Control panel: controls
- Control panel → Panel initialization: initializes
- Control panel → Commands and shortcuts: accepts commands
- Songs and Bible → Bible versions: loads versions
- Bible versions → Bundled translations: indexes translations
- Songs and Bible → Reference localization: uses references
- Songs and Bible → Program display: selects content
- Program display → Render and selection: formats display
- Render and selection → Output synchronization: sends updates
- Output synchronization → OBS browser output: BroadcastChannel sync
- State and storage → OBS browser output: persists settings
- Workspace and editor → Scenes and sources: manages production
- Media workspace → OBS browser output: synchronizes media
- Source runtime and mixer → Scenes and sources: controls sources
- Recording and livestream → OBS browser output: streams output
- Live scripture helper → Local transcription: runs engine
- Local transcription → Offline model worker: transcribes audio
- Live scripture helper → Deepgram transcription: runs engine
- Live scripture helper → WebSocket relay: relays messages
- Feedback endpoint → GitHub issues: creates issues
