# ceuw/winmedia-linux architecture

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

- Interactive diagram: https://gitdiagram.com/ceuw/winmedia-linux
- Repository: https://github.com/ceuw/winmedia-linux

## Overview

WinMedia Linux is a Linux desktop application for inspecting Windows installation media and planning USB creation under safety gates. The principal workflow runs from the GUI through local ISO selection or explicit-URL download, checksum verification, read-only device discovery, and guarded USB planning; actual disk writes are fail-closed. The graph preserves documented planning stages and diagnostics, but only asserts source relationships visible in excerpts or the source index; unsampled integrations and implementation details are left unlinked.

Main entry points: [`src/winmedia/core/usb_manager.py`](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/usb_manager.py) (USB plan guards), [`src/winmedia/gui/main_window.py`](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/main_window.py) (Main window), [`src/winmedia/gui/download_page.py`](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/download_page.py) (Download page), [`src/winmedia/gui/usb_page.py`](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/usb_page.py) (USB page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Application UI"]
  node_entry["Application entry<br/>[main.py]"]
  node_window["Main window<br/>[main_window.py]"]
  node_theme["Theme styling<br/>[styles.py]"]
end

subgraph group_media["ISO Workflow"]
  node_download_ui["Download page<br/>[download_page.py]"]
  node_downloader["HTTP downloader<br/>[downloader.py]"]
  node_iso["ISO inspection<br/>[iso_manager.py]"]
  node_verifier["SHA-256 verifier<br/>[verifier.py]"]
end

subgraph group_usb["USB Planning"]
  node_usb_ui["USB page<br/>[usb_page.py]"]
  node_detection["Device detection"]
  node_usb_manager["USB plan guards<br/>[usb_manager.py]"]
  node_partition["Partition planning"]
  node_boot["Boot planning<br/>[bootloader.py]"]
  node_wim["WIM planning<br/>[wim_handler.py]"]
end

subgraph group_system["System Services"]
  node_settings["Settings page<br/>[settings_page.py]"]
  node_dependencies["Dependency checks"]
  node_logging["Logging setup<br/>[logging_config.py]"]
  node_paths["App paths<br/>[paths.py]"]
end

node_user(("Desktop user"))
node_linux_tools["Linux tools"]
node_filesystem[("Local files")]

node_user -->|"launches"| node_entry
node_entry -->|"opens"| node_window
node_entry -->|"configures"| node_logging
node_window -->|"instantiates"| node_download_ui
node_window -->|"instantiates"| node_usb_ui
node_window -->|"instantiates"| node_settings
node_window -->|"applies"| node_theme
node_download_ui -->|"starts downloads"| node_downloader
node_download_ui -->|"inspects ISO"| node_iso
node_download_ui -->|"verifies hash"| node_verifier
node_download_ui -->|"selects ISO"| node_filesystem
node_downloader -.->|"saves download"| node_filesystem
node_usb_ui -->|"scans devices"| node_detection
node_usb_ui -.->|"requests plan"| node_usb_manager
node_usb_ui -->|"checks source ISO"| node_iso
node_usb_manager -->|"validates target"| node_detection
node_usb_manager -->|"plans layout"| node_partition
node_usb_manager -->|"plans boot"| node_boot
node_usb_manager -->|"plans WIM"| node_wim
node_usb_manager -->|"checks tools"| node_linux_tools
node_detection -->|"reads lsblk"| node_linux_tools
node_settings -->|"runs checks"| node_dependencies
node_dependencies -->|"checks availability"| node_linux_tools
node_logging -->|"gets log path"| node_paths

click node_entry "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/main.py"
click node_window "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/main_window.py"
click node_theme "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/styles.py"
click node_download_ui "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/download_page.py"
click node_downloader "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/downloader.py"
click node_iso "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/iso_manager.py"
click node_verifier "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/verifier.py"
click node_usb_ui "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/usb_page.py"
click node_detection "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/services/device_detection.py"
click node_usb_manager "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/usb_manager.py"
click node_partition "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/partition_manager.py"
click node_boot "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/bootloader.py"
click node_wim "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/wim_handler.py"
click node_settings "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/settings_page.py"
click node_dependencies "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/services/dependency_checker.py"
click node_logging "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/utils/logging_config.py"
click node_paths "https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/utils/paths.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_window,node_theme,node_user toneBlue
class node_download_ui,node_downloader,node_iso,node_verifier,node_filesystem toneAmber
class node_usb_ui,node_detection,node_usb_manager,node_partition,node_boot,node_wim toneMint
class node_settings,node_dependencies,node_logging,node_paths toneRose
class node_linux_tools toneIndigo
```

## Components

### Application UI

- [Application entry](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/main.py): `src/winmedia/main.py`
- [Main window](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/main_window.py): `src/winmedia/gui/main_window.py`
- [Theme styling](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/styles.py): `src/winmedia/gui/styles.py`

### ISO Workflow

- [Download page](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/download_page.py): `src/winmedia/gui/download_page.py`
- [HTTP downloader](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/downloader.py): `src/winmedia/core/downloader.py`
- [ISO inspection](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/iso_manager.py): `src/winmedia/core/iso_manager.py`
- [SHA-256 verifier](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/verifier.py): `src/winmedia/core/verifier.py`

### USB Planning

- [USB page](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/usb_page.py): `src/winmedia/gui/usb_page.py`
- [Device detection](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/services/device_detection.py): `src/winmedia/services/device_detection.py`
- [USB plan guards](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/usb_manager.py): `src/winmedia/core/usb_manager.py`
- [Partition planning](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/partition_manager.py): `src/winmedia/core/partition_manager.py`
- [Boot planning](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/bootloader.py): `src/winmedia/core/bootloader.py`
- [WIM planning](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/core/wim_handler.py): `src/winmedia/core/wim_handler.py`

### System Services

- [Settings page](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/gui/settings_page.py): `src/winmedia/gui/settings_page.py`
- [Dependency checks](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/services/dependency_checker.py): `src/winmedia/services/dependency_checker.py`
- [Logging setup](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/utils/logging_config.py): `src/winmedia/utils/logging_config.py`
- [App paths](https://github.com/ceuw/winmedia-linux/blob/main/src/winmedia/utils/paths.py): `src/winmedia/utils/paths.py`

### Other components

- **Desktop user**
- **Linux tools**
- **Local files**

## Connections

- Desktop user → Application entry: launches (evidence: `README.md`)
- Application entry → Main window: opens (evidence: `src/winmedia/main.py`)
- Application entry → Logging setup: configures (evidence: `src/winmedia/main.py`)
- Main window → Download page: instantiates (evidence: `src/winmedia/gui/main_window.py`)
- Main window → USB page: instantiates (evidence: `src/winmedia/gui/main_window.py`)
- Main window → Settings page: instantiates (evidence: `src/winmedia/gui/main_window.py`)
- Main window → Theme styling: applies (evidence: `src/winmedia/gui/main_window.py`)
- Download page → HTTP downloader: starts downloads (evidence: `src/winmedia/gui/download_page.py`)
- Download page → ISO inspection: inspects ISO (evidence: `src/winmedia/gui/download_page.py`)
- Download page → SHA-256 verifier: verifies hash (evidence: `src/winmedia/gui/download_page.py`)
- Download page → Local files: selects ISO (evidence: `README.md`)
- HTTP downloader → Local files: saves download
- USB page → Device detection: scans devices (evidence: `src/winmedia/gui/usb_page.py`)
- USB page → USB plan guards: requests plan (evidence: `src/winmedia/gui/usb_page.py`)
- USB page → ISO inspection: checks source ISO (evidence: `src/winmedia/gui/usb_page.py`)
- USB plan guards → Device detection: validates target (evidence: `src/winmedia/core/usb_manager.py`)
- USB plan guards → Partition planning: plans layout (evidence: `src/winmedia/core/usb_manager.py`)
- USB plan guards → Boot planning: plans boot (evidence: `src/winmedia/core/usb_manager.py`)
- USB plan guards → WIM planning: plans WIM (evidence: `src/winmedia/core/usb_manager.py`)
- USB plan guards → Linux tools: checks tools (evidence: `src/winmedia/core/usb_manager.py`)
- Device detection → Linux tools: reads lsblk (evidence: `README.md`)
- Settings page → Dependency checks: runs checks (evidence: `src/winmedia/gui/settings_page.py`)
- Dependency checks → Linux tools: checks availability (evidence: `README.md`)
- Logging setup → App paths: gets log path (evidence: `src/winmedia/utils/logging_config.py`)
