# murchi1k/obsidian-lorebase-plugin architecture

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

- Interactive diagram: https://gitdiagram.com/murchi1k/obsidian-lorebase-plugin
- Repository: https://github.com/murchi1k/obsidian-lorebase-plugin

## Overview

Lorebase is an Obsidian plugin for tracking six media collections as local Markdown notes. The primary workflow is to browse a library, add or edit an item, optionally enrich it from metadata providers, and save it in the vault; users can also import existing notes and review Steam imports. The graph preserves documented library, progress, statistics, settings, and integration capabilities. Sampled source confirms selected service initialization, edit-save, provider, and image-storage calls; other links reflect README-described behavior, not inspected implementations.

Main entry points: [`src/main.ts`](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/main.ts) (Plugin entry), [`src/views/LibraryView.ts`](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/views/LibraryView.ts) (Library browser), [`src/modals/EditModal.ts`](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/modals/EditModal.ts) (Item editors), [`src/services/SteamSyncService.ts`](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/SteamSyncService.ts) (Steam sync)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Plugin and UI"]
  node_plugin["Plugin entry<br/>[main.ts]"]
  node_library_view["Library browser<br/>[LibraryView.ts]"]
  node_toolbar["Library toolbar<br/>[Toolbar.ts]"]
  node_editors["Item editors<br/>[EditModal.ts]"]
  node_stats["Statistics view<br/>[StatsModal.ts]"]
end

subgraph group_library["Media libraries"]
  node_media_services["Media services<br/>[MetadataService.ts]"]
  node_game_service["Game library<br/>[GameService.ts]"]
  node_anime_service["Anime library<br/>[AnimeService.ts]"]
  node_video_service["Film and TV<br/>[VideoService.ts]"]
  node_reading_service["Books and manga<br/>[ReadingService.ts]"]
  node_library_render["Grid rendering<br/>[rendering.ts]"]
end

subgraph group_metadata["Metadata and integrations"]
  node_integration_service["Metadata workflows"]
  node_providers["Metadata providers<br/>[common.ts]"]
  node_image_storage["Image localization<br/>[imageStorage.ts]"]
  node_steam_sync["Steam sync"]
end

subgraph group_import["Import workflows"]
  node_note_conversion["Note conversion"]
  node_note_review["Import review"]
  node_steam_review["Steam review"]
end

subgraph group_config["Settings and insights"]
  node_settings["Plugin settings<br/>[SettingsTab.ts]"]
  node_localization["Translations<br/>[index.ts]"]
end

node_user(("Obsidian user"))
node_obsidian[("Obsidian vault")]
node_steam["Steam service"]

node_user -->|"opens"| node_plugin
node_plugin -->|"opens libraries"| node_library_view
node_plugin -->|"initializes"| node_media_services
node_plugin -->|"initializes"| node_integration_service
node_plugin -->|"initializes"| node_steam_sync
node_plugin -->|"initializes"| node_note_conversion
node_user -->|"browses"| node_library_view
node_library_view -->|"renders cards"| node_library_render
node_library_view -->|"loads items"| node_game_service
node_library_view -->|"loads items"| node_anime_service
node_library_view -->|"loads items"| node_video_service
node_library_view -->|"loads items"| node_reading_service
node_user -->|"selects actions"| node_toolbar
node_user -->|"creates or edits"| node_editors
node_plugin -->|"opens editors"| node_editors
node_editors -->|"saves games"| node_game_service
node_editors -->|"saves anime"| node_anime_service
node_editors -->|"saves video"| node_video_service
node_editors -->|"saves reading"| node_reading_service
node_game_service -->|"reads and writes notes"| node_obsidian
node_anime_service -->|"reads and writes notes"| node_obsidian
node_video_service -->|"reads and writes notes"| node_obsidian
node_reading_service -->|"reads and writes notes"| node_obsidian
node_user -->|"searches metadata"| node_integration_service
node_integration_service -->|"dispatches searches"| node_providers
node_providers -.->|"requests metadata"| node_steam
node_integration_service -->|"localizes images"| node_image_storage
node_image_storage -->|"stores images"| node_obsidian
node_user -->|"starts sync"| node_steam_sync
node_steam_sync -.->|"fetches games"| node_steam
node_steam_sync -->|"prepares candidates"| node_steam_review
node_user -->|"imports notes"| node_note_conversion
node_note_conversion -->|"reads notes"| node_obsidian
node_note_conversion -->|"presents preview"| node_note_review
node_note_review -->|"writes selected notes"| node_obsidian
node_steam_review -->|"returns selection"| node_steam_sync
node_steam_sync -->|"writes game notes"| node_obsidian
node_user -->|"views statistics"| node_stats
node_stats -->|"uses collection data"| node_media_services
node_user -->|"configures"| node_settings
node_settings -->|"updates preferences"| node_plugin
node_plugin -->|"uses translations"| node_localization

click node_plugin "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/main.ts"
click node_library_view "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/views/LibraryView.ts"
click node_toolbar "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/components/Toolbar.ts"
click node_editors "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/modals/EditModal.ts"
click node_stats "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/modals/StatsModal.ts"
click node_media_services "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/MetadataService.ts"
click node_game_service "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/GameService.ts"
click node_anime_service "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/AnimeService.ts"
click node_video_service "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/VideoService.ts"
click node_reading_service "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/ReadingService.ts"
click node_library_render "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/views/library/rendering.ts"
click node_integration_service "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/IntegrationService.ts"
click node_providers "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/integrations/providers/common.ts"
click node_image_storage "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/integrations/imageStorage.ts"
click node_steam_sync "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/SteamSyncService.ts"
click node_note_conversion "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/NoteConversionService.ts"
click node_note_review "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/modals/NoteImportReviewModal.ts"
click node_steam_review "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/modals/SteamSyncReviewModal.ts"
click node_settings "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/settings/SettingsTab.ts"
click node_localization "https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/localization/index.ts"

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_plugin,node_library_view,node_toolbar,node_editors,node_stats,node_user toneBlue
class node_media_services,node_game_service,node_anime_service,node_video_service,node_reading_service,node_library_render,node_obsidian toneAmber
class node_integration_service,node_providers,node_image_storage,node_steam_sync toneMint
class node_note_conversion,node_note_review,node_steam_review toneRose
class node_settings,node_localization,node_steam toneIndigo
```

## Components

### Plugin and UI

- [Plugin entry](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/main.ts): `src/main.ts`
- [Library browser](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/views/LibraryView.ts): `src/views/LibraryView.ts`
- [Library toolbar](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/components/Toolbar.ts): `src/components/Toolbar.ts`
- [Item editors](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/modals/EditModal.ts): `src/modals/EditModal.ts`
- [Statistics view](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/modals/StatsModal.ts): `src/modals/StatsModal.ts`

### Media libraries

- [Media services](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/MetadataService.ts): `src/services/MetadataService.ts`
- [Game library](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/GameService.ts): `src/services/GameService.ts`
- [Anime library](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/AnimeService.ts): `src/services/AnimeService.ts`
- [Film and TV](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/VideoService.ts): `src/services/VideoService.ts`
- [Books and manga](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/ReadingService.ts): `src/services/ReadingService.ts`
- [Grid rendering](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/views/library/rendering.ts): `src/views/library/rendering.ts`

### Metadata and integrations

- [Metadata workflows](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/IntegrationService.ts): `src/services/IntegrationService.ts`
- [Metadata providers](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/integrations/providers/common.ts): `src/services/integrations/providers/common.ts`
- [Image localization](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/integrations/imageStorage.ts): `src/services/integrations/imageStorage.ts`
- [Steam sync](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/SteamSyncService.ts): `src/services/SteamSyncService.ts`

### Import workflows

- [Note conversion](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/services/NoteConversionService.ts): `src/services/NoteConversionService.ts`
- [Import review](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/modals/NoteImportReviewModal.ts): `src/modals/NoteImportReviewModal.ts`
- [Steam review](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/modals/SteamSyncReviewModal.ts): `src/modals/SteamSyncReviewModal.ts`

### Settings and insights

- [Plugin settings](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/settings/SettingsTab.ts): `src/settings/SettingsTab.ts`
- [Translations](https://github.com/murchi1k/obsidian-lorebase-plugin/blob/main/src/localization/index.ts): `src/localization/index.ts`

### Other components

- **Obsidian user**
- **Obsidian vault**
- **Steam service**

## Connections

- Obsidian user → Plugin entry: opens
- Plugin entry → Library browser: opens libraries
- Plugin entry → Media services: initializes
- Plugin entry → Metadata workflows: initializes
- Plugin entry → Steam sync: initializes
- Plugin entry → Note conversion: initializes
- Obsidian user → Library browser: browses
- Library browser → Grid rendering: renders cards
- Library browser → Game library: loads items
- Library browser → Anime library: loads items
- Library browser → Film and TV: loads items
- Library browser → Books and manga: loads items
- Obsidian user → Library toolbar: selects actions
- Obsidian user → Item editors: creates or edits
- Plugin entry → Item editors: opens editors
- Item editors → Game library: saves games
- Item editors → Anime library: saves anime
- Item editors → Film and TV: saves video
- Item editors → Books and manga: saves reading
- Game library → Obsidian vault: reads and writes notes
- Anime library → Obsidian vault: reads and writes notes
- Film and TV → Obsidian vault: reads and writes notes
- Books and manga → Obsidian vault: reads and writes notes
- Obsidian user → Metadata workflows: searches metadata
- Metadata workflows → Metadata providers: dispatches searches
- Metadata providers → Steam service: requests metadata
- Metadata workflows → Image localization: localizes images
- Image localization → Obsidian vault: stores images
- Obsidian user → Steam sync: starts sync
- Steam sync → Steam service: fetches games
- Steam sync → Steam review: prepares candidates
- Obsidian user → Note conversion: imports notes
- Note conversion → Obsidian vault: reads notes
- Note conversion → Import review: presents preview
- Import review → Obsidian vault: writes selected notes
- Steam review → Steam sync: returns selection
- Steam sync → Obsidian vault: writes game notes
- Obsidian user → Statistics view: views statistics
- Statistics view → Media services: uses collection data
- Obsidian user → Plugin settings: configures
- Plugin settings → Plugin entry: updates preferences
- Plugin entry → Translations: uses translations
