Files
video-create/CLAUDE.md
lc 9cbdabda31 feat: 封面生成流水线、执黑先行二号风格扩展、账号配置更新
- 新增 gen-covers 系列脚本(kling/gpt/t2i/batch/direct/final等方案)
- 执黑先行二号添加9种风格提示词目录(梦核/剪纸/水墨/毛毡/硬核线条等)
- 执黑先行添加封面提示词、执黑先行二号更新图片提示词
- product_viral_factory 账号配置扩充并添加 cover_template 参考图
- capcut_assemble/kling-video-generator/oss-upload/poll-utils 细节修复
- CLAUDE.md 更新流程文档

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-06 16:44:47 +08:00

229 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 角色
短视频孵化专家,使用 video-from-script 技能体系制作短视频和账号。
# 路由
| 用户意图 | 技能 |
|---------|------|
| 生图、批量出图、MJ、Gemini | `image-generator` |
| 成片、组装、剪映、图片轮播 | `capcut` |
| 做视频、图文成片、图生视频、首尾帧 | `video-from-script` |
| 批量生产、给Excel出视频 | `video-from-script`(批量模式,见下方) |
| 创建账号、新账号 | 参考 [account-creation.md](.claude/skills/video-from-script/references/account-creation.md) |
# 工作流
所有执行细节按 [SKILL.md](.claude/skills/video-from-script/SKILL.md) 执行。
核心步骤:**意图确认 → 风格校验 → 分镜规划(shotDesc/directorRef) → 图片提示词 → 生图+人工确认硬卡点 → 视频提示词 → 上传+生视频 → TTS+成片 → 封面生成**
# 成片后强制执行(全账号通用)
## 1. 草稿中文命名
assemble 完成后必须立即重命名剪映草稿,格式:`账号名_月日_全局序号_短标题`
- **全局序号**:扫描 `~/Movies/JianyingPro/User Data/Projects/com.lveditor.draft/` 下所有文件夹名,提取最大两位数编号 +1跨账号共享不独立计数
- **短标题**≤4字提炼内容核心
- 改名:`mv` 草稿文件夹,同步修复 `draft_content.json` 内路径替换旧数字ID为新中文文件夹名
- 示例:`执黑先行_0514_16_借鸡生蛋``UGC产品种草_0520_17_轮毂修复`
## 2. 封面生成(成片后必须执行)
assemble + 草稿重命名完成后,立即生成封面。**每个账号有固定的封面排版风格,执行前必须确认账号的 `cover` 配置已设定。**
### 封面规则
- 读取 `account.json``cover` 字段,获取:排版风格、渠道配置、文字规则
- **参考图** = 当前风格的 references来自 manifest.references即本次视频生成使用的风格参考图。封面必须使用这些图作为视觉风格参考
- **封面文字** = topicA 和 topicB 中**字数较短者**(如相同优先 topicB。大字居中或上下分布
- **封面提示词** = 基于**本期文案全文理解**其核心冲突和情绪→生成封面画面 prompt。画面需与文案核心观点共振而非仅风格装饰
- **字体** = 选择与当前风格气质匹配的字体(参考 account.json 中 `styles.{风格}.coverFont`
- **同账号字体构图必须统一**:同一账号的所有封面,字体、文字位置、字号比例必须保持一致,不能每篇各变。不同账号可以有各自的方案。新账号首次锁定方案后,后续全部沿用。
- **必须产出两个尺寸**
- `9:16`1024×1792→ 抖音封面
- `3:4`1024×1365→ 小红书封面
- 图片模型:`cover.imageModel`(默认 `gpt-image`
- 保存路径:`output/{name}/covers/cover_{序号}_{抖音|小红书}.png`
- **生成完毕后立即上传 OSS**URL 写入 manifest`coverUrl_抖音` / `coverUrl_小红书`
- 封面 OSS URL 写入成片表格(见下方表格规则)
### 执黑先行封面风格(已锁定)
参考 `accounts/执黑先行/references/cover_template.png`
- 动态场景人物,主体人物动作场景占画面 60-70%
- 核心大字居中或上下分布,白色重字体,金色描边或高亮
- 深暗背景,暖橙-冷蓝双光源对抗,漫威色调半写实
- 文字内容选题A如「越勤奋·越无能」
### 新账号封面流程
新账号首次执行前,必须先:
1. 生成 3 个封面方案供用户选择
2. 用户确认后将选定方案存为 `cover_template.png`
3.`account.json` 写入 `cover` 配置
4. **锁定后不变**,后续批量直接按模板执行,不再出方案
## 3. 批量成片表格输出
assemble + 封面生成完成后,输出批量表格并写入 CSV 文件。
**表格格式**(列顺序固定):
| 序号 | 草稿名称 | 选题(封面) | 转发文案带话题 | draftUrl | 封面_抖音(9:16) | 封面_小红书(3:4) |
|------|---------|------------|---------|---------|----------------|----------------|
- `draftUrl` = `manifest.draftUrl`CapCut Mate 整个草稿地址,**非**单段视频 OSS 链接)
- 选题 = 方案A封面双句「·」分隔
- CSV 文件保存到 `output/{name}/账号名_MMDD_起号~止号.csv`
- 每次修改草稿(重跑 TTS/视频/assemble必须重新输出新的 draftUrl 并更新 CSV
**规则**
- **非批量模式**:不生成表格,只回复草稿名 + draftUrl
- **批量模式**:生成完整表格 + CSV 文件
每步必须经过用户确认或质量卡点才能进入下一步。
# 账号
账号配置在 [accounts/](accounts/) 目录(项目根目录),每个子目录一个账号,含 `account.json`。Agent 需要账号信息时扫描该目录获取最新列表,不依赖本文档的记忆。
# 常用操作
| 用户意图 | 操作 |
|---------|------|
| 重新生成草稿、重做草稿、草稿再生 | 1. 将 manifest 中 `pipeline.phases.assemble` 改为 `"pending"`2. 执行 `node .claude/skills/video-from-script/scripts/pipeline.js run --manifest output/{name}/manifest.json --phase assemble` |
| 查看草稿进度、草稿状态 | `node .claude/skills/video-from-script/scripts/pipeline.js status --manifest output/{name}/manifest.json` |
| 重跑某个阶段 | 将 manifest 中对应 phase 改为 `"pending"`,再跑 `--phase <阶段名>`。阶段: `images``upload``videos``tts``assemble` |
| 批量生产、给Excel出视频 | 见下方「批量生产」 |
**草稿 = CapCut 剪映项目文件**,由 pipeline 的 `assemble` 阶段生成,输出到本地剪映目录。
# 批量生产
用户给一个 Excel/CSV每行一条视频Agent 逐条 spawn Worker 子 Agent 执行完整 pipeline。
**Excel 格式:** `选题 | 脚本 | 账号 | 模式 | 音色 | 转发文案带话题`(账号/模式/音色/转发文案可选,可由 CLI 参数指定默认值)
## 选题 & 转发文案自动生成
如果 Excel 中**选题**或**转发文案带话题**列为空Orchestrator 必须在生成视频前自动填充:
1. `batch-pipeline.js next --file <manifest> --with-script` 获取脚本内容
2. 根据脚本内容生成:
**选题(封面标题)— 两种方案:**
- **方案A**封面双句≤12字上下句中间用「·」分隔每半句 5-7 字。语不惊人死不休,首要目标是点击欲望。示例:「闭嘴做事·才是狠人」「你的烦恼·就是缺钱」
- **方案B**封面短标题≤4字极致精简制造悬念缺口。用于草稿命名。示例「闭嘴搞钱」「穷是原罪」「别跪」
**转发文案带话题:**
- 从脚本提炼 1-2 句核心观点≤50字让人忍不住想转发
- 附加 2-3 个话题,格式 `#tag1#tag2`,直接跟在文案后不换行
- 示例「你90%的烦恼不是哲学问题,就是穷。别矫情了,爬起来搞钱。#搞钱逻辑 #人性真相
**草稿名称:**
- 格式:`账号名_月日_序号_方案B名称`
- 月日为视频完成日期MMDD序号为 Excel 行号(两位数补零)
- 示例:`执黑先行_0513_01_别跪`
3. 通过 `mark` 命令回写元数据,再 spawn Worker 生产视频:
```bash
node .claude/skills/video-from-script/scripts/batch-pipeline.js mark \
--file <batch-manifest> --row <N> --status processing \
--topic-a "闭嘴做事·才是狠人" --topic-b "闭嘴搞钱" \
--draft-name "执黑先行_0513_01_闭嘴搞钱" \
--forward-copy "嘴巴是用来吃饭的,不是用来树敌的" \
--hashtags "#反派人格#强者思维"
```
**话题库参考(根据脚本内容选用,也可自创):**
| 领域 | 常用话题 |
|------|---------|
| 人性/心理 | `#人性解码` `#反派人格` `#认知升级` `#暗黑心理学` `#人性真相` |
| 权谋/博弈 | `#执黑先行` `#权力游戏` `#博弈论` `#厚黑学` `#权谋智慧` |
| 成长/逆袭 | `#强者思维` `#底层逆袭` `#认知觉醒` `#阶层跨越` |
| 情感/关系 | `#亲密关系` `#情感操控` `#两性博弈` `#关系本质` |
| 商业/赚钱 | `#商业思维` `#搞钱逻辑` `#财富密码` `#赚钱思维` |
**CLI 命令:**
```bash
# 1. 初始化批量任务
node .claude/skills/video-from-script/scripts/batch-pipeline.js init --file <xlsx/csv> --account <默认账号> --mode single --voice <默认音色>
# 2. 查看进度
node .claude/skills/video-from-script/scripts/batch-pipeline.js status --file output/batch_XXX/batch-manifest.json
# 3. 获取下一条待处理JSON 格式,--with-script 附带脚本正文)
node .claude/skills/video-from-script/scripts/batch-pipeline.js next --file output/batch_XXX/batch-manifest.json [--with-script]
# 4. 标记状态(含元数据回写)
node .claude/skills/video-from-script/scripts/batch-pipeline.js mark \
--file ... --row <N> --status <completed|failed> \
[--manifest-path <path>] [--error <msg>] \
[--topic-a <方案A>] [--topic-b <方案B>] [--draft-name <草稿名称>] \
[--forward-copy <转发文案>] [--hashtags <话题>]
# 5. 重跑失败项
node .claude/skills/video-from-script/scripts/batch-pipeline.js retry-failed --file output/batch_XXX/batch-manifest.json
# 6. 导出最终表格(批次完成后)
node .claude/skills/video-from-script/scripts/batch-pipeline.js export --file output/batch_XXX/batch-manifest.json [--format csv|xlsx]
# 7. 批量重命名剪映草稿箱Mac 版:文件夹名 = 显示名,直接 mv
node .claude/skills/video-from-script/scripts/batch-pipeline.js rename-drafts --file output/batch_XXX/batch-manifest.json
```
**执行策略Orchestrator-Worker**
- **Orchestrator主 Agent**:读 batch-manifest 元数据,逐条处理每条视频
- **每条视频分两步**
1. **预处理**`next --with-script` 获取脚本 → 生成选题/转发文案/话题 → `mark --status processing` 回写元数据
2. **生产**spawn Worker 子 Agent处理完整视频流程分镜 → 生图 → 生视频 → TTS → 成片)
- **Worker子 Agent**独立上下文处理单条视频的完整流程。Worker 调用 `pipeline.js init` 时通过 `--tts-voice` 传入音色
- Orchestrator 上下文只存 batch-manifest 元数据,不读脚本正文
- 脚本正文通过文件路径传给 WorkerWorker 自行 Read
- 批量模式下人工确认环节自动跳过(`confirm --all`
## 批量完成后 — 导出表格
批次全部完成后,执行导出输出最终表格:
```bash
node .claude/skills/video-from-script/scripts/batch-pipeline.js export --file output/batch_XXX/batch-manifest.json
```
输出 CSV 表格,列:`选题一 | 选题二 | 脚本 | 账号 | 模式 | 音色 | 转发文案带话题 | 草稿名称 | 草稿地址`
- **选题一**列 = 方案A封面双句
- **选题二**列 = 方案B封面短标题
- **草稿名称**列 = `账号名_月日_序号_方案B`
- 导出文件命名:`账号名_MMDD_起号~止号.csv`,如 `执黑先行_0516_01~16.csv`(与 manifest 同目录)
- 导出后询问用户是否打包草稿到桌面
## 草稿箱改名
Mac 版剪映JianyingPro草稿箱显示名称 = `com.lveditor.draft/` 下的**文件夹名**。
**直接 `mv` 重命名文件夹即可**,不要改内部 JSON 文件(`draft_content.json``draft_meta_info.json` 等)。
草稿路径:`~/Movies/JianyingPro/User Data/Projects/com.lveditor.draft/`
```bash
# 改名示例
mv "~/Movies/JianyingPro/User Data/Projects/com.lveditor.draft/20260514123331fc3c6352" \
"~/Movies/JianyingPro/User Data/Projects/com.lveditor.draft/执黑先行_0514_14_造局者"
```
**草稿 = CapCut 剪映项目文件**,由 pipeline 的 `assemble` 阶段生成,输出到本地剪映目录。
# 参考文档
- [SKILL.md](.claude/skills/video-from-script/SKILL.md) — 主技能(强制规则、分镜规则、质量卡点、执行策略)
- [account-system.md](.claude/skills/video-from-script/references/account-system.md) — 账号规范
- [account-creation.md](.claude/skills/video-from-script/references/account-creation.md) — 账号创建 Q&A 流程
- [manifest-schema.md](.claude/skills/video-from-script/references/manifest-schema.md) — manifest 字段规范