# fwlkhw/eyeris architecture

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

- Interactive diagram: https://gitdiagram.com/fwlkhw/eyeris
- Repository: https://github.com/fwlkhw/eyeris

## Overview

Eyeris is an image-collection manager: users open a collection, import images or folders, then browse images and edit ratings and tags. The Rust CLI and GUI provide collection-management workflows; the Python side adds dataframe-based filtering, analysis, and semantic search over image embeddings. The README documents collection storage, while sampled code shows GUI metadata edits going directly to SQLite. Several Rust subsystem implementations and the tagging modules were not sampled, so their internal connections are omitted rather than inferred.

Main entry points: [`crates/gui/src/main.rs`](https://github.com/fwlkhw/eyeris/blob/main/crates/gui/src/main.rs) (Collection GUI), [`crates/gui/src/lib.rs`](https://github.com/fwlkhw/eyeris/blob/main/crates/gui/src/lib.rs) (GUI data actions), [`src/eda.py`](https://github.com/fwlkhw/eyeris/blob/main/src/eda.py) (Image analysis), [`crates/cli/src/main.rs`](https://github.com/fwlkhw/eyeris/blob/main/crates/cli/src/main.rs) (Import CLI)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_apps["User applications"]
  node_gui_app["Collection GUI<br/>[main.rs]"]
  node_gui_library["GUI data actions<br/>[lib.rs]"]
  node_item_view["Image item view<br/>[item.rs]"]
  node_cli["Import CLI<br/>[main.rs]"]
end

subgraph group_collection["Collection management"]
  node_py_collection["Python collection<br/>[collection.py]"]
  node_rust_collection["Rust collection<br/>[lib.rs]"]
  node_filesystem["Image scanning<br/>[lib.rs]"]
  node_sqlite[("Collection index<br/>[lib.rs]")]
end

subgraph group_discovery["Search and analysis"]
  node_embedding_store[("Embedding store<br/>[ss.py]")]
  node_embedder["Image and text embeddings<br/>[embed.py]"]
  node_filter["Image filtering<br/>[filter.py]"]
  node_analysis["Image analysis<br/>[eda.py]"]
  node_taggers["Tagging models"]
end

subgraph group_media["Image metadata and processing"]
  node_image_index["Image indexing<br/>[lib.rs]"]
  node_hashing["Image hashing<br/>[lib.rs]"]
  node_colors["Color extraction<br/>[lib.rs]"]
  node_thumbnails["Thumbnail generation<br/>[lib.rs]"]
  node_xmp["XMP metadata<br/>[lib.rs]"]
end

node_user(("User"))

node_user -->|"uses"| node_gui_app
node_user -->|"runs import"| node_cli
node_gui_app -->|"opens collection"| node_rust_collection
node_gui_app -->|"calls actions"| node_gui_library
node_gui_library -->|"loads item data"| node_item_view
node_gui_library -->|"reads and updates"| node_sqlite
node_cli -->|"indexes imports"| node_rust_collection
node_py_collection -->|"creates search store"| node_embedding_store
node_embedding_store -->|"encodes images and text"| node_embedder
node_analysis -->|"uses color columns"| node_filter
node_analysis -->|"uses collection type"| node_py_collection

click node_gui_app "https://github.com/fwlkhw/eyeris/blob/main/crates/gui/src/main.rs"
click node_gui_library "https://github.com/fwlkhw/eyeris/blob/main/crates/gui/src/lib.rs"
click node_item_view "https://github.com/fwlkhw/eyeris/blob/main/crates/gui/src/item.rs"
click node_cli "https://github.com/fwlkhw/eyeris/blob/main/crates/cli/src/main.rs"
click node_py_collection "https://github.com/fwlkhw/eyeris/blob/main/src/collection.py"
click node_rust_collection "https://github.com/fwlkhw/eyeris/blob/main/crates/collection/src/lib.rs"
click node_filesystem "https://github.com/fwlkhw/eyeris/blob/main/crates/fs/src/lib.rs"
click node_sqlite "https://github.com/fwlkhw/eyeris/blob/main/crates/db/src/lib.rs"
click node_embedding_store "https://github.com/fwlkhw/eyeris/blob/main/src/ss.py"
click node_embedder "https://github.com/fwlkhw/eyeris/blob/main/src/embed.py"
click node_filter "https://github.com/fwlkhw/eyeris/blob/main/src/filter.py"
click node_analysis "https://github.com/fwlkhw/eyeris/blob/main/src/eda.py"
click node_taggers "https://github.com/fwlkhw/eyeris/tree/main/src/tag"
click node_image_index "https://github.com/fwlkhw/eyeris/blob/main/crates/index/src/lib.rs"
click node_hashing "https://github.com/fwlkhw/eyeris/blob/main/crates/hash/src/lib.rs"
click node_colors "https://github.com/fwlkhw/eyeris/blob/main/crates/color/src/lib.rs"
click node_thumbnails "https://github.com/fwlkhw/eyeris/blob/main/crates/thumbnail/src/lib.rs"
click node_xmp "https://github.com/fwlkhw/eyeris/blob/main/crates/xmp/src/lib.rs"

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_gui_app,node_gui_library,node_item_view,node_cli,node_user toneBlue
class node_py_collection,node_rust_collection,node_filesystem,node_sqlite toneAmber
class node_embedding_store,node_embedder,node_filter,node_analysis,node_taggers toneMint
class node_image_index,node_hashing,node_colors,node_thumbnails,node_xmp toneRose
```

## Components

### User applications

- [Collection GUI](https://github.com/fwlkhw/eyeris/blob/main/crates/gui/src/main.rs): `crates/gui/src/main.rs`
- [GUI data actions](https://github.com/fwlkhw/eyeris/blob/main/crates/gui/src/lib.rs): `crates/gui/src/lib.rs`
- [Image item view](https://github.com/fwlkhw/eyeris/blob/main/crates/gui/src/item.rs): `crates/gui/src/item.rs`
- [Import CLI](https://github.com/fwlkhw/eyeris/blob/main/crates/cli/src/main.rs): `crates/cli/src/main.rs`

### Collection management

- [Python collection](https://github.com/fwlkhw/eyeris/blob/main/src/collection.py): `src/collection.py`
- [Rust collection](https://github.com/fwlkhw/eyeris/blob/main/crates/collection/src/lib.rs): `crates/collection/src/lib.rs`
- [Image scanning](https://github.com/fwlkhw/eyeris/blob/main/crates/fs/src/lib.rs): `crates/fs/src/lib.rs`
- [Collection index](https://github.com/fwlkhw/eyeris/blob/main/crates/db/src/lib.rs): `crates/db/src/lib.rs`

### Search and analysis

- [Embedding store](https://github.com/fwlkhw/eyeris/blob/main/src/ss.py): `src/ss.py`
- [Image and text embeddings](https://github.com/fwlkhw/eyeris/blob/main/src/embed.py): `src/embed.py`
- [Image filtering](https://github.com/fwlkhw/eyeris/blob/main/src/filter.py): `src/filter.py`
- [Image analysis](https://github.com/fwlkhw/eyeris/blob/main/src/eda.py): `src/eda.py`
- [Tagging models](https://github.com/fwlkhw/eyeris/tree/main/src/tag): `src/tag`

### Image metadata and processing

- [Image indexing](https://github.com/fwlkhw/eyeris/blob/main/crates/index/src/lib.rs): `crates/index/src/lib.rs`
- [Image hashing](https://github.com/fwlkhw/eyeris/blob/main/crates/hash/src/lib.rs): `crates/hash/src/lib.rs`
- [Color extraction](https://github.com/fwlkhw/eyeris/blob/main/crates/color/src/lib.rs): `crates/color/src/lib.rs`
- [Thumbnail generation](https://github.com/fwlkhw/eyeris/blob/main/crates/thumbnail/src/lib.rs): `crates/thumbnail/src/lib.rs`
- [XMP metadata](https://github.com/fwlkhw/eyeris/blob/main/crates/xmp/src/lib.rs): `crates/xmp/src/lib.rs`

### Other components

- **User**

## Connections

- User → Collection GUI: uses (evidence: `crates/gui/src/main.rs`)
- User → Import CLI: runs import (evidence: `crates/cli/src/main.rs`)
- Collection GUI → Rust collection: opens collection (evidence: `crates/gui/src/main.rs`)
- Collection GUI → GUI data actions: calls actions (evidence: `crates/gui/src/main.rs`)
- GUI data actions → Image item view: loads item data (evidence: `crates/gui/src/lib.rs`)
- GUI data actions → Collection index: reads and updates (evidence: `crates/gui/src/lib.rs`)
- Import CLI → Rust collection: indexes imports (evidence: `crates/cli/src/main.rs`)
- Python collection → Embedding store: creates search store (evidence: `src/collection.py`)
- Embedding store → Image and text embeddings: encodes images and text (evidence: `src/ss.py`)
- Image analysis → Image filtering: uses color columns (evidence: `src/eda.py`)
- Image analysis → Python collection: uses collection type (evidence: `src/eda.py`)
