# vantunes/markdown-converter architecture

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

- Interactive diagram: https://gitdiagram.com/vantunes/markdown-converter
- Repository: https://github.com/vantunes/markdown-converter

## Overview

Markdown Converter is a Windows desktop application for turning individual documents or folders of documents into Markdown. A user selects a file or folder in the GUI; the main window delegates conversion, reports progress and errors, and previews successful output. The conversion service scans folders, preprocesses PDFs with OCR, converts documents, and measures elapsed time. The GUI also exposes dependency updates and an About dialog. The README documents supported formats and OCR integrations; some implementation modules were not excerpted, so their internal links are omitted where evidence is unavailable.

Main entry points: [`ui/main_window.py`](https://github.com/vantunes/markdown-converter/blob/main/ui/main_window.py) (Main window), [`services/conversion_service.py`](https://github.com/vantunes/markdown-converter/blob/main/services/conversion_service.py) (Conversion service), [`ui/toolbar.py`](https://github.com/vantunes/markdown-converter/blob/main/ui/toolbar.py) (Toolbar), [`ui/about_dialog.py`](https://github.com/vantunes/markdown-converter/blob/main/ui/about_dialog.py) (About dialog)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_gui["Desktop interface"]
  node_entry["App entry<br/>[main.py]"]
  node_window["Main window<br/>[main_window.py]"]
  node_toolbar["Toolbar<br/>[toolbar.py]"]
  node_progress["Progress panel<br/>[progress_panel.py]"]
  node_log["Log panel<br/>[log_panel.py]"]
  node_preview["Markdown preview<br/>[preview_panel.py]"]
  node_about["About dialog<br/>[about_dialog.py]"]
end

subgraph group_conversion["Document conversion"]
  node_conversion_service["Conversion service"]
  node_scanner["Folder scanner<br/>[file_scanner.py]"]
  node_converter["Document converter<br/>[converter.py]"]
  node_ocr["PDF OCR<br/>[ocr_service.py]"]
  node_timer["Conversion timer<br/>[timer_service.py]"]
end

subgraph group_support["Application support"]
  node_settings["App settings<br/>[settings.py]"]
  node_update_service["Update service<br/>[update_service.py]"]
  node_updater["Dependency updater<br/>[updater.py]"]
end

node_user(("User"))
node_ocrmypdf["OCRmyPDF"]
node_pip["Python package installer"]

node_user -->|"uses"| node_window
node_entry -->|"starts"| node_window
node_window -->|"creates"| node_toolbar
node_window -->|"creates"| node_progress
node_window -->|"creates"| node_log
node_window -->|"creates"| node_preview
node_window -->|"opens"| node_about
node_window -->|"reads"| node_settings
node_toolbar -->|"dispatches actions"| node_window
node_window -->|"calls"| node_conversion_service
node_window -->|"calls"| node_update_service
node_window -->|"writes logs"| node_log
node_window -->|"updates status"| node_progress
node_window -->|"shows output"| node_preview
node_about -->|"reads metadata"| node_settings
node_conversion_service -->|"scans folder"| node_scanner
node_conversion_service -->|"prepares PDFs"| node_ocr
node_conversion_service -->|"converts document"| node_converter
node_conversion_service -->|"measures duration"| node_timer
node_ocr -->|"runs OCR"| node_ocrmypdf
node_update_service -->|"delegates update"| node_updater
node_updater -->|"upgrades packages"| node_pip

click node_entry "https://github.com/vantunes/markdown-converter/blob/main/main.py"
click node_window "https://github.com/vantunes/markdown-converter/blob/main/ui/main_window.py"
click node_toolbar "https://github.com/vantunes/markdown-converter/blob/main/ui/toolbar.py"
click node_progress "https://github.com/vantunes/markdown-converter/blob/main/ui/progress_panel.py"
click node_log "https://github.com/vantunes/markdown-converter/blob/main/ui/log_panel.py"
click node_preview "https://github.com/vantunes/markdown-converter/blob/main/ui/preview_panel.py"
click node_about "https://github.com/vantunes/markdown-converter/blob/main/ui/about_dialog.py"
click node_conversion_service "https://github.com/vantunes/markdown-converter/blob/main/services/conversion_service.py"
click node_scanner "https://github.com/vantunes/markdown-converter/blob/main/file_scanner.py"
click node_converter "https://github.com/vantunes/markdown-converter/blob/main/converter.py"
click node_ocr "https://github.com/vantunes/markdown-converter/blob/main/services/ocr_service.py"
click node_timer "https://github.com/vantunes/markdown-converter/blob/main/services/timer_service.py"
click node_settings "https://github.com/vantunes/markdown-converter/blob/main/settings.py"
click node_update_service "https://github.com/vantunes/markdown-converter/blob/main/services/update_service.py"
click node_updater "https://github.com/vantunes/markdown-converter/blob/main/updater.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_toolbar,node_progress,node_log,node_preview,node_about,node_user toneBlue
class node_conversion_service,node_scanner,node_converter,node_ocr,node_timer toneAmber
class node_settings,node_update_service,node_updater toneMint
class node_ocrmypdf,node_pip toneIndigo
```

## Components

### Desktop interface

- [App entry](https://github.com/vantunes/markdown-converter/blob/main/main.py): `main.py`
- [Main window](https://github.com/vantunes/markdown-converter/blob/main/ui/main_window.py): `ui/main_window.py`
- [Toolbar](https://github.com/vantunes/markdown-converter/blob/main/ui/toolbar.py): `ui/toolbar.py`
- [Progress panel](https://github.com/vantunes/markdown-converter/blob/main/ui/progress_panel.py): `ui/progress_panel.py`
- [Log panel](https://github.com/vantunes/markdown-converter/blob/main/ui/log_panel.py): `ui/log_panel.py`
- [Markdown preview](https://github.com/vantunes/markdown-converter/blob/main/ui/preview_panel.py): `ui/preview_panel.py`
- [About dialog](https://github.com/vantunes/markdown-converter/blob/main/ui/about_dialog.py): `ui/about_dialog.py`

### Document conversion

- [Conversion service](https://github.com/vantunes/markdown-converter/blob/main/services/conversion_service.py): `services/conversion_service.py`
- [Folder scanner](https://github.com/vantunes/markdown-converter/blob/main/file_scanner.py): `file_scanner.py`
- [Document converter](https://github.com/vantunes/markdown-converter/blob/main/converter.py): `converter.py`
- [PDF OCR](https://github.com/vantunes/markdown-converter/blob/main/services/ocr_service.py): `services/ocr_service.py`
- [Conversion timer](https://github.com/vantunes/markdown-converter/blob/main/services/timer_service.py): `services/timer_service.py`

### Application support

- [App settings](https://github.com/vantunes/markdown-converter/blob/main/settings.py): `settings.py`
- [Update service](https://github.com/vantunes/markdown-converter/blob/main/services/update_service.py): `services/update_service.py`
- [Dependency updater](https://github.com/vantunes/markdown-converter/blob/main/updater.py): `updater.py`

### Other components

- **User**
- **OCRmyPDF**
- **Python package installer**

## Connections

- User → Main window: uses (evidence: `README.md`)
- App entry → Main window: starts (evidence: `main.py`)
- Main window → Toolbar: creates (evidence: `ui/main_window.py`)
- Main window → Progress panel: creates (evidence: `ui/main_window.py`)
- Main window → Log panel: creates (evidence: `ui/main_window.py`)
- Main window → Markdown preview: creates (evidence: `ui/main_window.py`)
- Main window → About dialog: opens (evidence: `ui/main_window.py`)
- Main window → App settings: reads (evidence: `ui/main_window.py`)
- Toolbar → Main window: dispatches actions (evidence: `ui/main_window.py`)
- Main window → Conversion service: calls (evidence: `ui/main_window.py`)
- Main window → Update service: calls (evidence: `ui/main_window.py`)
- Main window → Log panel: writes logs (evidence: `ui/main_window.py`)
- Main window → Progress panel: updates status (evidence: `ui/main_window.py`)
- Main window → Markdown preview: shows output (evidence: `ui/main_window.py`)
- About dialog → App settings: reads metadata (evidence: `ui/about_dialog.py`)
- Conversion service → Folder scanner: scans folder (evidence: `services/conversion_service.py`)
- Conversion service → PDF OCR: prepares PDFs (evidence: `services/conversion_service.py`)
- Conversion service → Document converter: converts document (evidence: `services/conversion_service.py`)
- Conversion service → Conversion timer: measures duration (evidence: `services/conversion_service.py`)
- PDF OCR → OCRmyPDF: runs OCR (evidence: `services/ocr_service.py`)
- Update service → Dependency updater: delegates update (evidence: `services/update_service.py`)
- Dependency updater → Python package installer: upgrades packages (evidence: `updater.py`)
