mirror of
https://github.com/JefferyHcool/BiliNote.git
synced 2026-05-07 06:12:44 +08:00
### 性能优化 - 后端任务执行从串行锁改为 ThreadPoolExecutor 并发执行(默认3线程) - 添加 GZipMiddleware 响应压缩 + Nginx gzip 配置 - 数据库连接池参数优化(pool_size=10, max_overflow=20) - 视频帧提取并行化(ThreadPoolExecutor) - LLM 重试配置缓存到实例,避免每次请求读 env var - 前端路由级代码拆分(React.lazy + Suspense) - Vite manualChunks 拆分 markdown/markmap/vendor - MarkdownViewer 用 React.memo + useMemo 减少不必要渲染 - NoteHistory Fuse.js 实例 useMemo 缓存 - useTaskPolling 无待处理任务时跳过轮询 - 移除 antd 依赖(NoteForm Alert、modelForm Tag),改用 shadcn/ui ### 前端转写器配置(新功能) - 新增 TranscriberConfigManager(JSON 文件存储,替代环境变量) - 新增 GET/POST /transcriber_config API 端点 - 新增 GET /transcriber_models_status 模型下载状态查询 - 新增 POST /transcriber_download 后台模型下载触发 - 前端转写器设置页面:引擎选择、模型大小选择、模型下载管理 - deploy_status 端点同步从配置文件读取 ### Bug 修复 - 修复任务进行中切换页面后进度丢失:Home.tsx status 派生逻辑补全中间状态 - 修复 MLX Whisper 静默回退 fast-whisper:移除环境变量门控,macOS 下自动尝试导入 - MLX Whisper 不可用时抛出 RuntimeError 而非静默回退 - 前端展示 MLX Whisper 可用性状态,不可用时禁用保存 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.8 KiB
3.8 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Project Overview
BiliNote is an AI video note generation tool. It extracts content from video links (Bilibili, YouTube, Douyin, Kuaishou, local files) and generates structured Markdown notes using LLM models. Full-stack app with a FastAPI backend, React frontend, and optional Tauri desktop packaging.
Development Commands
Backend (Python 3.11 + FastAPI)
cd backend
pip install -r requirements.txt
python main.py # Starts on 0.0.0.0:8483
Frontend (React 19 + Vite + TypeScript)
cd BillNote_frontend
pnpm install
pnpm dev # Dev server on port 3015, proxies /api to backend
pnpm build # Production build
pnpm lint # ESLint
Docker
docker-compose up # Web stack (backend + frontend + nginx)
docker-compose -f docker-compose.gpu.yml up # GPU variant
Desktop (Tauri)
cd backend && ./build.sh # Build PyInstaller backend binary
cd BillNote_frontend && pnpm tauri build
Architecture
Backend (backend/) — FastAPI app, entry point main.py:
app/routers/— API routes:note.py(generation),provider.py,model.py,config.pyapp/services/— Business logic:note.py(NoteGenerator orchestrates the full pipeline),task_serial_executor.py(task queue)app/downloaders/— Platform adapters (bilibili, youtube, douyin, kuaishou, local) with sharedbase.pyinterfaceapp/transcriber/— Speech-to-text engines (fast-whisper, groq, bcut, kuaishou, mlx-whisper) with factory intranscriber_provider.pyapp/gpt/— LLM integration with factory pattern (gpt_factory.py), prompt templates (prompt.py,prompt_builder.py), andrequest_chunker.pyfor long transcriptsapp/db/— SQLite + SQLAlchemy: DAO pattern (provider_dao.py,model_dao.py,video_task_dao.py), models inmodels/app/utils/—response.py(ResponseWrapper for consistent JSON),video_helper.py(screenshots via FFmpeg),export.py(PDF/DOCX)events/(root level) — Blinker signal system for post-processing (e.g., temp file cleanup after transcription)
Frontend (BillNote_frontend/src/) — React 19 + Vite + Tailwind + shadcn/ui:
pages/HomePage/— Main note generation UI:NoteForm.tsx(input),MarkdownViewer.tsx(preview),MarkmapComponent.tsx(mind map)pages/SettingPage/— LLM provider management, system monitoring, transcriber configstore/— Zustand stores:taskStore,modelStore,configStore,providerStoreservices/— Axios API clients matching backend routeshooks/useTaskPolling.ts— Polls task status every 3 secondscomponents/ui/— shadcn/ui (Radix-based) components- Path alias:
@→./src
Core Workflow: User submits URL → task queued → download video → extract audio (FFmpeg) → transcribe (Whisper/Groq/etc) → generate notes (LLM) → frontend polls for completion → display Markdown + mind map.
Key Configuration
- Ports: Backend 8483, Frontend dev 3015, Docker maps 3015→80
- Environment: Root
.env(copy from.env.example). LLM API keys are configured through the UI, not env vars. - Database: SQLite at
backend/app/db/bili_note.db, auto-initialized on first run - FFmpeg: Required system dependency for video/audio processing
- Vite proxy: Dev server proxies
/apiand/staticto backend (configured invite.config.ts, reads env from parent dir)
Code Style
- Frontend: ESLint + Prettier (2 spaces, single quotes, 100 char width, Tailwind plugin). TypeScript strict mode.
- Backend: Python with type hints. No configured linter. Uses Pydantic models for validation.
- Note: The frontend directory is named
BillNote_frontend(not "Bili").