| name | series-video |
| description | 将故事创意转化为AI视频分镜提示词和资产图像提示词。支持持续创作,自动检测新故事/续写模式。输入故事点子、原文或概述,输出完整的分镜和资产提示词。使用 /series-video 启动,/series-video config 编辑配置。 |
| user-invocable | true |
| allowed-tools | Read, Write, Edit, Glob, Bash, Agent, Skill |
| argument-hint | [总集数] [故事材料|文件路径] |
| model | opus |
失败处理(核心规则)
sub-agent task 失败后,永远不要在主 session 自己接管本应由 sub-agent 做的工作。
正确做法:
- 分析失败原因(task return 值 / 错误信息)
- 如可修复:用修正后的参数重新派发同一 sub-agent
- 如不可修复:将失败原因和已尝试方案返回给用户,停止流程
错误做法:
- ❌ "sub-agent 失败了,我自己来写这个 novel.md"
- ❌ "task 报错了,我在主 session 直接调用 Write"
- ❌ "我 fallback 一下,自己生成 keyframes.json"
原因:主 session 缺少 sub-agent 的隔离上下文(专属 system prompt、skill 加载、permission 配置),自己接管会导致质量下降、跨步骤上下文污染、permission 错配等问题。即使 sub-agent 失败,工作所有权也必须留在 sub-agent 层。
总流程
调用 /series-video 后,按以下顺序执行:
- 配置加载 — 读取或创建 config.md(首次运行进入交互式引导)
- 模式检测 — 检查 story/ 是否存在,确定新故事模式或续写模式
- 输入解析 — 解析用户输入,确定故事来源(内联文本/文件/交互式/Director 生成)
- 执行工作流 — 根据模式进入对应工作流:
- 新故事 → 使用 Skill tool 调用
new-story skill,传递参数:total_episodes(可选), story_input(可选), work_mode
- 续写 → 使用 Skill tool 调用
continue-story skill,传递参数:total_episodes(可选), story_input(可选), work_mode
版权规避:所有生成内容(大纲、小说、分镜、资产提示词等)不得出现现实中的明星或公众人物名字、真实地名、商标名或其他受版权/商标保护的名称,必要时使用虚构替代名称。
硬性约束:每次调用 /series-video 仅生成一集内容。 无论任何模式(default/full-auto),对于大纲、原文、分镜、资产的生成都仅生成本集内容。生成完毕后 skill 结束,不得自动循环生成多集或全集内容。带总集数参数时仅额外生成 arc 文件,不改变单集生成的约束。
阶段 1: 配置加载
-
使用 Read 工具检查当前工作目录下是否存在 config.md
-
若已存在 → 读取并解析配置值
-
若不存在 → 进入交互式配置引导(仅首次运行),参考 config-template.md 模板进行交互式配置引导,逐个询问每项配置,每次只问一个,提供多选项供用户选择:
第 1 项:图像模型
- A) none(不生成图像)
- B) dreamina(即梦)
若用户选择 dreamina,继续询问以下 3 项配置:
第 1a 项:即梦 — 图像模型版本
- A) 4.0(免费,推荐)
- B) 5.0(每张约 3 积分,画质更高)
- C) 其他版本(3.0/3.1/4.1/4.5/4.6)
第 1b 项:即梦 — 图片比例
- A) 1:1(推荐)
- B) 3:4
- C) 16:9
- D) 其他
第 1c 项:即梦 — 图片分辨率
- A) 2k(推荐)
- B) 4k(仅 4.0+ 支持)
第 1d 项:视频模型
- A) none(不生成视频)
- B) dreamina(即梦)
若用户选择 dreamina,继续询问以下配置:
第 1e 项:即梦 — 视频模型版本
- A) seedance2.0fast(推荐,速度更快)
- B) seedance2.0(标准)
- C) seedance2.0fast_vip(VIP 加速)
- D) seedance2.0_vip(VIP 标准)
第 1f 项:即梦 — 视频比例
- A) 16:9(推荐,横屏)
- B) 9:16(竖屏,短视频常用)
- C) 1:1
- D) 其他
第 1g 项:即梦 — 视频分辨率
第 2 项:视频风格
- A) 2D动漫
- B) 3D动漫
- C) 3D写实
- D) 2D手绘
- E) 自定义输入
第 3 项:语言
- A) auto(跟随输入语言)
- B) zh(中文)
- C) en(英文)
- D) 自定义输入
第 4 项:每集分镜数(建议 10-20)
- A) 10
- B) 15(推荐)
- C) 20
- D) 自定义输入
第 5 项:每集时长目标
- A) 1-2分钟(推荐)
- B) 2-3分钟
- C) 自定义输入
第 6 项:单镜头时长范围
- A) 8-12秒
- B) 10-15秒(推荐)
- C) 12-18秒
- D) 自定义输入
第 7 项:单镜头资产上限
- A) 3
- B) 5(推荐)
- C) 7
- D) 自定义输入
第 8 项:上下文集数(续写时 Director 读取前 N 集 novel.md 作为剧情上下文)
- A) 1(推荐)
- B) 2
- C) 3
- D) 5
- E) 自定义输入
第 9 项:默认模式
- A) default(用户确认剧情方向,其余自动)
- B) full-auto(全自动,无需交互)
第 10 项:每集小说字数
- A) 3000-4000
- B) 4000-5000(推荐)
- C) 5000-6000
- D) 自定义输入
所有配置收集完毕后,根据用户选择生成 config.md 写入项目根目录。告知用户可通过 /series-video config 随时修改。若图像模型为 dreamina,在 config.md 中额外写入 ## 图像生成配置 区域(包含即梦模型版本、图片比例、图片分辨率)。若图像模型为 none,不写此区域。若视频模型为 dreamina,在 config.md 中额外写入 ## 视频生成配置 区域(包含即梦视频模型版本、视频比例、视频分辨率)。若视频模型为 none,不写此区域。
-
解析以下配置值:
- 图像模型:none 或 dreamina
- 图像生成配置(仅图像模型非 none 时):即梦模型版本、图片比例、图片分辨率
- 视频模型:none 或 dreamina
- 视频生成配置(仅视频模型非 none 时):即梦视频模型版本、视频比例、视频分辨率
- 视频风格:视频的视觉风格(2D动漫/3D动漫/3D写实/2D手绘等)
- 语言:提示词输出语言
- 每集分镜数:每集包含的分镜数量
- 每集时长目标:每集目标时长
- 单镜头时长范围:每个分镜镜头的时长约束
- 单镜头资产上限:每个分镜镜头中引用资产的最大数量
- 上下文集数:续写时回顾的历史集数
- 默认模式:默认工作模式
- 每集小说字数:每集小说的字数范围
阶段 2: 模式检测
使用 Bash 工具执行 ls story/ 检查当前工作目录下是否存在 story/ 目录:
- 目录不存在或为空 → 进入新故事模式
- 目录存在且有内容 → 进入续写模式,使用 Glob 匹配
story/episodes/ep*/outline.md 找到最新集数编号,从下一集继续
阶段 3: 输入解析
解析 $ARGUMENTS,提取两个可选参数:总集数和故事材料。
特殊命令: 若 $ARGUMENTS 为 config,使用 Read 打开 config.md 展示给用户,询问是否编辑。流程结束,不进入阶段 4。
参数提取规则:
- 若
$ARGUMENTS[0](第一个空格分割的词)为纯数字 → 解析为总集数,$ARGUMENTS[1] 及之后的内容作为故事材料候选
- 否则 → 无总集数,
$ARGUMENTS 整体作为故事材料候选
故事材料识别:
- 故事材料候选为空 → 无故事材料
- 故事材料候选以
.txt 或 .md 结尾 → 使用 Read 读取该文件内容作为故事材料
- 其他 → 作为内联文本故事材料
解析结果传递给阶段 4:
total_episodes(可选)— 总集数
story_input(可选)— 故事材料内容
阶段 4: 执行工作流
根据模式检测结果,使用 Skill tool 调用对应工作流 skill:
- 新故事模式 → 使用 Skill tool 调用
new-story skill,传递参数:{work_mode} {total_episodes} "{story_input}"
- 续写模式 → 使用 Skill tool 调用
continue-story skill,传递参数:{work_mode} {total_episodes} "{story_input}"
参数说明:
$ARGUMENTS[0] = work_mode(default / full-auto)
$ARGUMENTS[1] = total_episodes(总集数,无则传空字符串)
$ARGUMENTS[2] = story_input(故事材料,引号包裹,无则传空字符串)