{"id":50910905,"url":"https://github.com/qingchencloud/qingchen-cut","last_synced_at":"2026-06-16T10:01:23.298Z","repository":{"id":363973710,"uuid":"1265667628","full_name":"qingchencloud/qingchen-cut","owner":"qingchencloud","description":"晴辰视频剪辑工具 - 基于 OpenCut 的 AI 可操作视频剪辑工作台","archived":false,"fork":false,"pushed_at":"2026-06-11T06:40:38.000Z","size":4243,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-11T07:13:35.320Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qingchencloud.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":".github/SECURITY.md","support":".github/SUPPORT.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-06-11T01:32:10.000Z","updated_at":"2026-06-11T06:40:42.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/qingchencloud/qingchen-cut","commit_stats":null,"previous_names":["qingchencloud/qingchen-cut"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/qingchencloud/qingchen-cut","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qingchencloud%2Fqingchen-cut","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qingchencloud%2Fqingchen-cut/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qingchencloud%2Fqingchen-cut/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qingchencloud%2Fqingchen-cut/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qingchencloud","download_url":"https://codeload.github.com/qingchencloud/qingchen-cut/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qingchencloud%2Fqingchen-cut/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34400456,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-16T02:00:06.860Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-06-16T10:01:22.128Z","updated_at":"2026-06-16T10:01:23.286Z","avatar_url":"https://github.com/qingchencloud.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 晴辰剪辑 Qingchen Cut\n\n晴辰剪辑是面向 AI 自动剪辑的本地视频编辑工具。项目基于\n[OpenCut Classic](https://github.com/OpenCut-app/opencut-classic) 二次开发，目标不是做一个需要人工持续拖拽时间线的剪辑器，而是做一个能被 AI 通过 CLI/MCP 直接操作、批量生成视频、可本地运行的剪辑工作台。\n\n## 产品目标\n\n- AI 通过 CLI、MCP 或本地 headless 任务接口直接创建项目、导入素材、编排时间线并导出成片。\n- 人工 UI 只作为调试、预览、复核和紧急修正入口，不作为主工作流依赖。\n- 主执行链路不依赖人工打开浏览器，也不依赖 Playwright 驱动 Web UI。\n- 优先支持本地素材、本地渲染、本地导出，避免把原始视频上传到第三方服务。\n- 第一阶段聚焦确定性剪辑：裁切、拼接、字幕、标题、配音、配乐、音量、变速、画布比例和 MP4 导出。\n- 保留 OpenCut 的 Web 编辑器能力作为预览/调试界面，但 AI 主路径必须走可编程接口。\n\n## 初始技术路线\n\n当前基线来自 OpenCut Classic。它的项目和素材主要存储在浏览器 IndexedDB / OPFS 中，导出在浏览器内通过 Canvas、WebCodecs 和 `mediabunny` 完成。这个路径适合人工 Web 编辑器，不适合作为 AI 无人值守主链路。\n\n第一阶段路线改为无浏览器主路径：\n\n1. `Editing DSL`: 用 JSON 描述剪辑任务，让 AI 可以生成可复现的剪辑计划。\n2. `Headless Core`: 在 Node/Rust 层解析 DSL、探测媒体、编译时间线并调用渲染后端。\n3. `CLI`: 提供 `validate`、`probe`、`render` 等命令，直接读写本地文件。\n4. `MCP Server`: 在 CLI/Core 稳定后封装成 AI 可调用工具。\n5. `Web UI`: 仅作为工程预览、人工复核和调试入口。\n\n详细路线见 [docs/ai-agent-roadmap.md](docs/ai-agent-roadmap.md)。\n\n## 当前进展：P0 闭环已可用\n\nheadless 主链路（M0~M3）已经落地，AI 不开浏览器即可完成\"校验 → 渲染 → 视觉复核\"全流程：\n\n```powershell\nbun install\nbun run qc doctor                                  # 环境诊断：FFmpeg/滤镜/中文字体\nbun run qc schema                                  # 输出 Editing DSL 的 JSON Schema\nbun run qc validate fixtures/jobs/valid-full.json  # 四层校验，结构化错误带修复建议\nbun run qc plan fixtures/jobs/valid-full.json      # dry-run：输出 FFmpeg 渲染计划\nbun run qc render fixtures/jobs/valid-full.json    # 渲染 MP4，NDJSON 进度\nbun run qc frame fixtures/jobs/valid-full.json --at 1.0 --out out.png   # 抽帧视觉复核\nbun run qc contact-sheet fixtures/jobs/valid-full.json --out sheet.png  # 九宫格速览\nbun run qc analyze \u003c素材\u003e                          # 场景切换/静音段/响度分析\nbun run qc patch \u003cjob.json\u003e --ops \u003cops.json\u003e       # JSON Patch 增量改 DSL\nbun run qc transcribe \u003c素材\u003e --lang zh --srt out.srt # whisper.cpp 本地转写（先装：bun script/install-whisper.ts）\nbun run qc tts --text \"晴辰剪辑自动配音\" --out voice.wav # Windows SAPI 本地 TTS\nbun run qc narrate --script script.txt --video input.mp4 --bgm bgm.mp3 --out-dir out/narration --out-job job.json --out out.mp4\n                                                     # 文案分段配音 → WAV/SRT → 音画同步 DSL\nbun run qc template \u003ctpl.json\u003e --vars \u003cvars.json\u003e --out \u003cjob.json\u003e  # 模板+变量 → 任务\nbun run qc batch \u003cjob1.json\u003e \u003cjob2.json\u003e           # 批量渲染，逐任务进度+汇总\nbun run qc studio --port 4477 --out-dir docs-local/client-runs\n                                                    # 开发诊断 Studio：分析/配音/渲染/速览\nbun run build:desktop-client                       # 构建 Windows 无 Bun 客户端包\n```\n\n测试素材先跑 `bun run make:fixtures` 生成；单测 `bun run test:headless`。\n\nMCP：仓库根目录 [.mcp.json](.mcp.json) 已配置 `qingchen-cut` server（15 个工具，覆盖\nschema/校验/探测/分析/渲染/抽帧/缩略图/增量修改/转写/配音/文案同步 DSL）。用 Claude Code 等 MCP 客户端打开\n本仓库即可让 AI 直接调用剪辑引擎。\n\n## 免环境客户端方向\n\n当前仓库优先把 AI 可调用的 headless 能力做稳；Windows 本地客户端会直接封装原生 OpenCut Web 编辑器，并复用同一套 CLI/MCP/headless 能力。详见 [docs/local-studio-client.md](docs/local-studio-client.md)。\n\nWindows 客户端包通过 `bun run build:desktop-client` 生成到 `dist/qingchen-cut-win32-x64/`，包含 `QingchenCut.exe`、原生 Web standalone、内置 Bun runtime、FFmpeg/FFprobe、可选 whisper.cpp 和模型。用户不需要理解或安装 Bun、FFmpeg、whisper、MCP 或环境变量：\n\n- 双击 `QingchenCut.exe` 后，本机启动原生 Web 编辑器并在独立客户端窗口打开 `/projects`。\n- Web UI 保持 OpenCut 原有编辑体验，关键入口已中文化。\n- CLI/MCP/headless 能力继续作为 AI 自动剪辑主链路，不侵入人工 Web UI。\n- 开发诊断入口 `qc studio` 仍保留，用于快速验证素材分析、TTS 配音、音画同步 DSL、渲染和 contact sheet。\n\n短期实现继续复用现有 `packages/core` / `packages/cli` / `packages/mcp`，客户端只做打包、运行时配置、预览和诊断，不把剪辑业务逻辑重新写进 UI。后续再把同一套本地服务包进 WebView/安装器，做成更像传统桌面软件的窗口体验。\n\n### GitHub Release 自动构建\n\n推送 `v*` tag 会触发 `Desktop Client Release` workflow，在 GitHub Actions 的 Windows runner 上构建客户端并挂到同名 GitHub Release：\n\n```powershell\ngit tag v0.1.0\ngit push origin v0.1.0\n```\n\nRelease 会优先提供安装器 `qingchen-cut-v0.1.0-win32-x64-setup.exe`，普通用户下载后直接运行安装即可；同时保留 `qingchen-cut-v0.1.0-win32-x64-portable.zip` 作为免安装解压版。\n\n## 给 AI 使用\n\n如果你想让任意 AI 直接操作晴辰剪辑，先看 [AI 快速接入指南](docs/ai-agent-quickstart.md)。最短路径是把 [docs/qingchen-cut-ai-skill.md](docs/qingchen-cut-ai-skill.md) 的全文发给 AI，然后给它素材路径和剪辑目标即可。这个 skill 文档说明了：\n\n- AI 应优先调用哪些 MCP 工具。\n- 没有 MCP 时如何用 `bun run qc ...` CLI 兜底。\n- 如何完成素材分析、DSL 生成、校验、抽帧自检、渲染和 contact sheet 速览。\n- 如何做文案配音：`synthesize_speech` / `create_narrated_dsl` 或 `qc tts` / `qc narrate`。\n- 出问题时需要收集哪些诊断信息。\n\n推荐给 AI 的最短指令：\n\n```text\n请阅读并遵守这个 Qingchen Cut AI Skill。你必须优先使用 qingchen-cut MCP 工具；如果当前客户端没有 MCP，就在仓库根目录使用 bun run qc ... CLI。剪辑完成前必须 doctor、probe/analyze、validate、抽帧自检、render、contact-sheet，并报告产物路径和剩余风险。\n\n\u003c粘贴 docs/qingchen-cut-ai-skill.md 全文\u003e\n```\n\nMCP 客户端可以直接使用仓库根目录的 [.mcp.json](.mcp.json)。没有 MCP 时，AI 可按 skill 里的 CLI fallback 执行 `bun run qc ...`。\n\n## 问题反馈\n\n如果 AI 剪辑、MCP、CLI、渲染、抽帧、TTS 配音或转写失败，请在 [GitHub Issues](https://github.com/qingchencloud/qingchen-cut/issues/new/choose) 里选择 **AI editing / MCP / CLI failure** 模板。提交前尽量附上：\n\n- `bun run qc doctor` 或 MCP `doctor` 输出。\n- 失败的命令或 MCP tool call。\n- 最小可复现 DSL JSON。\n- `issues[]` JSON、抽帧图、contact sheet 或短成片。\n- 系统平台、shell、Bun 版本和当前 commit。\n\n不要公开提交 token、Cookie、私有原片或个人隐私数据；安全问题请按 [.github/SECURITY.md](.github/SECURITY.md) 处理。\n\n## 开发环境\n\n### 前置依赖\n\n- [Bun](https://bun.sh/docs/installation)\n- [Docker](https://docs.docker.com/get-docker/) 和 Docker Compose\n\nDocker 用于本地数据库和 Redis。纯前端调试可先跳过；AI 主链路验收优先使用 CLI/MCP 和本地媒体 fixture。\n\n### 本地启动\n\n```powershell\nCopy-Item apps/web/.env.example apps/web/.env.local\ndocker compose up -d db redis serverless-redis-http\nbun install\nbun dev:web\n```\n\nWeb 应用默认运行在 [http://localhost:3000](http://localhost:3000)。\n\n### Docker 自托管\n\n```powershell\ndocker compose up -d\n```\n\n完整 Docker 应用默认运行在 [http://localhost:3100](http://localhost:3100)。\n\n## 仓库结构\n\n- `packages/dsl/`: Editing DSL schema（zod）、JSON Schema 导出、语义校验、JSON Patch。\n- `packages/core/`: headless 引擎：FFmpeg 解析、媒体探测/分析、DSL→filtergraph 编译、渲染/抽帧/缩略图。\n- `packages/cli/`: `qc` 命令行，全 JSON 输出，AI 优先设计。\n- `packages/mcp/`: MCP server，薄封装 core。\n- `fixtures/`: DSL 任务样例与测试素材生成脚本（中文/空格路径为一等测试对象）。\n- `apps/web/`: Next.js Web 编辑器，保留为预览和调试入口。\n- `apps/desktop/`: OpenCut Classic 继承的桌面实验代码，暂不作为主线。\n- `rust/`: OpenCut 的跨平台核心和 WASM 相关代码。\n- `docs/`: 晴辰剪辑的二开路线、架构和验证记录。\n\n## 上游和许可证\n\n本项目基于 OpenCut Classic，遵循原项目 MIT License。原始项目已经归档且不再维护；晴辰剪辑会在公开仓库中按 AI 自动剪辑目标继续演进。\n\n保留 `LICENSE` 中的 MIT 许可文本和上游版权声明。\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqingchencloud%2Fqingchen-cut","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqingchencloud%2Fqingchen-cut","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqingchencloud%2Fqingchen-cut/lists"}