电商工作流
生成电商带货工作流
我看完了。这个工作流叫 **DianShangDaiHuo_CustomTxt_V5**,用途是:
把 **3 张商品图 + 一段自定义广告文案** 自动变成电商带货素材,并输出剪映草稿链接。它支持两种模式:
- `image_video = 视频`:生成“动态视频版”剪映草稿,同时也生成一份“图片轮播版”剪映草稿。
- `image_video != 视频`:只生成“图片轮播版”剪映草稿。
**整体流程**
1. 用户输入:
- `attr`:商品广告词/商品描述。
- `image_video`:填“视频”则走视频生成分支,否则走图片分支。
- `input`、`input2`、`input3`:三张商品参考图。
2. 文案处理:
- 先用“文本处理”节点把 `attr` 按这些分隔符切开:
- 换行 `\n`
- 句号 `。`
- 空格
- 分号 `;`
- 再用 `text_remove_empty` 移除空字符串。
- 得到一个文案数组,例如:
- 设备承压不用愁,这款抗压液压油超靠谱
- 高压工况稳得住,动力强劲不衰减
- 强韧油膜抗磨损,精密部件护得牢
- ...
3. 配音生成:
- 对每一句文案批量调用“语音合成”插件。
- 音色 ID:`7426725529589596187`
- 语速:`1.2`
- 然后获取每段音频时长,单位是微秒。
- 再用“字幕音频对齐”插件,把文案和音频时长对齐,输出:
- `text_captions`:字幕文本列表
- `text_timielines`:字幕时间轴列表
4. 生成静态商品素材图:
- 用大模型节点“描述词大模型”根据 3 张商品图和拆分后的广告文案,生成一组 AI 绘图描述词。
- 模型:`豆包·1.8·深度思考`
- 输出格式:JSON 数组。
- 要求描述词数量和广告文案句子数量一致。
- 然后进入循环节点,对每条描述词生成一张图。
- 图像尺寸:`1440 x 2560`
- 参考图:三张商品图,权重都是 `0.7`
- 图像生成提示词大意是:在描述词基础上,做 1:1 商品摄影复刻,完整展示商品,颜色材质准确,文字清晰,不要乱码,不要额外装饰,电商产品图风格,8K,锐利。
5. 图片轮播版剪映草稿:
- 创建剪映草稿,尺寸:
- 宽:`1728`
- 高:`2304`
- 把生成的图片批量加入草稿。
- 图片时间轴来自音频时长,每句广告词对应一段图片。
- 加字幕:
- 字体:`尔雅新大黑`
- 字号:`4`
- 字幕颜色:`#ffde00`
- 描边颜色:`#000000`
- `scale_x = 2.27`
- `scale_y = 2.27`
- `transform_y = -851`
- 加配音:
- 音量:`5`
- 输出图片版剪映草稿链接。
6. 视频版剪映草稿,仅当 `image_video = 视频`:
- 先用“动态描述词大模型_1”逐张分析生成好的商品图,为每张图生成动态视频描述词。
- 模型:`豆包·1.6·极致速度·250828`
- 然后批量调用视频生成:
- 模型:`doubao-seedance-pro`
- 模式:图生视频 `image2Video`
- 每段视频:`5 秒`
- 分辨率:`480p`
- 比例:自适应
- 关闭水印
- 首帧:前面生成的商品图
- 视频提示词最后额外加了一句:
- `禁止出现文字字体不清晰、不工整、歪斜残缺模糊锯齿。`
- 之后计算视频数量,并简单按每条视频 `5,000,000 微秒` 生成视频时间轴。
- 创建剪映草稿,尺寸同样是:
- 宽:`1728`
- 高:`2304`
- 加入生成的视频、字幕、配音。
- 输出视频版剪映草稿链接。
**你在扣子里复刻时的节点顺序**
按这个顺序搭就行:
1. **开始节点**
- `attr`:String,必填,商品描述/广告词。
- `image_video`:String,必填,默认“视频”。
- `input`:Image,必填,商品图片1。
- `input2`:Image,必填,商品图片2。
- `input3`:Image,必填,商品图片3。
2. **文本处理节点**
- 方法:split。
- 输入:开始节点的 `attr`。
- 分隔符:换行、句号、空格、分号。
- 输出:文案数组。
3. **插件节点:text_remove_empty**
- 插件名:`CodeL视频编排工具`
- API:`text_remove_empty`
- 输入:文本处理节点输出的数组。
- 输出:`texts`
4. **批处理节点:配音批处理**
- 输入列表:`texts`
- 并发:`10`
- 批量大小:`100`
- 内部放两个节点:
- `语音合成 / speech_synthesis`
- text = 当前批处理文本
- speed_ratio = `1.2`
- voice_id = `7426725529589596187`
- `get_audio_duration`
- mp3_url = 语音合成输出的 `data.link`
- unit = `微秒`
- 批处理输出:
- 音频链接数组:`data.link`
- 音频时长数组:`duration`
5. **插件节点:align_text_to_audio**
- 插件名:`字幕音频对齐_免费版`
- API:`align_text_to_audio`
- 输入:
- `duration_list` = 配音批处理输出的 duration 数组
- `texts` = 清洗后的文案数组
- 输出:
- `text_captions`
- `text_timielines`
6. **大模型节点:描述词大模型**
- 模型:豆包深度思考类模型。
- 输入:
- 三张商品图
- 文案数组
- 关键要求:
- 输出 JSON 数组。
- 数组长度和文案句数一致。
- 每条是一个不同视角的 AI 绘图描述词。
- 强调“图中的 xx 物品”。
- 结合商品卖点生成场景。
- 这个节点的系统提示词可以直接用源文件里的那大段“电商带货视频创意助手”。
7. **循环节点:生成图片**
- 循环输入:描述词大模型输出的 JSON 数组。
- 每次循环调用图像生成。
- 图像生成参数:
- 尺寸:`1440 x 2560`
- 步数:`25`
- guidance_scale:`2.5`
- max_images:`1`
- watermark:false
- 参考图:三张商品图,权重都设 `0.7`
- prompt 模板:
```text
{{input}},1:1 replica product photography, target object, full view, accurate color and texture, legible text, no garbled characters, correct typography, clear text edges, even lighting, realistic texture, high detail, e-commerce product shot, 8K, sharp focus, no extra decorations
```
8. **插件节点:audio_timelines**
- 插件名:`剪映小助手数据生成器`
- API:`audio_timelines`
- 输入:配音批处理输出的音频链接数组。
- 输出:图片/音频用的时间轴。
9. **选择器节点**
- 条件:开始节点的 `image_video` 等于 `视频`。
- true:走视频版,同时也走图片版。
- false:只走图片版。
10. **图片版剪映分支**
- `create_draft`
- width = `1728`
- height = `2304`
- `add_images`
- draft_url = create_draft 输出
- imgs = 循环生成的图片数组
- timelines = audio_timelines 输出
- `add_captions`
- texts = align_text_to_audio 的 `text_captions`
- timelines = align_text_to_audio 的 `text_timielines`
- font = `尔雅新大黑`
- font_size = `4`
- text_color = `#ffde00`
- border_color = `#000000`
- scale_x = `2.27`
- scale_y = `2.27`
- transform_y = `-851`
- `add_audios`
- mp3_urls = 配音批处理输出音频链接数组
- timelines = audio_timelines 输出
- volume = `5`
11. **视频版剪映分支**
- 大模型节点“动态描述词大模型”
- 批量输入:前面生成的图片数组。
- 每张图生成一句动态视频描述词。
- 批处理节点“视频批处理”
- 输入:图片数组 + 动态描述词数组。
- 内部调用视频生成:
- model = `doubao-seedance-pro`
- mode = image2Video
- duration = `5`
- resolution = `480p`
- watermark = false
- firstFrame = 当前图片
- 代码节点,计算视频数量和总时长:
```js
async function main(input) {
const video_url = input?.arguments?.video_url || input?.video_url || input?.params?.video_url;
const videoUrls = Array.isArray(video_url) ? video_url : video_url ? [video_url] : [];
const num = videoUrls.length;
const duration = num * 5000000;
return { duration, num };
}
```
- `timelines`
- duration = 代码节点输出 duration
- num = 代码节点输出 num
- start = `0`
- `create_draft`
- width = `1728`
- height = `2304`
- `add_videos`
- video_urls = 视频批处理输出的视频数组
- timelines = timelines 节点输出
- scene_timelines = audio_timelines 输出
- `add_captions`
- 参数同图片版。
- `add_audios`
- 参数同图片版。
12. **结束节点**
- 返回内容类似:
```markdown
## 剪映【图片】草稿地址
```
`{{图片草稿 draft_url}}`
```markdown
## 剪映【视频】草稿地址
```
`{{视频草稿 draft_url}}`
**一个复刻时要注意的坑**
这个工作流里有些 `draft_url` 引用的是 `create_draft` 的输出,而不是最后一个 `add_audios` 节点的输出。通常剪映小助手插件是“在同一个草稿链接上持续修改”,所以草稿地址不变,这样能跑。但你手动搭的时候,我建议结束节点引用每条分支最后一个节点 `add_audios` 的 `draft_url`,逻辑更直观,也更不容易因为插件实现差异出问题。
有想法或建议? 联系我