# renx86/gdl-web architecture

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

- Interactive diagram: https://gitdiagram.com/renx86/gdl-web
- Repository: https://github.com/renx86/gdl-web

## Overview

GDL-Web is a Flask application for session-isolated media downloads through gallery-dl and yt-dlp. A user submits a URL (and optionally cookies or format choices) in the web interface; API routes validate and dispatch the request through a session adapter to download services, which run the download engines and track progress. Users can monitor status, filter or manage downloads, and browse or retrieve completed files. The graph includes README-documented capabilities whose detailed implementation was not sampled; those relationships are cited to the README or left unverified.

Main entry points: [`app/services/download_service.py`](https://github.com/renx86/gdl-web/blob/main/app/services/download_service.py) (Download service), [`app/__init__.py`](https://github.com/renx86/gdl-web/blob/main/app/__init__.py) (App factory), [`app/routes/api.py`](https://github.com/renx86/gdl-web/blob/main/app/routes/api.py) (API routes), [`app/services/engine_manager.py`](https://github.com/renx86/gdl-web/blob/main/app/services/engine_manager.py) (Engine manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web interface"]
  node_browser["Browser UI<br/>[index.html]"]
  node_frontend["Dashboard client<br/>[main.js]"]
  node_web_routes["Web routes<br/>[web.py]"]
  node_api["API routes<br/>[api.py]"]
end

subgraph group_application["Application setup"]
  node_app_factory["App factory<br/>[__init__.py]"]
  node_config["Configuration<br/>[config.py]"]
  node_service_registry["Service registry"]
  node_download_model["Download model<br/>[download.py]"]
end

subgraph group_downloads["Download workflow"]
  node_adapter["Session adapter"]
  node_download_service["Download service"]
  node_progress_parser["Progress parser<br/>[progress_parser.py]"]
  node_network_utils["Network checks<br/>[network_utils.py]"]
end

subgraph group_security["Security and files"]
  node_cookie_manager["Cookie encryption<br/>[cookie_manager.py]"]
  node_file_utils["Secure file serving<br/>[utils.py]"]
  node_download_storage[("Download files")]
end

subgraph group_engines["Download engines"]
  node_engine_manager["Engine manager<br/>[engine_manager.py]"]
  node_gallery_dl{{"gallery-dl"}}
  node_yt_dlp{{"yt-dlp"}}
end

node_user(("User"))
node_network{{"Media platforms"}}

node_user -->|"uses"| node_browser
node_browser -->|"loads"| node_frontend
node_frontend -->|"requests status"| node_api
node_user -->|"submits URL"| node_frontend
node_app_factory -->|"loads configuration"| node_config
node_app_factory -->|"registers services"| node_service_registry
node_app_factory -->|"wraps service"| node_adapter
node_app_factory -->|"registers manager"| node_engine_manager
node_app_factory -->|"registers routes"| node_web_routes
node_app_factory -->|"registers routes"| node_api
node_api -->|"dispatches requests"| node_adapter
node_adapter -->|"delegates downloads"| node_download_service
node_download_service -->|"parses output"| node_progress_parser
node_download_service -->|"checks connectivity"| node_network_utils
node_download_service -->|"handles cookies"| node_cookie_manager
node_download_service -.->|"runs downloads"| node_gallery_dl
node_download_service -.->|"runs downloads"| node_yt_dlp
node_engine_manager -->|"checks and updates"| node_gallery_dl
node_engine_manager -->|"checks and updates"| node_yt_dlp
node_gallery_dl -.->|"fetches media"| node_network
node_yt_dlp -.->|"fetches media"| node_network
node_download_service -.->|"writes files"| node_download_storage
node_download_storage -.->|"serves files"| node_file_utils
node_api -->|"serves validated files"| node_file_utils
node_api -.->|"serializes configuration"| node_download_model

click node_browser "https://github.com/renx86/gdl-web/blob/main/app/templates/index.html"
click node_frontend "https://github.com/renx86/gdl-web/blob/main/app/static/js/main.js"
click node_web_routes "https://github.com/renx86/gdl-web/blob/main/app/routes/web.py"
click node_api "https://github.com/renx86/gdl-web/blob/main/app/routes/api.py"
click node_app_factory "https://github.com/renx86/gdl-web/blob/main/app/__init__.py"
click node_config "https://github.com/renx86/gdl-web/blob/main/app/config.py"
click node_service_registry "https://github.com/renx86/gdl-web/blob/main/app/services/service_registry.py"
click node_download_model "https://github.com/renx86/gdl-web/blob/main/app/models/download.py"
click node_adapter "https://github.com/renx86/gdl-web/blob/main/app/services/download_service_adapter.py"
click node_download_service "https://github.com/renx86/gdl-web/blob/main/app/services/download_service.py"
click node_progress_parser "https://github.com/renx86/gdl-web/blob/main/app/services/progress_parser.py"
click node_network_utils "https://github.com/renx86/gdl-web/blob/main/app/services/network_utils.py"
click node_engine_manager "https://github.com/renx86/gdl-web/blob/main/app/services/engine_manager.py"
click node_cookie_manager "https://github.com/renx86/gdl-web/blob/main/app/services/cookie_manager.py"
click node_file_utils "https://github.com/renx86/gdl-web/blob/main/app/utils.py"

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_browser,node_frontend,node_web_routes,node_api,node_user toneBlue
class node_app_factory,node_config,node_service_registry,node_download_model toneAmber
class node_adapter,node_download_service,node_progress_parser,node_network_utils toneMint
class node_cookie_manager,node_file_utils,node_download_storage toneRose
class node_engine_manager,node_gallery_dl,node_yt_dlp,node_network toneIndigo
```

## Components

### Web interface

- [Browser UI](https://github.com/renx86/gdl-web/blob/main/app/templates/index.html): `app/templates/index.html`
- [Dashboard client](https://github.com/renx86/gdl-web/blob/main/app/static/js/main.js): `app/static/js/main.js`
- [Web routes](https://github.com/renx86/gdl-web/blob/main/app/routes/web.py): `app/routes/web.py`
- [API routes](https://github.com/renx86/gdl-web/blob/main/app/routes/api.py): `app/routes/api.py`

### Application setup

- [App factory](https://github.com/renx86/gdl-web/blob/main/app/__init__.py): `app/__init__.py`
- [Configuration](https://github.com/renx86/gdl-web/blob/main/app/config.py): `app/config.py`
- [Service registry](https://github.com/renx86/gdl-web/blob/main/app/services/service_registry.py): `app/services/service_registry.py`
- [Download model](https://github.com/renx86/gdl-web/blob/main/app/models/download.py): `app/models/download.py`

### Download workflow

- [Session adapter](https://github.com/renx86/gdl-web/blob/main/app/services/download_service_adapter.py): `app/services/download_service_adapter.py`
- [Download service](https://github.com/renx86/gdl-web/blob/main/app/services/download_service.py): `app/services/download_service.py`
- [Progress parser](https://github.com/renx86/gdl-web/blob/main/app/services/progress_parser.py): `app/services/progress_parser.py`
- [Network checks](https://github.com/renx86/gdl-web/blob/main/app/services/network_utils.py): `app/services/network_utils.py`

### Security and files

- [Cookie encryption](https://github.com/renx86/gdl-web/blob/main/app/services/cookie_manager.py): `app/services/cookie_manager.py`
- [Secure file serving](https://github.com/renx86/gdl-web/blob/main/app/utils.py): `app/utils.py`
- **Download files**

### Download engines

- [Engine manager](https://github.com/renx86/gdl-web/blob/main/app/services/engine_manager.py): `app/services/engine_manager.py`
- **gallery-dl**
- **yt-dlp**

### Other components

- **User**
- **Media platforms**

## Connections

- User → Browser UI: uses
- Browser UI → Dashboard client: loads
- Dashboard client → API routes: requests status
- User → Dashboard client: submits URL
- App factory → Configuration: loads configuration (evidence: `app/__init__.py`)
- App factory → Service registry: registers services (evidence: `app/__init__.py`)
- App factory → Session adapter: wraps service (evidence: `app/__init__.py`)
- App factory → Engine manager: registers manager (evidence: `app/__init__.py`)
- App factory → Web routes: registers routes (evidence: `app/__init__.py`)
- App factory → API routes: registers routes (evidence: `app/__init__.py`)
- API routes → Session adapter: dispatches requests (evidence: `app/routes/api.py`)
- Session adapter → Download service: delegates downloads (evidence: `app/services/download_service_adapter.py`)
- Download service → Progress parser: parses output (evidence: `app/services/download_service.py`)
- Download service → Network checks: checks connectivity (evidence: `app/services/download_service.py`)
- Download service → Cookie encryption: handles cookies (evidence: `app/services/download_service.py`)
- Download service → gallery-dl: runs downloads
- Download service → yt-dlp: runs downloads
- Engine manager → gallery-dl: checks and updates (evidence: `app/services/engine_manager.py`)
- Engine manager → yt-dlp: checks and updates (evidence: `app/services/engine_manager.py`)
- gallery-dl → Media platforms: fetches media
- yt-dlp → Media platforms: fetches media
- Download service → Download files: writes files
- Download files → Secure file serving: serves files
- API routes → Secure file serving: serves validated files (evidence: `app/routes/api.py`)
- API routes → Download model: serializes configuration
