计划执行与检查节点
executing-plans
按既定实施计划完成工作,保持过程检查和反馈。
novel-to-video【效率与协作】文学作品到影视视频的自然语言工作流;生成链路统一使用 changdu CLI。支持漫剧和真人剧两种模式。
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
将小说/故事/剧本转换为完整视频,严格按技能链路执行,不跳步。
novel-reader:读取与提取角色/场景/道具text-storyboard:生成文字分镜generate-film-video-prompt:补强视频提示词storyboard-to-seedance-prompt:分镜转视频提示词(含防穿帮约束规则)character-design:角色设计提示词jimeng-skill:统一生成入口(内部统一走 changdu CLI)asset-management:素材资产管理(真人剧必需)video-review:连贯性审查与修复(步骤 7.5)开始前先与用户确认制作模式:
| 模式 | 画风 | 视频生成方式 | 适用场景 |
|---|---|---|---|
| 漫剧模式 | 赛璐璐/动漫/非写实 | --image 传入参考图 | 动漫风格短剧 |
| 真人剧模式 | 写实/3D写实 | --asset 传入入库素材 | 真人风格短剧 |
16:9)和制作模式。asset-management 技能将素材入库。changdu 执行。novel-reader 提取角色、场景、道具。text-storyboard 输出 单集制作/EPXXX/文字分镜.txt。changdu text2image ... --output 角色/角色名_face.jpgchangdu text2image ... --output 角色/角色名_fullbody.jpg为每个有台词的角色生成一段 5 秒的音色参考视频,用于后续所有 clip 的音色锚定:
changdu multimodal2video \
--image 角色/<角色名>_face.jpg --image 角色/<角色名>_fullbody.jpg \
--prompt "将图片1中的[2-3个核心特征]定义为[角色名]。图片2为[角色名]全身参考。[风格声明]。[角色名]缓缓转身,从正面到侧面再到背面,展示全身形象。她开口说道{[代表性台词]},[音色特征描述]。保持无字幕,避免画面生成字幕,不要水印,不要logo。" \
--ratio 16:9 --duration 5 --wait \
--output 角色/<角色名>_voice_ref.mp4
要点:
--duration 5 足够包含转身 + 说话assets.json 的 voice_ref_url 字段changdu upload-tos --file 角色/<角色名>_voice_ref.mp4
如果 novel-reader 提取到角色在剧中有妆造变化(换装、变妆、受伤等),需要为每种不同的妆造分别生成完整的参考资产:
# 为角色的某个特定妆造生成面部特写
changdu text2image \
--prompt "[角色基础外貌描述],[该妆造的具体变化描述],面部特写,纯白背景" \
--resolution_type 2k \
--output 角色/<角色名>_<妆造名>_face.jpg
# 生成该妆造的全身像
changdu text2image \
--prompt "[角色基础外貌描述],[该妆造的具体变化描述],全身站姿,纯白背景" \
--resolution_type 2k \
--output 角色/<角色名>_<妆造名>_fullbody.jpg
# 生成该妆造的音色参考视频
changdu multimodal2video \
--image 角色/<角色名>_<妆造名>_face.jpg --image 角色/<角色名>_<妆造名>_fullbody.jpg \
--prompt "将图片1中的[核心特征]定义为[角色名]。图片2为全身参考。[风格声明]。[角色名]缓缓转身展示全身形象,开口说道{[代表性台词]}。保持无字幕,不要水印,不要logo。" \
--ratio 16:9 --duration 5 --wait \
--output 角色/<角色名>_<妆造名>_voice_ref.mp4
要点:
assets.json 中用 looks 数组管理,标注每种妆造适用的集数/场号--image在 assets.json 中记录:
{
"characters": {
"<角色名>": {
"default_look": {
"face_file": "角色/<角色名>_face.jpg",
"fullbody_file": "角色/<角色名>_fullbody.jpg",
"voice_ref_video": "角色/<角色名>_voice_ref.mp4",
"voice_ref_url": "<TOS_URL>"
},
"looks": [
{
"name": "<妆造名称>",
"episodes": ["EP005-EP008"],
"description": "<外观变化描述>",
"face_file": "角色/<角色名>_<妆造名>_face.jpg",
"fullbody_file": "角色/<角色名>_<妆造名>_fullbody.jpg",
"voice_ref_video": "角色/<角色名>_<妆造名>_voice_ref.mp4",
"voice_ref_url": "<TOS_URL>"
}
]
}
}
}
*.prompt.txtchangdu text2image ... --output 场景/xxx.jpg为每个主要场景生成一段 5 秒的360度缓慢旋转视频,展示完整空间布局。此视频在后续 clip 生成时作为 --ref-video 传入,帮助模型理解空间关系和人物站位:
changdu multimodal2video \
--image 场景/<场景名>.jpg \
--prompt "[风格声明]。镜头在[场景名]内做360度缓慢环绕旋转,依次展示[关键物品A]位置、[关键物品B]、[关键物品C]、[入口/出口位置]。镜头运动平稳流畅,展示完整的空间布局和物品摆放位置。保持无字幕,不要水印,不要logo。" \
--ratio 16:9 --duration 5 --wait \
--output 场景/<场景名>_360.mp4
要点:
--duration 5 足够展示一个完整的环绕旋转--ref-video 传入changdu upload-tos --file 场景/<场景名>_360.mp4
在 assets.json 中记录场景视频:
{
"scenes": {
"<场景名>": {
"image": "场景/<场景名>.jpg",
"video_360": "场景/<场景名>_360.mp4",
"video_360_url": "<TOS_URL>"
}
}
}
changdu text2image ... --output 道具/xxx.jpgchangdu text2image \
--prompt "纯白背景,产品展示图。[道具外观描述:形状、颜色、材质、尺寸、独特标记]。正面和侧面两个角度展示,无文字无水印。" \
--resolution_type 2k \
--output 道具/<道具名>.jpg
要点:
道具名@图片N 绑定assets.json 的 props 字段{
"props": {
"<道具名>": {
"image": "道具/<道具名>.jpg",
"description": "[道具外观描述]"
}
}
}
确认以下资产都已生成,否则禁止进入视频阶段:
将角色和场景图片入库到 Assets:
# 创建素材组
changdu asset-group-create --name "项目名-角色组"
# 入库每个角色(面部特写和妆造分开上传)
changdu asset-create --file ./角色/女主_面部.jpg --group-id <组ID> --type Image --name "女主-面部"
changdu asset-create --file ./角色/女主_三视图.jpg --group-id <组ID> --type Image --name "女主-妆造"
# 入库场景
changdu asset-create --file ./场景/会议室.jpg --group-id <组ID> --type Image --name "会议室"
记录每个素材的 Asset ID,后续视频生成时使用。
调用 storyboard-to-seedance-prompt 产出 视频_ClipXXX.prompt.txt。
在生成视频之前,先用 prompt-optimize 对所有 prompt 文件进行预检和自动优化:
# 1) 检查模式:扫描结构/画质/运镜/动作问题
changdu prompt-optimize --dir ./单集制作/EP001/ --check
# 2) 自动优化:追加画质约束、面部稳定、范围边界(输出到新目录确认无误后覆盖)
changdu prompt-optimize --dir ./单集制作/EP001/ --output-dir ./单集制作/EP001/optimized/ --style '电影写实'
# 3) 确认无误后用优化版替换原文件
cp ./单集制作/EP001/optimized/*.prompt.txt ./单集制作/EP001/
prompt-optimize 基于 Seedance 2.0 提示词指南,自动检查并修复:
--(Seedance不解析该符号之后的内容)关键原则:视频必须按 Clip 顺序逐个生成,前一个 clip 的尾帧自动作为下一个 clip 的首帧,保证角色和场景的连贯性。
sequential-generate 一键命令漫剧模式(传图片文件 + 音色参考 + 场景视频):
changdu sequential-generate \
--prompt-dir ./单集制作/EP001/ \
--image 角色/女主_face.jpg --image 角色/女主_fullbody.jpg --image 场景/会议室.jpg \
--ref-video <会议室_360_TOS_URL> \
--ref-audio <女主_voice_ref_TOS_URL> \
--ratio 16:9 --duration 15 \
--prompt-header "将图片1中的[特征]定义为女主。图片2为女主全身参考。图片3为场景参考。参考视频1中的场景空间布局,保持人物站位一致。" \
--output-dir ./单集制作/EP001/
真人剧模式(传图片 + 场景视频 + 音色参考):
changdu sequential-generate \
--prompt-dir ./单集制作/EP001/ \
--image 角色/女主_face.jpg --image 角色/女主_fullbody.jpg --image 场景/场景.jpg --image 道具/U盘.jpg \
--ref-video <场景_360_TOS_URL> \
--ref-audio <女主_voice_ref_TOS_URL> \
--ratio 16:9 --duration 15 \
--prompt-header "将图片1中的[特征]定义为女主。图片2为女主全身参考。图片3为场景参考。图片4为U盘道具参考。参考视频1中的场景空间布局,保持人物站位一致。" \
--output-dir ./单集制作/EP001/
音色锚定说明:
--ref-audio传入步骤 3.5 生成的角色音色参考视频的 TOS URL,Seedance 会从中提取音色特征。同时在 prompt 中用采用音频1的[音色特征描述]的音色引用该音频(如"采用音频1的低沉坚韧青年女声的音色"),双重锚定确保音色一致性(参考 Seedance FAQ A-3)。多角色场景可传入多个--ref-audio,在 prompt 中用音频1、音频2分别指代。
场景视频说明:
--ref-video传入步骤 4.5 生成的场景360度旋转视频的 TOS URL。在 prompt 中声明「参考视频N中的场景空间布局,保持人物站位一致」,帮助模型理解空间关系。注意:如果同时使用--ref-video做前段尾段衔接(sequential-generate的continuity-mode ref_video),场景视频和衔接视频会共用--ref-video槽位(最多 3 段),需在 prompt 中分别说明每个视频的语义角色。
该命令自动完成:
视频_ClipXXX.prompt.txt 文件(按编号排序)return_last_framefirst_frame_url--ref-audio 会自动附加到每个 clip 的 reference_audio,保持全集音色一致# 第1个 clip
changdu multimodal2video \
--image 角色/女主.jpg --image 场景/会议室.jpg \
--prompt "图1是女主,图2是场景。$(cat 视频_Clip001.prompt.txt)" \
--ratio 16:9 --duration 15 --wait --output 视频_Clip001.mp4 \
--return-last-frame
# 输出中包含「尾帧URL: https://...」
# 第2个 clip:用上一 clip 的尾帧URL
changdu multimodal2video \
--image 角色/女主.jpg --image 场景/会议室.jpg \
--prompt "图1是女主,图2是场景。$(cat 视频_Clip002.prompt.txt)" \
--ratio 16:9 --duration 15 --wait --output 视频_Clip002.mp4 \
--return-last-frame --first-frame-url <上一clip输出的尾帧URL>
使用 clip-concat 拼接全部 clip,推荐 --audio-fadein 0.3 消除 Seedance 启动底噪同时保留原声(台词、音效):
changdu clip-concat \
--input-dir ./单集制作/EP001/ \
--output ./单集制作/EP001/完整版.mp4 \
--audio-fadein 0.3
注意:不要使用
--strip-audio,否则会丢失 Seedance 生成的角色台词和音效。仅在后期需要全量配音配乐时才使用--strip-audio。
调用 video-review 技能对视频进行审查。穿帮修复 = 修改 prompt + Seedance 重新生成,不使用 FFmpeg 调色/转场。
analysis/ 目录changdu clip-regen 用 Seedance 重新生成changdu clip-trim --trim-tail Xs 裁剪changdu clip-concat# 穿帮修复:修改 prompt 后重新生成第4个 clip
changdu clip-regen \
--clip 4 --prompt-dir ./单集制作/EP001/ \
--asset <角色ID> --asset <场景ID> \
--prompt-header '图片1是男主面部,图片2是场景。' \
--ratio 16:9 --duration 15
# 叙事泄漏:裁剪 clip 尾部
changdu clip-trim \
--input 视频_Clip003.mp4 \
--output 视频_Clip003.mp4 \
--trim-tail 2.0
# 重新拼接
changdu clip-concat \
--input-dir ./单集制作/EP001/ \
--output ./单集制作/EP001/最终版.mp4 \
--audio-fadein 0.3
基于官方提示词指南和 FAQ,撰写视频提示词时遵循以下规则:
每张参考图只承担一种职责,禁止混用:
| 图片职责 | 用途 | 示例 |
|---|---|---|
| 面部特写 | 锁定角色五官ID | 角色_face.jpg,放图片1(最高优先级) |
| 全身妆造 | 锁定服装/体态 | 角色_fullbody.jpg,放图片2 |
| 场景空间 | 锁定环境/空间布局 | 场景.jpg |
| 道具参考 | 锁定道具外观 | 道具/<道具名>.jpg |
| 站位草稿 | 表达人物空间关系 | 站位草稿.jpg(可选) |
禁止将人物图、场景图、站位草稿、道具图混在同一张图片中。空间关系优先通过参考图/参考视频表达,减少复杂文字描述。
将图片1中的[2-3个核心特征]定义为[角色名]。图片2为[角色名]全身参考。图片3为[场景名]场景参考。图片4为[道具名]道具参考(如有)。参考视频1中的场景空间布局,保持人物站位一致(如有场景视频)。
[风格声明,如:电影写实风格 / 日本动漫cel-shaded风格]
[场景描述]。[镜头类型]角色名@图片N[动作],采用音频N的[音色特征]的音色说{台词原文}。紧接着[下一动作]。随后[下一动作]。最后[结束动作]定格。
本段仅展示上述动作,不展示后续剧情。视频全程不要在同一画面中复制相同人物,不要多人同脸。保持无字幕,避免画面生成字幕,不要水印,不要logo,不要BGM。
台词全链路保留:剧本中的角色对白必须经过
text-storyboard(原文保留)→storyboard-to-seedance-prompt(转写为{}格式)完整传递到最终 prompt 中。禁止在任何环节将台词概括为"低语道歉""质问"等动作描述。
角色名@图片N 格式标注(如 女主@图片1),绝不能只写角色名。道具出现时同理(如 信物@图片4)。这是 Seedance 2.0 核心规则{} 包裹台词内容。台词必须从剧本原文完整保留,经过 text-storyboard → storyboard-to-seedance-prompt 全链路不得丢失。示例:剧本 女主低声说:"对不起" → 文字分镜保留原文 → Seedance prompt 写为 女主@图片1低声说{对不起}采用音频N的[音色特征描述]的音色,如 采用音频1的温柔低沉女声的音色说{对不起}。必须包含具体音色特征描述词(低厚温润/清冽有力/沙哑低沉等),不要只写"采用音频N的音色"——加上特征描述能显著提升音色参考准确性(参考 FAQ A-3)(),音效用 <>,字幕用 【】,禁止使用 ----ref-video 传入| 问题 | 防范措施 |
|---|---|
| ID漂移(换脸) | 面部特写单独裁剪作为参考图,放图片1最前面;禁止使用三视图/多视图 |
| 双胞胎 | 不用三视图;每次提及角色时用 @图片N 标注;多角色场景加"不要多人同脸" |
| 参考图混用 | 每张图只承担一种职责(面部/全身/场景/道具),禁止混在一张图中 |
| 风格漂移 | 在提示词开头明确风格,如「2D日漫风格」;参考图先转目标风格再生视频 |
| 生成字幕 | 加「保持无字幕,避免画面生成字幕」;输入图片/视频去除已有文字 |
| 生成水印/logo | 加「不要水印,不要logo」 |
| 音色不准 | 加音色特征描述词(如"低厚温润中年男声");台词风格与参考音频风格一致 |
| 站位漂移 | 用场景360度视频做 --ref-video,prompt 中声明保持站位一致 |
| 道具不一致 | 生成道具参考图,在 prompt 中绑定 道具名@图片N |
项目名/
├── 角色/
│ ├── <角色名>_face.jpg # 面部特写(占画面80%)
│ ├── <角色名>_fullbody.jpg # 全身参考(含服装道具)
│ ├── <角色名>_voice_ref.mp4 # 音色参考视频(5秒,转身+说台词)
│ ├── <角色名>_<妆造名>_face.jpg # 妆造变化:该造型面部特写(如有)
│ ├── <角色名>_<妆造名>_fullbody.jpg # 妆造变化:该造型全身(如有)
│ └── <角色名>_<妆造名>_voice_ref.mp4 # 妆造变化:该造型音色参考(如有)
├── 场景/
│ ├── <场景名>.jpg # 场景参考图
│ └── <场景名>_360.mp4 # 场景360度旋转视频
├── 道具/
│ └── <道具名>.jpg # 道具参考图(纯白背景)
├── assets.json # 记录角色/场景/道具/妆造的完整资产映射
└── 单集制作/
└── EP001/
├── 文字分镜.txt
├── 视频_Clip001.prompt.txt
├── 视频_Clip001.mp4
└── ...
assets.json 中已入库的素材 ID,跳过已入库素材。