# ejbarra/descargador architecture

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

- Interactive diagram: https://gitdiagram.com/ejbarra/descargador
- Repository: https://github.com/ejbarra/descargador

## Overview

Descargador is a single-file Python application for downloading individual videos or audio, and inspecting media information, through a Tkinter GUI or interactive CLI. The documented workflow selects a URL and options, then delegates media handling to yt-dlp; audio conversion and artwork use FFmpeg when available. The excerpts show the GUI worker calling the download functions and the information path using yt-dlp. CLI dispatch and some implementation details are documented but not sampled, so their internal wiring is omitted.

Main entry points: [`Descargador.py`](https://github.com/ejbarra/descargador/blob/main/Descargador.py) (Tkinter GUI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_gui["Tkinter GUI<br/>[Descargador.py]"]
  node_cli["Interactive CLI<br/>[Descargador.py]"]
end

subgraph group_media["Media operations"]
  node_video["Video download<br/>[Descargador.py]"]
  node_audio["Audio download<br/>[Descargador.py]"]
  node_info["Media information<br/>[Descargador.py]"]
  node_ytdlp["yt-dlp"]
  node_ffmpeg["FFmpeg"]
end

subgraph group_support["Runtime support"]
  node_destination[("Download folders<br/>[Descargador.py]")]
  node_logger["Activity logging<br/>[Descargador.py]"]
  node_logfile[("Rotating log file<br/>[Descargador.py]")]
  node_updates["Dependency updates<br/>[Descargador.py]"]
  node_uv["uv"]
end

node_user(("User"))

node_user -->|"uses"| node_gui
node_user -->|"uses"| node_cli
node_gui -->|"starts"| node_video
node_gui -->|"starts"| node_audio
node_video -->|"downloads"| node_ytdlp
node_audio -->|"downloads"| node_ytdlp
node_info -->|"extracts info"| node_ytdlp
node_audio -.->|"converts media"| node_ffmpeg
node_gui -->|"selects folder"| node_destination
node_video -->|"writes files"| node_destination
node_audio -->|"writes files"| node_destination
node_logger -->|"writes"| node_logfile
node_updates -->|"runs upgrades"| node_uv

click node_gui "https://github.com/ejbarra/descargador/blob/main/Descargador.py"
click node_cli "https://github.com/ejbarra/descargador/blob/main/Descargador.py"
click node_video "https://github.com/ejbarra/descargador/blob/main/Descargador.py"
click node_audio "https://github.com/ejbarra/descargador/blob/main/Descargador.py"
click node_info "https://github.com/ejbarra/descargador/blob/main/Descargador.py"
click node_destination "https://github.com/ejbarra/descargador/blob/main/Descargador.py"
click node_logger "https://github.com/ejbarra/descargador/blob/main/Descargador.py"
click node_logfile "https://github.com/ejbarra/descargador/blob/main/Descargador.py"
click node_updates "https://github.com/ejbarra/descargador/blob/main/Descargador.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_gui,node_cli,node_user toneBlue
class node_video,node_audio,node_info,node_ytdlp,node_ffmpeg toneAmber
class node_destination,node_logger,node_logfile,node_updates,node_uv toneMint
```

## Components

### User interfaces

- [Tkinter GUI](https://github.com/ejbarra/descargador/blob/main/Descargador.py): `Descargador.py`
- [Interactive CLI](https://github.com/ejbarra/descargador/blob/main/Descargador.py): `Descargador.py`

### Media operations

- [Video download](https://github.com/ejbarra/descargador/blob/main/Descargador.py): `Descargador.py`
- [Audio download](https://github.com/ejbarra/descargador/blob/main/Descargador.py): `Descargador.py`
- [Media information](https://github.com/ejbarra/descargador/blob/main/Descargador.py): `Descargador.py`
- **yt-dlp**
- **FFmpeg**

### Runtime support

- [Download folders](https://github.com/ejbarra/descargador/blob/main/Descargador.py): `Descargador.py`
- [Activity logging](https://github.com/ejbarra/descargador/blob/main/Descargador.py): `Descargador.py`
- [Rotating log file](https://github.com/ejbarra/descargador/blob/main/Descargador.py): `Descargador.py`
- [Dependency updates](https://github.com/ejbarra/descargador/blob/main/Descargador.py): `Descargador.py`
- **uv**

### Other components

- **User**

## Connections

- User → Tkinter GUI: uses
- User → Interactive CLI: uses
- Tkinter GUI → Video download: starts
- Tkinter GUI → Audio download: starts
- Video download → yt-dlp: downloads
- Audio download → yt-dlp: downloads
- Media information → yt-dlp: extracts info
- Audio download → FFmpeg: converts media
- Tkinter GUI → Download folders: selects folder
- Video download → Download folders: writes files
- Audio download → Download folders: writes files
- Activity logging → Rotating log file: writes
- Dependency updates → uv: runs upgrades
