# ludix45/streamforge_multiplatform architecture

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

- Interactive diagram: https://gitdiagram.com/ludix45/streamforge_multiplatform
- Repository: https://github.com/ludix45/streamforge_multiplatform

## Overview

StreamForge is documented as a cross-platform media discovery and playback app: users search provider catalogs, inspect ranked and TMDB-enriched results, then play a selected source. The tree also contains a distinct Python web/CLI media acquisition tool, VibraVid, with provider adapters, download, DRM/decryption, and muxing modules. README claims guide the unsampled Kotlin capabilities; the excerpts verify only selected desktop, search, DRM, and progress behavior, so uncertain implementation links are omitted.

Main entry points: [`repo/VibraVid/core/downloader`](https://github.com/ludix45/streamforge_multiplatform/tree/main/repo/VibraVid/core/downloader) (Stream downloader), [`desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/DesktopApp.kt`](https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/DesktopApp.kt) (Desktop app UI), [`repo/GUI/searchapp/views.py`](https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/GUI/searchapp/views.py) (Web interface), [`desktopApp/src/desktopMain/kotlin/main.kt`](https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/main.kt) (Desktop shell)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["StreamForge client"]
  node_desktop["Desktop shell<br/>[main.kt]"]
  node_desktop_ui["Desktop app UI<br/>[DesktopApp.kt]"]
  node_shared_models["Shared models<br/>[Models.kt]"]
  node_playback_source["Playback source<br/>[PlaybackSource.kt]"]
  node_network["Shared networking<br/>[KtorClient.kt]"]
  node_player["Embedded players"]
end

subgraph group_discovery["Discovery and sources"]
  node_desktop_domain["Provider domains"]
  node_provider_adapters["Provider adapters"]
  node_search_manager["Search selection"]
  node_tmdb["TMDB metadata<br/>[tmdb.py]"]
  node_source_scrapers["Source scrapers"]
end

subgraph group_vibra["VibraVid acquisition"]
  node_vibra_cli["VibraVid CLI<br/>[run.py]"]
  node_gui_views["Web interface<br/>[views.py]"]
end

subgraph group_processing["Stream processing"]
  node_downloader["Stream downloader"]
  node_manifest["Manifest parsing"]
  node_drm_manager["DRM manager<br/>[manager.py]"]
  node_decryptor["Decryptor<br/>[decryptor.py]"]
  node_muxing["Media muxing"]
end

subgraph group_operations["Automation and state"]
  node_progress["Progress reporting"]
  node_watchlist["Watchlist automation<br/>[watchlist_auto.py]"]
  node_arr["Release automation<br/>[arr_service.py]"]
  node_library[("Desktop library<br/>[LibraryStore.kt]")]
end

node_user(("Viewer"))
node_tmdb_service["TMDB service"]
node_provider_sites["Media providers"]
node_media_output["Media files"]

node_user -->|"opens"| node_desktop
node_desktop -->|"starts"| node_desktop_ui
node_desktop_ui -.->|"searches sources"| node_provider_adapters
node_provider_adapters -.->|"queries"| node_provider_sites
node_desktop_ui -.->|"uses models"| node_shared_models
node_desktop_ui -.->|"enriches results"| node_tmdb
node_tmdb -.->|"requests metadata"| node_tmdb_service
node_desktop_ui -.->|"selects source"| node_playback_source
node_desktop_ui -.->|"starts playback"| node_player
node_desktop_domain -->|"resolves domains"| node_provider_sites
node_user -->|"searches"| node_search_manager
node_search_manager -.->|"dispatches search"| node_source_scrapers
node_source_scrapers -.->|"scrapes"| node_provider_sites
node_user -->|"runs commands"| node_vibra_cli
node_user -->|"uses web app"| node_gui_views
node_vibra_cli -.->|"starts download"| node_downloader
node_gui_views -.->|"requests download"| node_downloader
node_downloader -->|"parses streams"| node_manifest
node_downloader -.->|"requests keys"| node_drm_manager
node_drm_manager -.->|"provides keys"| node_decryptor
node_downloader -.->|"decrypts tracks"| node_decryptor
node_downloader -.->|"assembles media"| node_muxing
node_downloader -.->|"reports progress"| node_progress
node_watchlist -.->|"initiates searches"| node_gui_views
node_arr -.->|"coordinates releases"| node_gui_views
node_player -.->|"stores library data"| node_library
node_muxing -.->|"writes files"| node_media_output

click node_desktop "https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/main.kt"
click node_desktop_ui "https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/DesktopApp.kt"
click node_desktop_domain "https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktopbridge/DesktopDomainManager.kt"
click node_shared_models "https://github.com/ludix45/streamforge_multiplatform/blob/main/shared/src/commonMain/kotlin/com/aistudio/streamforge/model/Models.kt"
click node_playback_source "https://github.com/ludix45/streamforge_multiplatform/blob/main/shared/src/commonMain/kotlin/com/aistudio/streamforge/shared/PlaybackSource.kt"
click node_network "https://github.com/ludix45/streamforge_multiplatform/blob/main/shared/src/commonMain/kotlin/com/aistudio/streamforge/network/KtorClient.kt"
click node_player "https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/EmbeddedVlcPlayer.kt"
click node_provider_adapters "https://github.com/ludix45/streamforge_multiplatform/tree/main/repo/GUI/searchapp/api"
click node_search_manager "https://github.com/ludix45/streamforge_multiplatform/blob/main/app/site_search_manager.py"
click node_tmdb "https://github.com/ludix45/streamforge_multiplatform/blob/main/app/tmdb.py"
click node_source_scrapers "https://github.com/ludix45/streamforge_multiplatform/tree/main/app"
click node_vibra_cli "https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/VibraVid/cli/run.py"
click node_gui_views "https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/GUI/searchapp/views.py"
click node_downloader "https://github.com/ludix45/streamforge_multiplatform/tree/main/repo/VibraVid/core/downloader"
click node_manifest "https://github.com/ludix45/streamforge_multiplatform/tree/main/repo/VibraVid/core/manifest"
click node_drm_manager "https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/VibraVid/core/drm/manager.py"
click node_decryptor "https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/VibraVid/core/decryptor/decryptor.py"
click node_muxing "https://github.com/ludix45/streamforge_multiplatform/tree/main/repo/VibraVid/core/muxing"
click node_watchlist "https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/GUI/searchapp/watchlist_auto.py"
click node_arr "https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/GUI/searchapp/arr/arr_service.py"
click node_library "https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/LibraryStore.kt"

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_desktop,node_desktop_ui,node_shared_models,node_playback_source,node_network,node_player,node_user toneBlue
class node_desktop_domain,node_provider_adapters,node_search_manager,node_tmdb,node_source_scrapers toneAmber
class node_vibra_cli,node_gui_views toneMint
class node_downloader,node_manifest,node_drm_manager,node_decryptor,node_muxing toneRose
class node_progress,node_watchlist,node_arr,node_library,node_tmdb_service,node_provider_sites,node_media_output toneIndigo
```

## Components

### StreamForge client

- [Desktop shell](https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/main.kt): `desktopApp/src/desktopMain/kotlin/main.kt`
- [Desktop app UI](https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/DesktopApp.kt): `desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/DesktopApp.kt`
- [Shared models](https://github.com/ludix45/streamforge_multiplatform/blob/main/shared/src/commonMain/kotlin/com/aistudio/streamforge/model/Models.kt): `shared/src/commonMain/kotlin/com/aistudio/streamforge/model/Models.kt`
- [Playback source](https://github.com/ludix45/streamforge_multiplatform/blob/main/shared/src/commonMain/kotlin/com/aistudio/streamforge/shared/PlaybackSource.kt): `shared/src/commonMain/kotlin/com/aistudio/streamforge/shared/PlaybackSource.kt`
- [Shared networking](https://github.com/ludix45/streamforge_multiplatform/blob/main/shared/src/commonMain/kotlin/com/aistudio/streamforge/network/KtorClient.kt): `shared/src/commonMain/kotlin/com/aistudio/streamforge/network/KtorClient.kt`
- [Embedded players](https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/EmbeddedVlcPlayer.kt): `desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/EmbeddedVlcPlayer.kt`

### Discovery and sources

- [Provider domains](https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktopbridge/DesktopDomainManager.kt): `desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktopbridge/DesktopDomainManager.kt`
- [Provider adapters](https://github.com/ludix45/streamforge_multiplatform/tree/main/repo/GUI/searchapp/api): `repo/GUI/searchapp/api`
- [Search selection](https://github.com/ludix45/streamforge_multiplatform/blob/main/app/site_search_manager.py): `app/site_search_manager.py`
- [TMDB metadata](https://github.com/ludix45/streamforge_multiplatform/blob/main/app/tmdb.py): `app/tmdb.py`
- [Source scrapers](https://github.com/ludix45/streamforge_multiplatform/tree/main/app): `app`

### VibraVid acquisition

- [VibraVid CLI](https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/VibraVid/cli/run.py): `repo/VibraVid/cli/run.py`
- [Web interface](https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/GUI/searchapp/views.py): `repo/GUI/searchapp/views.py`

### Stream processing

- [Stream downloader](https://github.com/ludix45/streamforge_multiplatform/tree/main/repo/VibraVid/core/downloader): `repo/VibraVid/core/downloader`
- [Manifest parsing](https://github.com/ludix45/streamforge_multiplatform/tree/main/repo/VibraVid/core/manifest): `repo/VibraVid/core/manifest`
- [DRM manager](https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/VibraVid/core/drm/manager.py): `repo/VibraVid/core/drm/manager.py`
- [Decryptor](https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/VibraVid/core/decryptor/decryptor.py): `repo/VibraVid/core/decryptor/decryptor.py`
- [Media muxing](https://github.com/ludix45/streamforge_multiplatform/tree/main/repo/VibraVid/core/muxing): `repo/VibraVid/core/muxing`

### Automation and state

- **Progress reporting**
- [Watchlist automation](https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/GUI/searchapp/watchlist_auto.py): `repo/GUI/searchapp/watchlist_auto.py`
- [Release automation](https://github.com/ludix45/streamforge_multiplatform/blob/main/repo/GUI/searchapp/arr/arr_service.py): `repo/GUI/searchapp/arr/arr_service.py`
- [Desktop library](https://github.com/ludix45/streamforge_multiplatform/blob/main/desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/LibraryStore.kt): `desktopApp/src/desktopMain/kotlin/com/aistudio/streamforge/desktop/LibraryStore.kt`

### Other components

- **Viewer**
- **TMDB service**
- **Media providers**
- **Media files**

## Connections

- Viewer → Desktop shell: opens
- Desktop shell → Desktop app UI: starts
- Desktop app UI → Provider adapters: searches sources
- Provider adapters → Media providers: queries
- Desktop app UI → Shared models: uses models
- Desktop app UI → TMDB metadata: enriches results
- TMDB metadata → TMDB service: requests metadata
- Desktop app UI → Playback source: selects source
- Desktop app UI → Embedded players: starts playback
- Provider domains → Media providers: resolves domains
- Viewer → Search selection: searches
- Search selection → Source scrapers: dispatches search
- Source scrapers → Media providers: scrapes
- Viewer → VibraVid CLI: runs commands
- Viewer → Web interface: uses web app
- VibraVid CLI → Stream downloader: starts download
- Web interface → Stream downloader: requests download
- Stream downloader → Manifest parsing: parses streams
- Stream downloader → DRM manager: requests keys
- DRM manager → Decryptor: provides keys
- Stream downloader → Decryptor: decrypts tracks
- Stream downloader → Media muxing: assembles media
- Stream downloader → Progress reporting: reports progress
- Watchlist automation → Web interface: initiates searches
- Release automation → Web interface: coordinates releases
- Embedded players → Desktop library: stores library data
- Media muxing → Media files: writes files
