# soutikkk/bulk_image_resizer architecture

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

- Interactive diagram: https://gitdiagram.com/soutikkk/bulk_image_resizer
- Repository: https://github.com/soutikkk/bulk_image_resizer

## Overview

Bulk Image Resizer is a Tkinter desktop app for selecting images, configuring resize options, processing a batch, and saving results separately from the originals. Its main workflow runs image work on a background thread and sends logs, progress, and completion messages back to the interface through a queue. The README also documents aspect-ratio handling and multiple output formats. The single source file combines these responsibilities; the graph separates them conceptually. Some UI and save details are documented but not shown in the excerpts.

Main entry points: [`resizer.py`](https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py) (Batch Worker)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Desktop Interface"]
  node_file_selection["File Selection<br/>[resizer.py]"]
  node_resize_options["Resize Options<br/>[resizer.py]"]
  node_app_controller["App Controller<br/>[resizer.py]"]
  node_status_display["Progress and Logs<br/>[resizer.py]"]
  node_completion_summary["Completion Summary<br/>[resizer.py]"]
end

subgraph group_processing["Image Processing"]
  node_batch_worker["Batch Worker<br/>[resizer.py]"]
  node_image_transform["Image Transform<br/>[resizer.py]"]
end

subgraph group_results["Output and Feedback"]
  node_output_folder["Output Folder<br/>[resizer.py]"]
  node_ui_queue["UI Message Queue<br/>[resizer.py]"]
end

node_user(("User"))

node_user -->|"selects images"| node_file_selection
node_user -->|"sets options"| node_resize_options
node_user -->|"starts batch"| node_app_controller
node_app_controller -->|"starts thread"| node_batch_worker
node_batch_worker -->|"opens and resizes"| node_image_transform
node_batch_worker -->|"saves results"| node_output_folder
node_batch_worker -->|"queues updates"| node_ui_queue
node_ui_queue -->|"updates progress and logs"| node_status_display
node_ui_queue -->|"reports completion"| node_completion_summary

click node_file_selection "https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py"
click node_resize_options "https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py"
click node_app_controller "https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py"
click node_batch_worker "https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py"
click node_image_transform "https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py"
click node_output_folder "https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py"
click node_ui_queue "https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py"
click node_status_display "https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py"
click node_completion_summary "https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.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_file_selection,node_resize_options,node_app_controller,node_status_display,node_completion_summary,node_user toneBlue
class node_batch_worker,node_image_transform toneAmber
class node_output_folder,node_ui_queue toneMint
```

## Components

### Desktop Interface

- [File Selection](https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py): `resizer.py`
- [Resize Options](https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py): `resizer.py`
- [App Controller](https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py): `resizer.py`
- [Progress and Logs](https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py): `resizer.py`
- [Completion Summary](https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py): `resizer.py`

### Image Processing

- [Batch Worker](https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py): `resizer.py`
- [Image Transform](https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py): `resizer.py`

### Output and Feedback

- [Output Folder](https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py): `resizer.py`
- [UI Message Queue](https://github.com/soutikkk/bulk_image_resizer/blob/main/resizer.py): `resizer.py`

### Other components

- **User**

## Connections

- User → File Selection: selects images (evidence: `README.md`)
- User → Resize Options: sets options (evidence: `README.md`)
- User → App Controller: starts batch (evidence: `README.md`)
- App Controller → Batch Worker: starts thread (evidence: `resizer.py`)
- Batch Worker → Image Transform: opens and resizes (evidence: `resizer.py`)
- Batch Worker → Output Folder: saves results (evidence: `README.md`)
- Batch Worker → UI Message Queue: queues updates (evidence: `resizer.py`)
- UI Message Queue → Progress and Logs: updates progress and logs (evidence: `resizer.py`)
- UI Message Queue → Completion Summary: reports completion (evidence: `resizer.py`)
