# geomedge/image-reducer architecture

> Architecture diagram of the GitHub repository geomedge/image-reducer, 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/geomedge/image-reducer
- Repository: https://github.com/geomedge/image-reducer

## Overview

Image Reducer is a Tkinter desktop app for batch-resizing supported bitmap images for easier online sharing. Its intended workflow selects source and destination folders, checks the paths and requested width, recursively finds supported images, resizes them proportionally with Pillow, saves results, and reports progress. Settings expose SAU themes; Help opens support links and version details. The repository contains one Python source file, so all application components share that path. Note: the source starts validation while constructing the button rather than wiring it as the button callback.

Main entry points: [`Image Reducer.py`](https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py) (Tkinter App)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Image Workflow"]
  node_validation["Path &amp; Width Check<br/>[Image Reducer.py]"]
  node_discovery["Image Discovery<br/>[Image Reducer.py]"]
  node_resizing["Proportional Resize<br/>[Image Reducer.py]"]
  node_saving["Output Saving<br/>[Image Reducer.py]"]
end

subgraph group_interface["App Interface"]
  node_app["Tkinter App<br/>[Image Reducer.py]"]
  node_folder_dialog["Folder Dialogs<br/>[Image Reducer.py]"]
  node_progress["Progress &amp; Results<br/>[Image Reducer.py]"]
  node_theme["Theme Settings<br/>[Image Reducer.py]"]
  node_help["Help &amp; Version<br/>[Image Reducer.py]"]
end

subgraph group_integrations["External Integrations"]
  node_filesystem[("Local Filesystem")]
  node_pillow["Pillow"]
  node_sau["SAUIGeo SAU"]
  node_browser["Web Browser"]
  node_support["Support Links"]
end

node_user(("User"))

node_user -->|"uses"| node_app
node_app -->|"opens"| node_folder_dialog
node_folder_dialog -->|"selects folders"| node_filesystem
node_app -->|"starts at setup"| node_validation
node_validation -->|"checks paths"| node_filesystem
node_validation -->|"calls"| node_discovery
node_discovery -->|"walks folders"| node_filesystem
node_discovery -->|"passes image paths"| node_resizing
node_resizing -->|"opens and resizes"| node_pillow
node_resizing -->|"passes resized image"| node_saving
node_saving -->|"writes images"| node_filesystem
node_resizing -->|"updates progress"| node_progress
node_app -->|"offers settings"| node_theme
node_theme -->|"sets theme"| node_sau
node_app -->|"checks and starts"| node_sau
node_app -->|"offers help"| node_help
node_help -->|"opens links"| node_browser
node_browser -->|"visits"| node_support

click node_app "https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py"
click node_folder_dialog "https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py"
click node_validation "https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py"
click node_discovery "https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py"
click node_resizing "https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py"
click node_saving "https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py"
click node_progress "https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py"
click node_theme "https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py"
click node_help "https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.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_validation,node_discovery,node_resizing,node_saving,node_user toneBlue
class node_app,node_folder_dialog,node_progress,node_theme,node_help toneAmber
class node_filesystem,node_pillow,node_sau,node_browser,node_support toneMint
```

## Components

### Image Workflow

- [Path & Width Check](https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py): `Image Reducer.py`
- [Image Discovery](https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py): `Image Reducer.py`
- [Proportional Resize](https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py): `Image Reducer.py`
- [Output Saving](https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py): `Image Reducer.py`

### App Interface

- [Tkinter App](https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py): `Image Reducer.py`
- [Folder Dialogs](https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py): `Image Reducer.py`
- [Progress & Results](https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py): `Image Reducer.py`
- [Theme Settings](https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py): `Image Reducer.py`
- [Help & Version](https://github.com/geomedge/image-reducer/blob/main/Image%20Reducer.py): `Image Reducer.py`

### External Integrations

- **Local Filesystem**
- **Pillow**
- **SAUIGeo SAU**
- **Web Browser**
- **Support Links**

### Other components

- **User**

## Connections

- User → Tkinter App: uses
- Tkinter App → Folder Dialogs: opens
- Folder Dialogs → Local Filesystem: selects folders
- Tkinter App → Path & Width Check: starts at setup
- Path & Width Check → Local Filesystem: checks paths
- Path & Width Check → Image Discovery: calls
- Image Discovery → Local Filesystem: walks folders
- Image Discovery → Proportional Resize: passes image paths
- Proportional Resize → Pillow: opens and resizes
- Proportional Resize → Output Saving: passes resized image
- Output Saving → Local Filesystem: writes images
- Proportional Resize → Progress & Results: updates progress
- Tkinter App → Theme Settings: offers settings
- Theme Settings → SAUIGeo SAU: sets theme
- Tkinter App → SAUIGeo SAU: checks and starts
- Tkinter App → Help & Version: offers help
- Help & Version → Web Browser: opens links
- Web Browser → Support Links: visits
