# anqiushi767-cell/ffmpeggui architecture

> Architecture diagram of the GitHub repository anqiushi767-cell/ffmpeggui, 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/anqiushi767-cell/ffmpeggui
- Repository: https://github.com/anqiushi767-cell/ffmpeggui

## Overview

FFmpegGUI is a Windows desktop batch audio/video processing application. Users add or drop media into the task page, configure or select an operation, and submit jobs to a concurrent queue; the converter builds and runs FFmpeg commands, while task cards show progress and results. The README also documents specialized editing, extraction, recording, and streaming capabilities. The excerpts establish the main UI, configuration, and converter boundaries, but do not expose every operation’s internal routing; those capability links are therefore grounded in the README rather than claims about specific calls.

Main entry points: [`converter.py`](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py) (Job engine), [`task_page.py`](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/task_page.py) (Task page), [`main.py`](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/main.py) (Main window), [`settings_page.py`](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/settings_page.py) (Settings page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Desktop application"]
  node_main["Main window<br/>[main.py]"]
end

subgraph group_tasks["Task workflow"]
  node_taskpage["Task page<br/>[task_page.py]"]
  node_taskcard["Task cards<br/>[task_card.py]"]
  node_trim["Clip selection<br/>[trim_dialog.py]"]
  node_delogo["Watermark selection<br/>[delogo_dialog.py]"]
  node_record["Recording setup<br/>[record_dialog.py]"]
end

subgraph group_media["Media processing"]
  node_converter["Job engine<br/>[converter.py]"]
  node_transcode["Transcode and merge<br/>[converter.py]"]
  node_extract["Clip and audio tools<br/>[converter.py]"]
  node_effects["GIF and speed effects<br/>[converter.py]"]
  node_subtitles["Subtitle and watermark<br/>[converter.py]"]
  node_metadata["Metadata editing<br/>[converter.py]"]
  node_capture["Screen recording<br/>[converter.py]"]
  node_stream["Stream download<br/>[converter.py]"]
end

subgraph group_support["Settings and updates"]
  node_settings["Settings page<br/>[settings_page.py]"]
  node_config[("Persistent config<br/>[config.py]")]
  node_logging["Crash logging<br/>[logging_setup.py]"]
  node_updater["App updater<br/>[updater.py]"]
  node_about["About page<br/>[about_page.py]"]
end

node_user(("User"))
node_ffmpeg["FFmpeg / ffprobe"]
node_outputs["Media files"]

node_user -->|"opens"| node_main
node_main -->|"shows"| node_taskpage
node_main -->|"shows"| node_settings
node_main -->|"shows"| node_about
node_main -->|"initializes"| node_logging
node_main -->|"reads"| node_config
node_user -->|"adds media"| node_taskpage
node_taskpage -->|"submits jobs"| node_converter
node_taskpage -->|"creates cards"| node_taskcard
node_taskpage -->|"opens"| node_trim
node_taskpage -->|"opens"| node_delogo
node_taskpage -->|"opens"| node_record
node_taskpage -.->|"persists tasks"| node_converter
node_converter -->|"builds commands"| node_transcode
node_converter -->|"builds commands"| node_extract
node_converter -->|"builds commands"| node_effects
node_converter -->|"builds commands"| node_subtitles
node_converter -->|"builds commands"| node_metadata
node_converter -->|"builds commands"| node_capture
node_converter -->|"builds commands"| node_stream
node_converter -->|"runs processes"| node_ffmpeg
node_converter -.->|"writes"| node_outputs
node_settings -->|"updates"| node_config
node_settings -->|"checks version"| node_converter
node_settings -->|"checks updates"| node_updater
node_main -->|"checks updates"| node_updater
node_about -.->|"shows version info"| node_updater

click node_main "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/main.py"
click node_taskpage "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/task_page.py"
click node_taskcard "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/task_card.py"
click node_trim "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/trim_dialog.py"
click node_delogo "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/delogo_dialog.py"
click node_record "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/record_dialog.py"
click node_converter "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py"
click node_transcode "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py"
click node_extract "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py"
click node_effects "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py"
click node_subtitles "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py"
click node_metadata "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py"
click node_capture "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py"
click node_stream "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py"
click node_settings "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/settings_page.py"
click node_config "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/config.py"
click node_logging "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/logging_setup.py"
click node_updater "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/updater.py"
click node_about "https://github.com/anqiushi767-cell/ffmpeggui/blob/master/about_page.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_main,node_user toneBlue
class node_taskpage,node_taskcard,node_trim,node_delogo,node_record toneAmber
class node_converter,node_transcode,node_extract,node_effects,node_subtitles,node_metadata,node_capture,node_stream toneMint
class node_settings,node_config,node_logging,node_updater,node_about toneRose
class node_ffmpeg,node_outputs toneIndigo
```

## Components

### Desktop application

- [Main window](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/main.py): `main.py`

### Task workflow

- [Task page](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/task_page.py): `task_page.py`
- [Task cards](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/task_card.py): `task_card.py`
- [Clip selection](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/trim_dialog.py): `trim_dialog.py`
- [Watermark selection](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/delogo_dialog.py): `delogo_dialog.py`
- [Recording setup](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/record_dialog.py): `record_dialog.py`

### Media processing

- [Job engine](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py): `converter.py`
- [Transcode and merge](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py): `converter.py`
- [Clip and audio tools](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py): `converter.py`
- [GIF and speed effects](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py): `converter.py`
- [Subtitle and watermark](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py): `converter.py`
- [Metadata editing](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py): `converter.py`
- [Screen recording](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py): `converter.py`
- [Stream download](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/converter.py): `converter.py`

### Settings and updates

- [Settings page](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/settings_page.py): `settings_page.py`
- [Persistent config](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/config.py): `config.py`
- [Crash logging](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/logging_setup.py): `logging_setup.py`
- [App updater](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/updater.py): `updater.py`
- [About page](https://github.com/anqiushi767-cell/ffmpeggui/blob/master/about_page.py): `about_page.py`

### Other components

- **User**
- **FFmpeg / ffprobe**
- **Media files**

## Connections

- User → Main window: opens (evidence: `README.md`)
- Main window → Task page: shows (evidence: `main.py`)
- Main window → Settings page: shows (evidence: `main.py`)
- Main window → About page: shows (evidence: `main.py`)
- Main window → Crash logging: initializes (evidence: `main.py`)
- Main window → Persistent config: reads (evidence: `main.py`)
- User → Task page: adds media (evidence: `README.md`)
- Task page → Job engine: submits jobs (evidence: `task_page.py`)
- Task page → Task cards: creates cards (evidence: `task_page.py`)
- Task page → Clip selection: opens (evidence: `task_page.py`)
- Task page → Watermark selection: opens (evidence: `task_page.py`)
- Task page → Recording setup: opens (evidence: `task_page.py`)
- Task page → Job engine: persists tasks (evidence: `task_page.py`)
- Job engine → Transcode and merge: builds commands (evidence: `README.md`)
- Job engine → Clip and audio tools: builds commands (evidence: `README.md`)
- Job engine → GIF and speed effects: builds commands (evidence: `README.md`)
- Job engine → Subtitle and watermark: builds commands (evidence: `README.md`)
- Job engine → Metadata editing: builds commands (evidence: `README.md`)
- Job engine → Screen recording: builds commands (evidence: `README.md`)
- Job engine → Stream download: builds commands (evidence: `README.md`)
- Job engine → FFmpeg / ffprobe: runs processes (evidence: `README.md`)
- Job engine → Media files: writes
- Settings page → Persistent config: updates (evidence: `settings_page.py`)
- Settings page → Job engine: checks version (evidence: `settings_page.py`)
- Settings page → App updater: checks updates (evidence: `settings_page.py`)
- Main window → App updater: checks updates (evidence: `main.py`)
- About page → App updater: shows version info
