# a-temur/metabooster architecture

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

- Interactive diagram: https://gitdiagram.com/a-temur/metabooster
- Repository: https://github.com/a-temur/metabooster

## Overview

Metabooster takes a selected directory, works on a copy, and injects configured metadata into supported media and web files. Its runtime also creates per-directory YAML context and JSON-LD output, optionally embedding JSON-LD in HTML. The GUI exposes directory selection, custom descriptions, and JSON-LD editing; the README also documents context-menu and CLI modes. The sampled excerpts show portions of the processing logic, so uncertain links between unsampled mode handling and individual stages are omitted.

Main entry points: [`main.py`](https://github.com/a-temur/metabooster/blob/master/main.py) (Directory processing), [`gui.py`](https://github.com/a-temur/metabooster/blob/master/gui.py) (Desktop GUI), [`gui_context.py`](https://github.com/a-temur/metabooster/blob/master/gui_context.py) (GUI feedback bridge), [`schema.py`](https://github.com/a-temur/metabooster/blob/master/schema.py) (Metadata defaults)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["User interaction"]
  node_gui["Desktop GUI<br/>[gui.py]"]
  node_feedback["GUI feedback bridge<br/>[gui_context.py]"]
end

subgraph group_processing["Metadata processing"]
  node_config["Metadata defaults<br/>[schema.py]"]
  node_runtime["Directory processing<br/>[main.py]"]
  node_copy["Working copy<br/>[main.py]"]
  node_file_dispatch["File type dispatch<br/>[main.py]"]
  node_media_injection["Image and video metadata<br/>[main.py]"]
  node_document_injection["PDF metadata<br/>[main.py]"]
  node_web_injection["HTML and CSS comments<br/>[main.py]"]
end

subgraph group_outputs["Metadata outputs"]
  node_directory_metadata["Directory YAML<br/>[main.py]"]
  node_jsonld["JSON-LD generation<br/>[main.py]"]
end

subgraph group_integrations["External tools"]
  node_exiftool["ExifTool"]
  node_ffprobe["FFprobe"]
  node_ffmpeg["FFmpeg"]
end

node_user(("User"))
node_target_files["Selected files"]
node_output_copy["Processed directory"]
node_conf_file["User configuration<br/>[conf.json]"]

node_user -->|"configures"| node_gui
node_gui -->|"starts processing"| node_runtime
node_gui -->|"loads defaults"| node_config
node_gui -->|"saves edits"| node_conf_file
node_gui -->|"registers callback"| node_feedback
node_runtime -->|"sends feedback"| node_feedback
node_target_files -->|"provides directory"| node_runtime
node_runtime -->|"uses defaults"| node_config
node_runtime -->|"creates copy"| node_copy
node_copy -->|"writes copy"| node_output_copy
node_runtime -->|"scans files"| node_file_dispatch
node_file_dispatch -->|"routes media"| node_media_injection
node_file_dispatch -->|"routes PDFs"| node_document_injection
node_file_dispatch -->|"routes web files"| node_web_injection
node_runtime -->|"writes metadata"| node_directory_metadata
node_runtime -->|"builds JSON-LD"| node_jsonld
node_media_injection -.->|"writes tags"| node_exiftool
node_document_injection -.->|"writes tags"| node_exiftool
node_media_injection -.->|"reads duration"| node_ffprobe
node_media_injection -.->|"creates thumbnails"| node_ffmpeg
node_jsonld -->|"writes JSON-LD"| node_output_copy
node_directory_metadata -->|"writes YAML"| node_output_copy
node_web_injection -->|"updates files"| node_output_copy
node_media_injection -->|"updates media"| node_output_copy
node_document_injection -->|"updates PDFs"| node_output_copy

click node_gui "https://github.com/a-temur/metabooster/blob/master/gui.py"
click node_feedback "https://github.com/a-temur/metabooster/blob/master/gui_context.py"
click node_config "https://github.com/a-temur/metabooster/blob/master/schema.py"
click node_runtime "https://github.com/a-temur/metabooster/blob/master/main.py"
click node_copy "https://github.com/a-temur/metabooster/blob/master/main.py"
click node_file_dispatch "https://github.com/a-temur/metabooster/blob/master/main.py"
click node_media_injection "https://github.com/a-temur/metabooster/blob/master/main.py"
click node_document_injection "https://github.com/a-temur/metabooster/blob/master/main.py"
click node_web_injection "https://github.com/a-temur/metabooster/blob/master/main.py"
click node_directory_metadata "https://github.com/a-temur/metabooster/blob/master/main.py"
click node_jsonld "https://github.com/a-temur/metabooster/blob/master/main.py"
click node_conf_file "https://github.com/a-temur/metabooster/blob/master/conf.json"

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,node_feedback,node_user,node_conf_file toneBlue
class node_config,node_runtime,node_copy,node_file_dispatch,node_media_injection,node_document_injection,node_web_injection toneAmber
class node_directory_metadata,node_jsonld toneMint
class node_exiftool,node_ffprobe,node_ffmpeg toneRose
class node_target_files,node_output_copy toneIndigo
```

## Components

### User interaction

- [Desktop GUI](https://github.com/a-temur/metabooster/blob/master/gui.py): `gui.py`
- [GUI feedback bridge](https://github.com/a-temur/metabooster/blob/master/gui_context.py): `gui_context.py`

### Metadata processing

- [Metadata defaults](https://github.com/a-temur/metabooster/blob/master/schema.py): `schema.py`
- [Directory processing](https://github.com/a-temur/metabooster/blob/master/main.py): `main.py`
- [Working copy](https://github.com/a-temur/metabooster/blob/master/main.py): `main.py`
- [File type dispatch](https://github.com/a-temur/metabooster/blob/master/main.py): `main.py`
- [Image and video metadata](https://github.com/a-temur/metabooster/blob/master/main.py): `main.py`
- [PDF metadata](https://github.com/a-temur/metabooster/blob/master/main.py): `main.py`
- [HTML and CSS comments](https://github.com/a-temur/metabooster/blob/master/main.py): `main.py`

### Metadata outputs

- [Directory YAML](https://github.com/a-temur/metabooster/blob/master/main.py): `main.py`
- [JSON-LD generation](https://github.com/a-temur/metabooster/blob/master/main.py): `main.py`

### External tools

- **ExifTool**
- **FFprobe**
- **FFmpeg**

### Other components

- **User**
- **Selected files**
- **Processed directory**
- [User configuration](https://github.com/a-temur/metabooster/blob/master/conf.json): `conf.json`

## Connections

- User → Desktop GUI: configures
- Desktop GUI → Directory processing: starts processing
- Desktop GUI → Metadata defaults: loads defaults
- Desktop GUI → User configuration: saves edits
- Desktop GUI → GUI feedback bridge: registers callback
- Directory processing → GUI feedback bridge: sends feedback
- Selected files → Directory processing: provides directory
- Directory processing → Metadata defaults: uses defaults
- Directory processing → Working copy: creates copy
- Working copy → Processed directory: writes copy
- Directory processing → File type dispatch: scans files
- File type dispatch → Image and video metadata: routes media
- File type dispatch → PDF metadata: routes PDFs
- File type dispatch → HTML and CSS comments: routes web files
- Directory processing → Directory YAML: writes metadata
- Directory processing → JSON-LD generation: builds JSON-LD
- Image and video metadata → ExifTool: writes tags
- PDF metadata → ExifTool: writes tags
- Image and video metadata → FFprobe: reads duration
- Image and video metadata → FFmpeg: creates thumbnails
- JSON-LD generation → Processed directory: writes JSON-LD
- Directory YAML → Processed directory: writes YAML
- HTML and CSS comments → Processed directory: updates files
- Image and video metadata → Processed directory: updates media
- PDF metadata → Processed directory: updates PDFs
