[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-80031":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":14,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":16,"stars7d":17,"stars30d":18,"stars90d":15,"forks30d":15,"starsTrendScore":19,"compositeScore":20,"rankGlobal":9,"rankLanguage":9,"license":21,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":9,"pushedAt":9,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":15,"starSnapshotCount":15,"syncStatus":14,"lastSyncTime":29,"discoverSource":30},80031,"danmuai","PEPETII\u002Fdanmuai","PEPETII","Windows AI danmaku assistant. Web console (FastAPI + pywebview), OBS live overlay (SSE), multi-provider (Doubao, DashScope, MiMo).",null,"Python",241,12,65,2,0,7,103,163,38,87.34,"Other",false,"main",true,[],"2026-06-12 04:01:26","# DanmuAI\n\n![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.12%2B-blue)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-GPL--3.0--or--later-green)\n\nDanmuAI 是一个 Windows 桌面弹幕工具：截取**所选显示器全屏**，调用视觉模型生成 5 条弹幕，并以 Qt 透明置顶浮层滚动展示。默认通过 **温馨 Web 控制台**（pywebview 桌面壳）配置与启停；Qt 仅负责弹幕 Overlay 与系统托盘。\n\n\u003Cimg width=\"2487\" height=\"1375\" alt=\"屏幕截图 2026-05-17 195301\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F7a366c6c-1729-4852-b8df-c5755388fe60\" \u002F>\n\u003Cimg width=\"2541\" height=\"1408\" alt=\"屏幕截图 2026-05-17 195727\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002F655b778a-26c8-4c3b-8fd3-45eef7aac4a9\" \u002F>\n\u003Cimg width=\"2526\" height=\"1391\" alt=\"屏幕截图 2026-05-17 195659\" src=\"https:\u002F\u002Fgithub.com\u002Fuser-attachments\u002Fassets\u002Fab2aff3c-c1d0-44bc-b507-7a42921dbb48\" \u002F>\n\n**项目定位**：为直播主播提供轻量、隐私友好的 AI 弹幕助手。截图在内存中压缩后发送模型，默认不落盘；配置与密钥存于本机 `%APPDATA%\u002FDanmuAI\u002F`。\n\n## 项目状态\n\n早期活跃开发中，API 和配置格式可能变动。控制台 UI 为 Web；遗留 Qt 主窗（`--qt-ui`）已移除。\n\n**当前 UI 事实（以 `main.py` 为准）**\n\n- 默认：`python main.py` → Web 控制台 + pywebview + Qt Overlay\u002F托盘\n- 新功能落点：`web\u002Fstatic\u002F`、`app\u002Fweb_api\u002F`（在 `routes.py` 注册）\n- Overlay：`app\u002Foverlay.py`、`app\u002Fdanmu_engine.py` 始终运行\n\n详见 [AGENTS.md](AGENTS.md)、[docs\u002FWEB_CONSOLE.md](docs\u002FWEB_CONSOLE.md)、[docs\u002FROADMAP.md](docs\u002FROADMAP.md)。\n\n## 技术栈\n\n| 组件 | 用途 |\n|------|------|\n| **Python** ≥ 3.12 | 主语言 |\n| **FastAPI** + **uvicorn** | 本地 Web API（`127.0.0.1:18765`） |\n| **pywebview** | 桌面壳（Windows WebView2） |\n| **PyQt6** | 弹幕 Overlay、系统托盘 |\n| **httpx** | HTTP\u002F2 客户端，AI API 请求 |\n| **Pillow** | 图像压缩（JPEG quality 默认 85，max_width 768，Base64 data URI） |\n| **SQLite** | 配置存储（WAL 模式） |\n| **cryptography** | API Key 加密（Fernet） |\n| **keyboard** | 全局快捷键 |\n| **python-Levenshtein** | 弹幕去重相似度计算 |\n\n## 功能特性\n\n- 弹幕生成：**固定识图间隔**（`normal_recognition_interval_sec`，默认 5 秒）+ **每批条数**（`normal_reply_count`，默认 5 条）；上一请求 in-flight 时跳过本轮\n- 主线程截图，线程池压缩和 AI 请求，避免 UI 阻塞\n- 连续失败退避、超时控制、日志脱敏\n- **多屏**：`screen_index` 选择截图与 Overlay 目标屏（无效索引回退 0）\n- 截图在内存中压缩后发送给 AI，**默认不落盘**；只保存弹幕文本历史\n- **Web 控制台**：运行概览（会话统计 + 持久累计：生成总弹幕、运行总时长、消耗总 Token）、助手设置、人格工坊、弹幕日记；自定义模型 CRUD、图像压缩预览\n- **服务商预设**：火山方舟、阿里云百炼、智谱、Moonshot、硅基流动、**小米 MiMo** 等；带目录的平台可在助手设置中选模型 ID（豆包 \u002F 百炼 \u002F 硅基流动 \u002F MiMo）\n\n## 环境要求\n\n- **Python** ≥ 3.12\n- **平台**：Windows（WebView2 用于 pywebview 壳）\n- 依赖见 [requirements.txt](requirements.txt)\n\n## 安装方式\n\n```bash\npip install -r requirements.txt\n```\n\n如需运行测试，额外安装：\n\n```bash\npip install pytest pytest-qt Pillow\n```\n\n## 运行方式\n\n```bash\npython main.py                         # 默认：pywebview + Web 控制台 + 托盘 + Qt 弹幕 Overlay\npython main.py --web-browser           # 用系统浏览器打开控制台\n```\n\n## 打包为 Windows exe\n\n桌面壳为 **pywebview**（WebView2）。构建与排错见 **[docs\u002FPACKAGING_WINDOWS.md](docs\u002FPACKAGING_WINDOWS.md)**（含 PyInstaller 步骤、已知问题与 `startup.log` 诊断）。\n\n```powershell\npip install -r requirements.txt -r requirements-dev.txt\n.\\scripts\\build_exe.ps1\n```\n\n产物：整个 `dist\\DanmuAI\\` 目录（勿只分发单个 exe）。运行诊断：`%APPDATA%\\DanmuAI\\startup.log`。\n\n| 环境变量 | 说明 |\n|----------|------|\n| `DANMU_WEB_LAUNCH=browser` | 强制系统浏览器（等同 `--web-browser`） |\n| `DANMU_DEDUP_PROFILE=1` | 开启弹幕去重统计（`\u002Fapi\u002Fstatus.dedup_profile` 与 debug 汇总） |\n| `DANMU_IMAGE_METRICS=1` | 压缩路径 debug 指标（不落盘 Base64） |\n| `DANMU_SCENE_DEBUG=1` | 场景指纹探测与丢弃原因日志 |\n\n更多运行时细节见 [AGENTS.md](AGENTS.md)、[docs\u002FARCHITECTURE.md](docs\u002FARCHITECTURE.md)。\n\n控制台地址：`http:\u002F\u002F127.0.0.1:18765`（仅本机；修改配置需会话 Bearer token）。\n\n首次启动若本地配置不存在，程序会自动创建配置库。请在 Web「助手设置」中检查 API Key 等基础项。\n\n## 如何配置 API Key\n\n1. 启动程序后，在 Web 控制台打开 **助手设置**（或浏览器访问上述地址）。\n2. 填写 `API Endpoint`、`API Key`、`Model`；在「服务商预设」中选平台（如 **小米 MiMo**）可自动填入默认地址；有模型目录时可从下拉选 `mimo-v2.5` 等。\n3. 在「节奏与截图策略」「图像压缩预览」中调整参数；多屏时在「显示器」下拉选择目标屏。\n\n**常用预设**\n\n| 预设 | 默认 Endpoint | 协议 | 截图弹幕模型示例 |\n|------|----------------|------|------------------|\n| 火山方舟 | `https:\u002F\u002Fark.cn-beijing.volces.com\u002Fapi\u002Fv3` | 豆包 Responses | `doubao-seed-1-6-flash-250828` |\n| 阿里云百炼 | `https:\u002F\u002Fdashscope.aliyuncs.com\u002Fcompatible-mode\u002Fv1` | OpenAI 兼容 | `qwen-vl-max` |\n| 小米 MiMo | `https:\u002F\u002Fapi.xiaomimimo.com\u002Fv1` | OpenAI 兼容 | `mimo-v2.5`（MiMo-V2.5） |\n| 硅基流动 | `https:\u002F\u002Fapi.siliconflow.cn\u002Fv1` | OpenAI 兼容 | `Qwen\u002FQwen3-VL-8B-Instruct` |\n\n完整列表见 `app\u002Fmodel_providers.py`；带价格\u002F徽章的目录见 `app\u002Fmodel_catalog.py` 与 `GET \u002Fapi\u002Fmodel-catalog`。\n4. 点击 **保存配置**，再在 **温馨控制台** 点击 **生成弹幕**。\n\n人格与提示词在侧栏 **人格工坊**；自定义模型在设置页「自定义模型」卡片中管理。\n\n项目提供 [`.env.example`](.env.example) 作参考。**注意**：桌面应用默认通过 Web\u002F设置写入 `%APPDATA%\u002FDanmuAI\u002Fconfig.db`，不会自动加载 `.env`。\n\n## 隐私提醒\n\n- 本工具会截取**所选显示器全屏**，并把截图发送给你选择的 AI 服务商。\n- 截图在内存中压缩，**默认不会落盘**，也不会把截图原文写入日志。\n- 请确保目标屏幕上没有密码框、聊天记录、支付页面、内部文档等敏感内容。\n- API Key 存储在 `%APPDATA%\u002FDanmuAI\u002Fconfig.db`，优先 Fernet 加密；缺少 `cryptography` 时退化为 base64 并警告。\n- Web API 仅监听 `127.0.0.1`；写操作需 Bearer token。\n\n更多说明见 [docs\u002FPRIVACY.md](docs\u002FPRIVACY.md)、[docs\u002FWEB_CONSOLE.md](docs\u002FWEB_CONSOLE.md)。\n\n## 常见问题\n\n### 为什么启动后没有弹幕？\n\n- 常见原因：API Key 未配置、截图失败，或连续失败进入退避。\n- 在 Web「助手设置」检查 API，在「弹幕日记」查看错误日志。\n\n### 为什么旧画面的弹幕没显示出来？\n\n- 会丢弃过期 `screenshot_id`、低于当前 `scene_generation` 的回复，以及超出新鲜度 TTL 的回复（见 `app\u002Flive_freshness.py`）。用于避免旧内容覆盖新画面。\n\n### 程序会保存截图吗？\n\n- 默认不会。只保存弹幕文本历史，不落盘截图。\n\n### Max Tokens 设得很低会怎样？\n\n- 固定 5 条弹幕需要完整 JSON\u002F列表输出；过低会导致截断或解析失败。\n- 请求前有下限保护（**≥512**）；程序对所有 API 请求固定关闭思考模式（`thinking: disabled`）。\n\n### 小米 MiMo 报「AI 返回为空」？\n\n- 请使用 **OpenAI 兼容** 模式 + 预设 endpoint，模型优先 **`mimo-v2.5`**。\n- 应用已强制关闭思考模式；若仍为空，检查 Key 权限、配额与模型 ID 是否在控制台开通。\n\n### 开麦模式能用 MiMo 吗？\n\n- **不能**。麦克风音频仅豆包 Responses（`input_audio`）路径发送；OpenAI 兼容预设（含 MiMo）仅截图 + 文本。请用 `doubao-seed-2-0-mini-260428` 等全模态豆包模型开麦。\n\n### Web 控制台打不开？\n\n- 确认 `127.0.0.1:18765` 未被占用；可试 `--web-browser`。\n- Windows 需 WebView2 运行时（pywebview 壳）。\n\n## 已知限制\n\n- `region_*` 需手动填写相对所选屏幕的坐标；可视化框选器仍在 [ROADMAP.md](docs\u002FROADMAP.md) 规划中。\n- 进行中的网络请求无法强制中断，退出时会等待线程池短暂收尾。\n- Web 控制台暂无英文界面（后端 `language` 字段保留，UI 未切换）。\n\n## 贡献方式\n\n- 提交 Issue 前阅读 [SECURITY.md](SECURITY.md) 和 [docs\u002FOPEN_SOURCE_AUDIT.md](docs\u002FOPEN_SOURCE_AUDIT.md)。\n- 参与社区请遵守 [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)。\n- 提交代码前请运行测试集（见 [CONTRIBUTING.md](CONTRIBUTING.md)）。\n- 新功能默认在 **Web**（`web\u002Fstatic\u002F`、`app\u002Fweb_api\u002F`）实现。\n\n**商标说明**：DanmuAI 为本项目名称，与 Bilibili、字节跳动、阿里巴巴、Qwen 等第三方无隶属关系；文档与原型中的第三方产品名仅作技术或设计参考。\n\n## 界面与文档\n\n| 资源 | 说明 |\n|------|------|\n| [docs\u002FREADME.md](docs\u002FREADME.md) | 文档索引（按受众分类） |\n| [docs\u002FARCHITECTURE.md](docs\u002FARCHITECTURE.md) | 架构总览 |\n| [docs\u002FCONTRIBUTING_ARCHITECTURE.md](docs\u002FCONTRIBUTING_ARCHITECTURE.md) | 贡献者架构边界 |\n| [docs\u002FWEB_CONSOLE.md](docs\u002FWEB_CONSOLE.md) | Web API、页面地图、启动方式 |\n| [AGENTS.md](AGENTS.md) | 贡献者与 Agent 开发指南 |\n| [prototype\u002FQwen_html_20260524_481u8vlmv.html](prototype\u002FQwen_html_20260524_481u8vlmv.html) | 当前 Web UI 视觉原型 |\n| [prototype\u002FREADME.md](prototype\u002FREADME.md) | 原型目录说明 |\n\n改 Web UI 前对照 Qwen 温馨原型与 `web\u002Fstatic\u002Fwarm-tokens.css`。\n\n## 目录结构\n\n```text\n.\n├─ app\u002F                 核心逻辑（AI、配置、弹幕、截图、托盘）\n│  ├─ web_console.py    FastAPI + WebSocket\n│  ├─ webview_shell.py  pywebview 桌面壳\n│  ├─ web_api\u002F          人格、自定义模型、压缩预览等扩展 API\n│  └─ image_compress.py 内存 JPEG 压缩（Web 预览与运行时共用逻辑）\n├─ web\u002Fstatic\u002F          默认 Web 控制台（index.html、app.js、warm-tokens.css）\n├─ tests\u002F               pytest\n├─ docs\u002F                架构、隐私、Web 控制台、变更日志\n├─ prototype\u002F           Web UI 原型（Qwen HTML\u002FMD）\n├─ scripts\u002F             本地工具（如 JPEG 质量基准，见 [scripts\u002FREADME.md](scripts\u002FREADME.md)）\n├─ main.py              入口（DanmuApp、`compress_screenshot`）\n└─ requirements.txt\n```\n\n## License\n\nSPDX-License-Identifier: `GPL-3.0-or-later`\n\n本项目基于 [GNU General Public License v3.0 或更新版本](LICENSE) 开源。\n\n第三方组件许可证见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) 和 [docs\u002FOPEN_SOURCE_AUDIT.md](docs\u002FOPEN_SOURCE_AUDIT.md)。弹幕语料子集归因见 [data\u002FATTRIBUTION.md](data\u002FATTRIBUTION.md)。\n\n英文概要：[README.en.md](README.en.md)\n","DanmuAI 是一个专为直播主播设计的 Windows 桌面弹幕工具，通过截取所选显示器全屏并调用视觉模型生成 5 条弹幕，以 Qt 透明置顶浮层滚动展示。其核心功能包括固定识图间隔和每批条数的弹幕生成、主线程截图与线程池压缩处理以避免 UI 阻塞、以及温馨 Web 控制台配置启停等。技术上，项目基于 Python 3.12+，结合 FastAPI、pywebview 和 PyQt6 等现代库实现，支持多屏幕选择，并确保用户隐私（默认不落盘）。该工具非常适合需要增强观众互动体验且注重隐私保护的直播场景使用。","2026-06-11 03:58:57","CREATED_QUERY"]