在短视频领域,知识付费和育儿赛道始终占据着巨大的流量池。传统的书单视频往往停留在“PPT翻页”水平,而育儿视频则多依赖真人实拍,制作门槛高且周期长。
今天,我们将解锁两个不仅有“颜”更有“脑”的高阶工作流:
当前进度:80/119[▓▓▓▓▓▓▓▓▓▓▓░░░░] 67%
💡 省流版:文末直接获取完整 DSL 源码 + 核心提示词。

核心价值:市面上的书单号千篇一律,V31 的破局点在于“审美降维打击”。它摒弃了枯燥的剧情复述,而是通过 System Prompt 挖掘书名背后的哲学意境,配合 Ansel Adams 风格的黑白/治愈系摄影画面,将“卖书”变成了“卖意境”。
工作流程:书名输入 → 哲理文案生成 → 意象提取生成 Prompt → 循环生图 → 音画同步合成 → 剪映草稿
🔧 阵法布局

💡 工作流说明:
输入参数: input(书籍名称+作者) 和wenan(可选的口播文案)核心流程:开始节点 → 数据处理 → 文案生成/聚合 → 选择器判断 → 视觉脚本转化 → 批量生图 → 视频合成 → 剪映草稿 关键节点:选择器用于判断是否已有文案,变量聚合用于统一两个分支的输出
配置工作流的启动参数,这里我们需要接收用户输入的主题和可选的口播文案。

为了提高灵活性,我们增加一个判断逻辑:如果用户没有输入口播文案 (wenan 为空),则让 AI 自动生成;如果输入了文案,则直接使用,跳过生成步骤。
开始 节点后的 + 号,在业务逻辑中选择 选择器 (IF 选择器)。
配置要点:
开场口播文字 和 开场口播文字_1 (为大模型准备 Prompt)。开场口播文字_2 和 开场口播文字_3 (生成兜底/默认文案)。开始.input (书籍主题) 是否 不为空。
这里的设计非常巧妙:
有输入时:通过两个节点分别处理,拼接出给大模型的 Prompt。
无输入时:通过另外两个节点输出默认内容,并由 轻量级模型 (Doubao) 进行快速处理,既保证兜底又兼顾成本。
操作步骤:
选择器 的 否则 (Else) 分支后的 + 号,添加文本处理节点。开场口播文字_2:直接输出一份默认的高分书单列表。开场口播文字_3:输出默认开场白 "今天分享最治愈的书之一..."。客户文案拆分 大模型节点 (见步骤 1.3.2),用于进一步拆解或优化文案。开场口播文字:拼接 "今天我们要讲的是 {{input}}"。开场口播文字_1:(配置辅助 Prompt 或其他必要信息)。
开场口播文字):String1 引用 开始.input。今天我们要讲的是\n{{String1}}。
开场口播文字_2 - 兜底书单):字符串拼接。String1 引用 开始.input。今天我们要讲的是《中国哲学简史》冯友兰《纯粹理性批判》康德《存在与时间》海德格尔《悲剧的诞生》尼采《哲学的故事》杜兰特《人生的智慧》叔本华《逻辑哲学论》维特根斯坦《善恶的彼岸》尼采《西西弗神话》加缪{{String1}}
开场口播文字_3 - 默认开场白):字符串拼接。String1 引用 开始.input。今天分享最治愈的书之一{{String1}}
这里我们采用了双轨制生成策略:
当用户提供了书籍主题时,我们需要大模型来生成深度的哲理文案。
开场口播文字 节点后的 + 号,选择 大模型。开场口播文字 和 开场口播文字_1 (True 分支) 的输出都连接到此节点。
自动生成文案。DeepSeek-V3。input 引用 True 分支文本处理节点的输出。
当走兜底逻辑时,我们需要另一个模型来处理默认推荐或用户直接输入的文案。
开场口播文字_2 后添加 大模型 节点。开场口播文字_2 (兜底书单) 和 开场口播文字_3 (默认开场白) 同时连接到此节点。
客户文案拆分。豆包·1.5·Pro·32k (处理速度快,适合结构化任务)。input 引用 开始.wenan (直接处理用户输入的原始文案) 或 文本处理节点的输出。文案:{{input}}。
由于我们走了大模型双轨制,后续节点不知道该用哪个大模型的输出。因此,我们需要一个 变量聚合 节点,将两个大模型的输出 "合二为一"。
自动生成文案 (Step 1.3.1 的输出)。客户文案拆分 (Step 1.3.2 的输出)。
口播稿聚合。返回每个分组中第一个非空的值 (First Not Empty)。自动生成文案,如果为空则使用 客户文案拆分 的值。自动生成文案.output。客户文案拆分.output。
我们将 "开场白" 和 "大模型生成的正文" 拼接在一起,形成完整的视频脚本。
口播稿聚合 节点后的 + 号,选择 文本处理。
String1: 引用 开场口播文字.output (开场白)。String2: 引用 口播稿聚合.Group1 (正文)。口播文案聚合。字符串拼接。{{String1}}{{String2}}。
为了便于后续的批量生图,我们需要将合并后的长文案拆分成一句句的短句。
口播文案聚合 节点后的 + 号,选择 文本处理。
文案格式处理。字符串分隔。String 引用 口播文案聚合.output。换行 (\n)。Array<String>),用于后续遍历。
我们将拆分后的文案数组进行清洗,去除可能产生的空行,确保每一条 Prompt 都是有效的。
文案格式处理 节点后的 + 号,选择 代码。
input: 引用 文案格式处理.output (Array<String>)。移除空文案。wenan (Array<String> 类型)。
从这里开始,工作流分为两路并行处理。第一路负责生成视频的旁白音频和同步时间轴。
为了实现音画同步,我们对拆解后的每一句文案分别生成音频,这样后期可以精确控制每一句话对应的画面时长。
移除空文案 节点后的 + 号,选择 语音合成 (TTS)。
1.1 (稍快一点,适合短视频节奏)。心灵鸡汤 (或根据书单风格选择)。语音合成。wenan 引用 移除空文案.wenan (Array<String>)。语音合成.wenan (这里引用的是批处理中的单个元素)。
TTS 生成的结果包含很多冗余信息,我们需要通过插件提取出纯净的音频 URL 列表。
语音合成 节点后的 + 号,搜索 剪映小助手数据生成器 -> get_url。
批量提取语音URL。item1 引用 语音合成.outputList。item1.link (意为提取对象中的 link 字段)。
为了调节视频节奏,我们需要一个 2 秒钟的静音片段,后续可以穿插在语音之间。
批量提取语音URL 节点后的 + 号,选择 文本处理。
2秒的空白音。字符串拼接。String1 上传或引用一个名为 2秒静音.mp3 的音频文件。{{String1}}。
我们将准备好的静音片段插入到语音列表中(例如插在第一句之后,作为开场白和正文的停顿)。
2秒的空白音 节点后的 + 号,选择 代码。
input: 引用 批量提取语音URL.outputList (Array<Object>)。output: 引用 2秒的空白音.output (String)。将2秒空白音插入到音频链接中。link_list (Array<Object> 类型)。
经过代码处理后的数据结构发生了变化,我们需要再次调用插件,将其格式化为标准的 infos 格式,供后续剪映剪辑使用。
将2秒空白音插入到音频链接中 节点后的 + 号,搜索 剪映小助手数据生成器 -> get_url。
outputs: 引用 将2秒空白音插入到音频链接中.link_list。提取语音URL为列表。infos 列表。
为了让后续的 "智能合成" 节点知道每一张图片应该显示多长时间(与语音时长匹配),我们需要计算出每个音频片段的时长信息。
提取语音URL为列表 节点后的 + 号,搜索 获取音频时间 -> 选择 语音时间线 工具。
links: 引用 提取语音URL为列表.infos。语音时间线。timelines 数据。
在获得语音时长后,我们可以立即配置 核心旁白音轨。
语音时间线 节点后的 + 号,搜索 剪映小助手数据生成器 -> audio_infos。需同时连接 提取语音URL为列表。
mp3_urls: 引用 提取语音URL为列表.infos (Step 1.12 输出)。timelines: 引用 语音时间线.timelines (Step 1.13 输出)。audio_effect: 选择 人声增强3 (提升旁白清晰度)。处理文案人声信息。audio_infos。
除了生成语音和画面,我们还需要准备一份原始的字幕文本,供视频合成时显式使用。
口播稿聚合 节点后的 + 号(拉出第二条连线,与 口播文案聚合 并行),选择 文本处理。
String1: 引用 开场口播文字_1.output (开场白)。String2: 引用 口播稿聚合.Group1 (正文)。字幕文案聚合。字符串拼接。{{String1}}{{String2}} (注意:这里使用 \n 换行还是直接拼接,取决于后续字幕插件的需求,通常建议与口播文案保持一致)。
为了让字幕与画面的每一帧/每一句对应,我们需要将聚合后的字幕文本再次拆分为列表。
字幕文案聚合 节点后的 + 号,搜索 文本处理。
字幕格式处理。字符串分隔。String 引用 字幕文案聚合.output。换行 (\n)。Array<String>)。
同样为了防止出现空行导致的错误,我们需要对分割后的字幕列表进行一次清洗。
字幕格式处理 节点后的 + 号,选择 代码。
input: 引用 字幕格式处理.output (Array<String>)。移除空字幕。wenan (Array<String> 类型)。
这一步是 "音画同步" 的关键。我们将 语音时间线 (包含时长) 与 字幕文本 (包含内容) 合并,计算出每一句字幕/画面在视频中的精确 开始时间 和 结束时间。
移除空字幕 节点后的 + 号,选择 代码。同时将 语音时间线 的输出也能连接到此节点 (双输入)。
timelines (Array<Object>)pre_time (Array<Object>)ft_time (Array<Object>)input: 引用 语音时间线.timelines (包含时长的列表)。wenan: 引用 移除空字幕.wenan (字幕文本列表)。(注意:需手动点击 + 号添加此变量)。时间线处理。Object 列表,包含 start, end 等字段。
这是时间线处理后的第一个分支,用于配置视频的 开场图片 (或转场图)。
时间线处理 节点后的 + 号 (拉出第一条分支),搜索 文本处理。
String1: 上传 多张 开场/转场图片 (这些图片将按顺序循环使用或随机使用)。开场以及跳转图片。字符串拼接。{{String1}}。
为了适应后续的 "智能合成" 节点(它通常接受数组格式),我们需要将开场图片的字符串转换为列表。
开场以及跳转图片 节点后的 + 号,搜索 文本处理。
开场图格式处理 (建议重命名以区分)。字符串分隔。String 引用 开场以及跳转图片.output。逗号 (,)。Array<String>)。
有了开场图列表和通过代码计算出的开场时长 (pre_time),我们需要调用插件生成最终的图片分镜参数。
开场图格式处理 节点后的 + 号,搜索 剪映小助手数据生成器 -> imgs_infos。注意:需要同时连接 时间线处理 的 pre_time 变量。
imgs: 引用 开场图格式处理.output (图片列表)。timelines: 引用 时间线处理.pre_time (注意:引用的是预览/开场时间轴)。处理开场图片。infos。
这是时间线处理后的 第二条分支,用于添加特定的音效(如“上发条”的声音),增强视频的趣味性或提示转场。
时间线处理 节点后的 + 号 (拉出第二条分支),搜索 文本处理。
String1: 上传 发条音.MP3 (或其他简短音效)。上发条音效素材。字符串拼接。{{String1}}。
同样为了数据格式的统一,我们需要将音效字符串转换为列表。
上发条音效素材 节点后的 + 号,搜索 剪映小助手数据生成器 -> str_to_list。
obj: 引用 上发条音效素材.output (音效字符串)。开场上发条音效数据归一化。Array<String>)。
有了归一化后的音效列表,我们需要将其与特定的时间点 (ft_time) 结合,生成最终的音效轨道数据。
开场上发条音效数据归一化 节点后的 + 号,搜索 剪映小助手数据生成器 -> audio_infos。
mp3_urls: 引用 开场上发条音效数据归一化.infos (音效列表)。timelines: 引用 时间线处理.ft_time (注意:引用的是 ft_time 时间轴)。volume: 设置为 0.7 (音量适中)。开场发条音效信息处理。audio_infos。
这是时间线处理后的 第三条分支,也是 字幕与时间线对齐 的核心枢纽。它将衍生出 6个下游分支 (BGM + 5组字幕)。
时间线处理 节点后的 + 号 (拉出第三条分支),选择 代码。同时连接 移除空字幕 的 wenan 变量。
firstItems (前11句)secondItems (第12-22句)thirdItems (第23-33句)fourthItems (第34-44句)fifthItems (第45-55句)allTime (完整时间轴数据)content, start, end 字段)wenan: 引用 移除空字幕.wenan (字幕文本)。timelines: 引用 时间线处理.timelines (主时间轴)。字幕口播合并时间线。Array<Object>),用于分段处理字幕:
这是 字幕口播合并时间线 后的 第一个分支 (Branch 1 of 6),用于为视频添加背景音乐 (BGM)。
字幕口播合并时间线 节点后的 + 号 (拉出第一条下游分支),搜索 文本处理。(注:此处虽然不需要直接引用 1.25 的输出,但在逻辑上属于其并行流程的一部分,最终与 allTime 结合)
String1: 上传 背景音.mp3 (纯音乐,轻柔舒缓)。上传背景音。字符串拼接。{{String1}}。
为了适应后续插件的输入要求,需要将背景音字符串转换为列表格式。
操作步骤:点击 上传背景音 节点后的 + 号,搜索 剪映小助手数据生成器 -> str_to_list。
配置要点:
obj: 引用 上传背景音.output (背景音字符串)。背景音格式处理。Array<String>)。这一步将背景音列表与视频时间轴结合,生成背景音乐轨道数据。
操作步骤:点击 背景音格式处理 节点后的 + 号,搜索 剪映小助手数据生成器 -> audio_infos。需同时连接 字幕口播合并时间线 的 allTime 变量。
配置要点:
mp3_urls: 引用 背景音格式处理.infos (背景音列表)。timelines: 引用 字幕口播合并时间线.allTime (完整时间轴)。volume: 设置为 0.2 (低音量背景)。背景音乐。audio_infos。
这是 字幕口播合并时间线 后的 第二个分支 (Branch 2 of 6),用于为视频增加水滴音效或其他点缀式声音。
字幕口播合并时间线 节点后的 + 号 (拉出第二条下游分支),搜索 文本处理。
String1: 上传 水滴音效.MP3。水滴音效素材。字符串拼接。{{String1}}。
为了适应后续插件的输入要求,需要将水滴音效字符串转换为列表格式。
水滴音效素材 节点后的 + 号,搜索 剪映小助手数据生成器 -> str_to_list。
obj: 引用 水滴音效素材.output (水滴音效字符串)。水滴音效数据归一化。Array<String>)。
这一步将水滴音效与特定的分段对齐(例如在视频结尾或某个核心观点处)。
水滴音效数据归一化 节点后的 + 号,搜索 剪映小助手数据生成器 -> audio_infos。需同时连接 字幕口播合并时间线 的 fifthItems 变量。
mp3_urls: 引用 水滴音效数据归一化.infos (水滴音效列表)。timelines: 引用 字幕口播合并时间线.fifthItems (注意:这里引用的是第五组字幕时间轴)。volume: 设置为 0.7。聚焦水滴音效信息处理。audio_infos。
这是 字幕口播合并时间线 后的 第三个分支 (Branch 3 of 6),用于为视频准备特定的视觉特效(如水波纹)。
字幕口播合并时间线 节点后的 + 号 (拉出第三条下游分支),搜索 剪映小助手数据生成器 -> str_to_list。
obj: 手动输入字符串 水波纹。水波纹特效数据结构List。
这一步将预设的特效名称与视频时间轴匹配,生成剪映可识别的特效指令。
水波纹特效数据结构List 节点后的 + 号,搜索 剪映小助手数据生成器 -> effect_infos。需同时连接 字幕口播合并时间线 的 fifthItems 变量。
effects: 引用 水波纹特效数据结构List.infos (特效列表)。timelines: 引用 字幕口播合并时间线.fifthItems (注意:这里引用的是第五组字幕时间轴)。处理水波纹特效信息。effect_infos。
这是 字幕口播合并时间线 后的 第四个分支 (Branch 4 of 6),用于专门处理第一组字幕(通常包含书名、作者等信息),并将其包装成剪映插件所需的特定结构。
字幕口播合并时间线 节点后的 + 号 (拉出第四条下游分支),选择 代码。
wenanTimeline: 引用 字幕口播合并时间线.firstItems。开场文案统一数据结构。

在开场文案数据结构化之后,我们需要通过循环节点来依次处理每一行字幕,将其转换为剪映可识别的指令格式。
开场文案统一数据结构 节点后的 + 号,选择 循环。将循环体内的节点输出连接回循环出口。
infos_list: 引用 处理中文文案分镜.infos。otherInfos_list: 引用 视频文案中文数据归一化.otherInfos。var_timelines: 引用 开场文案统一数据结构.timelines。var_otherInfo: 引用 开场文案统一数据结构.otherInfo。循环处理开场字幕分镜。使用数组循环。texts 引用 开场文案统一数据结构.texts。
该节点位于循环体内,用于处理循环迭代中的当前项数据(如单行文本、对应时间轴等),并将其标准化。
分段文案循环处理 (循环) 节点内部,点击 + 号,选择 代码。
text: 引用 循环处理开场字幕分镜.texts (当前迭代文本)。idx: 引用 循环处理开场字幕分镜.index (当前索引)。var_timelines: 引用 循环处理开场字幕分镜.var_timelines。var_otherInfo: 引用 循环处理开场字幕分镜.var_otherInfo。视频文案中文数据归一化。
这是循环体内的核心插件节点,负责将归一化后的数据打包成剪映字幕分镜。
视频文案中文数据归一化 节点后的 + 号,搜索 剪映小助手数据生成器 -> caption_infos。
texts, timelines, font_size, keywords 等)均通过引用 视频文案中文数据归一化 的输出获得。处理中文文案分镜。
循环结束后,我们需要将所有迭代产生的分镜参数聚合在一起,并进行最终的格式转换,以便后续直接合成视频。
循环处理开场字幕分镜 整个大节点后的 + 号,选择 代码。
infos_list: 引用 循环处理开场字幕分镜.infos_list。处理开头字幕同一轨道信息。zh_zimu_info (String 类型)。
这是 字幕口播合并时间线 后的 第五个分支 (Branch 5 of 6),用于处理正文的第一段字幕分片,并将其格式化。
字幕口播合并时间线 节点后的 + 号 (拉出第五条下游分支),选择 代码。
wenanTimeline: 引用 字幕口播合并时间线.secondItems。正文文案统一数据结构。
caption_infos 插件所需的 Schema 严格对齐,包括丰富的样式和动画定义。
由于正文内容可能包含多行,我们需要通过循环节点来处理 texts 数组中的每一项。
正文文案统一数据结构 节点后的 + 号,选择 循环。确保循环体内的节点输出正确连接回循环出口。
infos_list: 引用 处理正文字幕分镜.infos。otherInfos_list: 引用 视频正文字幕数据归一化.otherInfos。var_timelines: 引用 正文文案统一数据结构.timelines。var_otherInfo: 引用 正文文案统一数据结构.otherInfo。循环处理正文字幕分镜。使用数组循环。texts 引用 正文文案统一数据结构.texts。

该节点位于正文循环体内,用于处理当前迭代的单行正文,并将其与全局样式信息结合。
正文文案循环处理 内部,点击 + 号,选择 代码。
配置要点:


texts, timelines, otherInfos (Object), keywords 等详尽样式字段。text: 引用 循环处理正文字幕分镜.texts。idx: 引用 循环处理正文字幕分镜.index。var_timelines: 引用 循环处理正文字幕分镜.var_timelines。var_otherInfo: 引用 循环处理正文字幕分镜.var_otherInfo。视频正文字幕数据归一化。这是正文循环体内的核心插件节点,负责将归一化后的每一行正文数据打包成剪映字幕分镜参数。
视频正文字幕数据归一化 节点后的 + 号,选择 插件 -> 剪映小助手数据生成器 -> caption_infos。
视频正文字幕数据归一化 的输出获得。处理正文字幕分镜。
正文循环结束后,我们需要将迭代产生的多行正文字幕参数进行聚合。
循环处理正文字幕分镜 整个大节点后的 + 号,选择 代码。
infos_list: 引用 循环处理正文字幕分镜.infos_list。处理正文字幕同一轨道信息。zh_zimu_info (String 类型)。
为了适应后续插件的输入要求,需要将水滴音效字符串转换为列表格式。
水滴音效素材 节点后的 + 号,搜索 剪映小助手数据生成器 -> str_to_list。
obj: 引用 水滴音效素材.output (水滴音效字符串)。水滴音效数据归一化。Array<String>)。
这一步将水滴音效与特定的分段对齐(例如在视频结尾或某个核心观点处)。
水滴音效数据归一化 节点后的 + 号,搜索 剪映小助手数据生成器 -> audio_infos。需同时连接 字幕口播合并时间线 的 fifthItems 变量。
mp3_urls: 引用 水滴音效数据归一化.infos (水滴音效列表)。timelines: 引用 字幕口播合并时间线.fifthItems (注意:这里引用的是第五组字幕时间轴)。volume: 设置为 0.7。聚焦水滴音效信息处理。audio_infos。
这是 字幕口播合并时间线 后的 第三个分支 (Branch 3 of 6),用于为视频准备特定的视觉特效(如水波纹)。
字幕口播合并时间线 节点后的 + 号 (拉出第三条下游分支),搜索 剪映小助手数据生成器 -> str_to_list。
obj: 手动输入字符串 水波纹。水波纹特效数据结构List。
这一步将预设的特效名称与视频时间轴匹配,生成剪映可识别的特效指令。
水波纹特效数据结构List 节点后的 + 号,搜索 剪映小助手数据生成器 -> effect_infos。需同时连接 字幕口播合并时间线 的 fifthItems 变量。
effects: 引用 水波纹特效数据结构List.infos (特效列表)。timelines: 引用 字幕口播合并时间线.fifthItems (注意:这里引用的是第五组字幕时间轴)。处理水波纹特效信息。effect_infos。
这是 字幕口播合并时间线 后的 第四个分支 (Branch 4 of 6),用于专门处理第一组字幕(通常包含书名、作者等信息),并将其包装成剪映插件所需的特定结构。
字幕口播合并时间线 节点后的 + 号 (拉出第四条下游分支),选择 代码。
wenanTimeline: 引用 字幕口播合并时间线.firstItems。开场文案统一数据结构。

在开场文案数据结构化之后,我们需要通过循环节点来依次处理每一行字幕,将其转换为剪映可识别的指令格式。
开场文案统一数据结构 节点后的 + 号,选择 循环。将循环体内的节点输出连接回循环出口。
infos_list: 引用 处理中文文案分镜.infos。otherInfos_list: 引用 视频文案中文数据归一化.otherInfos。var_timelines: 引用 开场文案统一数据结构.timelines。var_otherInfo: 引用 开场文案统一数据结构.otherInfo。循环处理开场字幕分镜。使用数组循环。texts 引用 开场文案统一数据结构.texts。
该节点位于循环体内,用于处理循环迭代中的当前项数据(如单行文本、对应时间轴等),并将其标准化。
分段文案循环处理 (循环) 节点内部,点击 + 号,选择 代码。
text: 引用 循环处理开场字幕分镜.texts (当前迭代文本)。idx: 引用 循环处理开场字幕分镜.index (当前索引)。var_timelines: 引用 循环处理开场字幕分镜.var_timelines。var_otherInfo: 引用 循环处理开场字幕分镜.var_otherInfo。视频文案中文数据归一化。
这是循环体内的核心插件节点,负责将归一化后的数据打包成剪映字幕分镜。
视频文案中文数据归一化 节点后的 + 号,搜索 剪映小助手数据生成器 -> caption_infos。
texts, timelines, font_size, keywords 等)均通过引用 视频文案中文数据归一化 的输出获得。处理中文文案分镜。
循环结束后,我们需要将所有迭代产生的分镜参数聚合在一起,并进行最终的格式转换,以便后续直接合成视频。
循环处理开场字幕分镜 整个大节点后的 + 号,选择 代码。
infos_list: 引用 循环处理开场字幕分镜.infos_list。处理开头字幕同一轨道信息。zh_zimu_info (String 类型)。
这是 字幕口播合并时间线 后的 第五个分支 (Branch 5 of 6),用于处理正文的第一段字幕分片,并将其格式化。
字幕口播合并时间线 节点后的 + 号 (拉出第五条下游分支),选择 代码。
wenanTimeline: 引用 字幕口播合并时间线.secondItems。正文文案统一数据结构。
caption_infos 插件所需的 Schema 严格对齐,包括丰富的样式和动画定义。
由于正文内容可能包含多行,我们需要通过循环节点来处理 texts 数组中的每一项。
正文文案统一数据结构 节点后的 + 号,选择 循环。确保循环体内的节点输出正确连接回循环出口。
infos_list: 引用 处理正文字幕分镜.infos。otherInfos_list: 引用 视频正文字幕数据归一化.otherInfos。var_timelines: 引用 正文文案统一数据结构.timelines。var_otherInfo: 引用 正文文案统一数据结构.otherInfo。循环处理正文字幕分镜。使用数组循环。texts 引用 正文文案统一数据结构.texts。

该节点位于正文循环体内,用于处理当前迭代的单行正文,并将其与全局样式信息结合。
正文文案循环处理 内部,点击 + 号,选择 代码。
配置要点:


texts, timelines, otherInfos (Object), keywords 等详尽样式字段。text: 引用 循环处理正文字幕分镜.texts。idx: 引用 循环处理正文字幕分镜.index。var_timelines: 引用 循环处理正文字幕分镜.var_timelines。var_otherInfo: 引用 循环处理正文字幕分镜.var_otherInfo。视频正文字幕数据归一化。这是正文循环体内的核心插件节点,负责将归一化后的每一行正文数据打包成剪映字幕分镜参数。
视频正文字幕数据归一化 节点后的 + 号,选择 插件 -> 剪映小助手数据生成器 -> caption_infos。
视频正文字幕数据归一化 的输出获得。处理正文字幕分镜。
正文循环结束后,我们需要将迭代产生的多行正文字幕参数进行聚合。
循环处理正文字幕分镜 整个大节点后的 + 号,选择 代码。
infos_list: 引用 循环处理正文字幕分镜.infos_list。处理正文字幕同一轨道信息。zh_zimu_info (String 类型)。
基于 字幕口播合并时间线 节点的 fourthItems 输出,对剩余的口播文案进行语义化分段合并(最多 5 段),以便后续生成对应的视觉分镜。
将离散的字幕句子按语义和情绪逻辑进行合并。
操作步骤:点击 字幕口播合并时间线 节点后的 + 号,选择 大模型。
配置要点:
JSON。start (Number)end (Number)content (String)timeline (Array<Object>)fourthItems:引用 字幕口播合并时间线 的 fourthItems。文案分段。DeepSeek-V3-0324。文案:{{fourthItems}}
将分段后的文案转换为 AI 绘画所需的英文提示词。
操作步骤:点击 文案分段 节点后的 + 号,选择 大模型。
配置要点:
JSON。start (Number)end (Number)prompt (String)negative_prompt (String)imgsTimeline (Array<Object>)wenanTimeline:引用 文案分段 的 timeline。给文案增加图片提示词。DeepSeek-V3-0324。字幕信息:{{wenanTimeline}}
遍历每个图片提示词,批量生成图片并构建分镜信息。
给文案增加图片提示词 节点后的 + 号,选择 循环。
infos:引用 处理配图Infos.infos (收集循环体内生成的分镜信息列表)。循环生成图片以及分镜信息。给文案增加图片提示词 的 imgsTimeline。
在循环体内,使用 AI 绘画模型根据提示词生成图片。
操作步骤:在 循环生成图片以及分镜信息 循环体内部,点击 + 号,搜索并选择 图像生成。
配置要点:
prompt:引用循环变量 imgsDesc.prompt。negative_prompt:引用循环变量 imgsDesc.negative_prompt。
判断图像生成是否成功,如果失败则进入重试分支。
图像生成 节点后的 + 号,选择 选择器。
图像生成.data不为空 (≠ empty)。
在选择器的"否则"分支中,如果第一次生成失败,则进行重试。

prompt:引用循环变量 imgsDesc.prompt。negative_prompt:引用循环变量 imgsDesc.negative_prompt。
合并选择器两个分支的图像生成结果。


图像生成.data图像生成_1.data变量聚合。
将变量聚合输出的全部图片结果转换为字符串格式,方便后续处理。
变量聚合 节点后添加 文本处理 节点。
String1:引用 变量聚合.Group1。图像处理成字符串_1。{{String1}}。
将变量聚合输出的图片 URL 和当前循环的时间线信息组装成 JSON 分镜片段。
图像处理成字符串 节点后添加 代码 节点。
img: 引用 图像处理成字符串_1.output。timeline: 引用循环变量 imgsDesc。处理配图Infos。infos (String, JSON 格式的分镜片段)。
循环结束后,将所有迭代产生的图片分镜参数聚合在一起,并进行最终的格式转换。
循环生成图片以及分镜信息 整个大节点后的 + 号,选择 代码。
infos_list:引用 循环生成图片以及分镜信息.infos。处理图片同一轨道信息。img_info (String, 聚合后的图片轨道信息)。
这是整个工作流的最终汇聚点,所有的音频、视频、字幕、特效以及图片轨道信息都在这里汇总,生成最终的剪映草稿。
处理图片同一轨道信息 节点后的 + 号,搜索 视频合成_剪映小助手 -> create_draft。
create_draft 节点。
height: 1024 (或 1920)。width: 576 (或 1080)。user_id: (选填) 调试时可填入自己的 ID,生产环境可不填或动态获取。创建剪映视频草稿。draft_url。处理图片 (infos) -> infos处理文案人声信息 (infos) -> infos开场发条音效信息处理 (infos) -> infos背景音乐 (infos) -> infos聚焦水滴音效信息处理 (infos) -> infos处理水波纹特效信息 (infos) -> infos处理开头字幕同一轨道信息 (zh_zimu_info) -> zh_zimu_info处理正文字幕同一轨道信息 (zh_zimu_info) -> zh_zimu_info处理图片同一轨道信息 (img_info) -> img_info
虽然 create_draft 可以汇聚大部分信息,但为了更精细的控制(或处理特定逻辑),我们有时会单独添加某些轨道。这里演示如何单独添加人声轨道。
创建剪映视频草稿 节点后的 + 号,搜索 视频合成_剪映小助手 -> add_audios。
audio_infos: 引用 处理文案人声信息.infos。draft_url: 引用 创建剪映视频草稿.draft_url。添加人声音频轨道。
接着,我们继续添加背景音乐轨道。注意,这里演示了链式添加的逻辑。
添加人声音频轨道 节点后的 + 号,再次选择 add_audios。
audio_infos: 引用 背景音乐.infos。draft_url: 依然引用 创建剪映视频草稿.draft_url (始终指向最初的草稿容器)。添加背景音乐轨道。
音频轨道配置完成后,我们开始处理视频画面。首先是添加正文的背景图。
添加背景音乐轨道 节点后的 + 号,选择 add_images。
draft_url: 引用 创建剪映视频草稿.draft_url。image_infos: 引用 处理图片.infos (这是第一条支线处理好的图片分镜信息)。添加正文背景图。
背景图添加完毕后,我们再补充一些细节音效,比如开场的发条声,增加视频的趣味性。
添加正文背景图 节点后的 + 号,选择 add_audios。
audio_infos: 引用 开场发条音效信息处理.infos。draft_url: 引用 创建剪映视频草稿.draft_url。添加开场发条音效轨道。
为了配合书单内容的视觉焦点切换,我们添加一个“水滴”音效,提升精致感。
添加开场发条音效轨道 节点后的 + 号,选择 add_audios。
audio_infos: 引用 聚焦水滴音效信息处理.infos。draft_url: 引用 创建剪映视频草稿.draft_url。添加聚焦水滴音效轨道。
这一步是将我们前面精心处理的“开场图”和“齿轮转动动画”添加到视频轨道中。注意,这里的图片信息是经过代码节点聚合处理过的。
添加聚焦水滴音效轨道 节点后的 + 号,选择 add_images。
draft_url: 引用 创建剪映视频草稿.draft_url。image_infos: 引用 处理图片同一轨道信息.img_info (注意来源:这是 Step 1.46 聚合后的信息)。添加开场图以及齿轮转动图。
为视频添加一层水波纹特效,增加梦幻感。
添加开场图以及齿轮转动图 节点后的 + 号,选择 add_effects。
draft_url: 引用 创建剪映视频草稿.draft_url。effect_infos: 引用 处理水波纹特效信息.infos。添加水波纹特效信息。
接下来添加视频开头的字幕,注意字体和颜色的搭配,使其清晰可见且符合整体风格。
添加水波纹特效信息 节点后的 + 号,选择 add_captions。
alignment: 1 (对齐方式)。border_color: #000000 (描边颜色)。font: 毛笔行楷 (使用具有中国风的字体)。font_size: 14 (字体大小)。scale_x: 1.5 (横向缩放)。scale_y: 1.5 (纵向缩放)。text_color: #ffffff (文本颜色)。captions: 引用 处理开头字幕同一轨道信息.zh_zimu_info。draft_url: 引用 创建剪映视频草稿.draft_url。添加开头字幕。
最后添加书单的正文内容字幕。这里为了避免遮挡画面主体,通常会调整位置(如通过 transform_y 参数)。
添加开头字幕 节点后的 + 号,选择 add_captions。
font: 毛笔行楷。font_size: 12 (比标题略小)。scale_x / scale_y: 1 (不缩放)。transform_y: -700 (关键参数:向上移动字幕位置,让出画面中心)。captions: 引用 处理正文字幕同一轨道信息.zh_zimu_info。draft_url: 引用 创建剪映视频草稿.draft_url。添加正文字幕。
最后,我们将生成的剪映草稿链接和口播文案通过结束节点输出,方便用户直接复制使用。
添加正文字幕 节点的输出连接到 结束 节点。
output: 引用 创建剪映视频草稿.draft_url (注意:虽然最后一步是加字幕,但草稿链接的核心来源始终是最初的 create_draft 节点,或者任意传递了 draft_url 的节点均可,这里为了逻辑清晰引用了源头,实际操作中引用上一步的输出亦可,只要是同一个草稿对象)。wenan: 引用 口播文案聚合.output (这是为了方便发视频时复制文案)。返回文本。**导入剪映**{{output}}**文案复制**{{wenan}}
V31 的灵魂在于 Prompt 对“画面感”的极致把控。它证明了在 AI 时代,审美力就是第一生产力。不用复杂的代码,仅靠精准的图文描述,就能产出电影级的短视频。
核心价值:V33 是 Day 37 的重头戏,它突破了静态图片的限制,引入了 Image-to-Video (图生视频) 技术。通过角色扮演 (Roleplay) 让文案具有真情实感(宝宝 vs 父母双视角),再通过 Python 代码 实现视频片段与音频的精确对齐,打造出真正意义上的“AI 动画片”。
工作流程:角色设定(宝宝/父母) → 冲突故事生成 → 动态分镜脚本 → 批量图生视频 → Python 音画对齐 → 剪映草稿
🔧 阵法布局

配置工作流的启动参数,这里我们需要接收用户输入的角色身份以及剪映的 API 令牌。

这一步解决了育儿内容“同质化”的问题,通过大模型模拟“宝宝”或“家长”的口吻生成文案。

开始 节点后的 + 号,选择 大模型。
JSON (关键!方便后续节点提取)。output (Type: String)。input: 引用 开始 节点的 input。大模型_文案生成。豆包·1.5·Pro·32k (我们需要长文本和较强的角色扮演能力)。{{input}}。视频不同于图片,它需要动作。我们需要将文案翻译成 AI 绘画能理解的“画面描述”,这里使用 DeepSeek 模型来增强逻辑推理能力。

大模型_文案生成 节点后的 + 号,再次添加 大模型。
JSON (输出为字符串数组)。output (Type: Array<String>)。text: 引用 大模型_文案生成 的 output。生图prompt (意为生成绘画提示词)。DeepSeek-V3 (利用其强大的指令遵循能力,确保输出格式准确)。{{text}}。为了让后续的语音合成与字幕对齐更精准,我们需要将大模型生成的一整段文案拆分为独立的句子。

生图prompt 节点后的 + 号(实际上是并行分支),搜索 文本处理,选择文本处理。String: 引用 大模型_文案生成 的 output (注意:是 Step 2.1 的输出,不是 Step 2.2)。文本处理。字符串分隔。换行 (\n), 句号 (.), ?, ! 等自然分句符号。有时文本分割会产生空行,我们需要用一段简单的 Python 代码去除空元素,并重新组合成标准字符串。

文本处理 节点后的 + 号,选择 代码。
最终文案。texts (引用 文本处理.output)。texts (String)。这是 V33 成本最高但也最酷的部分。我们首先通过批处理节点,循环遍历每一个分镜提示词,生成静态图片。

最终文案 节点后的 + 号,选择 批处理。

Seedream 4.0 (或其他高质量绘图模型)。1:1 (2048x2048) 或根据平台需求调整为 9:16。{{desc_info}}{{proprm}}。desc_info: 引用 批处理_生成图片 的 list (即当前循环项 item)。proprm: 固定值 欧美3D卡通风格 (或其他风格后缀)。生图prompt.output (Step 2.2 的输出,即 Prompt 数组)。AI 生图偶有失败,为了防止生图失败导致整个流程中断,我们需要增加一个判断逻辑。

图像生成 节点后的 + 号,选择 选择器 (IF)。
图像生成.data不为空。否则分支 (Retry):如果第一次生图失败,我们在 Else 分支中再添加一个 图像生成 节点进行重试。

{{desc_info}}{{proprm}})。
此外,为了确保重试后的图片有效,我们在重试节点后再次添加一个 选择器 (IF)。

图像生成_1.data不为空。否则分支 (Final Retry):若第二次重试仍失败,我们在 Selector_1 的 Else 分支再加一层保险(共 3 次生图机会)。

{{desc_info}}{{proprm}})。
由于我们有三条可能的生图路径(首发成功、一次重试成功、二次重试成功),我们需要将它们的结果汇聚到一个变量中,传给后续节点。

图像生成_2 节点后的 + 号,选择 变量聚合。
选择器 的 如果 (Yes) 分支连接到聚合节点。选择器_1 的 如果 (Yes) 分支连接到聚合节点。图像生成_2 (即 Final Retry) 的输出连接到聚合节点。
图像生成.data (首发)。图像生成_1.data (一重试)。图像生成_2.data (二重试)。返回每个分组中第一个非空的值。Image。闭环与输出 (Batch Output):最后,我们需要配置批处理节点的最终输出。

变量聚合 节点的输出点,连接到批处理体右侧边缘的 结束点。
2 (避免并发过高导致生图接口限流)。变量聚合_1.Group1 映射为外部输出 data_list (Array<Image>)。图生视频是让画面动起来的关键。
批处理_生成视频变量聚合.Image) 作为输入,调用 Image-to-Video 模型生成动态视频片段。为了让字幕时间轴精确匹配语音,我们需要使用 alignTextToAudio 工具。

批处理_生成视频 节点后的 + 号,搜索并选择 字幕音频对齐。
开始.api_token (剪映 Token)。speech_synthesis.link (注意:这意味着在此之前需要有一个 语音合成 节点,将 Final Copy 转换为音频)。最终文案.texts。为了防止视频画面跟不上音频时长(例如音频20秒,生成的视频只有15秒),我们需要用代码将视频列表进行循环填充。

alignTextToAudio 节点后的 + 号,选择 代码。
duration: 引用 get_audio_duration.duration (需添加获音频时长工具)。video_urls: 引用 批处理_生成视频.output (变量聚合后的视频列表)。video_urls (Array<String>) (调整后的视频列表)。有了对齐的字幕数据和足够的视频片段,最后一步是组装剪映草稿的轨道数据。

根据时长循环填充视频列表 节点后的 + 号,再次选择 代码。
video_urls: 引用 根据时长循环填充视频列表.video_urls (Step 2.10 的输出)。timelines: 引用 alignTextToAudio.timelines (Step 2.9 的输出)。texts: 引用 alignTextToAudio.texts (Step 2.9 的输出)。duration: 引用 get_audio_duration.duration。audioUrl: 引用 speech_synthesis.link。代码_数据重组。audios, captions, videos 轨道数据。audios, captions, videos (全部为 String 类型)。首先,我们创建一个空的剪映草稿容器,为后续填入素材做准备。

代码_数据重组 节点后的 + 号,搜索并添加 create_draft 工具。
1080 (竖屏高度)。1920。draft_id 或 draft_url。有了空草稿后,我们采用“分层组装”的方式,先把音频数据填进去。

create_draft 节点后的 + 号,搜索并添加 add_audios 工具。
代码_数据重组.audios (这是我们在 Python 节点中组装好的音频轨道数据)。create_draft.draft_url (确保添加到刚才创建的那个草稿中)。音频就位后,我们将 AI 生成的视频片段铺设到画面上。

add_audios 节点后的 + 号,搜索并添加 add_videos 工具。
代码_数据重组.videos。add_audios.draft_url (注意:这里要引用上一步返回的草稿 URL,形成链式调用)。最后,也是最显眼的部分——字幕。我们使用 add_captions 工具将生成的字幕数据“烧录”进去。

add_videos 节点后的 + 号,搜索并添加 add_captions 工具。
代码_数据重组.captions。create_draft.draft_url (始终指向最初创建的那个草稿)。6 (根据经验,这个数值对应剪映里的适中字号)。f5f3f3 (米白色,比纯白更柔和)。-896 (将字幕位置调整到底部区域)。关于 Draft URL 的传递
在使用 add_audios, add_videos, add_captions 等插件链式操作时,draft_url 始终引用最初创建的那个 create_draft.draft_url 即可。因为这些插件是“远程操作”同一个云端草稿,而不是像接力棒一样传递修改后的草稿对象。
所有轨道添加完毕后,必须显式调用保存接口,才能生成最终可用的 draft_content。

add_captions 节点后的 + 号,搜索并添加 save_draft 工具。
create_draft.draft_url (或者 add_captions.draft_url,指向同一个对象即可)。draft_content,这就是我们需要的剪映草稿数据。最后,我们将生成的草稿链接作为整个工作流的最终输出。

save_draft 的输出连接到 结束 节点。
output。save_draft.draft_url。这套工作流(V31 & V33)代表了目前 Coze 视频流的顶尖水平,涵盖了从高审美图文到复杂逻辑动画的全过程。
🅰️ 动手党(免费)Coze 插件广场搜索相关插件,结合本文逻辑图尝试搭建。关注公众号,后台发送 “Day37” 获取核心提示词与 Python 代码。
🅱️ 懒人党(¥9.9 / 拿来主义)扫码添加作者微信 (hwdemtv),获取 V31 & V33 完整 DSL 源码文件,导入 Coze 即可使用。

💎 进阶党(¥99 / 永久社群)加入我的专属学习群,获取 60 天挑战的全部 119 个工作流源码,与一群“弄脏双手”的硬核 AI 玩家共同进化。
🏢 企业定制(按需报价)支持 Coze / n8n / Dify 工作流定制开发,私聊咨询。
下期预告:Day 38 我们将继续挑战 V37 一键生成背单词视频,敬请期待!