# akiralereal/iptv architecture

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

- Interactive diagram: https://gitdiagram.com/akiralereal/iptv
- Repository: https://github.com/akiralereal/iptv

## Overview

iPTV is a self-hosted IPTV source-management and distribution server. Users configure sources and channel lineups, the server refreshes and combines provider channels, then serves playlists, EPG data, and playable streams to client players. The graph also shows management, user access, and logo capabilities documented in the README. The sampled code establishes the HTTP entry point, extractor registry and manager, and selected adapter relationships; other product branches are included where documented, with edges limited to visible code or README statements.

Main entry points: [`app.js`](https://github.com/akiralereal/iptv/blob/main/app.js) (HTTP Server), [`utils/extractorManager.js`](https://github.com/akiralereal/iptv/blob/main/utils/extractorManager.js) (Refresh Manager), [`extractors`](https://github.com/akiralereal/iptv/tree/main/extractors) (Source Adapters), [`utils/channelMerger.js`](https://github.com/akiralereal/iptv/blob/main/utils/channelMerger.js) (Channel Merge)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_server["Server and Access"]
  node_server["HTTP Server<br/>[app.js]"]
  node_config["System Config<br/>[config.js]"]
  node_users["User Tokens<br/>[userManager.js]"]
  node_adminapi["Admin APIs<br/>[adminAPI.js]"]
  node_extractapi["Extractor APIs<br/>[extractorsAPI.js]"]
end

subgraph group_sources["Source Ingestion"]
  node_registry["Module Registry<br/>[registry.js]"]
  node_manager["Refresh Manager"]
  node_adapters["Source Adapters"]
  node_external["Custom Sources<br/>[externalSources.js]"]
end

subgraph group_lineup["Channels and Guide"]
  node_channels["Channel Merge<br/>[channelMerger.js]"]
  node_lineupcfg["Channel Profiles<br/>[playlistConfig.js]"]
  node_epg["EPG Services<br/>[epgAggregator.js]"]
  node_logos["Logo Library<br/>[logoLibrary.js]"]
end

subgraph group_delivery["Playback Delivery"]
  node_playback["Playback Resolver<br/>[appUtils.js]"]
  node_proxy["Stream Proxies<br/>[hlsProxy.js]"]
  node_flv["FLV Proxy<br/>[flvProxy.js]"]
end

node_viewer(("Viewer"))
node_administrator(("Administrator"))
node_provider(("TV Platforms"))
node_player(("IPTV Player"))

node_administrator -->|"manages"| node_server
node_viewer -->|"requests"| node_server
node_server -->|"reads"| node_config
node_server -->|"authorizes"| node_users
node_server -->|"routes source edits"| node_adminapi
node_server -->|"routes module login"| node_extractapi
node_server -->|"refreshes sources"| node_manager
node_manager -->|"loads modules"| node_registry
node_registry -->|"registers adapters"| node_adapters
node_adapters -->|"fetches channels"| node_provider
node_external -->|"imports subscriptions"| node_provider
node_manager -->|"provides cached channels"| node_channels
node_external -->|"supplies sources"| node_channels
node_channels -->|"combines with profiles"| node_lineupcfg
node_server -->|"reads playlist config"| node_lineupcfg
node_server -->|"serves program guides"| node_epg
node_server -->|"serves logo packs"| node_logos
node_player -->|"loads playlists and EPG"| node_server
node_player -->|"requests playback"| node_server
node_server -->|"resolves channel"| node_playback
node_playback -.->|"resolves provider stream"| node_adapters
node_server -->|"relays HLS"| node_proxy
node_server -->|"relays FLV"| node_flv

click node_server "https://github.com/akiralereal/iptv/blob/main/app.js"
click node_config "https://github.com/akiralereal/iptv/blob/main/config.js"
click node_users "https://github.com/akiralereal/iptv/blob/main/utils/userManager.js"
click node_adminapi "https://github.com/akiralereal/iptv/blob/main/utils/adminAPI.js"
click node_extractapi "https://github.com/akiralereal/iptv/blob/main/utils/extractorsAPI.js"
click node_registry "https://github.com/akiralereal/iptv/blob/main/extractors/registry.js"
click node_manager "https://github.com/akiralereal/iptv/blob/main/utils/extractorManager.js"
click node_adapters "https://github.com/akiralereal/iptv/tree/main/extractors"
click node_external "https://github.com/akiralereal/iptv/blob/main/utils/externalSources.js"
click node_channels "https://github.com/akiralereal/iptv/blob/main/utils/channelMerger.js"
click node_lineupcfg "https://github.com/akiralereal/iptv/blob/main/utils/playlistConfig.js"
click node_epg "https://github.com/akiralereal/iptv/blob/main/utils/epgAggregator.js"
click node_logos "https://github.com/akiralereal/iptv/blob/main/utils/logoLibrary.js"
click node_playback "https://github.com/akiralereal/iptv/blob/main/utils/appUtils.js"
click node_proxy "https://github.com/akiralereal/iptv/blob/main/utils/hlsProxy.js"
click node_flv "https://github.com/akiralereal/iptv/blob/main/utils/flvProxy.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_server,node_config,node_users,node_adminapi,node_extractapi,node_viewer toneBlue
class node_registry,node_manager,node_adapters,node_external toneAmber
class node_channels,node_lineupcfg,node_epg,node_logos toneMint
class node_playback,node_proxy,node_flv toneRose
class node_administrator,node_provider,node_player toneIndigo
```

## Components

### Server and Access

- [HTTP Server](https://github.com/akiralereal/iptv/blob/main/app.js): `app.js`
- [System Config](https://github.com/akiralereal/iptv/blob/main/config.js): `config.js`
- [User Tokens](https://github.com/akiralereal/iptv/blob/main/utils/userManager.js): `utils/userManager.js`
- [Admin APIs](https://github.com/akiralereal/iptv/blob/main/utils/adminAPI.js): `utils/adminAPI.js`
- [Extractor APIs](https://github.com/akiralereal/iptv/blob/main/utils/extractorsAPI.js): `utils/extractorsAPI.js`

### Source Ingestion

- [Module Registry](https://github.com/akiralereal/iptv/blob/main/extractors/registry.js): `extractors/registry.js`
- [Refresh Manager](https://github.com/akiralereal/iptv/blob/main/utils/extractorManager.js): `utils/extractorManager.js`
- [Source Adapters](https://github.com/akiralereal/iptv/tree/main/extractors): `extractors`
- [Custom Sources](https://github.com/akiralereal/iptv/blob/main/utils/externalSources.js): `utils/externalSources.js`

### Channels and Guide

- [Channel Merge](https://github.com/akiralereal/iptv/blob/main/utils/channelMerger.js): `utils/channelMerger.js`
- [Channel Profiles](https://github.com/akiralereal/iptv/blob/main/utils/playlistConfig.js): `utils/playlistConfig.js`
- [EPG Services](https://github.com/akiralereal/iptv/blob/main/utils/epgAggregator.js): `utils/epgAggregator.js`
- [Logo Library](https://github.com/akiralereal/iptv/blob/main/utils/logoLibrary.js): `utils/logoLibrary.js`

### Playback Delivery

- [Playback Resolver](https://github.com/akiralereal/iptv/blob/main/utils/appUtils.js): `utils/appUtils.js`
- [Stream Proxies](https://github.com/akiralereal/iptv/blob/main/utils/hlsProxy.js): `utils/hlsProxy.js`
- [FLV Proxy](https://github.com/akiralereal/iptv/blob/main/utils/flvProxy.js): `utils/flvProxy.js`

### Other components

- **Viewer**
- **Administrator**
- **TV Platforms**
- **IPTV Player**

## Connections

- Administrator → HTTP Server: manages
- Viewer → HTTP Server: requests
- HTTP Server → System Config: reads (evidence: `app.js`)
- HTTP Server → User Tokens: authorizes (evidence: `app.js`)
- HTTP Server → Admin APIs: routes source edits (evidence: `app.js`)
- HTTP Server → Extractor APIs: routes module login (evidence: `app.js`)
- HTTP Server → Refresh Manager: refreshes sources (evidence: `app.js`)
- Refresh Manager → Module Registry: loads modules (evidence: `utils/extractorManager.js`)
- Module Registry → Source Adapters: registers adapters (evidence: `extractors/registry.js`)
- Source Adapters → TV Platforms: fetches channels
- Custom Sources → TV Platforms: imports subscriptions
- Refresh Manager → Channel Merge: provides cached channels (evidence: `utils/extractorManager.js`)
- Custom Sources → Channel Merge: supplies sources
- Channel Merge → Channel Profiles: combines with profiles
- HTTP Server → Channel Profiles: reads playlist config (evidence: `app.js`)
- HTTP Server → EPG Services: serves program guides
- HTTP Server → Logo Library: serves logo packs (evidence: `app.js`)
- IPTV Player → HTTP Server: loads playlists and EPG
- IPTV Player → HTTP Server: requests playback
- HTTP Server → Playback Resolver: resolves channel (evidence: `app.js`)
- Playback Resolver → Source Adapters: resolves provider stream
- HTTP Server → Stream Proxies: relays HLS (evidence: `app.js`)
- HTTP Server → FLV Proxy: relays FLV (evidence: `app.js`)
