# shrutisikhwalss-arch/image-color-compression architecture

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

- Interactive diagram: https://gitdiagram.com/shrutisikhwalss-arch/image-color-compression
- Repository: https://github.com/shrutisikhwalss-arch/image-color-compression

## Overview

This is a Streamlit image color-compression app. The user uploads an image (or selects the sample), chooses a color count, and receives a KMeans-quantized image with size metrics, a before/after view, a color-space plot, and a PNG download. An optional comparison runs other encoding and quantization methods and presents charts and visual results. The README also documents JPEG, WebP, and PIL comparison capabilities, which are implemented in the sampled comparison module. The graph is based on the supplied tree and source excerpts; the README mentions sample-image behavior, but no sample file appears in the tree.

Main entry points: [`app.py`](https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/app.py) (Streamlit app), [`img_comparison.py`](https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_comparison.py) (Method comparison), [`img_compression.py`](https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_compression.py) (KMeans quantizer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Interactive app"]
  node_app["Streamlit app<br/>[app.py]"]
end

subgraph group_compression["Image processing"]
  node_loader["Image loader<br/>[img_compression.py]"]
  node_kmeans["KMeans quantizer<br/>[img_compression.py]"]
  node_metrics["Size metrics<br/>[img_compression.py]"]
end

subgraph group_analysis["Comparison and reporting"]
  node_comparison["Method comparison<br/>[img_comparison.py]"]
  node_chart["Comparison chart<br/>[img_comparison.py]"]
  node_visual["Visual comparison<br/>[img_comparison.py]"]
end

node_user(("Image user"))

node_user -->|"uploads image"| node_app
node_app -->|"loads image"| node_loader
node_loader -->|"returns RGB"| node_app
node_app -->|"quantizes image"| node_kmeans
node_kmeans -->|"returns image"| node_app
node_app -->|"measures sizes"| node_metrics
node_app -->|"runs methods"| node_comparison
node_comparison -->|"runs KMeans"| node_kmeans
node_comparison -->|"plots results"| node_chart
node_comparison -->|"plots images"| node_visual
node_app -->|"renders chart"| node_chart
node_app -->|"renders comparison"| node_visual

click node_app "https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/app.py"
click node_loader "https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_compression.py"
click node_kmeans "https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_compression.py"
click node_metrics "https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_compression.py"
click node_comparison "https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_comparison.py"
click node_chart "https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_comparison.py"
click node_visual "https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_comparison.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_app,node_user toneBlue
class node_loader,node_kmeans,node_metrics toneAmber
class node_comparison,node_chart,node_visual toneMint
```

## Components

### Interactive app

- [Streamlit app](https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/app.py): `app.py`

### Image processing

- [Image loader](https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_compression.py): `img_compression.py`
- [KMeans quantizer](https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_compression.py): `img_compression.py`
- [Size metrics](https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_compression.py): `img_compression.py`

### Comparison and reporting

- [Method comparison](https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_comparison.py): `img_comparison.py`
- [Comparison chart](https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_comparison.py): `img_comparison.py`
- [Visual comparison](https://github.com/shrutisikhwalss-arch/image-color-compression/blob/main/img_comparison.py): `img_comparison.py`

### Other components

- **Image user**

## Connections

- Image user → Streamlit app: uploads image
- Streamlit app → Image loader: loads image
- Image loader → Streamlit app: returns RGB
- Streamlit app → KMeans quantizer: quantizes image
- KMeans quantizer → Streamlit app: returns image
- Streamlit app → Size metrics: measures sizes
- Streamlit app → Method comparison: runs methods
- Method comparison → KMeans quantizer: runs KMeans
- Method comparison → Comparison chart: plots results
- Method comparison → Visual comparison: plots images
- Streamlit app → Comparison chart: renders chart
- Streamlit app → Visual comparison: renders comparison
