# liaoran2002/bilimusicvideo architecture

> Architecture diagram of the GitHub repository liaoran2002/bilimusicvideo, 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/liaoran2002/bilimusicvideo
- Repository: https://github.com/liaoran2002/bilimusicvideo

## Overview

BLMV turns imported music-platform playlists into a persistent, searchable collection of tracks, finds matching Bilibili videos, and plays them through a desktop player. The renderer coordinates playlist selection, video search, playback, resume state, and settings; Electron IPC delegates platform work and persistence to the main process. Major side branches include Bilibili login, cache management, wallpaper mode, and tray/system controls. The README documents capabilities beyond the sampled excerpts, so those branches are included with conservative wiring; unsampled implementation details are not inferred.

Main entry points: [`src/App.vue`](https://github.com/liaoran2002/bilimusicvideo/blob/main/src/App.vue) (Player coordinator), [`electron/main/ipcHandlers.ts`](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipcHandlers.ts) (IPC registration), [`electron/preload/index.ts`](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/preload/index.ts) (Preload bridge), [`src/components/PlaylistManager.vue`](https://github.com/liaoran2002/bilimusicvideo/blob/main/src/components/PlaylistManager.vue) (Playlist manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_renderer["Player interface"]
  node_app["Player coordinator<br/>[App.vue]"]
  node_playlist_ui["Playlist manager"]
  node_playlist_panel["Playlist panel<br/>[PlaylistPanel.vue]"]
  node_settings_ui["Settings dialog<br/>[SettingsDialog.vue]"]
  node_player_controls["Video controls"]
  node_dash["DASH MSE engine<br/>[dashPlayer.ts]"]
end

subgraph group_catalog["Playlist domain"]
  node_playlist_store["Playlist store<br/>[playlists.ts]"]
end

subgraph group_main["Electron services"]
  node_music_handlers["Playlist parsing<br/>[music.ts]"]
  node_music_sources["Music providers"]
  node_bili_handlers["Bilibili handlers<br/>[biliApiHandlers.ts]"]
  node_bili_api["Bilibili API<br/>[biliApi.ts]"]
  node_ipc["IPC registration<br/>[ipcHandlers.ts]"]
  node_preload["Preload bridge<br/>[index.ts]"]
  node_playlist_handlers["Playlist handlers<br/>[playlist.ts]"]
  node_cache_handlers["Cache handlers<br/>[cache.ts]"]
end

subgraph group_state["Local state"]
  node_cache[("Search cache<br/>[cache.ts]")]
  node_settings[("Settings store<br/>[setting.ts]")]
  node_playlist_data[("Playlist data<br/>[playlist.ts]")]
end

subgraph group_system["Desktop integration"]
  node_auth["Bilibili login<br/>[auth.ts]"]
  node_wallpaper["Wallpaper mode<br/>[wallpaper.ts]"]
  node_tray["Tray controls<br/>[tray.ts]"]
  node_tray_page["Tray menu UI<br/>[main.ts]"]
  node_window_main["Window lifecycle<br/>[index.ts]"]
end

node_user(("Listener"))
node_bilibili{{"Bilibili services"}}
node_music_platforms{{"Music platforms"}}
node_desktop(("Windows desktop"))

node_user -->|"uses"| node_app
node_app -->|"opens"| node_playlist_ui
node_app -->|"drives"| node_player_controls
node_playlist_ui -->|"requests import"| node_preload
node_playlist_ui -->|"manages tracks"| node_playlist_store
node_playlist_store -->|"loads and saves"| node_preload
node_app -->|"selects playlist"| node_playlist_store
node_app -->|"requests search and streams"| node_preload
node_app -->|"plays DASH streams"| node_dash
node_dash -->|"fetches media segments"| node_bilibili
node_preload -->|"dispatches IPC"| node_ipc
node_ipc -->|"registers handlers"| node_music_handlers
node_ipc -->|"registers handlers"| node_bili_handlers
node_ipc -->|"registers handlers"| node_playlist_handlers
node_ipc -->|"registers handlers"| node_cache_handlers
node_music_handlers -->|"parses playlist links"| node_music_sources
node_music_sources -->|"fetches playlist details"| node_music_platforms
node_bili_handlers -->|"searches and resolves"| node_bili_api
node_bili_api -->|"queries videos"| node_bilibili
node_bili_handlers -->|"reads and writes"| node_cache
node_cache_handlers -->|"manages entries"| node_cache
node_playlist_handlers -->|"reads and writes"| node_playlist_data
node_playlist_ui -->|"opens settings"| node_settings_ui
node_settings_ui -->|"updates settings"| node_preload
node_ipc -->|"registers settings handlers"| node_settings
node_app -->|"requests login and controls"| node_preload
node_ipc -->|"registers auth handlers"| node_auth
node_auth -->|"authenticates"| node_bilibili
node_app -->|"toggles wallpaper and window"| node_preload
node_ipc -->|"registers wallpaper handlers"| node_wallpaper
node_wallpaper -->|"changes window mode"| node_window_main
node_window_main -->|"embeds wallpaper window"| node_desktop
node_app -->|"sends playback state"| node_tray
node_tray -->|"updates menu state"| node_tray_page
node_tray_page -->|"dispatches menu actions"| node_preload
node_tray -->|"sends playback controls"| node_app
node_window_main -.->|"integrates tray and media controls"| node_desktop

click node_app "https://github.com/liaoran2002/bilimusicvideo/blob/main/src/App.vue"
click node_playlist_ui "https://github.com/liaoran2002/bilimusicvideo/blob/main/src/components/PlaylistManager.vue"
click node_playlist_panel "https://github.com/liaoran2002/bilimusicvideo/blob/main/src/components/PlaylistPanel.vue"
click node_settings_ui "https://github.com/liaoran2002/bilimusicvideo/blob/main/src/components/SettingsDialog.vue"
click node_player_controls "https://github.com/liaoran2002/bilimusicvideo/blob/main/src/components/biliVideoControls.vue"
click node_dash "https://github.com/liaoran2002/bilimusicvideo/blob/main/src/utils/dashPlayer.ts"
click node_playlist_store "https://github.com/liaoran2002/bilimusicvideo/blob/main/src/stores/playlists.ts"
click node_music_handlers "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/music.ts"
click node_music_sources "https://github.com/liaoran2002/bilimusicvideo/tree/main/electron/main/music/sources"
click node_bili_handlers "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/biliApiHandlers.ts"
click node_bili_api "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/biliApi.ts"
click node_ipc "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipcHandlers.ts"
click node_preload "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/preload/index.ts"
click node_playlist_handlers "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/playlist.ts"
click node_cache_handlers "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/cache.ts"
click node_cache "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/utils/cache.ts"
click node_settings "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/utils/setting.ts"
click node_playlist_data "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/utils/playlist.ts"
click node_auth "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/auth.ts"
click node_wallpaper "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/wallpaper.ts"
click node_tray "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/tray.ts"
click node_tray_page "https://github.com/liaoran2002/bilimusicvideo/blob/main/src/trayMenu/main.ts"
click node_window_main "https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/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_app,node_playlist_ui,node_playlist_panel,node_settings_ui,node_player_controls,node_dash toneBlue
class node_playlist_store toneAmber
class node_music_handlers,node_music_sources,node_bili_handlers,node_bili_api,node_ipc,node_preload,node_playlist_handlers,node_cache_handlers toneMint
class node_cache,node_settings,node_playlist_data toneRose
class node_auth,node_wallpaper,node_tray,node_tray_page,node_window_main,node_user,node_bilibili,node_music_platforms,node_desktop toneIndigo
```

## Components

### Player interface

- [Player coordinator](https://github.com/liaoran2002/bilimusicvideo/blob/main/src/App.vue): `src/App.vue`
- [Playlist manager](https://github.com/liaoran2002/bilimusicvideo/blob/main/src/components/PlaylistManager.vue): `src/components/PlaylistManager.vue`
- [Playlist panel](https://github.com/liaoran2002/bilimusicvideo/blob/main/src/components/PlaylistPanel.vue): `src/components/PlaylistPanel.vue`
- [Settings dialog](https://github.com/liaoran2002/bilimusicvideo/blob/main/src/components/SettingsDialog.vue): `src/components/SettingsDialog.vue`
- [Video controls](https://github.com/liaoran2002/bilimusicvideo/blob/main/src/components/biliVideoControls.vue): `src/components/biliVideoControls.vue`
- [DASH MSE engine](https://github.com/liaoran2002/bilimusicvideo/blob/main/src/utils/dashPlayer.ts): `src/utils/dashPlayer.ts`

### Playlist domain

- [Playlist store](https://github.com/liaoran2002/bilimusicvideo/blob/main/src/stores/playlists.ts): `src/stores/playlists.ts`

### Electron services

- [Playlist parsing](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/music.ts): `electron/main/ipc/music.ts`
- [Music providers](https://github.com/liaoran2002/bilimusicvideo/tree/main/electron/main/music/sources): `electron/main/music/sources`
- [Bilibili handlers](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/biliApiHandlers.ts): `electron/main/ipc/biliApiHandlers.ts`
- [Bilibili API](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/biliApi.ts): `electron/main/biliApi.ts`
- [IPC registration](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipcHandlers.ts): `electron/main/ipcHandlers.ts`
- [Preload bridge](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/preload/index.ts): `electron/preload/index.ts`
- [Playlist handlers](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/playlist.ts): `electron/main/ipc/playlist.ts`
- [Cache handlers](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/cache.ts): `electron/main/ipc/cache.ts`

### Local state

- [Search cache](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/utils/cache.ts): `electron/main/utils/cache.ts`
- [Settings store](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/utils/setting.ts): `electron/main/utils/setting.ts`
- [Playlist data](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/utils/playlist.ts): `electron/main/utils/playlist.ts`

### Desktop integration

- [Bilibili login](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/auth.ts): `electron/main/ipc/auth.ts`
- [Wallpaper mode](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/wallpaper.ts): `electron/main/ipc/wallpaper.ts`
- [Tray controls](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/ipc/tray.ts): `electron/main/ipc/tray.ts`
- [Tray menu UI](https://github.com/liaoran2002/bilimusicvideo/blob/main/src/trayMenu/main.ts): `src/trayMenu/main.ts`
- [Window lifecycle](https://github.com/liaoran2002/bilimusicvideo/blob/main/electron/main/index.ts): `electron/main/index.ts`

### Other components

- **Listener**
- **Bilibili services**
- **Music platforms**
- **Windows desktop**

## Connections

- Listener → Player coordinator: uses
- Player coordinator → Playlist manager: opens
- Player coordinator → Video controls: drives
- Playlist manager → Preload bridge: requests import
- Playlist manager → Playlist store: manages tracks
- Playlist store → Preload bridge: loads and saves
- Player coordinator → Playlist store: selects playlist
- Player coordinator → Preload bridge: requests search and streams
- Player coordinator → DASH MSE engine: plays DASH streams
- DASH MSE engine → Bilibili services: fetches media segments
- Preload bridge → IPC registration: dispatches IPC
- IPC registration → Playlist parsing: registers handlers
- IPC registration → Bilibili handlers: registers handlers
- IPC registration → Playlist handlers: registers handlers
- IPC registration → Cache handlers: registers handlers
- Playlist parsing → Music providers: parses playlist links
- Music providers → Music platforms: fetches playlist details
- Bilibili handlers → Bilibili API: searches and resolves
- Bilibili API → Bilibili services: queries videos
- Bilibili handlers → Search cache: reads and writes
- Cache handlers → Search cache: manages entries
- Playlist handlers → Playlist data: reads and writes
- Playlist manager → Settings dialog: opens settings
- Settings dialog → Preload bridge: updates settings
- IPC registration → Settings store: registers settings handlers
- Player coordinator → Preload bridge: requests login and controls
- IPC registration → Bilibili login: registers auth handlers
- Bilibili login → Bilibili services: authenticates
- Player coordinator → Preload bridge: toggles wallpaper and window
- IPC registration → Wallpaper mode: registers wallpaper handlers
- Wallpaper mode → Window lifecycle: changes window mode
- Window lifecycle → Windows desktop: embeds wallpaper window
- Player coordinator → Tray controls: sends playback state
- Tray controls → Tray menu UI: updates menu state
- Tray menu UI → Preload bridge: dispatches menu actions
- Tray controls → Player coordinator: sends playback controls
- Window lifecycle → Windows desktop: integrates tray and media controls
