diff --git a/.cursor/rules/ai-features.mdc b/.cursor/rules/ai-features.mdc index 2e66145..1ee2bfb 100644 --- a/.cursor/rules/ai-features.mdc +++ b/.cursor/rules/ai-features.mdc @@ -2,20 +2,27 @@ ## AI Components -- **LangChain Integration**: Uses `@langchain/core`, `@langchain/deepseek`, `@langchain/langgraph`, `@langchain/ollama` -- **Whisper Transcription**: Local and online transcription via `whisper-rs` in Rust backend +- **LangChain Integration**: Uses `@langchain/core`, `@langchain/deepseek`, + `@langchain/langgraph`, `@langchain/ollama` +- **Whisper Transcription**: Local and online transcription via `whisper-rs` in + Rust backend - **AI Agent**: Located in [src/lib/agent/](mdc:src/lib/agent/) directory ## Frontend AI Features - **AI Page**: [src/page/AI.svelte](mdc:src/page/AI.svelte) - Main AI interface - **Agent Logic**: [src/lib/agent/](mdc:src/lib/agent/) - AI agent implementation -- **Interface**: [src/lib/interface.ts](mdc:src/lib/interface.ts) - AI communication layer +- **Interface**: [src/lib/interface.ts](mdc:src/lib/interface.ts) + \- AI communication layer ## Backend AI Features -- **Subtitle Generation**: [src-tauri/src/subtitle_generator/](mdc:src-tauri/src/subtitle_generator/) - AI-powered subtitle creation -- **Whisper Integration**: [src-tauri/src/subtitle_generator.rs](mdc:src-tauri/src/subtitle_generator.rs) - Speech-to-text processing +- **Subtitle Generation**: + [src-tauri/src/subtitle_generator/](mdc:src-tauri/src/subtitle_generator/) - + AI-powered subtitle creation +- **Whisper Integration**: + [src-tauri/src/subtitle_generator.rs](mdc:src-tauri/src/subtitle_generator.rs) + \- Speech-to-text processing - **CUDA Support**: Optional CUDA acceleration for Whisper via feature flag ## AI Workflows diff --git a/.cursor/rules/build-deployment.mdc b/.cursor/rules/build-deployment.mdc index 586e4a9..e37f429 100644 --- a/.cursor/rules/build-deployment.mdc +++ b/.cursor/rules/build-deployment.mdc @@ -3,13 +3,16 @@ ## Build Scripts - **PowerShell**: [build.ps1](mdc:build.ps1) - Windows build script -- **FFmpeg Setup**: [ffmpeg_setup.ps1](mdc:ffmpeg_setup.ps1) - FFmpeg installation script -- **Version Bump**: [scripts/bump.cjs](mdc:scripts/bump.cjs) - Version management script +- **FFmpeg Setup**: [ffmpeg_setup.ps1](mdc:ffmpeg_setup.ps1) + \- FFmpeg installation script +- **Version Bump**: [scripts/bump.cjs](mdc:scripts/bump.cjs) + \- Version management script ## Package Management - **Node.js**: [package.json](mdc:package.json) - Frontend dependencies and scripts -- **Rust**: [src-tauri/Cargo.toml](mdc:src-tauri/Cargo.toml) - Backend dependencies and features +- **Rust**: [src-tauri/Cargo.toml](mdc:src-tauri/Cargo.toml) + \- Backend dependencies and features - **Lock Files**: [yarn.lock](mdc:yarn.lock) - Yarn dependency lock ## Build Configuration @@ -17,16 +20,22 @@ - **Vite**: [vite.config.ts](mdc:vite.config.ts) - Frontend build tool configuration - **Tailwind**: [tailwind.config.cjs](mdc:tailwind.config.cjs) - CSS framework configuration - **PostCSS**: [postcss.config.cjs](mdc:postcss.config.cjs) - CSS processing configuration -- **TypeScript**: [tsconfig.json](mdc:tsconfig.json), [tsconfig.node.json](mdc:tsconfig.node.json) - TypeScript configuration +- **TypeScript**: [tsconfig.json](mdc:tsconfig.json), + [tsconfig.node.json](mdc:tsconfig.node.json) - TypeScript configuration ## Tauri Configuration -- **Main Config**: [src-tauri/tauri.conf.json](mdc:src-tauri/tauri.conf.json) - Core Tauri settings +- **Main Config**: [src-tauri/tauri.conf.json](mdc:src-tauri/tauri.conf.json) + \- Core Tauri settings - **Platform Configs**: - - [src-tauri/tauri.macos.conf.json](mdc:src-tauri/tauri.macos.conf.json) - macOS specific - - [src-tauri/tauri.linux.conf.json](mdc:src-tauri/tauri.linux.conf.json) - Linux specific - - [src-tauri/tauri.windows.conf.json](mdc:src-tauri/tauri.windows.conf.json) - Windows specific - - [src-tauri/tauri.windows.cuda.conf.json](mdc:src-tauri/tauri.windows.cuda.conf.json) - Windows with CUDA + - [src-tauri/tauri.macos.conf.json](mdc:src-tauri/tauri.macos.conf.json) + \- macOS specific + - [src-tauri/tauri.linux.conf.json](mdc:src-tauri/tauri.linux.conf.json) + \- Linux specific + - [src-tauri/tauri.windows.conf.json](mdc:src-tauri/tauri.windows.conf.json) + \- Windows specific + - [src-tauri/tauri.windows.cuda.conf.json](mdc:src-tauri/tauri.windows.cuda.conf.json) + \- Windows with CUDA ## Docker Support diff --git a/.cursor/rules/database-data.mdc b/.cursor/rules/database-data.mdc index e98e654..b18697b 100644 --- a/.cursor/rules/database-data.mdc +++ b/.cursor/rules/database-data.mdc @@ -3,8 +3,10 @@ ## Database Architecture - **SQLite Database**: Primary data storage using `sqlx` with async runtime -- **Database Module**: [src-tauri/src/database/](mdc:src-tauri/src/database/) - Core database operations -- **Migration System**: [src-tauri/src/migration.rs](mdc:src-tauri/src/migration.rs) - Database schema management +- **Database Module**: [src-tauri/src/database/](mdc:src-tauri/src/database/) + \- Core database operations +- **Migration System**: [src-tauri/src/migration.rs](mdc:src-tauri/src/migration.rs) + \- Database schema management ## Data Models @@ -15,9 +17,11 @@ ## Frontend Data Layer -- **Database Interface**: [src/lib/db.ts](mdc:src/lib/db.ts) - Frontend database operations +- **Database Interface**: [src/lib/db.ts](mdc:src/lib/db.ts) + \- Frontend database operations - **Stores**: [src/lib/stores/](mdc:src/lib/stores/) - State management for data -- **Version Management**: [src/lib/stores/version.ts](mdc:src/lib/stores/version.ts) - Version tracking +- **Version Management**: [src/lib/stores/version.ts](mdc:src/lib/stores/version.ts) + \- Version tracking ## Data Operations @@ -28,13 +32,17 @@ ## File Management -- **Cache Directory**: [src-tauri/cache/](mdc:src-tauri/cache/) - Temporary file storage -- **Upload Directory**: [src-tauri/cache/uploads/](mdc:src-tauri/cache/uploads/) - User upload storage -- **Bilibili Cache**: [src-tauri/cache/bilibili/](mdc:src-tauri/cache/bilibili/) - Platform-specific cache +- **Cache Directory**: [src-tauri/cache/](mdc:src-tauri/cache/) + \- Temporary file storage +- **Upload Directory**: [src-tauri/cache/uploads/](mdc:src-tauri/cache/uploads/) + \- User upload storage +- **Bilibili Cache**: [src-tauri/cache/bilibili/](mdc:src-tauri/cache/bilibili/) + \- Platform-specific cache ## Data Persistence -- **SQLite Files**: [src-tauri/data/data_v2.db](mdc:src-tauri/data/data_v2.db) - Main database file +- **SQLite Files**: [src-tauri/data/data_v2.db](mdc:src-tauri/data/data_v2.db) + \- Main database file - **Write-Ahead Logging**: WAL mode for concurrent access and performance - **Backup Strategy**: Database backup and recovery procedures - **Migration Handling**: Automatic schema updates and data migration diff --git a/.cursor/rules/frontend-development.mdc b/.cursor/rules/frontend-development.mdc index 4495f4c..bee38fd 100644 --- a/.cursor/rules/frontend-development.mdc +++ b/.cursor/rules/frontend-development.mdc @@ -17,8 +17,10 @@ ## Component Structure - **Page components**: Located in [src/page/](mdc:src/page/) directory -- **Reusable components**: Located in [src/lib/components/](mdc:src/lib/components/) directory -- **Layout components**: [src/App.svelte](mdc:src/App.svelte), [src/AppClip.svelte](mdc:src/AppClip.svelte), [src/AppLive.svelte](mdc:src/AppLive.svelte) +- **Reusable components**: Located in [src/lib/components/](mdc:src/lib/components/) + directory +- **Layout components**: [src/App.svelte](mdc:src/App.svelte), + [src/AppClip.svelte](mdc:src/AppClip.svelte), [src/AppLive.svelte](mdc:src/AppLive.svelte) ## Styling diff --git a/.cursor/rules/project-overview.mdc b/.cursor/rules/project-overview.mdc index 21afbc5..875b41f 100644 --- a/.cursor/rules/project-overview.mdc +++ b/.cursor/rules/project-overview.mdc @@ -1,13 +1,16 @@ # BiliBili ShadowReplay Project Overview -This is a Tauri-based desktop application for caching live streams and performing real-time editing and submission. It supports Bilibili and Douyin platforms. +This is a Tauri-based desktop application for caching live streams and performing +real-time editing and submission. It supports Bilibili and Douyin platforms. ## Project Structure ### Frontend (Svelte + TypeScript) -- **Main entry points**: [src/main.ts](mdc:src/main.ts), [src/main_clip.ts](mdc:src/main_clip.ts), [src/main_live.ts](mdc:src/main_live.ts) -- **App components**: [src/App.svelte](mdc:src/App.svelte), [src/AppClip.svelte](mdc:src/AppClip.svelte), [src/AppLive.svelte](mdc:src/AppLive.svelte) +- **Main entry points**: [src/main.ts](mdc:src/main.ts), + [src/main_clip.ts](mdc:src/main_clip.ts), [src/main_live.ts](mdc:src/main_live.ts) +- **App components**: [src/App.svelte](mdc:src/App.svelte), + [src/AppClip.svelte](mdc:src/AppClip.svelte), [src/AppLive.svelte](mdc:src/AppLive.svelte) - **Pages**: Located in [src/page/](mdc:src/page/) directory - **Components**: Located in [src/lib/components/](mdc:src/lib/components/) directory - **Stores**: Located in [src/lib/stores/](mdc:src/lib/stores/) directory @@ -19,11 +22,14 @@ This is a Tauri-based desktop application for caching live streams and performin - [src-tauri/src/recorder/](mdc:src-tauri/src/recorder/) - Stream recording functionality - [src-tauri/src/database/](mdc:src-tauri/src/database/) - Database operations - [src-tauri/src/handlers/](mdc:src-tauri/src/handlers/) - Tauri command handlers -- **Custom crate**: [src-tauri/crates/danmu_stream/](mdc:src-tauri/crates/danmu_stream/) - Danmaku stream processing +- **Custom crate**: + [src-tauri/crates/danmu_stream/](mdc:src-tauri/crates/danmu_stream/) - + Danmaku stream processing ### Configuration -- **Frontend config**: [tsconfig.json](mdc:tsconfig.json), [vite.config.ts](mdc:vite.config.ts), [tailwind.config.cjs](mdc:tailwind.config.cjs) +- **Frontend config**: [tsconfig.json](mdc:tsconfig.json), + [vite.config.ts](mdc:vite.config.ts), [tailwind.config.cjs](mdc:tailwind.config.cjs) - **Backend config**: [src-tauri/Cargo.toml](mdc:src-tauri/Cargo.toml), [src-tauri/tauri.conf.json](mdc:src-tauri/tauri.conf.json) - **Example config**: [src-tauri/config.example.toml](mdc:src-tauri/config.example.toml) diff --git a/.cursor/rules/rust-backend.mdc b/.cursor/rules/rust-backend.mdc index 19613a4..d7fdf58 100644 --- a/.cursor/rules/rust-backend.mdc +++ b/.cursor/rules/rust-backend.mdc @@ -2,16 +2,22 @@ ## Project Structure -- **Main entry**: [src-tauri/src/main.rs](mdc:src-tauri/src/main.rs) - Application entry point +- **Main entry**: [src-tauri/src/main.rs](mdc:src-tauri/src/main.rs) + \- Application entry point - **Core modules**: - - [src-tauri/src/recorder/](mdc:src-tauri/src/recorder/) - Stream recording and management - - [src-tauri/src/database/](mdc:src-tauri/src/database/) - SQLite database operations - - [src-tauri/src/handlers/](mdc:src-tauri/src/handlers/) - Tauri command handlers - - [src-tauri/src/subtitle_generator/](mdc:src-tauri/src/subtitle_generator/) - AI-powered subtitle generation + - [src-tauri/src/recorder/](mdc:src-tauri/src/recorder/) + \- Stream recording and management + - [src-tauri/src/database/](mdc:src-tauri/src/database/) + \- SQLite database operations + - [src-tauri/src/handlers/](mdc:src-tauri/src/handlers/) + \- Tauri command handlers + - [src-tauri/src/subtitle_generator/](mdc:src-tauri/src/subtitle_generator/) + \- AI-powered subtitle generation ## Custom Crates -- **danmu_stream**: [src-tauri/crates/danmu_stream/](mdc:src-tauri/crates/danmu_stream/) - Danmaku stream processing library +- **danmu_stream**: [src-tauri/crates/danmu_stream/](mdc:src-tauri/crates/danmu_stream/) + \- Danmaku stream processing library ## Dependencies @@ -23,9 +29,12 @@ ## Configuration -- **Cargo.toml**: [src-tauri/Cargo.toml](mdc:src-tauri/Cargo.toml) - Dependencies and features -- **Tauri config**: [src-tauri/tauri.conf.json](mdc:src-tauri/tauri.conf.json) - App configuration -- **Example config**: [src-tauri/config.example.toml](mdc:src-tauri/config.example.toml) - User configuration template +- **Cargo.toml**: [src-tauri/Cargo.toml](mdc:src-tauri/Cargo.toml) + \- Dependencies and features +- **Tauri config**: [src-tauri/tauri.conf.json](mdc:src-tauri/tauri.conf.json) + \- App configuration +- **Example config**: [src-tauri/config.example.toml](mdc:src-tauri/config.example.toml) + \- User configuration template ## Features diff --git a/.cursor/rules/streaming-recording.mdc b/.cursor/rules/streaming-recording.mdc index 1d722ee..bfc1a30 100644 --- a/.cursor/rules/streaming-recording.mdc +++ b/.cursor/rules/streaming-recording.mdc @@ -2,9 +2,12 @@ ## Core Recording Components -- **Recorder Manager**: [src-tauri/src/recorder_manager.rs](mdc:src-tauri/src/recorder_manager.rs) - Main recording orchestration -- **Recorder**: [src-tauri/src/recorder/](mdc:src-tauri/src/recorder/) - Individual stream recording logic -- **Danmaku Stream**: [src-tauri/crates/danmu_stream/](mdc:src-tauri/crates/danmu_stream/) - Custom crate for bullet comment processing +- **Recorder Manager**: [src-tauri/src/recorder_manager.rs](mdc:src-tauri/src/recorder_manager.rs) + \- Main recording orchestration +- **Recorder**: [src-tauri/src/recorder/](mdc:src-tauri/src/recorder/) + \- Individual stream recording logic +- **Danmaku Stream**: [src-tauri/crates/danmu_stream/](mdc:src-tauri/crates/danmu_stream/) + \- Custom crate for bullet comment processing ## Supported Platforms @@ -21,10 +24,14 @@ ## Frontend Interfaces -- **Live Mode**: [src/AppLive.svelte](mdc:src/AppLive.svelte) - Live streaming interface -- **Clip Mode**: [src/AppClip.svelte](mdc:src/AppClip.svelte) - Video editing and clipping -- **Room Management**: [src/page/Room.svelte](mdc:src/page/Room.svelte) - Stream room configuration -- **Task Management**: [src/page/Task.svelte](mdc:src/page/Task.svelte) - Recording task monitoring +- **Live Mode**: [src/AppLive.svelte](mdc:src/AppLive.svelte) + \- Live streaming interface +- **Clip Mode**: [src/AppClip.svelte](mdc:src/AppClip.svelte) + \- Video editing and clipping +- **Room Management**: [src/page/Room.svelte](mdc:src/page/Room.svelte) + \- Stream room configuration +- **Task Management**: [src/page/Task.svelte](mdc:src/page/Task.svelte) + \- Recording task monitoring ## Technical Implementation diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index 26059dc..851d80d 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -12,7 +12,8 @@ ### Windows -Windows 下分为两个版本,分别是 `cpu` 和 `cuda` 版本。区别在于 Whisper 是否使用 GPU 加速。`cpu` 版本使用 CPU 进行推理,`cuda` 版本使用 GPU 进行推理。 +Windows 下分为两个版本,分别是 `cpu` 和 `cuda` 版本。区别在于 Whisper 是否使用 GPU 加速。 +`cpu` 版本使用 CPU 进行推理,`cuda` 版本使用 GPU 进行推理。 默认运行为 `cpu` 版本,使用 `yarn tauri dev --features cuda` 命令运行 `cuda` 版本。 @@ -20,7 +21,9 @@ Windows 下分为两个版本,分别是 `cpu` 和 `cuda` 版本。区别在于 1. 安装 LLVM 且配置相关环境变量,详情见 [LLVM Windows Setup](https://llvm.org/docs/GettingStarted.html#building-llvm-on-windows); -2. 安装 CUDA Toolkit,详情见 [CUDA Windows Setup](https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html);要注意,安装时请勾选 **VisualStudio integration**。 +2. 安装 CUDA Toolkit,详情见 + [CUDA Windows Setup](https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html); + 要注意,安装时请勾选 **VisualStudio integration**。 ### 常见问题 diff --git a/.markdownlint.json b/.markdownlint.json new file mode 100644 index 0000000..5d06b04 --- /dev/null +++ b/.markdownlint.json @@ -0,0 +1,5 @@ +{ + "MD033": { + "allowed_elements": ["nobr", "sup"] + } +} diff --git a/docs/getting-started/config/whisper.md b/docs/getting-started/config/whisper.md index e4730c0..f768d0a 100644 --- a/docs/getting-started/config/whisper.md +++ b/docs/getting-started/config/whisper.md @@ -1,9 +1,11 @@ # Whisper 配置 -要使用 AI 字幕识别功能,需要在设置页面配置 Whisper。目前可以选择使用本地运行 Whisper 模型,或是使用在线的 Whisper 服务(通常需要付费获取 API Key)。 +要使用 AI 字幕识别功能,需要在设置页面配置 Whisper。目前可以选择使用本地运行 Whisper 模型,或是使用在线的 Whisper 服务(通常需要付 +费获取 API Key)。 > [!NOTE] -> 其实有许多更好的中文字幕识别解决方案,但是这类服务通常需要将文件上传到对象存储后异步处理,考虑到实现的复杂度,选择了使用本地运行 Whisper 模型或是使用在线的 Whisper 服务,在请求返回时能够直接获取字幕生成结果。 +> 其实有许多更好的中文字幕识别解决方案,但是这类服务通常需要将文件上传到对象存储后异步处理,考虑到实现的复杂度,选择了使用本地运行 Whisper 模型或是使 +> 用在线的 Whisper 服务,在请求返回时能够直接获取字幕生成结果。 ## 本地运行 Whisper 模型 @@ -16,20 +18,29 @@ 可以跟据自己的需求选择不同的模型,要注意带有 `en` 的模型是英文模型,其他模型为多语言模型。 -模型文件的大小通常意味着其在运行时资源占用的大小,因此请根据电脑配置选择合适的模型。此外,GPU 版本与 CPU 版本在字幕生成速度上存在**巨大差异**,因此推荐使用 GPU 版本进行本地处理(目前仅支持 Nvidia GPU)。 +模型文件的大小通常意味着其在运行时资源占用的大小,因此请根据电脑配置选择合适的模型。此外,GPU 版本与 CPU 版本在字幕生成速度上存在**巨大差异**,因此 +推荐使用 GPU 版本进行本地处理(目前仅支持 Nvidia GPU)。 ## 使用在线 Whisper 服务 ![WhisperOnline](/images/whisper_online.png) -如果需要使用在线的 Whisper 服务进行字幕生成,可以在设置中切换为在线 Whisper,并配置好 API Key。提供 Whisper 服务的平台并非只有 OpenAI 一家,许多云服务平台也提供 Whisper 服务。 +如果需要使用在线的 Whisper 服务进行字幕生成,可以在设置中切换为在线 Whisper,并配置好 API Key。提供 Whisper 服务的平台并非只有 +OpenAI 一家,许多云服务平台也提供 Whisper 服务。 ## 字幕识别质量的调优 目前在设置中支持设置 Whisper 语言和 Whisper 提示词,这些设置对于本地和在线的 Whisper 服务都有效。 -通常情况下,`auto` 语言选项能够自动识别语音语言,并生成相应语言的字幕。如果需要生成其他语言的字幕,或是生成的字幕语言不匹配,可以手动配置指定的语言。根据 OpenAI 官方文档中对于 `language` 参数的描述,目前支持的语言包括 +通常情况下,`auto` 语言选项能够自动识别语音语言,并生成相应语言的字幕。如果需要生成其他语言的字幕,或是生成的字幕语言不匹配,可以手动配置指定的语言。 +根据 OpenAI 官方文档中对于 `language` 参数的描述,目前支持的语言包括 -Afrikaans, Arabic, Armenian, Azerbaijani, Belarusian, Bosnian, Bulgarian, Catalan, Chinese, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, French, Galician, German, Greek, Hebrew, Hindi, Hungarian, Icelandic, Indonesian, Italian, Japanese, Kannada, Kazakh, Korean, Latvian, Lithuanian, Macedonian, Malay, Marathi, Maori, Nepali, Norwegian, Persian, Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swahili, Swedish, Tagalog, Tamil, Thai, Turkish, Ukrainian, Urdu, Vietnamese, and Welsh. +Afrikaans, Arabic, Armenian, Azerbaijani, Belarusian, Bosnian, Bulgarian, +Catalan, Chinese, Croatian, Czech, Danish, Dutch, English, Estonian, Finnish, +French, Galician, German, Greek, Hebrew, Hindi, Hungarian, Icelandic, +Indonesian, Italian, Japanese, Kannada, Kazakh, Korean, Latvian, Lithuanian, +Macedonian, Malay, Marathi, Maori, Nepali, Norwegian, Persian, Polish, +Portuguese, Romanian, Russian, Serbian, Slovak, Slovenian, Spanish, Swahili, +Swedish, Tagalog, Tamil, Thai, Turkish, Ukrainian, Urdu, Vietnamese, and Welsh. 提示词可以优化生成的字幕的风格(也会一定程度上影响质量),要注意,Whisper 无法理解复杂的提示词,你可以在提示词中使用一些简单的描述,让其在选择词汇时使用偏向于提示词所描述的领域相关的词汇,以避免出现毫不相干领域的词汇;或是让它在标点符号的使用上参照提示词的风格。 diff --git a/docs/usage/features/room.md b/docs/usage/features/room.md index fd24780..9bfe414 100644 --- a/docs/usage/features/room.md +++ b/docs/usage/features/room.md @@ -17,6 +17,8 @@ ### 使用 DeepLinking 快速添加直播间 + + 在浏览器中观看直播时,替换地址栏中直播间地址中的 `https://` 为 `bsr://` 即可快速唤起 BSR 添加直播间。