# ivanilsonibiapina/minidm architecture

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

- Interactive diagram: https://gitdiagram.com/ivanilsonibiapina/minidm
- Repository: https://github.com/ivanilsonibiapina/minidm

## Overview

MiniDM is a Python download manager with CLI, desktop GUI, local HTTP API/web UI, browser-extension integration, and Android support. Its central workflow accepts a URL and options, creates a persistent task, schedules a downloader, and reports progress and completion. Download paths include segmented/resumable files, HLS/DASH streams, FTP/SFTP, torrents delegated to aria2, and yt-dlp. The README documents additional capabilities such as profiles, categories, checksums, verification, and live streams. Some subsystems were not sampled; their documented capabilities are shown, while uncertain internal call paths are omitted.

Main entry points: [`minidm/scheduler.py`](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/scheduler.py) (Scheduler), [`minidm/server.py`](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/server.py) (Local API), [`minidm/stream.py`](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/stream.py) (HLS/DASH Engine), [`minidm/downloader.py`](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/downloader.py) (Segmented File Engine)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["User Interfaces"]
  node_cli["CLI<br/>[cli.py]"]
  node_gui["Desktop GUI<br/>[gui.py]"]
  node_browser["Browser Extension<br/>[popup.js]"]
  node_webui["Web UI<br/>[app.js]"]
end

subgraph group_coord["Queue and Control"]
  node_api["Local API<br/>[server.py]"]
  node_daemon["Daemon<br/>[daemon.py]"]
  node_scheduler["Scheduler<br/>[scheduler.py]"]
end

subgraph group_transfer["Download Engines"]
  node_probe["Server Probe<br/>[remote.py]"]
  node_fileengine["Segmented File Engine<br/>[downloader.py]"]
  node_ftp["FTP/SFTP Engine<br/>[ftpdl.py]"]
  node_throttle["Bandwidth Control<br/>[throttle.py]"]
end

subgraph group_media["Media and Integrations"]
  node_stream["HLS/DASH Engine<br/>[stream.py]"]
  node_media["Media Analysis<br/>[media.py]"]
  node_ytanalysis["yt-dlp Analysis<br/>[ytdlp.py]"]
  node_ytdlpengine["yt-dlp Downloader<br/>[ytdlpdl.py]"]
  node_torrent["Torrent Delegation<br/>[torrent.py]"]
  node_aria2["aria2"]
  node_ffmpeg["FFmpeg"]
end

subgraph group_state["Configuration and Results"]
  node_tasks["Task Model<br/>[meta.py]"]
  node_queue[("Persistent Queue<br/>[store.py]")]
  node_config["Settings<br/>[config.py]"]
  node_profiles["Profiles and Categories<br/>[profiles.py]"]
  node_verify["Checksum and Signature<br/>[verify.py]"]
  node_filesystem[("Downloaded Files")]
end

node_user(("User"))

node_user -->|"submits URLs"| node_cli
node_user -->|"manages downloads"| node_gui
node_browser -->|"submits media"| node_api
node_webui -->|"controls queue"| node_api
node_cli -->|"submits tasks"| node_scheduler
node_gui -->|"controls tasks"| node_scheduler
node_gui -->|"starts local API"| node_api
node_daemon -->|"runs downloads"| node_scheduler
node_api -->|"submits tasks"| node_scheduler
node_api -->|"adds and reads tasks"| node_queue
node_api -->|"resolves media titles"| node_ytanalysis
node_scheduler -->|"claims and updates"| node_queue
node_queue -->|"persists records"| node_tasks
node_scheduler -->|"runs downloads"| node_fileengine
node_scheduler -->|"runs stream tasks"| node_stream
node_scheduler -->|"delegates downloads"| node_ytdlpengine
node_scheduler -->|"delegates FTP/SFTP"| node_ftp
node_scheduler -->|"delegates torrents"| node_torrent
node_scheduler -->|"uses settings"| node_config
node_cli -->|"applies profiles"| node_profiles
node_api -->|"accepts profile options"| node_profiles
node_fileengine -->|"probes server"| node_probe
node_fileengine -->|"limits transfer rate"| node_throttle
node_fileengine -->|"checks completed files"| node_verify
node_fileengine -->|"writes downloads"| node_filesystem
node_ftp -->|"reuses download engine"| node_fileengine
node_stream -->|"uses manifest formats"| node_media
node_stream -->|"limits segment transfers"| node_throttle
node_stream -->|"verifies output"| node_verify
node_stream -->|"writes assembled media"| node_filesystem
node_media -.->|"supports analysis delegation"| node_ytanalysis
node_ytdlpengine -->|"uses yt-dlp integration"| node_ytanalysis
node_ytdlpengine -->|"writes media files"| node_filesystem
node_torrent -->|"delegates via RPC"| node_aria2
node_torrent -->|"preserves partial data"| node_filesystem
node_stream -.->|"muxes audio and video"| node_ffmpeg
node_verify -->|"checks downloaded files"| node_filesystem

click node_cli "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/cli.py"
click node_gui "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/gui.py"
click node_browser "https://github.com/ivanilsonibiapina/minidm/blob/main/browser_ext/popup.js"
click node_webui "https://github.com/ivanilsonibiapina/minidm/blob/main/webui/app.js"
click node_api "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/server.py"
click node_daemon "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/daemon.py"
click node_scheduler "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/scheduler.py"
click node_tasks "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/meta.py"
click node_queue "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/store.py"
click node_config "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/config.py"
click node_profiles "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/profiles.py"
click node_probe "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/remote.py"
click node_fileengine "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/downloader.py"
click node_ftp "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/ftpdl.py"
click node_stream "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/stream.py"
click node_media "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/media.py"
click node_ytanalysis "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/ytdlp.py"
click node_ytdlpengine "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/ytdlpdl.py"
click node_torrent "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/torrent.py"
click node_throttle "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/throttle.py"
click node_verify "https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/verify.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_cli,node_gui,node_browser,node_webui,node_user toneBlue
class node_api,node_daemon,node_scheduler toneAmber
class node_probe,node_fileengine,node_ftp,node_throttle toneMint
class node_stream,node_media,node_ytanalysis,node_ytdlpengine,node_torrent,node_aria2,node_ffmpeg toneRose
class node_tasks,node_queue,node_config,node_profiles,node_verify,node_filesystem toneIndigo
```

## Components

### User Interfaces

- [CLI](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/cli.py): `minidm/cli.py`
- [Desktop GUI](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/gui.py): `minidm/gui.py`
- [Browser Extension](https://github.com/ivanilsonibiapina/minidm/blob/main/browser_ext/popup.js): `browser_ext/popup.js`
- [Web UI](https://github.com/ivanilsonibiapina/minidm/blob/main/webui/app.js): `webui/app.js`

### Queue and Control

- [Local API](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/server.py): `minidm/server.py`
- [Daemon](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/daemon.py): `minidm/daemon.py`
- [Scheduler](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/scheduler.py): `minidm/scheduler.py`

### Download Engines

- [Server Probe](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/remote.py): `minidm/remote.py`
- [Segmented File Engine](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/downloader.py): `minidm/downloader.py`
- [FTP/SFTP Engine](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/ftpdl.py): `minidm/ftpdl.py`
- [Bandwidth Control](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/throttle.py): `minidm/throttle.py`

### Media and Integrations

- [HLS/DASH Engine](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/stream.py): `minidm/stream.py`
- [Media Analysis](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/media.py): `minidm/media.py`
- [yt-dlp Analysis](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/ytdlp.py): `minidm/ytdlp.py`
- [yt-dlp Downloader](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/ytdlpdl.py): `minidm/ytdlpdl.py`
- [Torrent Delegation](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/torrent.py): `minidm/torrent.py`
- **aria2**
- **FFmpeg**

### Configuration and Results

- [Task Model](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/meta.py): `minidm/meta.py`
- [Persistent Queue](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/store.py): `minidm/store.py`
- [Settings](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/config.py): `minidm/config.py`
- [Profiles and Categories](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/profiles.py): `minidm/profiles.py`
- [Checksum and Signature](https://github.com/ivanilsonibiapina/minidm/blob/main/minidm/verify.py): `minidm/verify.py`
- **Downloaded Files**

### Other components

- **User**

## Connections

- User → CLI: submits URLs (evidence: `README.md`)
- User → Desktop GUI: manages downloads (evidence: `README.md`)
- Browser Extension → Local API: submits media (evidence: `README.md`)
- Web UI → Local API: controls queue (evidence: `README.md`)
- CLI → Scheduler: submits tasks (evidence: `minidm/cli.py`)
- Desktop GUI → Scheduler: controls tasks (evidence: `minidm/gui.py`)
- Desktop GUI → Local API: starts local API (evidence: `minidm/gui.py`)
- Daemon → Scheduler: runs downloads (evidence: `minidm/daemon.py`)
- Local API → Scheduler: submits tasks (evidence: `minidm/server.py`)
- Local API → Persistent Queue: adds and reads tasks (evidence: `minidm/server.py`)
- Local API → yt-dlp Analysis: resolves media titles (evidence: `minidm/server.py`)
- Scheduler → Persistent Queue: claims and updates (evidence: `minidm/scheduler.py`)
- Persistent Queue → Task Model: persists records (evidence: `minidm/store.py`)
- Scheduler → Segmented File Engine: runs downloads (evidence: `minidm/scheduler.py`)
- Scheduler → HLS/DASH Engine: runs stream tasks (evidence: `minidm/scheduler.py`)
- Scheduler → yt-dlp Downloader: delegates downloads (evidence: `minidm/scheduler.py`)
- Scheduler → FTP/SFTP Engine: delegates FTP/SFTP (evidence: `minidm/scheduler.py`)
- Scheduler → Torrent Delegation: delegates torrents (evidence: `README.md`)
- Scheduler → Settings: uses settings (evidence: `minidm/scheduler.py`)
- CLI → Profiles and Categories: applies profiles (evidence: `minidm/cli.py`)
- Local API → Profiles and Categories: accepts profile options (evidence: `minidm/server.py`)
- Segmented File Engine → Server Probe: probes server (evidence: `minidm/downloader.py`)
- Segmented File Engine → Bandwidth Control: limits transfer rate (evidence: `minidm/downloader.py`)
- Segmented File Engine → Checksum and Signature: checks completed files (evidence: `minidm/downloader.py`)
- Segmented File Engine → Downloaded Files: writes downloads (evidence: `README.md`)
- FTP/SFTP Engine → Segmented File Engine: reuses download engine (evidence: `minidm/ftpdl.py`)
- HLS/DASH Engine → Media Analysis: uses manifest formats (evidence: `minidm/stream.py`)
- HLS/DASH Engine → Bandwidth Control: limits segment transfers (evidence: `minidm/stream.py`)
- HLS/DASH Engine → Checksum and Signature: verifies output (evidence: `minidm/stream.py`)
- HLS/DASH Engine → Downloaded Files: writes assembled media (evidence: `README.md`)
- Media Analysis → yt-dlp Analysis: supports analysis delegation (evidence: `minidm/media.py`)
- yt-dlp Downloader → yt-dlp Analysis: uses yt-dlp integration (evidence: `minidm/ytdlpdl.py`)
- yt-dlp Downloader → Downloaded Files: writes media files (evidence: `README.md`)
- Torrent Delegation → aria2: delegates via RPC (evidence: `README.md`)
- Torrent Delegation → Downloaded Files: preserves partial data (evidence: `README.md`)
- HLS/DASH Engine → FFmpeg: muxes audio and video
- Checksum and Signature → Downloaded Files: checks downloaded files (evidence: `README.md`)
