# crazysmile-phd/downkyicore architecture

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

- Interactive diagram: https://gitdiagram.com/crazysmile-phd/downkyicore
- Repository: https://github.com/crazysmile-phd/downkyicore

## Overview

DownKyi is a cross-platform Avalonia desktop client for parsing Bilibili content and downloading media. The main user journey is to provide a Bilibili entry, resolve its content and playback resources, then manage a staged download through completion and history. The graph preserves documented content categories and downloaded artifacts, plus settings, persistence, and API layers. README statements support the broad capabilities; sampled source supports task execution, history, settings, and application startup. Several subsystem connections remain unverified because their implementation was not sampled.

Main entry points: [`src/DownKyi.Desktop/App.axaml.cs`](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/App.axaml.cs) (Desktop app), [`src/DownKyi.Application/Media/BilibiliInputParser.cs`](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Application/Media/BilibiliInputParser.cs) (Input parser), [`src/DownKyi.Infrastructure/Bilibili/BilibiliApiClient.cs`](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Bilibili/BilibiliApiClient.cs) (Bilibili API client), [`src/DownKyi.Application/Downloads/DownloadTaskApplicationService.cs`](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Application/Downloads/DownloadTaskApplicationService.cs) (Task application service)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_desktop["Desktop experience"]
  node_desktop_app["Desktop app<br/>[App.axaml.cs]"]
  node_download_ui["Download manager"]
end

subgraph group_content["Bilibili content"]
  node_input_parser["Input parser"]
  node_bili_api["Bilibili API client"]
  node_video_info["Video metadata<br/>[VideoInfo.cs]"]
  node_content_catalog["Content categories<br/>[BiliApi]"]
  node_playback["Playback resolver<br/>[VideoStream]"]
  node_bilibili_service["Bilibili service"]
end

subgraph group_downloads["Download lifecycle"]
  node_download_add["Add download"]
  node_task_service["Task application service"]
  node_task_model["Task state model<br/>[DownloadTask.cs]"]
  node_pipeline["Download pipeline"]
  node_download_stages["Download stages<br/>[Download]"]
  node_media_output["Media and sidecars"]
  node_download_history["Download history"]
end

subgraph group_platform["Persistence and services"]
  node_task_store[("SQLite task store")]
  node_settings["Settings<br/>[SettingsManager.cs]"]
  node_app_storage["Application storage"]
end

node_user(("Desktop user"))
node_bilibili(("Bilibili"))

node_user -->|"runs"| node_desktop_app
node_user -.->|"provides entry"| node_input_parser
node_input_parser -.->|"resolves content"| node_bili_api
node_bili_api -.->|"requests data"| node_bilibili
node_bili_api -.->|"returns metadata"| node_video_info
node_input_parser -->|"parses categories"| node_content_catalog
node_content_catalog -.->|"selects playback"| node_playback
node_user -.->|"requests download"| node_download_add
node_download_add -.->|"creates task"| node_task_service
node_task_service -.->|"persists task"| node_task_store
node_task_service -->|"transitions state"| node_task_model
node_download_ui -->|"loads history"| node_download_history
node_pipeline -->|"executes stages"| node_download_stages
node_download_stages -.->|"resolves streams"| node_playback
node_download_stages -.->|"writes artifacts"| node_media_output
node_pipeline -.->|"updates state"| node_task_model
node_download_history -.->|"reads history"| node_task_store
node_desktop_app -.->|"loads preferences"| node_settings
node_settings -.->|"uses data paths"| node_app_storage
node_desktop_app -.->|"hosts services"| node_bilibili_service

click node_desktop_app "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/App.axaml.cs"
click node_download_ui "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/ViewModels/ViewDownloadManagerViewModel.cs"
click node_input_parser "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Application/Media/BilibiliInputParser.cs"
click node_bili_api "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Bilibili/BilibiliApiClient.cs"
click node_video_info "https://github.com/crazysmile-phd/downkyicore/blob/main/DownKyi.Core/BiliApi/Video/VideoInfo.cs"
click node_content_catalog "https://github.com/crazysmile-phd/downkyicore/tree/main/DownKyi.Core/BiliApi"
click node_playback "https://github.com/crazysmile-phd/downkyicore/tree/main/DownKyi.Core/BiliApi/VideoStream"
click node_download_add "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/Services/Download/AddToDownloadService.cs"
click node_task_service "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Application/Downloads/DownloadTaskApplicationService.cs"
click node_task_model "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Domain/Downloads/DownloadTask.cs"
click node_pipeline "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/Services/Download/DownloadPipeline.cs"
click node_download_stages "https://github.com/crazysmile-phd/downkyicore/tree/main/src/DownKyi.Desktop/Services/Download"
click node_media_output "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/Services/Download/DownloadArtifactWriter.cs"
click node_download_history "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Application/Downloads/DownloadHistoryService.cs"
click node_task_store "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Downloads/SqliteDownloadStoreDatabase.cs"
click node_settings "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Settings/SettingsManager.cs"
click node_app_storage "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Storage/ApplicationStorage.cs"
click node_bilibili_service "https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Bilibili/BilibiliApiClient.cs"

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_desktop_app,node_download_ui,node_user toneBlue
class node_input_parser,node_bili_api,node_video_info,node_content_catalog,node_playback,node_bilibili_service toneAmber
class node_download_add,node_task_service,node_task_model,node_pipeline,node_download_stages,node_media_output,node_download_history toneMint
class node_task_store,node_settings,node_app_storage toneRose
class node_bilibili toneIndigo
```

## Components

### Desktop experience

- [Desktop app](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/App.axaml.cs): `src/DownKyi.Desktop/App.axaml.cs`
- [Download manager](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/ViewModels/ViewDownloadManagerViewModel.cs): `src/DownKyi.Desktop/ViewModels/ViewDownloadManagerViewModel.cs`

### Bilibili content

- [Input parser](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Application/Media/BilibiliInputParser.cs): `src/DownKyi.Application/Media/BilibiliInputParser.cs`
- [Bilibili API client](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Bilibili/BilibiliApiClient.cs): `src/DownKyi.Infrastructure/Bilibili/BilibiliApiClient.cs`
- [Video metadata](https://github.com/crazysmile-phd/downkyicore/blob/main/DownKyi.Core/BiliApi/Video/VideoInfo.cs): `DownKyi.Core/BiliApi/Video/VideoInfo.cs`
- [Content categories](https://github.com/crazysmile-phd/downkyicore/tree/main/DownKyi.Core/BiliApi): `DownKyi.Core/BiliApi`
- [Playback resolver](https://github.com/crazysmile-phd/downkyicore/tree/main/DownKyi.Core/BiliApi/VideoStream): `DownKyi.Core/BiliApi/VideoStream`
- [Bilibili service](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Bilibili/BilibiliApiClient.cs): `src/DownKyi.Infrastructure/Bilibili/BilibiliApiClient.cs`

### Download lifecycle

- [Add download](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/Services/Download/AddToDownloadService.cs): `src/DownKyi.Desktop/Services/Download/AddToDownloadService.cs`
- [Task application service](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Application/Downloads/DownloadTaskApplicationService.cs): `src/DownKyi.Application/Downloads/DownloadTaskApplicationService.cs`
- [Task state model](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Domain/Downloads/DownloadTask.cs): `src/DownKyi.Domain/Downloads/DownloadTask.cs`
- [Download pipeline](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/Services/Download/DownloadPipeline.cs): `src/DownKyi.Desktop/Services/Download/DownloadPipeline.cs`
- [Download stages](https://github.com/crazysmile-phd/downkyicore/tree/main/src/DownKyi.Desktop/Services/Download): `src/DownKyi.Desktop/Services/Download`
- [Media and sidecars](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Desktop/Services/Download/DownloadArtifactWriter.cs): `src/DownKyi.Desktop/Services/Download/DownloadArtifactWriter.cs`
- [Download history](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Application/Downloads/DownloadHistoryService.cs): `src/DownKyi.Application/Downloads/DownloadHistoryService.cs`

### Persistence and services

- [SQLite task store](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Downloads/SqliteDownloadStoreDatabase.cs): `src/DownKyi.Infrastructure/Downloads/SqliteDownloadStoreDatabase.cs`
- [Settings](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Settings/SettingsManager.cs): `src/DownKyi.Infrastructure/Settings/SettingsManager.cs`
- [Application storage](https://github.com/crazysmile-phd/downkyicore/blob/main/src/DownKyi.Infrastructure/Storage/ApplicationStorage.cs): `src/DownKyi.Infrastructure/Storage/ApplicationStorage.cs`

### Other components

- **Desktop user**
- **Bilibili**

## Connections

- Desktop user → Desktop app: runs (evidence: `README.md`)
- Desktop user → Input parser: provides entry
- Input parser → Bilibili API client: resolves content
- Bilibili API client → Bilibili: requests data
- Bilibili API client → Video metadata: returns metadata
- Input parser → Content categories: parses categories (evidence: `README.md`)
- Content categories → Playback resolver: selects playback
- Desktop user → Add download: requests download
- Add download → Task application service: creates task
- Task application service → SQLite task store: persists task
- Task application service → Task state model: transitions state (evidence: `src/DownKyi.Application/Downloads/DownloadTaskApplicationService.cs`)
- Download manager → Download history: loads history (evidence: `src/DownKyi.Desktop/ViewModels/ViewDownloadManagerViewModel.cs`)
- Download pipeline → Download stages: executes stages (evidence: `src/DownKyi.Desktop/Services/Download/DownloadPipeline.cs`)
- Download stages → Playback resolver: resolves streams
- Download stages → Media and sidecars: writes artifacts
- Download pipeline → Task state model: updates state
- Download history → SQLite task store: reads history
- Desktop app → Settings: loads preferences
- Settings → Application storage: uses data paths
- Desktop app → Bilibili service: hosts services
