# sheep-realms/echo-live architecture

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

- Interactive diagram: https://gitdiagram.com/sheep-realms/echo-live
- Repository: https://github.com/sheep-realms/echo-live

## Overview

Echo Live is an Echo-based OBS plugin that presents a visual-novel-style dialogue box for silent-streaming virtual hosts. Its main workflow is composing formatted dialogue in the editor and displaying it in the live view; related capabilities include themes, history, settings, statistics, extensions, localization, and optional WebSocket messaging. The README establishes the product purpose, while the tree and sampled files support module roles; most runtime wiring was not sampled, so uncertain connections are omitted.

Main entry points: [`res/class/EchoLive.js`](https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLive.js) (Live runtime), [`res/script/editor.js`](https://github.com/sheep-realms/echo-live/blob/master/res/script/editor.js) (Editor interface), [`res/class/EchoLiveEditor.js`](https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveEditor.js) (Editor behavior), [`res/script/history.js`](https://github.com/sheep-realms/echo-live/blob/master/res/script/history.js) (History interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_authoring["Dialogue authoring"]
  node_editor_ui["Editor interface<br/>[editor.js]"]
  node_editor_core["Editor behavior<br/>[EchoLiveEditor.js]"]
  node_editor_controls["Editor controls"]
  node_message_filter["Message formatting<br/>[DataFilter.js]"]
end

subgraph group_display["Live display"]
  node_live_ui["Live view<br/>[live.js]"]
  node_live_core["Live runtime<br/>[EchoLive.js]"]
  node_character["Character display"]
  node_themes["Live themes<br/>[live_theme.js]"]
  node_history_ui["History interface<br/>[history.js]"]
  node_history_core["History management<br/>[EchoLiveHistory.js]"]
end

subgraph group_platform["Application services"]
  node_system["System registry<br/>[EchoLiveSystem.js]"]
  node_settings_ui["Settings interface<br/>[settings.js]"]
  node_settings["Settings management<br/>[SettingsManager.js]"]
  node_storage[("Local persistence")]
  node_statistics["Usage statistics"]
  node_translator["Localization<br/>[Translator.js]"]
  node_language_data["Language data<br/>[index.js]"]
end

subgraph group_ecosystem["Integrations"]
  node_extensions["Extension manager"]
  node_broadcast["Broadcast service"]
end

node_host(("Host / operator"))
node_websocket(("WebSocket server"))
node_obs(("OBS browser source"))

node_host -->|"edits dialogue"| node_editor_ui
node_editor_ui -->|"uses editor"| node_editor_core
node_editor_ui -->|"uses controls"| node_editor_controls
node_editor_core -->|"formats messages"| node_message_filter
node_live_ui -->|"starts display"| node_live_core
node_live_core -->|"updates character"| node_character
node_live_core -->|"uses theme data"| node_themes
node_host -->|"reviews history"| node_history_ui
node_history_ui -->|"uses history"| node_history_core
node_host -->|"changes settings"| node_settings_ui
node_settings_ui -->|"updates settings"| node_settings
node_settings -->|"persists settings"| node_storage
node_statistics -->|"persists statistics"| node_storage
node_language_data -->|"supplies translations"| node_translator
node_extensions -->|"patches localization"| node_translator
node_editor_core -.->|"broadcasts messages"| node_broadcast
node_websocket -.->|"sends messages"| node_broadcast
node_live_core -->|"renders live view"| node_obs

click node_editor_ui "https://github.com/sheep-realms/echo-live/blob/master/res/script/editor.js"
click node_editor_core "https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveEditor.js"
click node_editor_controls "https://github.com/sheep-realms/echo-live/blob/master/res/data/editor_controller.js"
click node_message_filter "https://github.com/sheep-realms/echo-live/blob/master/res/class/DataFilter.js"
click node_live_ui "https://github.com/sheep-realms/echo-live/blob/master/res/script/live.js"
click node_live_core "https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLive.js"
click node_character "https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveCharacter.js"
click node_themes "https://github.com/sheep-realms/echo-live/blob/master/res/data/live_theme.js"
click node_history_ui "https://github.com/sheep-realms/echo-live/blob/master/res/script/history.js"
click node_history_core "https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveHistory.js"
click node_system "https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveSystem.js"
click node_settings_ui "https://github.com/sheep-realms/echo-live/blob/master/res/script/settings.js"
click node_settings "https://github.com/sheep-realms/echo-live/blob/master/res/class/SettingsManager.js"
click node_storage "https://github.com/sheep-realms/echo-live/blob/master/res/class/LocalStorageManager.js"
click node_statistics "https://github.com/sheep-realms/echo-live/blob/master/res/class/StatisticManager.js"
click node_translator "https://github.com/sheep-realms/echo-live/blob/master/res/class/Translator.js"
click node_language_data "https://github.com/sheep-realms/echo-live/blob/master/lang/index.js"
click node_extensions "https://github.com/sheep-realms/echo-live/blob/master/res/class/ExtensionManager.js"
click node_broadcast "https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveBroadcast.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_editor_ui,node_editor_core,node_editor_controls,node_message_filter,node_obs toneBlue
class node_live_ui,node_live_core,node_character,node_themes,node_history_ui,node_history_core toneAmber
class node_system,node_settings_ui,node_settings,node_storage,node_statistics,node_translator,node_language_data,node_websocket toneMint
class node_extensions,node_broadcast toneRose
class node_host toneIndigo
```

## Components

### Dialogue authoring

- [Editor interface](https://github.com/sheep-realms/echo-live/blob/master/res/script/editor.js): `res/script/editor.js`
- [Editor behavior](https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveEditor.js): `res/class/EchoLiveEditor.js`
- [Editor controls](https://github.com/sheep-realms/echo-live/blob/master/res/data/editor_controller.js): `res/data/editor_controller.js`
- [Message formatting](https://github.com/sheep-realms/echo-live/blob/master/res/class/DataFilter.js): `res/class/DataFilter.js`

### Live display

- [Live view](https://github.com/sheep-realms/echo-live/blob/master/res/script/live.js): `res/script/live.js`
- [Live runtime](https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLive.js): `res/class/EchoLive.js`
- [Character display](https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveCharacter.js): `res/class/EchoLiveCharacter.js`
- [Live themes](https://github.com/sheep-realms/echo-live/blob/master/res/data/live_theme.js): `res/data/live_theme.js`
- [History interface](https://github.com/sheep-realms/echo-live/blob/master/res/script/history.js): `res/script/history.js`
- [History management](https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveHistory.js): `res/class/EchoLiveHistory.js`

### Application services

- [System registry](https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveSystem.js): `res/class/EchoLiveSystem.js`
- [Settings interface](https://github.com/sheep-realms/echo-live/blob/master/res/script/settings.js): `res/script/settings.js`
- [Settings management](https://github.com/sheep-realms/echo-live/blob/master/res/class/SettingsManager.js): `res/class/SettingsManager.js`
- [Local persistence](https://github.com/sheep-realms/echo-live/blob/master/res/class/LocalStorageManager.js): `res/class/LocalStorageManager.js`
- [Usage statistics](https://github.com/sheep-realms/echo-live/blob/master/res/class/StatisticManager.js): `res/class/StatisticManager.js`
- [Localization](https://github.com/sheep-realms/echo-live/blob/master/res/class/Translator.js): `res/class/Translator.js`
- [Language data](https://github.com/sheep-realms/echo-live/blob/master/lang/index.js): `lang/index.js`

### Integrations

- [Extension manager](https://github.com/sheep-realms/echo-live/blob/master/res/class/ExtensionManager.js): `res/class/ExtensionManager.js`
- [Broadcast service](https://github.com/sheep-realms/echo-live/blob/master/res/class/EchoLiveBroadcast.js): `res/class/EchoLiveBroadcast.js`

### Other components

- **Host / operator**
- **WebSocket server**
- **OBS browser source**

## Connections

- Host / operator → Editor interface: edits dialogue
- Editor interface → Editor behavior: uses editor
- Editor interface → Editor controls: uses controls
- Editor behavior → Message formatting: formats messages
- Live view → Live runtime: starts display
- Live runtime → Character display: updates character
- Live runtime → Live themes: uses theme data
- Host / operator → History interface: reviews history
- History interface → History management: uses history
- Host / operator → Settings interface: changes settings
- Settings interface → Settings management: updates settings
- Settings management → Local persistence: persists settings
- Usage statistics → Local persistence: persists statistics
- Language data → Localization: supplies translations
- Extension manager → Localization: patches localization
- Editor behavior → Broadcast service: broadcasts messages
- WebSocket server → Broadcast service: sends messages
- Live runtime → OBS browser source: renders live view
