# karayel90/cloudplug architecture

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

- Interactive diagram: https://gitdiagram.com/karayel90/cloudplug
- Repository: https://github.com/karayel90/cloudplug

## Overview

Cloudplug is a Cloudstream 3 extension repository for Turkish content. The user adds its repository to Cloudstream, then browses channel catalogs and selects a stream: separate providers expose tabii live channels and a community-M3U-based Turkish TV catalog, alongside Ace Stream and direct-HLS sports capabilities. The graph distinguishes catalog acquisition/normalization from provider-facing playback and shared parsing/assets. Some source is unsampled, so links to those capabilities are marked unverified rather than inferred as definite calls.

Main entry points: [`TabiiProvider/src/main/kotlin/tr/tabii/TabiiProvider.kt`](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TabiiProvider.kt) (tabii provider), [`TabiiProvider/src/main/kotlin/tr/tabii/TrLiveProvider.kt`](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TrLiveProvider.kt) (TR Channels provider), [`TabiiProvider/src/main/kotlin/tr/tabii/TrLiveChannels.kt`](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TrLiveChannels.kt) (M3U catalog), [`TabiiProvider/src/main/kotlin/tr/tabii/TabiiProviderPlugin.kt`](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TabiiProviderPlugin.kt) (Provider registration)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_integration["Cloudstream integration"]
  node_plugin["Provider registration"]
end

subgraph group_tabii["tabii live TV"]
  node_tabii_provider["tabii provider<br/>[TabiiProvider.kt]"]
  node_tabii_models["tabii channel models<br/>[TabiiModels.kt]"]
end

subgraph group_trlive["Turkish live catalog"]
  node_trlive_provider["TR Channels provider<br/>[TrLiveProvider.kt]"]
  node_trlive_catalog["M3U catalog<br/>[TrLiveChannels.kt]"]
  node_dead_streams["Dead stream filter<br/>[DeadStreams.kt]"]
  node_extra_channels["Extra channels<br/>[ExtraChannels.kt]"]
end

subgraph group_playback["Playback and shared utilities"]
  node_nextdata["Next.js data parser<br/>[NextData.kt]"]
  node_m3u_parser["M3U parser<br/>[M3u.kt]"]
  node_logo_assets["Channel logos<br/>[LogoAssets.kt]"]
  node_direct_streams["Direct HLS streams<br/>[DirectStreams.kt]"]
  node_ace_channels["Ace Stream channels"]
  node_ace_stream["Ace Stream handling<br/>[AceStream.kt]"]
  node_ace_app["Ace Stream app handoff<br/>[AceStreamApp.kt]"]
end

node_user(("Cloudstream user"))

node_user -->|"adds repository"| node_plugin
node_plugin -->|"registers"| node_tabii_provider
node_plugin -->|"registers"| node_trlive_provider
node_tabii_provider -->|"parses embedded data"| node_nextdata
node_tabii_provider -.->|"maps channel data"| node_tabii_models
node_tabii_provider -->|"selects logos"| node_logo_assets
node_trlive_provider -->|"loads catalog"| node_trlive_catalog
node_trlive_provider -->|"normalizes search"| node_m3u_parser
node_trlive_catalog -->|"parses playlist"| node_m3u_parser
node_trlive_catalog -->|"filters dead URLs"| node_dead_streams
node_trlive_catalog -->|"adds entries"| node_extra_channels
node_trlive_provider -->|"selects logos"| node_logo_assets
node_tabii_provider -->|"resolves direct playback"| node_direct_streams
node_tabii_provider -.->|"offers Ace channels"| node_ace_channels
node_ace_channels -->|"uses stream handling"| node_ace_stream
node_ace_stream -.->|"hands off playback"| node_ace_app

click node_plugin "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TabiiProviderPlugin.kt"
click node_tabii_provider "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TabiiProvider.kt"
click node_tabii_models "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TabiiModels.kt"
click node_nextdata "https://github.com/karayel90/cloudplug/blob/main/common/src/main/kotlin/tr/common/NextData.kt"
click node_trlive_provider "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TrLiveProvider.kt"
click node_trlive_catalog "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TrLiveChannels.kt"
click node_m3u_parser "https://github.com/karayel90/cloudplug/blob/main/common/src/main/kotlin/tr/common/M3u.kt"
click node_dead_streams "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/DeadStreams.kt"
click node_extra_channels "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/ExtraChannels.kt"
click node_logo_assets "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/LogoAssets.kt"
click node_direct_streams "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/DirectStreams.kt"
click node_ace_channels "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/AceStreamChannels.kt"
click node_ace_stream "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/AceStream.kt"
click node_ace_app "https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/AceStreamApp.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_plugin,node_user toneBlue
class node_tabii_provider,node_tabii_models toneAmber
class node_trlive_provider,node_trlive_catalog,node_dead_streams,node_extra_channels toneMint
class node_nextdata,node_m3u_parser,node_logo_assets,node_direct_streams,node_ace_channels,node_ace_stream,node_ace_app toneRose
```

## Components

### Cloudstream integration

- [Provider registration](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TabiiProviderPlugin.kt): `TabiiProvider/src/main/kotlin/tr/tabii/TabiiProviderPlugin.kt`

### tabii live TV

- [tabii provider](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TabiiProvider.kt): `TabiiProvider/src/main/kotlin/tr/tabii/TabiiProvider.kt`
- [tabii channel models](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TabiiModels.kt): `TabiiProvider/src/main/kotlin/tr/tabii/TabiiModels.kt`

### Turkish live catalog

- [TR Channels provider](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TrLiveProvider.kt): `TabiiProvider/src/main/kotlin/tr/tabii/TrLiveProvider.kt`
- [M3U catalog](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/TrLiveChannels.kt): `TabiiProvider/src/main/kotlin/tr/tabii/TrLiveChannels.kt`
- [Dead stream filter](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/DeadStreams.kt): `TabiiProvider/src/main/kotlin/tr/tabii/DeadStreams.kt`
- [Extra channels](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/ExtraChannels.kt): `TabiiProvider/src/main/kotlin/tr/tabii/ExtraChannels.kt`

### Playback and shared utilities

- [Next.js data parser](https://github.com/karayel90/cloudplug/blob/main/common/src/main/kotlin/tr/common/NextData.kt): `common/src/main/kotlin/tr/common/NextData.kt`
- [M3U parser](https://github.com/karayel90/cloudplug/blob/main/common/src/main/kotlin/tr/common/M3u.kt): `common/src/main/kotlin/tr/common/M3u.kt`
- [Channel logos](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/LogoAssets.kt): `TabiiProvider/src/main/kotlin/tr/tabii/LogoAssets.kt`
- [Direct HLS streams](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/DirectStreams.kt): `TabiiProvider/src/main/kotlin/tr/tabii/DirectStreams.kt`
- [Ace Stream channels](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/AceStreamChannels.kt): `TabiiProvider/src/main/kotlin/tr/tabii/AceStreamChannels.kt`
- [Ace Stream handling](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/AceStream.kt): `TabiiProvider/src/main/kotlin/tr/tabii/AceStream.kt`
- [Ace Stream app handoff](https://github.com/karayel90/cloudplug/blob/main/TabiiProvider/src/main/kotlin/tr/tabii/AceStreamApp.kt): `TabiiProvider/src/main/kotlin/tr/tabii/AceStreamApp.kt`

### Other components

- **Cloudstream user**

## Connections

- Cloudstream user → Provider registration: adds repository (evidence: `README.md`)
- Provider registration → tabii provider: registers (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TabiiProviderPlugin.kt`)
- Provider registration → TR Channels provider: registers (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TabiiProviderPlugin.kt`)
- tabii provider → Next.js data parser: parses embedded data (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TabiiProvider.kt`)
- tabii provider → tabii channel models: maps channel data
- tabii provider → Channel logos: selects logos (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TabiiProvider.kt`)
- TR Channels provider → M3U catalog: loads catalog (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TrLiveProvider.kt`)
- TR Channels provider → M3U parser: normalizes search (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TrLiveProvider.kt`)
- M3U catalog → M3U parser: parses playlist (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TrLiveChannels.kt`)
- M3U catalog → Dead stream filter: filters dead URLs (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TrLiveChannels.kt`)
- M3U catalog → Extra channels: adds entries (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TrLiveChannels.kt`)
- TR Channels provider → Channel logos: selects logos (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TrLiveProvider.kt`)
- tabii provider → Direct HLS streams: resolves direct playback (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/TabiiProvider.kt`)
- tabii provider → Ace Stream channels: offers Ace channels
- Ace Stream channels → Ace Stream handling: uses stream handling (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/AceStreamChannels.kt`)
- Ace Stream handling → Ace Stream app handoff: hands off playback (evidence: `TabiiProvider/src/main/kotlin/tr/tabii/AceStreamApp.kt`)
