# nayandas69/social-media-downloader architecture

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

- Interactive diagram: https://gitdiagram.com/nayandas69/social-media-downloader
- Repository: https://github.com/nayandas69/social-media-downloader

## Overview

Social Media Downloader is a command-line tool for retrieving public media from supported platforms. Users choose a platform, submit a URL or batch file, select a format, and save downloads locally; the README also documents download history and update checks. The implementation is concentrated in `smd/downloader.py`, so several responsibilities share that path. Batch, Instagram, and update capabilities are documented or exported, but their internal wiring is not fully visible in the sampled excerpts; edges are limited accordingly.

Main entry points: [`smd/downloader.py`](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py) (Interactive CLI), [`smd/__main__.py`](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/__main__.py) (CLI entry point)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_cli["CLI interaction"]
  node_entry["CLI entry point<br/>[__main__.py]"]
  node_cli["Interactive CLI<br/>[downloader.py]"]
end

subgraph group_download["Download workflow"]
  node_url["URL validation<br/>[downloader.py]"]
  node_batch["Batch input<br/>[downloader.py]"]
  node_format["Format selection<br/>[downloader.py]"]
  node_platform["Platform downloads<br/>[downloader.py]"]
  node_instagram["Instagram handling<br/>[downloader.py]"]
  node_update_check["Update checker<br/>[downloader.py]"]
end

subgraph group_state["Local state"]
  node_config["Configuration<br/>[downloader.py]"]
  node_history["Download history<br/>[downloader.py]"]
  node_media["Downloaded media"]
  node_config_file["Config file"]
  node_history_file["History CSV"]
end

subgraph group_integrations["External services"]
  node_yt_dlp["yt-dlp"]
  node_instaloader["Instaloader"]
  node_ffmpeg["FFmpeg"]
  node_updates["Update service"]
end

node_user(("CLI user"))

node_user -->|"starts"| node_entry
node_entry -->|"invokes"| node_cli
node_user -->|"provides choices"| node_cli
node_cli -->|"validates URL"| node_url
node_cli -->|"dispatches batch"| node_batch
node_batch -->|"submits URLs"| node_platform
node_cli -->|"selects format"| node_format
node_cli -->|"dispatches download"| node_platform
node_cli -->|"dispatches Instagram"| node_instagram
node_platform -->|"downloads via"| node_yt_dlp
node_platform -->|"writes media"| node_media
node_instagram -.->|"uses"| node_instaloader
node_instagram -.->|"writes media"| node_media
node_format -->|"converts or merges"| node_ffmpeg
node_cli -->|"loads settings"| node_config
node_config -->|"reads and writes"| node_config_file
node_platform -->|"records result"| node_history
node_history -->|"writes entries"| node_history_file
node_cli -->|"checks updates"| node_update_check
node_update_check -->|"requests release data"| node_updates

click node_entry "https://github.com/nayandas69/social-media-downloader/blob/dev/smd/__main__.py"
click node_cli "https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py"
click node_url "https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py"
click node_batch "https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py"
click node_format "https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py"
click node_platform "https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py"
click node_instagram "https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py"
click node_config "https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py"
click node_history "https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py"
click node_update_check "https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.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_entry,node_cli,node_user toneBlue
class node_url,node_batch,node_format,node_platform,node_instagram,node_update_check toneAmber
class node_config,node_history,node_media,node_config_file,node_history_file toneMint
class node_yt_dlp,node_instaloader,node_ffmpeg,node_updates toneRose
```

## Components

### CLI interaction

- [CLI entry point](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/__main__.py): `smd/__main__.py`
- [Interactive CLI](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py): `smd/downloader.py`

### Download workflow

- [URL validation](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py): `smd/downloader.py`
- [Batch input](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py): `smd/downloader.py`
- [Format selection](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py): `smd/downloader.py`
- [Platform downloads](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py): `smd/downloader.py`
- [Instagram handling](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py): `smd/downloader.py`
- [Update checker](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py): `smd/downloader.py`

### Local state

- [Configuration](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py): `smd/downloader.py`
- [Download history](https://github.com/nayandas69/social-media-downloader/blob/dev/smd/downloader.py): `smd/downloader.py`
- **Downloaded media**
- **Config file**
- **History CSV**

### External services

- **yt-dlp**
- **Instaloader**
- **FFmpeg**
- **Update service**

### Other components

- **CLI user**

## Connections

- CLI user → CLI entry point: starts
- CLI entry point → Interactive CLI: invokes
- CLI user → Interactive CLI: provides choices
- Interactive CLI → URL validation: validates URL
- Interactive CLI → Batch input: dispatches batch
- Batch input → Platform downloads: submits URLs
- Interactive CLI → Format selection: selects format
- Interactive CLI → Platform downloads: dispatches download
- Interactive CLI → Instagram handling: dispatches Instagram
- Platform downloads → yt-dlp: downloads via
- Platform downloads → Downloaded media: writes media
- Instagram handling → Instaloader: uses
- Instagram handling → Downloaded media: writes media
- Format selection → FFmpeg: converts or merges
- Interactive CLI → Configuration: loads settings
- Configuration → Config file: reads and writes
- Platform downloads → Download history: records result
- Download history → History CSV: writes entries
- Interactive CLI → Update checker: checks updates
- Update checker → Update service: requests release data
