关于 collage-broll-explainers
一套将简短旁白转为编辑风格纸拼贴 B-roll 短片的分阶段工作流。它分别设置隐喻设计、静帧确认和视频生成环节,并可选择拟合旁白。
主要功能
- 01提出并确认视觉隐喻
- 02生成并审核拼贴静帧
- 03根据首尾帧参考生成视频
- 04执行视频质量检查
- 05可选拟合并合并旁白
适用场景
- 01根据旁白短句制作视觉解说
- 02在生成图像前审核视觉方向
- 03制作无声拼贴短片或配音版本
MCP 相关
该技能要求连接并认证 MaxFusion MCP,以执行图像、视频和语音生成。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ megatroll222/ vox-collage-broll --skill collage-broll-explainers安装后在 Claude Code 中输入/collage-broll-explainers确认已加载。
附带文件LICENSEREADME.md
详细介绍
拼贴式 B-roll 解释画面
将一段约 5 秒的旁白压缩成一个鲜明的视觉构想,再将其制作成精致的编辑风格纸艺拼贴组装动画。
默认工作流:
- 仅设计视觉隐喻,然后等待用户确认
- 仅生成最终静帧,然后等待用户确认
- 自动使用首帧/尾帧参考生成视频并执行 QA
- 可选:生成匹配时长的旁白并混入视频
这两个确认关卡是工作流的一部分,而非额外负担。它们让用户把精力放在美学和方向上,并避免因隐喻或静帧不合适而浪费视频生成成本。
运行要求
- 已连接并完成身份验证的 MaxFusion MCP(
https://mcp.maxfusion.ai/mcp)。所有图像、视频和语音生成都通过它进行。如果尚未连接,请停止操作,并先引导用户完成连接。 - 本地文件访问权限和 ffmpeg(例如 Claude Code):准备帧、执行视频 QA、生成静音交付版本以及匹配旁白时长,都需要在本地下载和处理素材。无法本地下载的沙盒 Agent 仍可完成全部三个关卡,并在 MaxFusion 小组件中展示结果,但必须告知用户:帧准备将退而采用仅基于提示词的颜色匹配,逐帧自检、剥离音频和匹配旁白时长均会跳过;用户应自行目测判断片段,并在编辑器中将其静音。
强制审批流程
关卡 1:确认隐喻
收到脚本句子后,先提出视觉隐喻。不要生成任何图像或视频,也不要调用任何生成工具。
每句话都需提供:
- 核心含义
- 情绪
- 一句话视觉构想
- 3–6 个关键物件
- 建议的背景色和局部强调色
- 预期的组装顺序
然后明确暂停,等待用户回复“approved”“all approved”,或针对各项提供修改意见。
如果用户只批准了部分编号项,则只有已批准的项目进入关卡 2;其余项目继续迭代隐喻。
关卡 2:确认静帧
只有在隐喻获得确认后,才编写视觉规格和图像提示词,并使用 maxfusion_generate_image 生成最终静帧。
将原始文件保存到项目目录,制作编号静帧联系表,向用户展示每一张静帧(每张图片调用一次 maxfusion_display_generation,并附上编号对应关系),然后再次暂停。此阶段仍不得生成任何视频。
如果用户只批准了部分静帧,则只有已批准的项目进入关卡 3;重新生成被拒绝的静帧并再次确认。
关卡 3:生成视频
静帧确认后,立即生成。视频模型已锁定:
video_model: gemini-omni-flash
绝不使用其他视频模型。不要提供模型选择,不要询问用户要使用哪个模型,失败时也不要改用其他模型——请按修复流程处理,并在 gemini-omni-flash 上重新运行。
成功标准
- 一句话只表达一个明确的隐喻
- 一批内容采用统一的设计语言,但不必强行使用单一蓝色背景
- 背景采用醒目、纯色且均匀的色块,并根据含义变化
- 主体由黑白半色调照片剪贴素材构成
- 重点卡片、按钮、胶片、规则手册等可使用红色、黄色、青色、橙色、紫色或奶油色卡纸
- 每块纸片都具有清晰的剪切边缘、奶油色描边、低不透明度柔和阴影和纸张纹理
- 动作应从空白开始组装,而非轻柔漂移、摇晃或缓慢缩放
- 不要字幕、完整脚本文字、徽标、水印或 UI
- 默认交付规格:9:16、5 秒、720p、静音 MP4(已剥离音轨);用户需要旁白时则交付配音版本
不适合使用此技能的情况
- 需要精确控制图层、遮挡、镜头穿越效果或可编辑时间线:请改用分层动画工具(例如基于 HTML 渲染的分层视频方案)
- 用户只需要视频提示词,而不是成片:只需编写提示词,跳过此流程
- 用户需要真实人物产品广告或出镜主持人:不要使用此拼贴流程
- 用户明确需要可逐层编辑的透明素材:此技能无法提供分离的透明图层
默认项目目录
以用户本地日期命名的本地工作文件夹:
~/collage-broll-projects/YYYY-MM-DD-<title>/
批处理项目的推荐结构:
<project>/
├── brief.md
├── visual-spec.json
├── imagegen-prompts.md
├── omni-jobs.json
├── gate2-qa.md
├── gate3-qa.md
├── still-contact-sheet.jpg
├── omni-contact-sheet-all.jpg
├── video-first-frame-all.jpg
├── end-frame-comparison-all.jpg
├── 01-<concept-name>/
│ ├── omni-prompt.txt
│ ├── voiceover-raw.mp3 (optional voiceover stage)
│ ├── voiceover-trim.mp3
│ ├── frames/
│ │ ├── last-frame-original.png
│ │ ├── first-frame.png
│ │ └── last-frame.png
│ └── omni/run-v01/
│ ├── final-5s.mp4
│ ├── final-5s-noaudio.mp4
│ ├── final-5s-voiced.mp4 (optional voiceover stage)
│ ├── contact-sheet.jpg
│ ├── video-last-frame.jpg
│ └── end-frame-comparison.jpg
└── 02-<concept-name>/...
还要通过 maxfusion_create_project 创建一个 MaxFusion 项目(使用相同名称),并在批次中的每次生成调用中传入其 id 作为 project_id / project_group_id,以便所有素材都归入工作区中的同一组。逐项记录:已确认的隐喻文本、已确认静帧的图像任务 id 和图像 id、已上传的首帧/尾帧 file_id、视频任务 id 和视频 id,以及 QA 判定结果——并在每个关卡向用户报告这些 id,以便单独引用或重新运行任何项目。
阶段 1:设计视觉隐喻
首先将脚本台词浓缩为一个视觉命题。
提取:
- 核心含义:观众最终必须理解什么
- 情绪:平静、惊讶、紧迫、豁然开朗、荒诞、讽刺
- 动作动词:打开、连接、泄漏、绑定、归档、点亮、压缩、分叉、组装
- 视觉隐喻候选:机器、时钟、胶片、文件柜、控制台、规则手册、漏斗、铁轨、棋子
不要将脚本文字原封不动地放进画面。默认每句台词使用一个隐喻,并将关键物体控制在 3–6 个;元素过多会稀释含义,也会让 Omni 组装过程不稳定。
优先选择观众日常生活中熟悉的隐喻(茶壶、雪球、照相亭),而不是抽象隐喻——口述台词会将视觉与用户的实际主题联系起来,因此视觉可以大胆奇特,但不要晦涩难懂。
对于批次,优先选择能构成前后叙事的隐喻,例如:先呈现手工劳作和经验流失,再呈现流程成文化以及人机分工。
关卡 1 输出示例
1. Core meaning: expertise gets consumed from scratch every single time
Visual metaphor: a skilled editor circles a giant film-strip clock cutting frame by frame; the clock completes a full revolution yet yields only a short strip of finished film
Key objects: film-strip clock, editor figure, scissors, short output strip
Colors: burnt-orange field, cream and light-teal accents
Assembly order: clock → figure with scissors → film strip → final short output
输出此内容并停止;等待确认。
阶段 2:生成彩色拼贴静帧
隐喻确认后,先编写一份自包含的 visual-spec.json,再编写图像提示词。
视觉规范
{
"script_meaning": "",
"visual_metaphor": "",
"style_signature": "flat bold color field, mixed black-and-white halftone cut-outs and colored cardstock accents, crisp cut edges, cream keylines, soft paper shadows, editorial paper collage",
"aspect_ratio": "9:16",
"color_field": {
"background_hex": "",
"accent_colors": [],
"paper_grain": "fine uncoated-paper fiber"
},
"elements": [
{
"what": "",
"role": "",
"motion": "",
"placement": ""
}
],
"composition": {
"layout": "",
"negative_space": "",
"final_frame": ""
},
"motion_plan": "structure first, subject or cards second, action and result last",
"avoid": "typography, readable letters, numerals, logos, watermark, UI, subtitles, glossy 3D, photoreal environment"
}
色彩规则
不要将钴蓝视为唯一默认选项。根据含义选择一块鲜明的色域,并在整个批次中保持“设计语言一致,色域颜色各异”:
- 焦橙色/红色:时间消耗、劳动、紧迫感
- 芥末黄色:工具、警示、经验流失
- 墨绿色:认知、品味、系统重置
- 深紫色:规则、成文化、长期记忆
- 蓝绿色:判断、协作、自主执行
主体应以黑白半色调为主,但每个彩色卡纸点缀都必须服务于信息层级——切勿为了上色而上色。
图像提示词模板
使用 maxfusion_generate_image 生成(默认模型,aspect_ratio: "9_16",quality: "high"):
Use case: ads-marketing
Asset type: final still frame for a 9:16 image-to-video B-roll clip
Primary request: Create a finished editorial paper-collage image expressing [one-sentence visual proposition].
Scene/backdrop: perfectly flat [color name] paper field [hex] with subtle uncoated paper fiber.
Style/medium: premium editorial stop-motion paper collage; black-and-white halftone photographic cut-outs mixed with selective [accent colors] colored cardstock.
Composition/framing: vertical 9:16 locked poster frame; central subject within the middle 70 percent; generous clean color-field negative space; 3–6 large separable paper groups for later assemble-from-empty animation.
Materials/textures: visible printed halftone dots, crisp machine-cut edges, thin warm-cream paper keylines, soft low-opacity physical drop shadows.
Constraints: [the one relationship this metaphor must communicate at a glance].
Avoid: no typography, no readable letters, no numerals, no logos, no watermark, no UI, no subtitles, no glossy 3D, no photoreal environment, no clutter.
如果场景中包含任何刻度盘、钟面、仪表或计数器,请明确要求上面的每个标记都必须是普通刻度线——不得使用罗马数字或阿拉伯数字。如果场景中包含睡着的人物,请明确禁止出现“Zzz”标记。视频模型经常会偷偷加上这些元素。
使用 maxfusion_get_job 轮询任务(wait: 60);从资源 URL 下载每张静帧至 <item>/frames/last-frame-original.png,并记录图像任务 id 和图像 id。
静帧 QA
- 一眼看去,隐喻是否清晰易懂
- 主体是否集中
- 是否有伪文字、标志、水印或 UI
- 是否留有足够的纯色区域,以便从空白画面开始组装
- 是否有 3–6 个清晰的大组,而不是满屏碎屑
- 整批作品的纹理是否统一,画面颜色是否多样
将通过审核的原图复制到项目目录,制作编号静帧联系表,向用户展示(每张图还需调用 maxfusion_display_generation),然后暂停,等待 Gate 2 确认。将静帧 QA 结论写入 <project>/gate2-qa.md。
如果用户要求重新生成部分静帧,只重新生成这些静帧,并生成 still-contact-sheet-v2.jpg(后续轮次依次为 v3、v4……),保留旧联系表以供对比——切勿覆盖旧文件,也绝不要在后续步骤中重用被拒绝的静帧。
第 3 阶段:使用 Omni 生成视频
1. 准备首尾帧
保留 imagegen 原图,然后对最后一帧进行标准化:
ffmpeg -y -i <item>/frames/last-frame-original.png \
-vf "scale=1080:1920:force_original_aspect_ratio=increase,crop=1080:1920" \
<item>/frames/last-frame.png
第一帧默认为纯净的空白纸面区域,其背景颜色与最后一帧相同:
ffmpeg -y -f lavfi -i color=c=0x<HEX>:s=1080x1920 \
-frames:v 1 <item>/frames/first-frame.png
(<HEX> 是视觉规范中的 background_hex——与写入图像提示词的十六进制值相同,以确保两帧颜色一致。)
只有用户明确要求不要从完全空白的画面开始时,第一帧才可以保留一个基础结构物体。
使用 maxfusion_upload_asset 将两帧上传到 MaxFusion(purpose: "image_reference"、content_type: "image/png"、准确的 size_bytes、filename):该工具会返回一个上传会话——向 upload.url POST 一个 multipart 表单,其中包含 upload.fields 中给出的每个键/值(务必保持原样),并将文件字节作为最后一个名为 file 的部分(任何 2xx 响应均表示成功),然后使用每个返回的 file_id。记录每个项目对应的两个 file_id。
2. 编写 Omni 动画提示词
默认动作顺序:
base structure → figure or key cards → connectors → action → final result
提示词模板(按项目分别保存为 <item>/omni-prompt.txt):
Paper-collage stop-motion assembly, using Image 1 as the exact empty first frame and Image 2 as the exact completed last frame. In one continuous locked-off vertical shot, open on the empty flat [color] paper field.
Assemble the scene piece by piece with crisp physical stop-motion timing: [describe, in order, how the 3–6 elements slide in, snap into place, connect, and complete the action]. End by holding the supplied completed composition.
Preserve the exact 9:16 framing, [hex] color field, colored cardstock accents, uncoated paper grain, halftone dots, cream keylines, crisp cut edges and soft shadows. Restrained tactile 2D paper craft only.
No scene cuts, no camera movement, no zoom, no morphing, no new objects, no text, no letters, no numbers, no logos, no watermark, no UI, no sound.
每条提示词都必须说明:图像 1 是空白首帧,图像 2 是已确认的完整末帧。最终构图必须与图像 2 完全一致——不得让模型重新设计。将静帧提示词中的任何防文字约束(例如表盘仅使用刻度线、禁止出现 Zzz)也带入视频提示词。
3. 提交生成任务
每个项目调用一次 maxfusion_generate_video。参考图的顺序决定帧的角色:空白首帧为第一个 ID,标准化后的末帧为第二个 ID,与提示词中的“图像 1”/“图像 2”对应。
video_model: gemini-omni-flash
ref_image_file_ids: [<first-frame file_id>, <last-frame file_id>]
prompt: <omni animation prompt>
duration: 5
aspect_ratio: 9_16
resolution: 720p
project_group_id: <batch project id>
将已提交的任务记录在 <project>/omni-jobs.json 中(按项目记录提示词、帧的 file_id、任务 ID、输出路径)。使用 maxfusion_get_job(wait: 60)轮询每个任务,直到进入终止状态,然后将每个已完成的视频下载到 <item>/omni/run-v01/final-5s.mp4。如果某个任务失败,只重新运行该任务——绝不要重新运行已通过的项目。
4. 确保交付无声
即使提示词写了“无声音”,仍需使用 ffmpeg 生成不含音轨的版本:
ffmpeg -y -i <run>/final-5s.mp4 \
-map 0:v:0 -c:v copy -an \
<run>/final-5s-noaudio.mp4
默认交付 final-5s-noaudio.mp4;将原始 final-5s.mp4 保留为中间文件。
视频 QA
不要只根据末帧进行判断——检查组装过程和最终呈现效果。
联系表
ffmpeg -y -i <run>/final-5s-noaudio.mp4 \
-vf "fps=1,scale=270:480,tile=5x1" \
-frames:v 1 <run>/contact-sheet.jpg
通过标准:
- 第一帧接近纯净的空色块;纸张边缘在画面边缘稍微露出可以接受
- 片段中段应展示结构、人物或卡片逐步进入画面,而不是整体淡入
- 不得有剪切、缩放、3D 化,也不得漂移成写实场景
- 不得出现伪造文字、徽标、水印或 UI
- 最后一帧应与已确认的静帧一致;轻微的姿势或小部件变化(例如人物姿势略有变化、小部件增添或缺失),只要不影响隐喻含义,就算通过——无需因此重新运行
- 输出为 9:16、720p、5 秒,且不含音频流(使用 ffprobe 验证)
还需提取视频的最后一帧,并与已确认的静帧并排放置为 <run>/end-frame-comparison.jpg。对于批量项目,还需额外合并三张总览图:
omni-contact-sheet-all.jpg:每个已完成片段的逐秒画面video-first-frame-all.jpg:每个片段的实际第一帧,用于验证每个片段是否都确实以空色块开场end-frame-comparison-all.jpg:已确认的静帧与视频结束帧并排对照
将每项的 QA 结论——包括通过但注明缺陷时的理由——写入 <project>/gate3-qa.md。
修复指南(常见问题)
- 第一帧能看到纸张边缘:稍微露出可以接受;如果要求开场完全空白,可在视频编辑器中添加开场节拍
- 组装感较弱:减少元素数量,并将提示词改写为明确的逐件滑入/吸附到位顺序
- 结束帧发生偏移:加强“Image 2 is the exact completed last frame”和“End by holding the supplied completed composition”这两条要求
- 出现伪造文字(单词、数字、表盘上的罗马数字、睡觉人物头上的“Zzz”):返回并重新生成——带文字的静帧需重新生成一张新静帧;若静帧干净但视频出现文字,则在提示词中明确加入禁止文字的要求后,只重新运行一次视频
- 单个视频失败:只重新运行该任务,使用 gemini-omni-flash,绝不切换模型
第 4 阶段:配音(可选)
如果用户希望片段中包含口播,则通过 MaxFusion 生成,并在本地调整。
1. 选择声音
使用 maxfusion_list_platform_voices 列出声音;如果用户保存过声音,也使用 maxfusion_list_my_voices,然后请用户选择。除非用户明确要求,否则不要设计新声音。批量处理中的所有项目都使用同一种声音。
2. 生成并裁剪
使用 maxfusion_generate_speech 生成每句口播(采用所选的 voice_id,speed: 1.1 为默认值,适合轻快的朗读),下载 mp3 并去除末尾静音:
ffmpeg -y -i <item>/voiceover-raw.mp3 \
-af "areverse,silenceremove=start_periods=1:start_threshold=-45dB,areverse" \
<item>/voiceover-trim.mp3
3. 控制在 4–5 秒内
使用 ffprobe 测量时长。裁剪后的口播必须在 4.0 到 5.0 秒之间——过短会导致 5 秒片段中出现空白,过长则会被截断。即使相同内容重复生成,TTS 时长也可能相差 ±1.5 秒,因此务必测量,不能凭感觉估算。
按顺序尝试以下调整:
- 裁剪静音(上文已完成)
- 太短 → 稍微扩充文案;太长 → 精简文案;以
speed: 1重新生成 - 最后手段:对稍长的口播进行听不出来的速度微调,最多使用
-af "atempo=1.05"
4. 混流
视频流保持原样复制;音频补齐至恰好 5 秒:
ffmpeg -y -i <run>/final-5s-noaudio.mp4 -i <item>/voiceover-trim.mp3 \
-map 0:v:0 -map 1:a:0 -c:v copy -c:a aac -af apad -t 5 \
<run>/final-5s-voiced.mp4
默认交付内容
交付给用户:
- 每项的
<item>/omni/run-v01/final-5s-noaudio.mp4——若运行了配音阶段,则交付final-5s-voiced.mp4(并通过maxfusion_display_generation在 MaxFusion 小组件中显示生成结果) - 每项的联系表
- 批量总览联系表
- 结束帧对照图
- 每项用一句话说明脚本中的文案如何转化为视觉隐喻
- 批次的 MaxFusion 项目名称,以及每项可用于重新运行或引用的 id
如果缺陷源于 Omni 快速生成的限制,请如实说明;只有确实需要精确控制图层时,才建议改用分层动画工具。
致谢
视觉语言、三道关卡流程、提示词模板、颜色语义以及 QA/修复手册均源自 pyang5166 的 gbro-collage-broll。该项目最初以中文编写,供 Codex 配合本地 Gemini 脚本使用。此版本是面向 Claude Code + MaxFusion MCP 的英文改编版,并新增了配音适配阶段。