# fhb263/obsidian-reelludic architecture

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

- Interactive diagram: https://gitdiagram.com/fhb263/obsidian-reelludic
- Repository: https://github.com/fhb263/obsidian-reelludic

## Overview

ReelLudic is an Obsidian media-library plugin for cataloging, tracking, and opening books, films, series, anime, games, and music. The main workflow is to search metadata sources, create or edit an entry, persist catalog data and a linked Markdown note, then browse, schedule, track, or launch/read/play it. The graph also covers statistics, reader/player experiences, and configuration. Some capabilities are documented but their wiring is unsampled; those connections are marked dashed with no evidence path rather than presented as verified calls.

Main entry points: [`main.ts`](https://github.com/fhb263/obsidian-reelludic/blob/master/main.ts) (Plugin runtime), [`src/views/HomeView.ts`](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/HomeView.ts) (Home view host), [`src/views/components/HomeView.svelte`](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/HomeView.svelte) (Home workspace), [`src/views/ReaderViews.ts`](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/ReaderViews.ts) (Reader view host)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_library["Library UI"]
  node_homeview["Home view host<br/>[HomeView.ts]"]
  node_homeui["Home workspace<br/>[HomeView.svelte]"]
  node_medialist["Media browsing<br/>[MediaList.svelte]"]
end

subgraph group_catalog["Catalog Workflow"]
  node_plugin["Plugin runtime<br/>[main.ts]"]
  node_entryform["Entry form<br/>[EntryForm.svelte]"]
  node_entrymodal["Entry editor<br/>[EntryModal.ts]"]
  node_entryservice["Entry operations<br/>[EntryService.ts]"]
  node_catalogdata[("Catalog persistence<br/>[catalog.ts]")]
  node_notes["Detail notes<br/>[noteGenerator.ts]"]
  node_types["Media model<br/>[types.ts]"]
end

subgraph group_engines["Reader and Player"]
  node_readerhost["Reader view host<br/>[ReaderViews.ts]"]
  node_txtreader["TXT reader<br/>[TxtReaderModal.ts]"]
  node_epubreader["EPUB reader<br/>[EpubReaderModal.ts]"]
  node_pdfreader["PDF reader<br/>[PdfReaderModal.ts]"]
  node_videoplayer["Video player<br/>[VideoPlayerView.ts]"]
  node_speech["Speech services<br/>[TtsService.ts]"]
end

subgraph group_planning["Tracking and Reports"]
  node_tracking["Tracking board"]
  node_calendar["Calendar board"]
  node_stats["Statistics board<br/>[StatsBoard.svelte]"]
end

subgraph group_config["Configuration and Sources"]
  node_settings["Settings panel<br/>[Settings.ts]"]
  node_sources["Metadata providers"]
end

node_user(("Obsidian user"))
node_external{{"Metadata APIs"}}

node_user -.->|"uses"| node_plugin
node_plugin -.->|"opens"| node_homeview
node_homeview -->|"loads entries"| node_entryservice
node_homeview -->|"renders"| node_homeui
node_homeui -->|"renders"| node_medialist
node_homeui -->|"renders"| node_calendar
node_homeui -->|"renders"| node_tracking
node_homeui -->|"renders"| node_stats
node_user -.->|"adds or edits"| node_entrymodal
node_entrymodal -.->|"presents"| node_entryform
node_entryform -.->|"searches metadata"| node_sources
node_sources -.->|"requests metadata"| node_external
node_entrymodal -.->|"saves entry"| node_entryservice
node_entryservice -.->|"persists catalog"| node_catalogdata
node_entryservice -.->|"generates note"| node_notes
node_homeview -->|"plans dates"| node_calendar
node_homeview -.->|"records activity"| node_stats
node_plugin -.->|"opens reader"| node_readerhost
node_plugin -.->|"opens player"| node_videoplayer
node_readerhost -.->|"hosts"| node_txtreader
node_readerhost -.->|"hosts"| node_epubreader
node_readerhost -.->|"hosts"| node_pdfreader
node_plugin -.->|"requests speech"| node_speech
node_plugin -->|"configures"| node_settings

click node_plugin "https://github.com/fhb263/obsidian-reelludic/blob/master/main.ts"
click node_settings "https://github.com/fhb263/obsidian-reelludic/blob/master/src/Settings.ts"
click node_homeview "https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/HomeView.ts"
click node_homeui "https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/HomeView.svelte"
click node_medialist "https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/MediaList.svelte"
click node_entryform "https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/EntryForm.svelte"
click node_entrymodal "https://github.com/fhb263/obsidian-reelludic/blob/master/src/modals/EntryModal.ts"
click node_entryservice "https://github.com/fhb263/obsidian-reelludic/blob/master/src/services/EntryService.ts"
click node_catalogdata "https://github.com/fhb263/obsidian-reelludic/blob/master/src/data/catalog.ts"
click node_notes "https://github.com/fhb263/obsidian-reelludic/blob/master/src/data/noteGenerator.ts"
click node_types "https://github.com/fhb263/obsidian-reelludic/blob/master/src/data/types.ts"
click node_sources "https://github.com/fhb263/obsidian-reelludic/tree/master/src/services"
click node_tracking "https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/TrackingBoard.svelte"
click node_calendar "https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/CalendarBoard.svelte"
click node_stats "https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/StatsBoard.svelte"
click node_readerhost "https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/ReaderViews.ts"
click node_txtreader "https://github.com/fhb263/obsidian-reelludic/blob/master/src/modals/TxtReaderModal.ts"
click node_epubreader "https://github.com/fhb263/obsidian-reelludic/blob/master/src/modals/EpubReaderModal.ts"
click node_pdfreader "https://github.com/fhb263/obsidian-reelludic/blob/master/src/modals/PdfReaderModal.ts"
click node_videoplayer "https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/VideoPlayerView.ts"
click node_speech "https://github.com/fhb263/obsidian-reelludic/blob/master/src/services/TtsService.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_homeview,node_homeui,node_medialist,node_user toneBlue
class node_plugin,node_entryform,node_entrymodal,node_entryservice,node_catalogdata,node_notes,node_types toneAmber
class node_readerhost,node_txtreader,node_epubreader,node_pdfreader,node_videoplayer,node_speech,node_external toneMint
class node_tracking,node_calendar,node_stats toneRose
class node_settings,node_sources toneIndigo
```

## Components

### Library UI

- [Home view host](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/HomeView.ts): `src/views/HomeView.ts`
- [Home workspace](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/HomeView.svelte): `src/views/components/HomeView.svelte`
- [Media browsing](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/MediaList.svelte): `src/views/components/MediaList.svelte`

### Catalog Workflow

- [Plugin runtime](https://github.com/fhb263/obsidian-reelludic/blob/master/main.ts): `main.ts`
- [Entry form](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/EntryForm.svelte): `src/views/components/EntryForm.svelte`
- [Entry editor](https://github.com/fhb263/obsidian-reelludic/blob/master/src/modals/EntryModal.ts): `src/modals/EntryModal.ts`
- [Entry operations](https://github.com/fhb263/obsidian-reelludic/blob/master/src/services/EntryService.ts): `src/services/EntryService.ts`
- [Catalog persistence](https://github.com/fhb263/obsidian-reelludic/blob/master/src/data/catalog.ts): `src/data/catalog.ts`
- [Detail notes](https://github.com/fhb263/obsidian-reelludic/blob/master/src/data/noteGenerator.ts): `src/data/noteGenerator.ts`
- [Media model](https://github.com/fhb263/obsidian-reelludic/blob/master/src/data/types.ts): `src/data/types.ts`

### Reader and Player

- [Reader view host](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/ReaderViews.ts): `src/views/ReaderViews.ts`
- [TXT reader](https://github.com/fhb263/obsidian-reelludic/blob/master/src/modals/TxtReaderModal.ts): `src/modals/TxtReaderModal.ts`
- [EPUB reader](https://github.com/fhb263/obsidian-reelludic/blob/master/src/modals/EpubReaderModal.ts): `src/modals/EpubReaderModal.ts`
- [PDF reader](https://github.com/fhb263/obsidian-reelludic/blob/master/src/modals/PdfReaderModal.ts): `src/modals/PdfReaderModal.ts`
- [Video player](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/VideoPlayerView.ts): `src/views/VideoPlayerView.ts`
- [Speech services](https://github.com/fhb263/obsidian-reelludic/blob/master/src/services/TtsService.ts): `src/services/TtsService.ts`

### Tracking and Reports

- [Tracking board](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/TrackingBoard.svelte): `src/views/components/TrackingBoard.svelte`
- [Calendar board](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/CalendarBoard.svelte): `src/views/components/CalendarBoard.svelte`
- [Statistics board](https://github.com/fhb263/obsidian-reelludic/blob/master/src/views/components/StatsBoard.svelte): `src/views/components/StatsBoard.svelte`

### Configuration and Sources

- [Settings panel](https://github.com/fhb263/obsidian-reelludic/blob/master/src/Settings.ts): `src/Settings.ts`
- [Metadata providers](https://github.com/fhb263/obsidian-reelludic/tree/master/src/services): `src/services`

### Other components

- **Obsidian user**
- **Metadata APIs**

## Connections

- Obsidian user → Plugin runtime: uses
- Plugin runtime → Home view host: opens (evidence: `src/views/HomeView.ts`)
- Home view host → Entry operations: loads entries (evidence: `src/views/HomeView.ts`)
- Home view host → Home workspace: renders (evidence: `src/views/HomeView.ts`)
- Home workspace → Media browsing: renders (evidence: `src/views/components/HomeView.svelte`)
- Home workspace → Calendar board: renders (evidence: `src/views/components/HomeView.svelte`)
- Home workspace → Tracking board: renders (evidence: `src/views/components/HomeView.svelte`)
- Home workspace → Statistics board: renders (evidence: `src/views/components/HomeView.svelte`)
- Obsidian user → Entry editor: adds or edits (evidence: `README.md`)
- Entry editor → Entry form: presents
- Entry form → Metadata providers: searches metadata (evidence: `README.md`)
- Metadata providers → Metadata APIs: requests metadata (evidence: `README.md`)
- Entry editor → Entry operations: saves entry (evidence: `README.md`)
- Entry operations → Catalog persistence: persists catalog (evidence: `README.md`)
- Entry operations → Detail notes: generates note (evidence: `README.md`)
- Home view host → Calendar board: plans dates (evidence: `src/views/HomeView.ts`)
- Home view host → Statistics board: records activity (evidence: `README.md`)
- Plugin runtime → Reader view host: opens reader (evidence: `README.md`)
- Plugin runtime → Video player: opens player (evidence: `README.md`)
- Reader view host → TXT reader: hosts
- Reader view host → EPUB reader: hosts
- Reader view host → PDF reader: hosts
- Plugin runtime → Speech services: requests speech (evidence: `README.md`)
- Plugin runtime → Settings panel: configures (evidence: `src/Settings.ts`)
