# 数字人视频工具拆解说明

## 来源

- 抖音链接里的 `modal_id` 分别为 `7649061784112362610` 和 `7626335874543914276`。
- 普通网页访问会遇到验证码或 404 限制，所以最终以本地视频文件为准。
- 两个本地视频文件均已复制到 `assets/`，并提取了关键帧与转写文本。

## 视频 1：7649061784112362610

标题线索：蒸馏、vibecoding、智能体、OPC、超级个体、Codex。  
时长约 104.6 秒，横屏。

提炼结果：

1. 这不是单一 AI 功能，而是把 4 到 5 个智能体打包成一个可视化应用。
2. 目标用户不关心技术细节，只想一键使用。
3. 能力模块包括：
   - 语音识别：从对标视频里提取字幕、口播、结构。
   - 文案仿写：根据对标视频生成新的文案。
   - 声音克隆：按用户声音生成口播音频。
   - 数字人驱动：让数字人讲出脚本。
   - 视频处理：字幕、音乐、封面、成片合成。
   - 自动发布：把视频发到多个平台。
4. 他说自己用 Codex 按这些智能体重新写了一遍，并做了 5 个流程和 skill：
   - 提取文案
   - 仿写
   - 克隆声音
   - 生成视频
   - 发到所有平台

## 视频 2：7626335874543914276

标题线索：实体老板、商业、开店、做生意、智能体。  
时长约 47.9 秒，竖屏。

演示流程：

1. 找一个同行业做得好的视频。
2. 点击分享，复制链接。
3. 把链接粘贴到工具里，点击开始。
4. 系统自动创造同行的选题话题。
5. 系统生成一个全新文案。
6. 自动配音，模仿用户声音把文案说出来。
7. 自动用用户数字人生成视频。
8. 最后选择抖音、小红书、视频号、快手等平台。
9. 系统自动生成标题、话题、封面，并上传发布。

## 已做成的原型范围

当前 `index.html` 是一个浏览器可打开的完整交互原型，包含：

- 对标链接输入与解析
- 视频拆解摘要
- 选题与文案生成
- 文案质量指标
- 声音样本上传位
- 数字人、背景、字幕、音乐配置
- Canvas 数字人预览
- 封面导出
- WebM 预览录制
- 标题、话题、封面方案
- 多平台发布队列模拟
- 真实接口接入位说明
- JSON 生产方案导出

## 外部竞品对标

本轮外部搜索后，选出两个最适合对标的项目：

1. Topview AI：强项是产品、参考视频或 URL 输入后的 AI Video Agent 工作流，更贴近“参考视频复刻”和自动生成短视频广告。
2. Creatify：强项是 URL-to-video、广告变体、Ad Flow、灵感库/竞品库和批量生成，更贴近投放素材生产。

对应到当前工具，已经做了这些定向调整：

- 后端新增 `/api/competitor-benchmark`，把两家竞品的功能、UI 模式、选型理由和质量门槛结构化输出。
- Studio 新增“创意矩阵”，把原来的普通链接输入升级成 Topview 式 Agent 复刻或 Creatify 式广告变体。
- 批量计划新增 `competitor_pattern`、`creative_style`、`test_axis`、`ad_flow_step`，每条计划都能追溯到竞品模式和测试轴。
- Review 新增“竞品对标”面板，直接展示竞品功能/UI差距和已落地改造。

## 真实上线还需要接入的接口

- 语音识别：Whisper / OpenAI Transcribe / 其他 ASR。
- 文案生成：GPT / Claude / 本地大模型。
- 声音克隆：CosyVoice / ElevenLabs / 火山语音 / 其他 TTS。
- 数字人生成：HeyGen / 腾讯智影 / 硅基智能 / 其他数字人服务。
- 视频合成：FFmpeg 服务端任务队列。
- 自动发布：平台官方 API 或 `social-auto-upload` 类自动化方案。

当前版本已经把产品结构、界面、状态流和可导出的生产参数搭出来；真实 API 接入可以按上面六个 adapter 分模块替换本地模拟逻辑。

## 本地真实处理版本

已新增 `server.py`、`start-local.ps1` 和 `verify-local.ps1`。启动后打开 `http://127.0.0.1:8877/`，页面可以直接上传视频并完成本地处理；交付包解压后，`tool/server.py` 会自动读取同级 `source_assets/` 里的两条抖音视频，`verify-local.ps1` 可一键检查核心验收接口。默认自检适配刚解压的干净交付包；需要要求历史生产记录时使用 `-RequireProductionHistory`，需要要求真实外部服务上线时使用 `-RequireGoLive`：

1. 保存上传视频。
2. 用 FFmpeg 提取音频。
3. 用 faster-whisper 本地转写中文口播。
4. 抽取关键帧。
5. 根据转写拆解受众、行业、卖点、关键词、选题。
6. 生成 3 版口播文案。
7. 生成封面图。
8. 生成竖屏数字人口播预览视频。
9. 使用 Windows 中文语音生成本地口播音频 `generated_voice.wav`。
10. 生成字幕文件 `subtitles.srt`。
11. 合成带声音的竖屏成片 `final_video.mp4`。
12. 生成合规检查结果。
13. 生成抖音、快手、小红书、视频号发布清单。
14. 生成 `publish_ready.zip`。
15. 打包 `production_package.zip`。

已验证两个视频：

- `7626335874543914276`：生成 run `10fc3078d18c`，包含 `analysis.json`、`package.md`、`cover.png`、`preview.mp4`、`production_package.zip`。
- `7649061784112362610`：生成 run `755af7b5a4f8`，包含 `analysis.json`、`package.md`、`cover.png`、`preview.mp4`、`production_package.zip`。
- 本地成片验证：生成 run `716962d07c75`，包含 `final_video.mp4`、`generated_voice.wav`、`subtitles.srt`，其中 `final_video.mp4` 经 ffprobe 验证包含 H.264 视频流和 AAC 音频流。
- 发布包验证：生成 run `42697075285f`，包含 `publish_manifest.json` 和 `publish_ready.zip`。发布包内含抖音、快手、小红书、视频号四个平台的 `caption.txt` 与 `metadata.json`，合规检查结果为“通过”。
- 批量包验证：生成 batch `batch_400cace4d7`，汇总 `42697075285f` 与 `6902693cb5fc` 两个 run。批量包内包含两条视频各自的 `final_video.mp4`、`publish_ready` 平台文件、`production_package.zip`，并包含 `batch_summary.json` 与 `batch_summary.md`。
- 发布任务验证：生成 publish job `publish_a9cdcf2d1e`，共 8 个任务，也就是 2 条视频 x 4 个平台。任务包包含 `publish_jobs.json`、`publish_report.md`、`adapter_contract.json`、`platform_requirements.json`、`adapter_readme.md`、`sample_adapter_result.json`、两条视频的成片/封面/字幕，以及各平台 `caption.txt` 与 `metadata.json`。页面端也验证可以创建并下载任务包。

页面级验证：

- `http://127.0.0.1:8877/` 可打开。
- 本地服务状态显示“本地服务已连接”。
- 页面上传视频后可以回填转写摘要、受众、卖点、脚本、标题、话题和生产包下载链接。
- 页面可以显示并下载带声音的最终成片 `final_video.mp4`。
- 页面可以显示合规检查结果、四个平台发布清单，并下载 `publish_ready.zip`。
- 页面上传框支持多视频选择；多视频处理完成后可以下载 `batch_publish_package.zip`。
- 页面可以创建发布任务队列并下载 `publish_jobs_package.zip`。
- 浏览器控制台无错误和警告。
- 桌面宽度无横向溢出。

## 发布适配器补充

发布任务包已补齐机器可读的接入契约：

- `adapter_contract.json`：约定每个发布任务需要的输入字段，以及发布适配器应该返回的结果字段。
- `platform_requirements.json`：列出抖音、快手、小红书、视频号的账号状态、素材要求和人工上传兜底方式。
- `adapter_readme.md`：说明最小接入流程。
- `sample_adapter_result.json`：给后续自动化发布程序写回结果时参考。

当前工具已经做到：拆视频、提炼内容、生成新文案、生成口播音频、生成数字人口播成片、生成字幕/封面、生成单条发布包、生成批量总包、生成多平台发布任务包。

仍需要外部条件才能做到真正一键发布到平台：对应平台账号登录态、官方 API 权限，或基于已登录浏览器的自动化适配器。

## 链接直处理补充

已新增 `/api/process-links`，页面“解析”按钮会在本地服务在线时调用它。流程是：

1. 从抖音链接里提取 `modal_id`。
2. 在 `assets/` 匹配同 ID 的本地视频文件。
3. 优先读取同 ID 的 `.transcript.txt`，避免重复跑语音识别。
4. 复用上传视频同一套流水线生成封面、口播音频、成片、发布包。
5. 多条链接自动生成批量总包。

验证结果：

- 输入两条原始抖音链接后，生成 run `f04951985dc3` 与 `3499d91a7707`。
- 生成批量包 `batch_4871dea02f`，压缩包内包含两条视频各自的 `final_video.mp4`。
- 生成发布任务 `publish_8d4c1cfa44`，压缩包内包含 `publish_jobs.json`、`adapter_contract.json`、平台要求说明、两条成片和 8 个平台任务素材。

## 发布执行层补充

已新增 `/api/execute-publish-job`，页面“执行发布检查”按钮会调用它。它不会伪造真实发布，而是完成真实发布前最后一层本地校验：

1. 读取 `publish_jobs.json`。
2. 检查每个任务的 `final_video.mp4`、`cover.png`、`caption.txt`、`metadata.json` 和 `subtitles.srt`。
3. 校验文本不为空、元数据 JSON 可读取、文件非空。
4. 生成 `publish_results.json`、`publish_execution_report.md` 和 `publish_execution_package.zip`。

验证结果：

- 对 `publish_8d4c1cfa44` 执行检查后，生成 execution `exec_e49cd8ce3a`。
- 共 8 个任务，8 个都为 `ready_for_adapter`，0 个失败。
- 执行包内包含 `publish_results.json`、`publish_execution_report.md`、`publish_jobs.json`、`adapter_contract.json`、`platform_requirements.json` 和 `adapter_readme.md`。

这一步之后，真正发布适配器只需要读取 `publish_results.json` 中状态为 `ready_for_adapter` 的任务，并使用平台账号/API/浏览器登录态执行上传。

## 全流程适配器清单补充

已新增 `/api/adapters/status` 和每条视频的 `pipeline_manifest.json`。

接口配置页现在显示真实状态：

- 语音识别：本地可用，当前使用 faster-whisper 或已转写文本。
- 文案模型：本地可用，当前使用本地规则生成。
- 声音克隆：本地替代，当前使用 Windows 中文 TTS；真克隆需要 CosyVoice、ElevenLabs、火山语音等服务。
- 数字人驱动：本地替代，当前使用本地 Canvas/FFmpeg 口播动画；真人数字人需要 HeyGen、腾讯智影、硅基智能等服务。
- 视频合成：本地可用，当前使用 FFmpeg。
- 自动发布：本地已能生成发布包和执行检查，真实发布需要平台账号/API/浏览器适配器。

验证结果：

- 输入两条抖音链接后，生成 run `d1f3125ef3fa` 与 `95668e250a71`。
- 两个 run 的生产包都包含 `pipeline_manifest.json`、`final_video.mp4`、`analysis.json`。
- 最新批量包 `batch_bf1f7c06de` 直接包含两条视频各自的 `pipeline_manifest.json`。
- 最新发布任务 `publish_ce30934c0e` 生成 8 个平台任务。
- 最新执行检查 `exec_1afe273d49` 显示 8/8 个任务为 `ready_for_adapter`。

## 一键运行补充

已新增 `/api/run-full-pipeline`，顶部“运行流程”按钮会在本地服务在线时调用它。它把原来的多个动作合成一次请求：

1. 从抖音链接提取 `modal_id`。
2. 匹配 `assets/` 里的视频和转写文本。
3. 生成文案、封面、口播音频、数字人口播预览和最终成片。
4. 生成批量总包。
5. 创建多平台发布任务。
6. 执行发布检查并生成执行包。

验证结果：

- 一次调用 `/api/run-full-pipeline` 后生成 run `0751e5508f21` 与 `f1efc7be1852`。
- 生成批量包 `batch_701efae3b4`，包含两条成片和两份 `pipeline_manifest.json`。
- 生成发布任务 `publish_db4920cbe5`，共 8 个平台任务。
- 生成执行检查 `exec_0f01f67c3d`，8/8 个任务为 `ready_for_adapter`。

## 外部语音和数字人适配器补充

已新增通用 HTTP 外部适配器调用层：

- 语音优先读取 `VOICE_ADAPTER_URL` 或 `COSYVOICE_API_URL`。
- 数字人优先读取 `DIGITAL_HUMAN_ADAPTER_URL` 或 `DIGITAL_HUMAN_API_URL`。
- 可选 token：`VOICE_ADAPTER_TOKEN`、`DIGITAL_HUMAN_ADAPTER_TOKEN`、`HEYGEN_API_KEY`。
- 外部服务可以返回二进制、base64 或文件 URL。
- 外部调用失败会自动回退本地方案，并把错误写入适配器结果文件。
- 真实平台发布可通过 `SOCIAL_PUBLISH_ADAPTER_URL` 接入；配置后执行检查会调用发布适配器并回写 `published_url` 或错误。

新增说明文件：

- `adapter_contracts.md`
- `adapter_env.example.ps1`

验证结果：

- 未配置外部服务时，一键运行仍生成 run `3d520b097d89` 与 `d555d3e6c713`。
- 两个 run 的生产包都包含 `voice_adapter_result.json`、`digital_human_adapter_result.json`、`pipeline_manifest.json` 和 `final_video.mp4`。
- 批量包 `batch_fe63c2e358` 包含两条视频成片和两份流程清单。
- 发布任务 `publish_ccf06cde2e` 与执行检查 `exec_20e4e8e14c` 正常生成，8/8 个任务为 `ready_for_adapter`。

## 社媒发布外部适配器补充

已在发布执行层加入 `SOCIAL_PUBLISH_ADAPTER_URL`：

- 未配置时：只做素材校验，状态为 `ready_for_adapter`。
- 已配置时：逐个平台任务 POST 给外部发布适配器。
- 适配器可返回 `published`、`waiting_for_review`、`failed`、`skipped`。
- 执行结果会写回 `published_url`、`platform_work_id` 和错误信息。
- `adapter_contract.json` 已包含 `social_publish_adapter` 的请求/返回契约。

验证结果：

- 未配置 `SOCIAL_PUBLISH_ADAPTER_URL` 时，一键流程仍正常完成。
- 最新 run：`dc17b154ac46` 与 `9c0e2fa0896f`。
- 最新批量包：`batch_0282c51a9d`，包含两条成片和两份流程清单。
- 最新发布任务：`publish_b4294d6b91`，共 8 个任务。
- 最新执行检查：`exec_65304327db`，模式为 `asset_validation`，8/8 个任务为 `ready_for_adapter`。

## 本地模拟外部适配器补齐

新增 `mock_adapters.py` 和 `start-with-mock-adapters.ps1`，用于验证外部接口模式：

- `/voice` 返回真实 WAV 字节。
- `/digital-human` 返回真实 MP4 字节。
- `/publish` 返回 `published`、作品 URL 和平台作品 ID。

这一步不是伪造主流程结果，而是让主服务真的通过 `VOICE_ADAPTER_URL`、`DIGITAL_HUMAN_ADAPTER_URL`、`SOCIAL_PUBLISH_ADAPTER_URL` 去调用外部 HTTP 适配器，再继续执行合成、打包和发布结果写回。

验证结果：
- run `19f2828ffcb7` 和 `3d8e3e148c5b` 均写入 `voice_adapter_result.json`、`digital_human_adapter_result.json`，状态为 `external_configured`。
- 批量包 `batch_a2dd357aed/batch_publish_package.zip` 包含两条成片、`publish_manifest.json` 和 `pipeline_manifest.json`。
- 发布任务 `publish_20012f9823` 生成 `publish_jobs_package.zip` 和 `publish_execution_package.zip`。
- 执行 `exec_ff2d211b9a` 的模式为 `external_publish_adapter`，8/8 个平台任务返回 `published`，0 个失败。
- 页面截图 `screenshot-mock-adapter-status.png` 显示声音克隆、数字人驱动、自动发布均为“外部已配置”。

## 页面接口参数补齐

新增页面可编辑的外部接口参数，不再必须依赖启动脚本里的环境变量：

- `profile/adapter_config.json` 保存声音克隆、数字人视频、多平台发布三类适配器地址和密钥。
- `GET /api/adapter-config` 返回页面可展示的配置，密钥不会明文回传，只返回 `tokenPresent`。
- `POST /api/adapter-config` 保存配置；密钥输入框留空时保留旧密钥，勾选清除时才删除。
- `first_env` 会优先读取页面保存的配置，再读取环境变量。
- `/api/adapters/status` 现在会标明配置来源：页面配置或环境变量。

验证结果：
- 页面保存本机模拟地址 `http://127.0.0.1:8878/voice`、`/digital-human`、`/publish` 后，接口状态显示 3 个外部模块为页面配置。
- 密钥测试通过：写入后只返回 `tokenPresent=true`，空密钥保存会保留，勾选清除后变为 `false`。
- 不使用启动脚本环境变量，只靠页面配置一键运行，生成 run `f1df71b7a68c` 和 `92635cc29d43`。
- 批量包为 `batch_e16e164ca0`，发布任务为 `publish_685196e212`，执行为 `exec_44226be06a`。
- 发布执行模式为 `external_publish_adapter`，8/8 个任务返回 `published`。
- 桌面和手机截图 `screenshot-adapter-config-form.png`、`screenshot-adapter-config-mobile.png` 均无横向溢出。

## 外部接口连通性测试补齐

新增 `POST /api/adapters/test`，用于在真实生产前测试三类外部适配器是否可用：

- `voice`：用当前素材档案发送最小声音合成请求，输出测试 WAV 到 `runs/_adapter_tests/`。
- `digitalHuman`：用当前素材档案发送最小数字人视频请求，输出测试 MP4 到 `runs/_adapter_tests/`。
- `publish`：发送轻量发布测试任务，包含 `test: true` 和 `dryRun: true`，用于验证发布适配器可达且返回有效状态。

前端接入：
- 接口配置页每组适配器都有测试按钮。
- 点击测试会先保存当前接口参数，再调用测试接口。
- 页面显示成功/失败、返回文件大小、输出链接或发布适配器返回 URL。

验证结果：
- `voice` 测试返回 63 KB WAV。
- `digitalHuman` 测试返回 12 KB MP4。
- `publish` 测试返回 `published` 和 mock URL。
- 桌面和手机截图 `screenshot-adapter-test-results.png`、`screenshot-adapter-test-results-mobile.png` 均无横向溢出。

## 对标视频结构化拆解补齐

新增 `/api/source-deconstruction`，用于把用户给的两条抖音链接和本地视频文件变成可复核的结构化证据：

- 第一条 `7649061784112362610`：定位为“原型拆解视频”，核心公式是热卖案例钩子、需求与用户心理、5 个能力模块、用户产物、Codex 复刻证明、商业化结论。
- 第二条 `7626335874543914276`：定位为“产品演示视频”，核心公式是体验式开场、复制同行链接、自动生成内容资产、数字人出片、机会叙事、多平台发布演示。
- 每个阶段都保留原始转写时间戳和证据句，避免只靠概括。
- 后端同时返回 9 条需求对应矩阵，覆盖链接输入、视频证据、对标拆解、仿写、配音、数字人、封面标题话题、多平台发布、流程与 skill 打包。
- “视频复盘”页新增结构化拆解区，支持刷新和导出 `source-video-deconstruction.json`。

验证结果：
- 接口返回 2 条视频、11 个阶段、9 条需求对应。
- 第一条视频转写 60 段，第二条视频转写 39 段。
- 桌面和手机渲染均无横向溢出。
- 截图已保存：`screenshot-source-deconstruction.png`、`screenshot-source-deconstruction-mobile.png`。

## 生产台对标简报补齐

新增 `/api/benchmark-brief`，把结构化拆解转成生产台可直接消费的简报：

- 根据输入链接提取 `modal_id`，只使用本地已匹配的对标视频。
- 返回 `insights`，每条洞察包含类型、总结和原始视频证据。
- 返回 `topics`，作为生产台选题数量和导出方案的基础。
- 返回 `script_blueprint`，前端生成口播稿时会把蓝图写入文案。
- 返回 `requirements` 和 `source_summaries`，用于导出完整生产方案。

前端接入：
- `analyzeLinks` 优先调用 `/api/benchmark-brief`。
- 服务不可用时才使用内置兜底拆解。
- 生产方案导出增加 `benchmarkBrief` 和 `sourceDeconstruction`。

验证结果：
- 接口匹配 2 条视频，返回 5 条洞察、6 个选题、5 步脚本蓝图。
- 生产台显示 5 条带视频 ID 和证据句的洞察，文案编辑器使用脚本蓝图。
- 修复洞察卡证据行导致正文被挤窄的问题。
- 桌面和手机截图 `screenshot-benchmark-brief-studio.png`、`screenshot-benchmark-brief-studio-mobile.png` 均无横向溢出。

## 批量内容计划补齐

新增 `/api/batch-content-plan`，把对标简报、批量数量和当前账号档案转成一组可执行的内容排期：

- 输入：`links`、`count`、`profile`。
- 输出：`count`、账号摘要、来源视频 ID、脚本蓝图和 `items`。
- 每个 `item` 包含 `plan_id`、第几天、发布时间槽、选题、标题、钩子、脚本结构、建议口播稿、平台改写方向、素材需求和来源证据。
- 前端“文案仿写”区新增“批量计划”按钮和计划列表。
- 任意计划都可以点“套用”，直接写入当前口播稿、标题和话题。
- 导出生产方案新增 `batchContentPlan` 字段。
- 新增 `/api/run-batch-content-plan`，把计划条目作为脚本源生成真实 run，并继续复用封面、配音、数字人预览、字幕、最终成片、发布包、批量包、发布任务和执行检查。
- 前端“文案仿写”区新增“批量成片”按钮；如果还没有计划，会先生成计划再进入成片生产。

验证结果：
- 直接调用 `/api/batch-content-plan`，传入 2 条抖音链接和 `count=5`，返回 5 条计划。
- 第一条计划包含 4 个平台方向和 5 行建议口播稿。
- 浏览器验证已点击生成 5 条计划，并套用第一条到脚本编辑器。
- 桌面和手机截图 `screenshot-batch-content-plan.png`、`screenshot-batch-content-plan-mobile.png` 均无横向溢出。
- `/api/run-batch-content-plan` 最小闭环已验证：生成 run `a0d56b790e20`、批量包 `batch_2325dbb182`、发布任务 `publish_e5245e465a`、执行检查 `exec_c8326fb76d`，4/4 个发布任务就绪。
- `runs/a0d56b790e20/final_video.mp4` 经 ffprobe 验证包含 H.264 视频流和 AAC 音频流。
- 该 run 的 `pipeline_manifest.json` 记录 `source.type=batch_content_plan`、`sourceMode=batch_content_plan`、`asrMode=plan_script`。
- 页面点击“批量计划”再点“批量成片”已验证：生成 run `b913812342f0`、批量包 `batch_adfdeb4bd9`、发布执行包 `publish_87c32f7d63`，下载链接被激活。
- 桌面和手机截图 `screenshot-batch-plan-video-run.png`、`screenshot-batch-plan-video-run-mobile.png` 均无横向溢出。

## 生产记录补齐

新增 `/api/production-records`，用于从本地 `runs/` 目录恢复历史产物：

- 扫描普通 run 的 `analysis.json`，返回标题、来源、合规、平台数量、摘要和成片/封面/生产包/流程清单链接。
- 扫描 `batch_*` 的 `batch_summary.json`，返回批量总包和摘要链接。
- 扫描 `publish_*` 的 `publish_jobs.json` 与 `publish_results.json`，返回任务数量、平台、执行状态、任务包、执行包和结果链接。
- 过滤 `_adapter_tests` 和工作流临时目录，避免把连通性测试当成生产成片。

前端接入：
- “视频复盘”页新增“生产记录”面板。
- 本地服务连接后自动读取最近 18 条记录。
- 支持手动刷新，记录内链接可直接打开或下载对应产物。

验证结果：
- `/api/production-records?limit=12` 返回 6 条成片、3 个批量包、3 个发布任务。
- 页面最近 18 条记录包含 9 条成片、5 个批量包、4 个发布任务，共 76 个查看/下载链接。
- 成片摘要截短到约 110 字，便于快速扫描。
- 桌面和手机截图 `screenshot-production-records.png`、`screenshot-production-records-mobile.png` 均无横向溢出。

## 发布队列补齐

新增 `/api/publish-queue`，用于把发布任务展开到平台任务级别：

- 扫描 `publish_*` 目录里的 `publish_jobs.json` 和 `publish_results.json`。
- 返回最近发布任务、任务总数、已发布/待审核/就绪/阻塞/已创建数量。
- 每个平台任务包含平台、标题、run、素材路径、发布结果、错误、人工上传提示。
- 新增 `POST /api/publish-queue/retry`，按 `job_id` 重新执行发布检查。
- 发布执行结果新增质量门：`video_specs` 检查画面流、音频流、9:16、分辨率、时长、大小和编码；`cover_specs` 检查封面尺寸和大小。后续已把发布级媒体门槛加严到至少 15 秒、文件不低于 0.2MB，避免短样片误判为可发布成片。
- 新增 `POST /api/publish-queue/manual-result`，用于人工上传后把作品链接或平台作品 ID 回填到 `publish_results.json`。

前端接入：
- “视频复盘”页新增“发布队列”面板。
- 本地服务连接后自动读取最近 8 个发布任务。
- 每个发布任务可以下载任务包/执行包/结果，也可以点击“重试检查”。
- 平台任务可以点击“回填结果”，粘贴已发布链接或平台作品 ID。
- 平台任务行显示发布状态和质量门状态两个标签，摘要显示质量通过、待确认、未通过数量。

验证结果：
- `/api/publish-queue?limit=3` 返回 3 个发布任务、12 个平台任务。
- `/api/publish-queue/retry` 对 `publish_87c32f7d63` 重新执行检查，返回 execution `exec_40bdfab8f1`，4/4 个任务就绪。
- 页面显示最近 8 个发布任务、52 个平台任务，重试后摘要刷新。
- 桌面和手机截图 `screenshot-publish-queue.png`、`screenshot-publish-queue-mobile.png` 均无横向溢出。
- 质量门复测：早期对 `publish_87c32f7d63` 的检查能识别 `video_specs` 和 `cover_specs`，但当时 4 秒样片门槛过松。严格复核时新增 `strict_quality_audit.py`，旧两轮产物 `double_test_20260613_185451_531fce` 被判定为发布级失败，原因是 4.191 秒、0.041MB。修正质量门和 mock 适配器后，新两轮产物 `double_test_20260613_185907_ab8baf` 的 4 条成片约 27 秒、720x1280、H.264/AAC，媒体质量通过；但严格审查 `strict_quality_20260613_190029_8d23fb` 仍判定整体 `release_grade_failed`，因为真实外部服务和真实发布验收未完成。

## 人工发布回填补齐

真实平台账号/API 暂不可用时，工具现在支持“人工上传后回填结果”：

- 接口：`POST /api/publish-queue/manual-result`。
- 输入：`job_id`、`task_id`、`status`、`published_url` 或 `platform_work_id`、可选 `note`。
- 输出：更新后的单任务结果、`publish_results.json`、`publish_execution_report.md`、`publish_execution_package.zip`、发布队列和发布日历。
- 回填时会重新跑素材质量门，保留 `quality_summary` 和 `manual_result`。

前端接入：
- 发布队列每个平台任务新增“回填结果/更新结果”按钮。
- 用户粘贴链接或作品 ID 后，队列和日历立即刷新。
- 已回填任务会显示“人工已回填”，状态变为“已发布”。

验证结果：
- 对 `publish_18e0a95362` 的 `d555d3e6c713_douyin` 回填 `https://example.com/douyin/manual-d555d3e6c713`。
- 队列返回该任务 `status=published`，`manual_result.source=manual_upload`，质量门通过。
- `/api/publish-queue?limit=1` 摘要显示 `published=1`、`blocked=3`。
- 桌面和手机截图 `screenshot-manual-publish-result.png`、`screenshot-manual-publish-result-mobile.png` 均显示人工回填状态和按钮。

## 发布素材编辑补齐

发布前可以在平台任务级别改标题、正文和话题，避免生成后还要手工改文件：

- 接口：`POST /api/publish-queue/update-asset`。
- 输入：`job_id`、`task_id`、`title`、`caption`、`tags`。
- 输出：更新后的素材信息和最新发布队列。
- 写入：对应平台的 `caption.txt`、`metadata.json`、发布任务 `publish_jobs.json`、原 run 的 `publish_manifest.json`。
- 重新生成：单条 run 的 `publish_ready.zip` 和发布任务的 `publish_jobs_package.zip`。

页面补齐：

- 发布队列每个平台任务新增“编辑素材”按钮，点击后打开页面内审核弹层。
- 弹层支持编辑标题、正文、话题，显示标题/正文/话题数量，并在标题或正文为空时阻断保存。
- 编辑后队列行显示新标题、正文预览、话题和素材编辑时间。
- 编辑完成后刷新发布队列、发布排期和生产记录。

验证结果：

- 接口直接验证：`publish_18e0a95362` 的 `d555d3e6c713_kuaishou` 成功更新标题、正文和话题，zip 中的 `caption.txt` 与 `metadata.json` 同步更新。
- 页面验证：创建 `publish_ae9b83262e`，编辑快手任务后，桌面和手机页面均显示新标题、正文预览和话题。
- 截图：`screenshot-publish-asset-edit.png`、`screenshot-publish-asset-edit-mobile.png`。
- 弹层验证：创建 `publish_665fee8c45`，桌面弹层编辑并保存快手任务，手机尺寸打开同一任务确认表单可用。
- 弹层截图：`screenshot-publish-asset-modal.png`、`screenshot-publish-asset-modal-result.png`、`screenshot-publish-asset-modal-mobile.png`。

## 系统自检补齐

新增 `/api/system-doctor` 和设置页“系统自检”面板，用于在运行完整流程前确认本机环境是否可用。

检查项：
- 本地 FastAPI 服务。
- `runs/` 产物目录写入权限。
- 两条对标视频 MP4 和转写文本是否齐全。
- FFmpeg 合成能力。
- FFprobe 媒体检查能力。
- Windows System.Speech 本地配音替代能力。
- 外部声音/数字人/发布适配器配置状态。
- 最近发布队列和生产记录。

前端接入：
- 接口配置页新增“系统自检”面板。
- 服务连接后自动读取，也可以手动刷新。
- 每项显示正常、需注意或需处理，并给出下一步动作。

验证结果：
- `/api/system-doctor` 返回整体 `ok`，9 项正常、0 项注意、0 项处理。
- 当前环境检测到 FFmpeg 8.1.1、FFprobe 8.1.1。
- 2/2 条对标视频和转写可用。
- 3 个外部接口已配置，最近 48 个平台任务、12 条生产记录可读取。
- 桌面和手机截图 `screenshot-system-doctor.png`、`screenshot-system-doctor-mobile.png` 均渲染出 9 项自检结果。

## 发布排期补齐

新增发布排期数据层和 `/api/publish-calendar`：

- `create_publish_jobs` 接受 `schedule_start` 和 `schedule_interval_minutes`。
- 每个平台任务写入 `scheduled_at`、`schedule_status`、`schedule_order`。
- 默认错峰策略：抖音首发，快手 +20 分钟，小红书 +40 分钟，视频号 +60 分钟；多条视频按批次顺延。
- 发布适配器请求新增 `scheduledAt` 和 `scheduleStatus`。
- `/api/publish-calendar` 会扫描最近发布任务，按日期分组返回平台任务、质量门摘要和发布状态。

前端接入：
- 生产台已有“发布时间”输入，现在会传给一键流程、批量计划成片和手动创建发布任务。
- “视频复盘”页新增“发布排期”面板，显示已排期/待排期数量，并按日期列出平台任务。

验证结果：
- 对 run `d555d3e6c713` 调用 `/api/create-publish-jobs`，生成 `publish_18e0a95362`。
- 排期从 `2026-06-12 09:00:00` 开始，四个平台分别为 09:00、09:20、09:40、10:00。
- `/api/execute-publish-job` 对该任务返回质量门 4/4 通过。
- `/api/publish-calendar?limit=1` 返回 4 个已排期任务。
- 桌面和手机截图 `screenshot-publish-calendar.png`、`screenshot-publish-calendar-mobile.png` 均渲染出排期列表。

## 工作流和技能包补齐

新增 `/api/export-workflow-package` 和页面“生成流程包/下载流程包”入口，用于把视频里的 5 个智能体/流程沉淀成可复用配置。

流程包内容：
- `workflow_manifest.json`：总入口、阶段、输入输出、接口契约和完成边界。
- `source_evidence.json`：两条对标视频的 run、来源、标题、脚本数量、转写摘要和产物路径。
- `skills/benchmark_extractor.json`
- `skills/script_rewriter.json`
- `skills/voice_clone.json`
- `skills/digital_human_renderer.json`
- `skills/video_composer.json`
- `skills/platform_publisher.json`
- `media_adapter_contract.json`
- `publish_adapter_contract.json`
- run 内的 `analysis.json`、`pipeline_manifest.json`、`voice_adapter_result.json`、`digital_human_adapter_result.json`
- 发布任务与发布结果 JSON

验证结果：
- 后端直接生成 `workflow_8a945263e2/workflow_package.zip`，包含 6 个技能定义、2 条视频证据、语音/数字人/发布接口契约。
- 页面一键流程后生成 `workflow_6d831b4fb0/workflow_package.zip`，包含 run `ab0e66adb9bf`、`29347e83688c`，并激活“下载流程包”链接。
- 修正打包顺序后生成 `workflow_79a9aa5c95/workflow_package.zip`，确认 zip 内的 `workflow_manifest.json` 包含 `files.workflow_package`。
- 页面截图 `screenshot-workflow-package.png` 已保存。

## 完整工具交付包补齐

新增 `/api/export-delivery-package` 和页面“生成交付包/下载交付包”入口。它和流程包不同，流程包描述“怎么运行这个生产链路”，交付包则用于交付“完整本地工具本身”。

交付包包含：

- `tool/`：`index.html`、`app.js`、`styles.css`、`server.py`、`mock_adapters.py`、启动脚本、自检脚本、README、analysis 和适配器说明。
- `source_assets/`：两条抖音视频、转写文本、关键画面拼图和界面证据；解压后会被 `tool/server.py` 自动识别。
- `contracts/`：媒体适配器和发布适配器契约。
- `profile/`：脱敏后的创作者档案、素材样本和脱敏接口配置。
- `verification_screenshots/`：关键页面能力验证截图。
- `recent_records/`：最近生产记录里的分析、流程、发布任务和结果 JSON。
- `delivery_manifest.json`：交付包能力、系统自检、生产记录、外部能力边界和文件清单。

验证结果：

- 接口生成 `delivery_0e46fe6d53/delivery_package.zip`。
- 包大小约 21.9 MB，共 58 个文件。
- zip 内确认包含 `tool/index.html`、`tool/server.py`、两条源视频、两类适配器契约、发布素材审核截图和 `delivery_manifest.json`。
- zip 条目数为 58，和 `delivery_manifest.json` 的 `included_count=58` 一致。
- 页面点击验证生成 `delivery_0a451519b0/delivery_package.zip`，下载链接被激活，交付清单返回 58 个文件。
- 桌面和手机截图：`screenshot-delivery-package.png`、`screenshot-delivery-package-mobile.png`。
- 补齐外部接入包、接入准备度和需求追踪矩阵后，当前交付包共 70 个文件；验收接口会指向最新生成的交付包。
- 最新交付包内确认包含 `external_integration/external_integration_kit.zip`、`external_integration/integration_manifest.json`、`verification_screenshots/screenshot-integration-kit.png`、`verification_screenshots/screenshot-requirements-traceability.png`、`verification_screenshots/screenshot-completion-audit.png`、最新 `tool/server.py`、`tool/app.js`、`tool/index.html`、`tool/verify-local.ps1`、`tool/README.md` 和 `tool/analysis.md`。
- zip 内 `delivery_manifest.json` 记录 `included_count=70`，且 `package_bytes` 与实际 zip 大小一致。

## 创作者素材档案补齐

新增本地素材档案能力：
- `profile/creator_profile.json` 保存行业、受众、卖点、数字人预设、背景、字幕样式、配乐、语速、情绪和素材引用。
- `profile/media/` 保存上传的声音样本、数字人素材和品牌 logo。
- `GET /api/profile` 读取档案。
- `POST /api/profile` 保存档案。
- `POST /api/profile/assets/{voiceSample|avatarSample|brandLogo}` 上传素材。

流程接入：
- `/api/run-full-pipeline` 接收 `profile`，并保存为当前档案。
- `/api/process-links` 接收 `profile` 并用于当次处理。
- `/api/process-video` 使用已保存档案。
- `build_analysis` 使用档案里的行业、受众和卖点生成文案。
- `synthesize_voice` 向外部语音适配器传 `creatorProfile`、`voiceSample`、`speakingSpeed`、`energy`。
- `make_preview_video` 向外部数字人适配器传 `creatorProfile`、`avatarSample`、`avatar`、`background`、`captionStyle`、`music`。
- `pipeline_manifest.json` 和工作流包证据记录 `creator_profile`。

验证结果：
- 已保存测试档案：行业 `社区餐饮门店`，数字人 `女性店长`，背景 `直播间`，字幕 `品牌色强调`，配乐 `轻快讲解`。
- 上传测试声音样本 `profile_voice.wav` 和数字人素材 `profile_avatar.png`。
- 一键流程生成 run `abe1af91ccca`、`3c5744e57dcd`，批量包 `batch_c6378c2b72`，发布任务 `publish_cf3725edf2`，执行 `exec_19c0087e3b`，8/8 发布任务返回 `published`。
- `mock_adapter_requests.json` 确认 2 个语音请求均包含 `voiceSample`，2 个数字人请求均包含 `avatarSample` 和人物包装字段。
- 最新流程包 `workflow_a8ab280059/workflow_package.zip` 已包含素材档案证据。
- 页面刷新后确认素材档案正常显示中文、下载/生成按钮无横向溢出，截图 `screenshot-profile-assets.png` 已保存。

## 外部接入包补齐

新增 `/api/export-integration-kit` 和“接口配置”页的“生成接入包/下载接入包”入口，用于把真实外部能力接入所需的文件一次性导出。

接入包内容：
- `contracts/media_adapter_contract.json`：声音克隆和数字人服务契约。
- `contracts/publish_adapter_contract.json`：多平台发布适配器契约。
- `sample_requests/*.json`：声音、数字人、发布三类请求样例。
- `sample_responses/*.json`：外部服务应返回的样例。
- `starter_adapter_server.py`：可改造的 FastAPI 适配器骨架。
- `examples/mock_adapters.py`：已验证的本地模拟适配器。
- `.env.example`：三类适配器地址和 token 环境变量。
- `platform_publish_checklist.md`：抖音、快手、小红书、视频号真实发布前检查清单。

验证结果：
- `/api/export-integration-kit` 生成 `integration_74b8956049/external_integration_kit.zip`。
- zip 内 15 个文件，包含适配器骨架、发布契约、媒体契约、样例请求和平台清单。
- `integration_manifest.json` 中 `package_bytes=11950`，与实际 zip 大小一致；`included_count=15`，与 zip 条目数一致。
- `starter_adapter_server.py` 通过 Python 编译检查。
- 页面点击验证桌面生成 `integration_ad98dc3805`，手机生成 `integration_729d908880`，下载链接均激活。
- 桌面和手机截图 `screenshot-integration-kit.png`、`screenshot-integration-kit-mobile.png` 已保存。

## 外部接入准备度补齐

新增 `/api/external-readiness` 和“接口配置”页的“接入准备度”面板，用于把真实服务接入前的缺口直接列出来。

检查项：
- 声音克隆服务地址和密钥状态。
- 声音样本是否已上传。
- 数字人视频服务地址和密钥状态。
- 数字人素材是否已上传。
- 多平台发布服务地址和密钥状态。
- 发布任务素材是否已生成。
- 外部接入包是否已生成。
- 完整交付包是否已经包含外部接入包。

验证结果：
- `/api/external-readiness` 返回 `overall=waiting_for_real_services`。
- 当前 8 项检查中 5 项已具备、3 项待替换、0 项缺失。
- 待替换项为声音克隆服务、数字人视频服务、多平台发布服务，因为当前地址是 `127.0.0.1:8878` 本地 mock。
- 页面桌面和手机都显示 8 项准备度，截图 `screenshot-external-readiness.png`、`screenshot-external-readiness-mobile.png` 已保存。

## 真实上线接入向导补齐

新增 `/api/external-activation-plan` 和“接口配置”页的“上线接入向导”面板，用于把真实外部能力接入拆成可执行步骤，而不是只显示“待替换”。

向导内容：
- 真实声音克隆：`VOICE_ADAPTER_URL`、`VOICE_ADAPTER_TOKEN`、20 秒以上清晰声音样本、契约入口和声音接口测试步骤。
- 真人数字人视频：`DIGITAL_HUMAN_ADAPTER_URL`、`DIGITAL_HUMAN_ADAPTER_TOKEN`、数字人授权素材、契约入口和数字人接口测试步骤。
- 真实多平台发布：`SOCIAL_PUBLISH_ADAPTER_URL`、`SOCIAL_PUBLISH_ADAPTER_TOKEN`、平台账号/API/登录态、发布契约和发布测试步骤。
- 5 个上线阶段：交付外部接入包、替换本地 mock 地址、逐项测试真实接口、跑真实生产链路、回填真实发布结果。

验证结果：
- `/api/external-activation-plan` 返回 `overall=needs_real_credentials`。
- 当前 3 类真实服务中 0 类可实测、3 类待替换、0 类缺材料；这与外部准备度的 3 个本地 mock 地址一致。
- 页面桌面和手机都显示 8 张向导卡，且无横向溢出；截图 `screenshot-external-activation-plan.png`、`screenshot-external-activation-plan-mobile.png` 已保存。
- `/api/completion-audit` 已把“真实上线接入向导”作为本地通过项，同时仍保留“真实声音/数字人/平台发布边界”为外部条件。

## 外部接入验收套件补齐

新增 `/api/external-validation-suite` 和“接口配置”页的“接入验收套件”面板，用于在真实供应商接入后一次性验收声音、数字人和多平台发布三类接口。

套件输出：
- `external_validation_report.json`：机器可读验收结果、来源类型、通过数、真实外部数、本地/模拟数。
- `external_validation_report.md`：给人看的验收说明。
- `external_validation_package.zip`：报告、媒体适配器契约、发布适配器契约和接口输出证据。

验证结果：
- `/api/external-validation-suite` 生成 `validation_152e69860a/external_validation_package.zip`。
- 当前 3/3 项通过，但 `external=0`、`local_mock=3`，所以只能证明契约和本地链路可用，不能证明真实外部服务已接入。
- zip 内 `included_count=6`，`package_bytes=78277`，与实际 zip 条目数和大小一致。
- 页面桌面和手机都显示 3 张验收结果卡，且无横向溢出；截图 `screenshot-external-validation-suite.png`、`screenshot-external-validation-suite-mobile.png` 已保存。
- `/api/completion-audit` 已把“外部接入验收套件”作为本地通过项，同时仍保留“真实声音/数字人/平台发布边界”为外部条件。

## 真实上线闸门补齐

新增 `/api/go-live-gate` 和“接口配置”页的“真实上线闸门”面板，用于把“能否判定完整工具真实上线”变成硬性闸门。

闸门项：
- 视频需求已完整映射。
- 本地工具验收通过。
- 真实外部服务准备完成。
- 真实外部接口验收通过。
- 交付包已生成。

验证结果：
- `/api/go-live-gate` 返回 `overall=blocked_by_external_services`。
- 5 项闸门中 3 项通过、2 项阻断。
- 阻断项为“真实外部服务准备完成”和“真实外部接口验收通过”：当前仍是 `127.0.0.1/localhost` 本地 mock，外部验收套件为 `external=0`、`local_mock=3`。
- 页面桌面和手机都显示 5 张闸门卡，且无横向溢出；截图 `screenshot-go-live-gate.png`、`screenshot-go-live-gate-mobile.png` 已保存。
- 闸门规则明确：只有 `external-readiness=ready` 且 `external-validation-suite` 达到 `external=3/passed=3` 时，才可判定真实上线。

## 上线交接包补齐

新增 `/api/export-go-live-handoff` 和“真实上线闸门”面板里的“生成交接包/下载交接包”，用于把真实上线需要交给实施或供应商团队的材料一次性打包。

交接包内容：
- `production_env.example.ps1`：生产环境变量模板，列出 6 个真实服务配置项。
- `go_live_checklist.md`：真实上线交接清单和当前阻断项。
- `rollback_plan.md`：声音、数字人、发布失败时的回滚和人工兜底说明。
- `acceptance_signoff.md`：上线验收签字页。
- `external_integration/external_integration_kit.zip`：外部接入包。
- `external_validation/external_validation_package.zip`：外部验收包。

验证结果：
- `/api/export-go-live-handoff` 生成 `handoff_38a5a869b8/go_live_handoff_package.zip`。
- zip 内 `included_count=7`，`package_bytes=111684`，与实际 zip 条目数和大小一致。
- 清单记录 6 个必填密钥/地址名，并保留 `go_live_gate=blocked_by_external_services`，不包含任何真实密钥。
- 页面桌面和手机均能生成交接包并激活下载链接，且无横向溢出；截图 `screenshot-go-live-handoff.png`、`screenshot-go-live-handoff-mobile.png` 已保存。

## 需求追踪矩阵补齐

新增 `/api/requirements-traceability` 和“视频复盘”页的“需求追踪”面板，用于把两条视频拆出的每个工具需求映射到实际实现证据。

追踪项：
- 对标链接输入
- 本地视频/转写证据
- 提取对标文案与结构
- 生成全新文案
- 声音克隆/配音
- 数字人生成视频
- 标题话题封面
- 多平台发布
- 流程与 skill 打包

验证结果：
- `/api/requirements-traceability` 返回 `overall=complete_with_external_boundary`。
- 9 个视频需求全部追踪：6 项本地覆盖、3 项接口就绪、0 项外部条件、0 项缺失。
- 3 项接口就绪分别为真实声音克隆、真人数字人和真实多平台发布；本地已完成兜底、适配器契约和测试入口，真实服务仍需外部账号/API/登录态。
- 页面桌面和手机都显示 9 项追踪，且无横向溢出；截图 `screenshot-requirements-traceability.png`、`screenshot-requirements-traceability-mobile.png` 已保存。

## 完整工具验收报告补齐

新增 `/api/completion-audit` 和“视频复盘”页的“验收报告”面板，用于把整套工具是否已经达到视频目标做成可复核清单。

验收项：
- 源链接与本地视频证据
- 视频内容结构化拆解
- 对标解析、批量计划、批量成片等核心工具能力
- 成片、封面、字幕、配音、数字人预览、生产包与批量包
- 多平台发布队列、排期、质量门、素材编辑和人工回填
- 完整工具交付包
- 工作流和技能包
- 系统自检
- 外部服务接入包
- 外部接入验收套件
- 真实外部发布边界

验证结果：
- `/api/completion-audit` 返回 `overall=local_complete_external_required`。
- 汇总为 12 项通过、0 项待确认、1 项外部条件、0 项缺失。
- 最新交付包由 `/api/completion-audit` 指向当前 `delivery_* / delivery_package.zip`，交付清单包含外部接入包、外部接入验收包、上线交接包、接入准备度截图、上线接入向导截图、接入验收截图、上线闸门截图、上线交接包截图和需求追踪截图。
- 唯一外部条件是真实声音克隆、真人数字人服务和真实平台发布账号/API/登录态。
- 桌面和手机截图 `screenshot-completion-audit.png`、`screenshot-completion-audit-mobile.png` 均显示验收项，摘要为“本地完成，外部待接入”。
