# ardakaanbeyy/animecix-desktop-2 architecture

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

- Interactive diagram: https://gitdiagram.com/ardakaanbeyy/animecix-desktop-2
- Repository: https://github.com/ardakaanbeyy/animecix-desktop-2

## Overview

AnimeciX Desktop wraps the AnimeciX site in an Electron window and adds local playback, downloads, caching, and offline browsing. The main workflow is site video requests through interception and local player delivery; users can also queue episodes for download and browse saved episodes in the library. The player adds subtitles, visual enhancement, and playback metadata; the app also integrates Discord presence and updates. Main-process wiring is sampled only in part, so unsampled IPC and UI-to-service links are omitted.

Main entry points: [`src/main.ts`](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/main.ts) (Main process), [`src/download/DownloadQueue.ts`](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/download/DownloadQueue.ts) (Download queue), [`src/window/WindowService.ts`](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/window/WindowService.ts) (App window), [`src/storage/StorageService.ts`](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/storage/StorageService.ts) (SQLite storage)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Electron app"]
  node_main["Main process<br/>[main.ts]"]
  node_window["App window<br/>[WindowService.ts]"]
  node_preload["IPC bridge<br/>[preload.ts]"]
  node_storage[("SQLite storage<br/>[StorageService.ts]")]
end

subgraph group_media["Streaming and playback"]
  node_network["Request interception<br/>[request-handler.ts]"]
  node_adblock["Ad blocker<br/>[ad-blocker.ts]"]
  node_playerprotocol["Player protocol<br/>[tau-protocol.ts]"]
  node_enhancement["Video enhancement"]
end

subgraph group_offline["Downloads and offline"]
  node_librarymanager["Library manager<br/>[LibraryManager.ts]"]
  node_libraryprotocol["Library protocol"]
  node_queue["Download queue<br/>[DownloadQueue.ts]"]
  node_downloader["Episode downloader<br/>[Downloader.ts]"]
  node_tray["System tray<br/>[TrayManager.ts]"]
  node_cache["Stream cache<br/>[StreamCache.ts]"]
  node_offlineprotocol["Offline protocol"]
end

subgraph group_ui["Renderer interfaces"]
  node_playerui["Video player<br/>[App.tsx]"]
  node_libraryui["Offline library UI<br/>[App.tsx]"]
end

subgraph group_services["Integrations"]
  node_discord["Discord presence<br/>[discord-rpc.ts]"]
  node_updater["Update service<br/>[UpdaterService.ts]"]
end

node_user(("User"))
node_site["AnimeciX site"]
node_cdn["Video CDN"]
node_discordservice["Discord"]
node_updateservice["Update provider"]

node_user -->|"uses"| node_window
node_main -->|"creates"| node_window
node_window -->|"loads"| node_site
node_site -->|"video requests"| node_network
node_network -->|"checks ads"| node_adblock
node_network -->|"redirects embeds"| node_playerprotocol
node_playerprotocol -->|"serves assets"| node_playerui
node_playerui -->|"streams video"| node_cdn
node_playerui -->|"processes video"| node_enhancement
node_main -->|"configures"| node_preload
node_main -->|"initializes"| node_storage
node_main -->|"creates"| node_queue
node_queue -->|"downloads episodes"| node_downloader
node_queue -->|"persists queue"| node_storage
node_tray -->|"controls downloads"| node_queue
node_main -->|"creates"| node_tray
node_main -->|"sets up caching"| node_cache
node_cache -->|"persists cache index"| node_storage
node_main -->|"registers handler"| node_offlineprotocol
node_offlineprotocol -->|"reads cache metadata"| node_storage
node_main -->|"registers handler"| node_libraryprotocol
node_librarymanager -->|"navigates"| node_window
node_librarymanager -->|"loads library scheme"| node_libraryprotocol
node_libraryprotocol -->|"serves assets"| node_libraryui
node_main -->|"initializes"| node_discord
node_discord -.->|"updates presence"| node_discordservice
node_main -->|"initializes"| node_updater
node_updater -->|"checks and downloads"| node_updateservice

click node_main "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/main.ts"
click node_window "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/window/WindowService.ts"
click node_preload "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/preload.ts"
click node_storage "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/storage/StorageService.ts"
click node_network "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/network/request-handler.ts"
click node_adblock "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/network/ad-blocker.ts"
click node_playerprotocol "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/player/tau-protocol.ts"
click node_playerui "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/player-page/App.tsx"
click node_enhancement "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/player-page/hooks/useVideoEnhancement.ts"
click node_librarymanager "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/library/LibraryManager.ts"
click node_libraryprotocol "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/library/library-protocol.ts"
click node_libraryui "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/library-page/App.tsx"
click node_queue "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/download/DownloadQueue.ts"
click node_downloader "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/download/Downloader.ts"
click node_tray "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/download/TrayManager.ts"
click node_cache "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/cache/StreamCache.ts"
click node_offlineprotocol "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/offline/offline-protocol.ts"
click node_discord "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/integrations/discord-rpc.ts"
click node_updater "https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/updater/UpdaterService.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_main,node_window,node_preload,node_storage,node_user toneBlue
class node_network,node_adblock,node_playerprotocol,node_enhancement toneAmber
class node_librarymanager,node_libraryprotocol,node_queue,node_downloader,node_tray,node_cache,node_offlineprotocol toneMint
class node_playerui,node_libraryui toneRose
class node_discord,node_updater,node_site,node_cdn,node_discordservice,node_updateservice toneIndigo
```

## Components

### Electron app

- [Main process](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/main.ts): `src/main.ts`
- [App window](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/window/WindowService.ts): `src/window/WindowService.ts`
- [IPC bridge](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/preload.ts): `src/preload.ts`
- [SQLite storage](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/storage/StorageService.ts): `src/storage/StorageService.ts`

### Streaming and playback

- [Request interception](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/network/request-handler.ts): `src/network/request-handler.ts`
- [Ad blocker](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/network/ad-blocker.ts): `src/network/ad-blocker.ts`
- [Player protocol](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/player/tau-protocol.ts): `src/player/tau-protocol.ts`
- [Video enhancement](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/player-page/hooks/useVideoEnhancement.ts): `src/player-page/hooks/useVideoEnhancement.ts`

### Downloads and offline

- [Library manager](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/library/LibraryManager.ts): `src/library/LibraryManager.ts`
- [Library protocol](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/library/library-protocol.ts): `src/library/library-protocol.ts`
- [Download queue](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/download/DownloadQueue.ts): `src/download/DownloadQueue.ts`
- [Episode downloader](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/download/Downloader.ts): `src/download/Downloader.ts`
- [System tray](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/download/TrayManager.ts): `src/download/TrayManager.ts`
- [Stream cache](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/cache/StreamCache.ts): `src/cache/StreamCache.ts`
- [Offline protocol](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/offline/offline-protocol.ts): `src/offline/offline-protocol.ts`

### Renderer interfaces

- [Video player](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/player-page/App.tsx): `src/player-page/App.tsx`
- [Offline library UI](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/library-page/App.tsx): `src/library-page/App.tsx`

### Integrations

- [Discord presence](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/integrations/discord-rpc.ts): `src/integrations/discord-rpc.ts`
- [Update service](https://github.com/ardakaanbeyy/animecix-desktop-2/blob/main/src/updater/UpdaterService.ts): `src/updater/UpdaterService.ts`

### Other components

- **User**
- **AnimeciX site**
- **Video CDN**
- **Discord**
- **Update provider**

## Connections

- User → App window: uses
- Main process → App window: creates
- App window → AnimeciX site: loads
- AnimeciX site → Request interception: video requests
- Request interception → Ad blocker: checks ads
- Request interception → Player protocol: redirects embeds
- Player protocol → Video player: serves assets
- Video player → Video CDN: streams video
- Video player → Video enhancement: processes video
- Main process → IPC bridge: configures
- Main process → SQLite storage: initializes
- Main process → Download queue: creates
- Download queue → Episode downloader: downloads episodes
- Download queue → SQLite storage: persists queue
- System tray → Download queue: controls downloads
- Main process → System tray: creates
- Main process → Stream cache: sets up caching
- Stream cache → SQLite storage: persists cache index
- Main process → Offline protocol: registers handler
- Offline protocol → SQLite storage: reads cache metadata
- Main process → Library protocol: registers handler
- Library manager → App window: navigates
- Library manager → Library protocol: loads library scheme
- Library protocol → Offline library UI: serves assets
- Main process → Discord presence: initializes
- Discord presence → Discord: updates presence
- Main process → Update service: initializes
- Update service → Update provider: checks and downloads
