script-pipeline
SKILL.md
Script Pipeline Skill
剧本 → 角色图 → 分镜图 → 视频 的完整生成流水线。
使用前配置
首次使用前,需要在以下文件中填写真实的密钥:
| 文件 | 变量 | 说明 |
|---|---|---|
step0_story_brief.py |
API_KEY |
LLM / 图像生成 API Key |
step1_breakdown.py |
API_KEY |
同上 |
step2_gen_character_images.py |
API_KEY |
同上 |
step3_gen_storyboard_images.py |
API_KEY |
同上 |
step4_gen_videos.py |
API_KEY |
同上 |
notify.py |
APP_ID |
飞书自建应用 App ID |
notify.py |
APP_SECRET |
飞书自建应用 App Secret |
notify.py |
RECEIVE_ID |
接收通知的用户飞书 Open ID |
所有 API 调用均指向同一个 Base URL,可在各文件顶部的 LLM_URL / API_URL / BASE_URL 常量中确认或修改。
文件结构
skills/script-pipeline/
├── SKILL.md
├── run_pipeline.py # 流水线入口
├── step0_story_brief.py # 故事梗概 + 分镜规划预览
├── step1_breakdown.py # 拆解角色,生成标准素体提示词
├── step2_gen_character_images.py # 生成角色图(Seedream 4.5),每张完成后立即发飞书
├── step3_gen_storyboard_images.py # 分镜规划(--plan-only)+ 分镜图生成(--images-only)
├── step4_gen_videos.py # 分镜转视频(Veo 3.1),每个完成后立即发飞书
└── notify.py # 飞书通知工具
输出目录
~/.openclaw/workspace/video_projects/<项目名>/
├── script.txt # 剧本原文
├── story_brief.json # Step 0 结构化文档数据
├── story_brief.md # Step 0 文档预览(标题正文 + 出场人物表 + 脚本正文表)
├── characters.json # 角色列表(含提示词、图片路径)
├── storyboard_table.md # 分镜 Markdown 表格(调试用)
├── storyboards.json # 分镜列表(含 image_prompt、video_prompt、图片路径、视频路径)
├── characters/ # 角色图(c_1.jpg, c_2.jpg ...)
├── storyboards/ # 分镜图(01.jpg, 02.jpg ...)
└── videos/ # 视频片段(01.mp4, 02.mp4 ...)
交互式工作流(标准流程)
用户发来剧本后,AI 助手按以下步骤编排,每步完成后发飞书通知等用户确认再继续:
Step 0 → 发故事梗概 + 分镜规划给用户确认
↓ 用户回复「继续」
Step 1 → 发角色人设提示词给用户确认
↓ 用户回复「继续」
Step 2 → 生成角色图,每张完成后立即发飞书
↓ 全部完成后发汇总,等用户确认
Step 3p → 发分镜内容规划给用户确认
↓ 用户回复「继续」
Step 3i → 生成分镜图,每张完成后立即发飞书
↓ 全部完成后发汇总,等用户确认
Step 4 → 生成视频,每个完成后立即发飞书
Step 0 文档结构
Step 0 不再只输出简版故事梗概,而是生成一个可直接确认的精简文档,包含:
- 标题 + 正文
- 出场人物表
- 脚本正文表
story_brief.json 结构如下:
{
"title": "故事标题",
"body": "正文导语",
"characters": [
{
"name": "角色名",
"brief": "角色简介"
}
],
"script_rows": [
{
"scene": "Sc.1 场次名",
"sequence": 1,
"shot_description": "【中景】镜头画面描述",
"extract_copy": "提取文案"
}
]
}
其中:
story_brief.md是便于阅读和转发的文档版预览script_rows字段贴近飞书确认文档,聚焦场次 / 序号 / 镜头画面描述 / 提取文案
分镜数据结构
storyboards.json 中每个分镜至少包含以下字段:
{
"id": 1,
"description": "画面内容简述",
"image_prompt": "静态分镜图提示词,供 Step 3i 生图",
"video_prompt": "图生视频提示词,供 Step 4 生视频",
"characters": ["出场角色"],
"camera_motion": "镜头运动摘要",
"subject_motion": "主体动作摘要",
"scene_motion": "环境动态摘要",
"motion_notes": "节奏与首尾闭环说明",
"image_path": null,
"video_path": null
}
说明:
image_prompt只负责生成首帧分镜图,强调构图、主体、环境和光影。video_prompt只负责图生视频,强调在参考图不变前提下的动作、运镜、节奏和收尾状态。- Step 4 严格读取
video_prompt,不再复用静态图提示词。 - 旧项目如果是旧版
storyboards.json,需要重新执行 Step 3p / Step 3i 后再执行 Step 4。
分步执行命令
SKILL=~/.openclaw/workspace/skills/script-pipeline
PROJECT=~/.openclaw/workspace/video_projects/<项目名>
# Step 0: 生成文档式故事规划
python3 $SKILL/run_pipeline.py <script.txt> <项目名> --step 0 [--count 8]
# Step 1: 拆解角色
python3 $SKILL/run_pipeline.py <script.txt> <项目名> --step 1
# Step 2: 生成角色图
python3 $SKILL/run_pipeline.py <script.txt> <项目名> --step 2
# Step 3p: 生成分镜规划(等确认)
python3 $SKILL/run_pipeline.py <script.txt> <项目名> --step 3p [--count 8]
# Step 3i: 生成分镜图(读取 image_prompt)
python3 $SKILL/run_pipeline.py <script.txt> <项目名> --step 3i
# Step 4: 图生视频(读取 video_prompt + image_path)
python3 $SKILL/run_pipeline.py <script.txt> <项目名> --step 4 [--seconds 6]
通知命令
NOTIFY=~/.openclaw/workspace/skills/script-pipeline/notify.py
python3 $NOTIFY text "消息内容"
python3 $NOTIFY image /path/to/img.jpg "说明"
python3 $NOTIFY images /path/to/dir/ "说明" # 目录下所有图片
python3 $NOTIFY video /path/to/video.mp4 "说明"
全自动模式
用户明确要求全自动时使用(跳过所有确认):
python3 ~/.openclaw/workspace/skills/script-pipeline/run_pipeline.py \
<script.txt> <项目名> --auto [--count 8] [--seconds 6]
AI 助手编排规则
- 用户发来剧本文本时,先在
video_projects/<项目名>/创建项目目录,将剧本保存为script.txt - 项目名取剧本标题或用户指定名称,无法判断时用时间戳(如
project_20260311) - Step 0 先生成文档式故事规划,重点确认标题、正文、人物表和脚本正文表是否合理
- 每步执行完毕后,等待用户明确回复「继续」 再执行下一步
- 用户要求修改时(如"重新生成角色2"),直接删除对应文件后重跑该步骤(断点续跑会自动跳过已存在文件)
- Step 3p 负责同时产出静态图提示词和图生视频提示词;Step 4 只读取图生视频提示词
- 用户确认分镜内容时,重点关注动作是否合理、运镜是否过猛、6 秒内是否能完成自然闭环
- 视频生成耗时较长(每个约 2-5 分钟),告知用户耐心等待
模型
| 步骤 | 模型 |
|---|---|
| 角色拆解 / 分镜描述 | turing/gemini-3.1-pro-latest |
| 角色图 / 分镜图 | doubao-seedream-4-5-251128(最小 3686400px) |
| 分镜视频 | turing/veo-3.1-generate(multipart/form-data) |
API: https://live-turing.cn.llm.tcljd.com/api/v1
断点续跑
每步都检查输出文件是否已存在,已存在则跳过,支持中断后继续。