[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-1894":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":26,"readmeContent":27,"aiSummary":28,"trendingCount":16,"starSnapshotCount":16,"syncStatus":29,"lastSyncTime":30,"discoverSource":31},1894,"CS2-insight-agent","DrEAmSs59\u002FCS2-insight-agent","DrEAmSs59","自动解析 Demo 录像，提取高光 \u002F 下饭 \u002F 梗死亡时刻，可调用 LLM 生成毒舌锐评与评分，并通过 OBS 全自动控制 CS2 回放录制成片，开箱即用。","",null,"Python",567,35,1,7,0,30,66,362,90,8.67,"Other",false,"main",[],"2026-06-12 02:00:34","# CS2 Insight Agent\n\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-PolyForm%20Noncommercial-blue)](https:\u002F\u002Fgithub.com\u002FDrEAmSs59\u002FCS2-insight-agent\u002Fblob\u002Fmain\u002FLICENSE)\n[![Version](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002FDrEAmSs59\u002FCS2-insight-agent)](https:\u002F\u002Fgithub.com\u002FDrEAmSs59\u002FCS2-insight-agent\u002Freleases)\n[![Player Guide](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002F📖-玩家使用指南-orange)](https:\u002F\u002Fgithub.com\u002FDrEAmSs59\u002FCS2-insight-agent\u002Fblob\u002Fmain\u002FPLAYER_GUIDE.md)\n\n**CS2 洞察智能体** — 专为 CS2 玩家打造的桌面端智能电竞终端。\n\n自动解析 Demo 录像，提取**高光 \u002F 下饭 \u002F 梗死亡**时刻，可调用 LLM 生成毒舌锐评与评分，并通过 OBS 全自动控制 CS2 回放录制成片，开箱即用。\n\n---\n\n## Tech Stack\n\n| Layer | Technology |\n| --- | --- |\n| Frontend | React 19 + React Router + TailwindCSS 4 + Vite 6 + Zustand |\n| Desktop | Electron 42（Windows 安装包 \u002F `electron-updater` 程序内自动更新） |\n| Backend | Python 3.12 + FastAPI + uvicorn |\n| 解析引擎 | demoparser2 + pandas（子进程隔离，防 Rust panic 拖垮主进程） |\n| AI 网关 | OpenAI 兼容 SDK（DeepSeek \u002F Qwen \u002F GLM \u002F MiniMax \u002F OpenAI \u002F Ollama 等） |\n| 录制管线 | `RecordingRequestDTO` → `plan_builder` → `RecordingExecutor`；CS2 启停与批量队列由 `obs_director` 编排 |\n| OBS 控制 | obs-websocket-py（分段 `StartRecord` \u002F `PauseRecord` jump-cut；可选场景转场淡入淡出） |\n| 合辑导出 | FFmpeg（`montage_encoder` 自动探测 NVENC \u002F QSV \u002F AMF \u002F libx264） |\n| Demo 库 | aiosqlite + watchdog（目录监听 + SSE 推送） |\n| CS2 集成 | Game State Integration（录制就绪门控）+ `win_cs2_console` 控制台注入 |\n\n---\n\n## Project Structure\n\n```\nCS2-insight-agent\u002F\n├── backend\u002F\n│   └── app\u002F\n│       ├── main.py                    # FastAPI 入口（解析 \u002F Demo 库 \u002F GSI \u002F 合辑导出等）\n│       ├── recording\u002F                 # 录制 V3：Plan → Execute 管线\n│       │   ├── api.py                 # \u002Fapi\u002Frecording\u002F*（挂载于 main.py）\n│       │   ├── models.py              # RecordingRequestDTO \u002F RecordingPlan \u002F Segment\n│       │   ├── plan_builder.py        # 计划编排入口（分发至各 planner）\n│       │   ├── normalizer.py          # 请求规范化、参数校验\n│       │   ├── planners\u002F              # highlight \u002F fail \u002F timeline \u002F compilation \u002F round POV\n│       │   ├── postprocess\u002F           # 末回合保护、段禁用与 warnings 汇总\n│       │   ├── executor\u002F              # RecordingExecutor、OBS 控制、demo seek、GSI 观战校验\n│       │   └── services\u002F              # 单次录制结果落盘\n│       ├── obs_director.py            # CS2 启停、GSI 门控、预热 cvar、批量队列 execute_plan_queue\n│       ├── demo_parser.py             # 高光 \u002F 下饭 \u002F 梗死亡 \u002F 合集判定引擎\n│       ├── demo_parse_isolation.py    # 子进程隔离解析（parse_worker.py）\n│       ├── ai_reviewer.py             # 毒舌 AI 锐评（OpenAI 兼容）\n│       ├── montage_db.py              # 已录片段 & 合辑工程（SQLite recorded_clips \u002F projects）\n│       ├── montage_encoder.py         # FFmpeg H.264 编码器探测\n│       ├── video_composer.py          # 合辑时间轴合成导出\n│       ├── win_cs2_console.py         # Windows CS2 控制台注入（SendInput \u002F WM_CHAR）\n│       ├── gsi_ready.py               # GSI HTTP sink（录制就绪门控）\n│       ├── cs2_config_backup.py       # 玩家 config 备份与回滚\n│       ├── demo_db.py \u002F demo_watcher.py \u002F demo_library_hub.py\n│       ├── obs_config_center.py       # OBS 场景 \u002F 源管理 API\n│       ├── pov_experimental.py        # 实验性 POV HUD（pov.vpk \u002F gameinfo.gi）\n│       ├── env_utils.py               # 配置管理 & CS2 路径探测\n│       └── radar\u002F                     # 雷达图渲染（POV HUD \u002F 录制叠加）\n├── frontend\u002F\n│   └── src\u002F\n│       ├── App.jsx                    # 路由壳、全局状态、录制队列提交 \u002F 阻断弹窗\n│       ├── main.jsx                   # React Router 入口\n│       ├── api\u002Fapi.js                 # axios 封装与 API 基址\n│       ├── pages\u002F                     # 各功能页（Demo 库 \u002F 分析 \u002F 录制队列 \u002F 合辑 \u002F 设置…）\n│       ├── recording\u002F                 # RecordingRequestDTO 构建、plan 预览 API\n│       ├── stores\u002F                    # recordingQueueStore \u002F montageStore \u002F themeStore\n│       ├── components\u002F\n│       │   ├── recordingQueue\u002F        # 队列工作区、检视器、控制坞\n│       │   ├── montage\u002F               # 合辑工作台（时间轴、导出、已录片段卡）\n│       │   ├── demoLibrary\u002F           # Demo 库表格、筛选、批量操作\n│       │   ├── analysis\u002Ftimeline\u002F     # 回合时间轴与击杀 feed\n│       │   ├── SidebarNav.jsx         # 侧栏导航\n│       │   ├── ClipCard.jsx \u002F ClipList.jsx \u002F MemeDeathMontageCard.jsx\n│       │   ├── RecordWarmupModal.jsx  # 录制前观战预热 & POV HUD 选项\n│       │   └── RecordingBlockedDialog.jsx\n│       └── utils\u002F                     # recordingBatch、timelineQueue、warmupDefaults 等\n├── frontend\u002Felectron-main.cjs         # Electron 主进程（内嵌 Python 后端）\n└── README.md\n```\n\n### 录制数据流（V3）\n\n```\n前端队列项 → recording\u002FbuildDtoFromQueueItem → RecordingRequestDTO\n    → POST \u002Fapi\u002Frecording\u002Fqueue\n    → plan_builder（planners + postprocess）→ RecordingPlan[]\n    → obs_director.execute_plan_queue（按 demo 分组启 CS2、注入预热 cvar）\n    → RecordingExecutor（逐段 seek \u002F spec \u002F OBS 录停 \u002F jump-cut）\n    → 成片重命名 + montage_db 入库（合辑工作台可选用）\n```\n\n---\n\n## Quick Start\n\n### 方式一：安装包（普通用户推荐）\n\n前往 [Releases 页面](https:\u002F\u002Fgithub.com\u002FDrEAmSs59\u002FCS2-insight-agent\u002Freleases) 下载最新的 `CS2-Insight-Agent-Setup-x.x.x.exe`，双击运行安装包，按提示完成安装。\n\n安装完成后从桌面或开始菜单启动程序，**无需打开浏览器，无需手动启动后端**，Electron 主进程会自动在内部启动 Python 后端服务。\n\n程序内置**在线更新**功能：启动时会自动检测是否有新版本，有更新时右上角会弹出提示，点击即可在程序内完成下载和安装，无需手动重新下载安装包。\n\n> **建议安装路径不含中文字符。** 例如 `D:\\CS2-Insight-Agent\\` ✅，`D:\\游戏工具\\CS2洞察\\` ❌\n\n---\n\n### 方式二：源码开发（开发者）\n\n#### 1. Backend\n\n```bash\ncd backend\npip install -r requirements.txt\nuvicorn app.main:app --reload --port 8000\n# 或\npython -m uvicorn app.main:app --reload --port 8000\n```\n\n发行版内置的 Python 运行时为 `3.12`。\n\n#### 2. Frontend\n\n```bash\ncd frontend\nnpm install\n\n# 仅启动前端开发服务器（不含 Electron 壳）\nnpm run dev\n\n# 启动 Electron 开发模式（内嵌前端 + 自动重载）\nnpm run electron:dev\n```\n\n前端跑在 `http:\u002F\u002Flocalhost:5173`，Vite 已配置代理把 `\u002Fapi\u002F*` 转发到后端 `http:\u002F\u002Flocalhost:8000`。\n\n#### 3. 打包\n\n```bash\n# 仅打包前端静态资源\nnpm run build\n\n# 打包 Electron 安装包（输出至 frontend\u002Fdist_electron\u002F）\nnpm run electron:build\n```\n\n---\n\n## Features\n\n### 🎯 解析与片段挖掘\n\n- **多场次 Demo 解析** — 支持单文件、多文件、目录监听三种入口；同一玩家在多场 Demo 中的高光会按场次组织展示。\n- **目标玩家锁定** — 自动从 Demo 解析出 roster，可按 Steam ID \u002F `user_id` \u002F 昵称三档兜底定位，兼容 5E、完美世界、官匹的不同导出习惯。\n- **关注玩家名单** — 在侧栏维护一份关注昵称，新增 Demo 入库时**自动**写好库展示名（A K\u002FD · B K\u002FD 多人并排），不耗深度解析资源。\n- **子进程隔离解析** — Demo 解析放到独立进程，遇到 `demoparser2` 的 Rust panic 也不会拖垮 FastAPI 主进程。\n\n### 🎬 片段类型（自动分类）\n\n- **高光 (highlight)**\n  - 单回合 ≥ 3 杀\n  - 颗秒 \u002F 跳杀 \u002F 反杀 \u002F Clutch \u002F 1vN \u002F 刀杀等带情景标签\n- **下饭 (fail)**\n  - 被电击枪击杀 \u002F 被沙鹰爆头 \u002F 被队友击杀\n  - 三轨数据源驱动的「人肉吸铁石」「人体描边」「亲儿子喂饭」高级下饭场景\n- **梗死亡 (meme_death)**\n  - 全程 0\u002F1\u002F2 杀且高死亡的「研发」局：211 高材生、o 系列、i18 典中典、z 系列坐牢\n  - 整局加一张「研发全集」大卡，可配 AI 总括点评\n- **跨回合合集 (compilation)**\n  - 🥩 亲儿子喂饭：本场对某敌人单方面输出\n  - ☠️ 本命苦主：本场被某攻击者反复处刑\n  - 🎬 全部击杀 \u002F 💀 全部死亡：本场目标玩家所有击杀 \u002F 死亡的串烧\n\n### 🤖 AI 锐评（可选）\n\n- **OpenAI 兼容多家厂商** — 内置 DeepSeek、通义 Qwen、智谱 GLM、MiniMax、OpenAI、OpenRouter；本地模型支持 Ollama、LM Studio。\n- **毒舌人设 Prompt** — 高光吹爆、下饭嘲讽、梗死亡当段子；硬约束 100 字以内、单行 JSON 输出，不输出场外废话。\n- **整局梗合集总评** — 211\u002Fo\u002Fi\u002Fz 系研发局会触发「整局综合评价」，独立于片段级评分。\n\n### 📺 OBS 自动导播（V3 录制管线）\n\n- **Plan → Execute 分离** — 前端提交 `RecordingRequestDTO`，后端 `plan_builder` 生成 tick 级 `RecordingPlan`（含 disabled 段与 warnings），再由 `RecordingExecutor` 驱动 OBS；`\u002Fapi\u002Frecording\u002Fplan` 可单独预览计划。\n- **GSI 启动就绪门控** — 用 CS2 Game State Integration 确认已进入游戏画面再注入控制台命令，超时（默认 120s）会**前端弹窗中止**，避免在读条页瞎打命令。\n- **智能跳跃剪辑 (jump-cut)** — 多杀 \u002F 击杀合集按击杀 tick 自动分段，段间 OBS `PauseRecord` \u002F `ResumeRecord`（失败时回退 `StopRecord` + 控制台 `demo_pause`）。\n- **可选 OBS 场景转场** — `OBSFadeController` 在段间用场景转场做淡入淡出，与 jump-cut 正交（不占用 PauseRecord 链路）。\n- **POV 段** — 高光可追加受害者视角、下饭可追加击杀者视角；回合 POV \u002F 时间轴回合走独立 `round_pov_planner`。\n- **末回合保护** — `final_round_guard` 防止 seek 越过 demo 尾部或误触退出。\n- **录制前观战预热** — 一键勾选 `cl_draw_only_deathnotices` \u002F `hud_showtargetid 0` \u002F `tv_nochat 1` \u002F 隐藏投掷物轨迹 \u002F 自定义 FOV 等观战 cvar，每个 demo 会话首段统一注入。\n- **批量队列录制** — 跨场次 \u002F 跨玩家加入队列；`obs_director.execute_plan_queue` 按 demo 分组启 CS2，顺序执行各 `RecordingPlan`，成片自动重命名并写入合辑库。\n- **键位与配置保护** — 录制开始注入 `unbindall` + 默认绑定；玩家 `config.cfg` \u002F `video.txt` \u002F `user_convars_*.vcfg` 快照至 `.cs2_config_backup\u002F`，`taskkill` CS2 后自动回滚。\n- **CS2 占用 \u002F 配置恢复检测** — CS2 已运行或上次异常退出未恢复配置时，接口返回 409，前端阻断弹窗提示。\n\n### 🎞️ 合辑工作台（可选）\n\n- 录制成功的片段自动入库 `recorded_clips`，可在合辑工作台拖拽排序、配 BGM \u002F 转场主题，经 FFmpeg 导出 MP4。\n- **使用前需配置 FFmpeg**：前往 [FFmpeg 官网](https:\u002F\u002Fffmpeg.org\u002Fdownload.html) 或 [gyan.dev](https:\u002F\u002Fwww.gyan.dev\u002Fffmpeg\u002Fbuilds\u002F) 下载 Windows 构建包，解压后在程序设置页面的「FFmpeg 路径」中填入 `ffmpeg.exe` 的完整路径。`montage_encoder` 会自动探测可用的硬件编码器（NVENC \u002F QSV \u002F AMF），无硬件加速时回退到 libx264。\n\n### 📚 Demo 库\n\n- **SQLite 本地库** — 解析过的 Demo 写入 `cs2-insight.db`，跨次会话保留地图、记分板、关注玩家展示名等元数据。\n- **目录实时监听** — 在侧栏添加 5E \u002F 完美 \u002F 官匹 demo 目录，新增文件自动入库 + 轻量元数据解析。\n- **SSE 实时推送** — 库内新增 \u002F 改名 \u002F 解析状态变化时通过 `\u002Fapi\u002Fdemos\u002Fstream` 推送，前端无需轮询。\n\n### 🎨 UI \u002F UX\n\n- 暗黑磨砂黑底 + CS2 经典亮橙强调色，原生电竞风，Electron 桌面应用无需浏览器。\n- 录制队列页支持跨场次跨玩家管理、计划预览与节奏微调（pre-roll \u002F post-kill \u002F jump-cut 阈值等，队列项可 per-clip 覆盖）。\n- 阻断弹窗根据后端返回 detail 自动判断「CS2 占用 \u002F GSI 未就绪 \u002F 录制任务进行中」并切换副标题。\n\n---\n\n## API Endpoints（节选）\n\n| Method | Path | Description |\n| --- | --- | --- |\n| GET | `\u002Fapi\u002Fhealth` | 健康检查 |\n| GET | `\u002Fapi\u002Fconfig` | 获取配置 |\n| PUT | `\u002Fapi\u002Fconfig` | 更新配置 |\n| POST | `\u002Fapi\u002Fconfig\u002Fdetect-cs2` | 自动探测 cs2.exe 路径 |\n| POST | `\u002Fapi\u002Fobs\u002Ftest` | 测试 OBS WebSocket 连接 |\n| POST | `\u002Fapi\u002Fdemo\u002Fupload` | 单文件上传 |\n| POST | `\u002Fapi\u002Fdemo\u002Fupload-multiple` | 多文件上传 |\n| POST | `\u002Fapi\u002Fdemo\u002Fparse` | 单玩家解析 |\n| POST | `\u002Fapi\u002Fdemo\u002Fparse-multi` | 同 Demo 多玩家解析 |\n| POST | `\u002Fapi\u002Fdemo\u002Fparse-batch` | 跨 Demo 批量解析 |\n| GET | `\u002Fapi\u002Fdemos` | Demo 库列表（分页） |\n| GET | `\u002Fapi\u002Fdemos\u002Fstream` | 库变更 SSE 流 |\n| POST | `\u002Fapi\u002Fdemos\u002Fscan` | 手动扫描监听目录 |\n| POST | `\u002Fapi\u002Fdemos\u002F{id}\u002Fparse` | 重新解析 |\n| POST | `\u002Fapi\u002Fdemos\u002F{id}\u002Fanalyze` | 直接对库内 Demo 出片段 |\n| GET | `\u002Fapi\u002Fdemos\u002F{id}\u002Fplayers` | 库内 Demo 玩家名册 |\n| POST | `\u002Fapi\u002Frecording\u002Fqueue` | 批量录制：`RecordingRequestDTO[]` → `plan_builder` → `execute_plan_queue` |\n| POST | `\u002Fapi\u002Frecording\u002Fplan` | 预览 `RecordingPlan`（active \u002F disabled 段、warnings、末回合元数据） |\n| POST | `\u002Fapi\u002Frecording\u002Fexecute` | 单条 DTO 即时执行（调试用，不经队列编排） |\n| POST | `\u002Fapi\u002Frecording\u002Fabort` | 中止当前进行中的批量录制队列 |\n| GET | `\u002Fapi\u002Frecorded-clips` | 已录片段列表（合辑工作台） |\n| POST | `\u002Fapi\u002Fmontage\u002Fprojects` | 保存合辑工程 |\n| POST | `\u002Fapi\u002Fmontage\u002Fexport` | FFmpeg 合辑导出 |\n| POST | `\u002Fapi\u002Fgsi\u002Fcs2` | CS2 GSI Sink（录制就绪门控） |\n| GET | `\u002Fapi\u002Fgsi\u002Fstatus` | 查看最近 GSI 状态 |\n\n---\n\n## Roadmap\n\n- **V1.x.x** — 高光引擎 + AI 锐评 + OBS 全自动导播 ✅ *已完成*\n- **V2.x.x** — Electron 桌面端、程序内在线更新、V3 录制管线（Plan\u002FExecute 分离）、合辑工作台（FFmpeg 导出）、POV HUD 实验性功能 ✅ *Current*\n- **V3.x.x** — 战术教练（投掷物轨迹分析 \u002F 首杀热力图 \u002F 路线复盘）\n\n---\n\n## License & Disclaimer\n\n本项目采用 [PolyForm Noncommercial 1.0.0](https:\u002F\u002Fpolyformproject.org\u002Flicenses\u002Fnoncommercial\u002F1.0.0\u002F) 协议发布。\n\n- ✅ 允许个人学习、研究、爱好、评测及其他非商业用途使用。在遵守本协议的前提下，你可以阅读、修改、构建和分发本项目源码及其衍生版本。\n- ⛔ 未经书面授权，禁止将本项目或其衍生版本用于任何商业用途，包括但不限于：商业软件、付费服务、商业代剪\u002F代录服务、商业平台集成、对外销售、出租、转售或作为商业产品的一部分分发。\n  - 商业授权咨询：`dreamss29_@outlook.com`\n- 📦 如果你分发本项目的编译产物、安装包或修改版本，请同时保留本项目的许可证声明，并遵守 `THIRD_PARTY_LICENSES.md` 中列出的所有第三方开源组件许可证。\n\n## 商标声明\n\nCounter-Strike 2、CS2、Counter-Strike、Steam、Valve 等名称、商标和标识归其各自权利人所有。\n\n本项目与 Valve Corporation、完美世界竞技平台、5E 对战平台、OBS Studio 及其他相关平台或软件的所有者不存在从属、合作、赞助、授权或背书关系。\n\n### 安全使用提示\n\n- **默认录制流程**调用 CS2 时使用 `-insecure` 仅用于本地 Demo 回放，不存在 DLL 注入或 Hook；不会对磁盘上的 `.dem` 做修改，不连接、不修改、不干预任何官方游戏服务器、匹配服务或反作弊系统，也不提供任何作弊、绕过检测或破坏公平竞技的功能，**不要在已登录匹配服务器的 CS2 客户端中并行使用**，以免触发反作弊系统的不必要警示。\n- 若你在「常用参数管理 → 实验性功能」中**主动开启 POV**，程序会临时向 CS2 的 `game\u002Fcsgo` 目录写入 `pov.vpk`，并**增量修改** `gameinfo.gi` 的 `SearchPaths` 以加载 POV HUD 资源；录制结束或异常收尾时会自动恢复。该模式同样**强制**使用 `-insecure` 启动 CS2，**不要用于连接 VAC 安全服务器**。\n- 录制期间会临时修改若干 CS2 archive cvar 与按键绑定。本项目会在启动录制时在程序数据目录的 `.cs2_config_backup` 中**自动备份**玩家原始的 `config.cfg` \u002F `video.txt` \u002F `user_convars_*.vcfg`，录制结束后会回滚；如遇异常退出导致设置被覆盖，可在该目录手动取回原始文件。\n\n---\n\n## 支持项目\n\n如果这个项目帮你节省了剪辑时间，欢迎请我喝一杯咖啡 ☕  \n你的支持会用于 Demo 解析、录制兼容性测试和后续功能维护。\n\u003Cimg src=\"asset\u002Fwx.jpg\" alt=\"赞助方式1\" style=\"zoom:33%;\" \u002F>\n\u003Cimg src=\"asset\u002Fali.jpg\" alt=\"赞助方式2\" style=\"zoom:33%;\" \u002F>\n","CS2 Insight Agent 是一款专为CS2玩家设计的智能电竞终端，能够自动解析游戏Demo录像并提取高光、下饭和梗死亡时刻。项目利用Python开发，结合FastAPI与uvicorn构建后端服务，并通过Electron提供桌面应用体验。它支持调用多种LLM生成毒舌锐评与评分，同时借助OBS实现全自动控制回放录制。该工具特别适用于希望提升个人技能分析或制作精彩集锦视频的CS2玩家。此外，其开箱即用特性极大降低了使用门槛，使得即使是技术新手也能轻松上手。",2,"2026-06-11 02:46:42","CREATED_QUERY"]