# 分镜表、批量生成与海报工厂:一次讲清楚 日期:2026-08-23 目的:解释 Nomi 历史上出现过的三条“分镜 → 生成”链路,避免把它们误认为同一个功能。 ## 先说结论 我们之前实际做过、现在最容易混淆的是三件事: | 名称 | 输入 | 一键之后得到什么 | 当前状态 | |---|---|---|---| | 早期故事板主链路 | 一段故事/剧本 | 一批镜头节点,批量生成后可排入时间轴 | 已经在主线里 | | 视频拆解→分镜表→复刻视频 | 一条对标视频 + 自己的商品图 | 计划逐镜出图、转视频、批量复刻 | 方案已定,尚未实施 | | 分镜表驱动的海报工厂 | 一份海报 shotlist JSON | 一次批量得到 6 张营销海报 | 分支里已有实际样张 | 最可能对应“分镜表,然后一键生成什么”的,是第三条: > 一行海报规格 → 一张营销海报 PNG。 它不是视频分镜,也不是 Nomi App 里的表格 UI,而是一个营销素材批量渲染器。 --- ## 一、三条链路为什么会混在一起 三条链路都使用了“镜头表 / storyboard / 批量生成”这些词,但它们解决的是三个不同问题: 1. 故事板主链路解决“有一段故事,怎么变成可生成的镜头”。 2. 视频拆解分镜表解决“有一条对标视频,怎么读懂它并复刻”。 3. 海报工厂解决“有一套营销文案和截图,怎么批量做成统一风格的海报”。 共同底层思想是: 先把内容结构化 ↓ 每一行代表一个可执行单元 ↓ 统一执行、统一重试、统一输出 但“可执行单元”不同: - 故事板:一行是一个镜头节点。 - 视频分镜表:一行是一个从原片拆出来的镜头节点。 - 海报工厂:一行是一张海报的文案与版式规格。 --- ## 二、早期故事板主链路:故事→镜头→批量生成→时间轴 ### 2.1 当时要解决的真实摩擦 用户不想这样工作: 自己读剧本 自己数镜头 自己建 6 个节点 自己写每个 prompt 自己一个个点生成 自己再拖进时间轴 所以早期主链路把它收成: 粘贴故事 ↓ AI 拆出 6–12 个镜头 ↓ 用户确认/修改 ↓ 批量生成镜头 ↓ 一键排到时间轴 历史提交: - b403f763:加入 storyboard-planner skill - ec5a128d:创作区增加“拆镜头”入口 - ba311878:多个工具调用聚合成可确认的计划卡 - 58ece2fa:批量生成 runner + 失败重试 - 64db42eb:一键发送故事板到时间轴 ### 2.2 这里的“一键生成”到底生成什么 这里的一键生成不是生成最终 MP4,而是: > 把选中的多个镜头节点一次性提交给图片/视频模型,生成每个镜头的结果。 它会处理: - 多个镜头排队 - 同波次有限并发 - 依赖波次,例如参考图先于镜头生成 - 单个镜头失败 - 失败镜头单独重试 - 批次整体进度 ### 2.3 “一键落画布”和“一键生成”不是一回事 | 动作 | 实际做什么 | 是否消耗生成额度 | |---|---|---| | 确认并落画布 | 把计划转换成镜头节点、参考节点和连线 | 通常不生成结果 | | 全部生成 | 执行这些节点,向图片/视频模型发请求 | 会消耗额度 | | 一键拼成初稿 | 把已经有结果的镜头按镜序放到时间轴 | 不生成新结果 | 现在的 StoryboardPlanEditor 在确认落画布后,会自动选中新建的一批节点,于是批量生成入口直接出现。这样用户不需要再重新框选一遍。 ### 2.4 早期主链路的最终结果 镜头 1 生成结果 ┐ 镜头 2 生成结果 ├─→ 一键按镜序排入时间轴 → 初稿 镜头 3 生成结果 ┘ 如果某个视频镜头还没有生成成功,时间轴会跳过它,或者用已经生成的关键帧/图片作为占位,而不是假装它已经完成。 --- ## 三、视频拆解→分镜表→复刻视频:真正的产品方案 核心场景是: > 拖入一个对标视频,用自己的商品图替换主体,改一改描述,生成一条复刻广告视频。 ### 3.1 为什么不能只做“按镜头拆” 现有“按镜头拆”主要是用 ffmpeg 找切点,它能回答: > 这条视频大概在哪些地方切开? 但复刻广告还需要知道: - 这一镜是什么景别? - 主体在做什么? - 画面里的字幕写了什么? - 这一镜有没有口播? - 这一镜和下一镜是什么关系? - 原片中哪些东西要保留,哪些东西应该换成用户自己的商品? 因此方案升级为: 切镜 + 每镜首/中/尾三帧 + VLM 读画面 + ASR 转口播 + 把口播按时间戳归到镜头 ↓ 可编辑分镜表 ### 3.2 为什么表格不是新的数据结构 如果新增一个“表格节点”,系统会出现两套真相源: 表格里有一份镜头数据 画布节点里又有一份镜头数据 用户在表格里改了提示词,画布节点没变;画布里换了参考图,表格又没变。这会产生同步地狱。 所以方案定的是: > 表格只是镜头节点组的另一种视图。 - 一行绑定一个现有镜头节点 - 单元格绑定该节点的字段 - 表格里改字段,节点就变 - 节点里生成/重试,表格状态就变 - 不新增 canvas node kind ### 3.3 计划中的内置列 | 列 | 用途 | |---|---| | 镜号 | 保持叙事顺序 | | 原片帧 | 只读对照,帮助用户理解原镜头 | | 时长 | 控制该镜头的生成时长 | | 景别 | 远景、中景、特写等 | | 情绪 | 平静、紧张、兴奋等 | | 画面描述 | AI 对原片内容的解释 | | 对白/口播 | ASR 归属到该镜的文本 | | 参考 | 用户自己的商品图/角色图/场景图 | | 画面提示词 | 真正送给图像或视频模型的 prompt | | 生成 | 出图、转视频、重试 | ### 3.4 原片帧为什么和参考图分开 原片帧 = 我想研究它怎么拍 自己的参考图 = 我希望模型使用的主体 如果把原片帧默认放进参考槽,模型很可能直接照着原广告的主体生成,导致: - 用户的商品没有真正替换进去 - 生成结果变成原片的模仿品 - 还有版权和素材外传风险 因此设计成: - 原片帧默认只读 - 用户可以手动点“用作参考” - 自己的商品图独立放进参考槽 - 换模型时参考数据保留,只按模型能力投影到对应槽位 ### 3.5 自定义列不是为了做成 Excel 自定义列真正有价值的地方,是它能影响 AI 的行为。 每个自定义列有两个开关: #### 让 AI 拆解时填 例如用户加一列“商品卖点”,并写说明: 请识别这一镜最适合强调的商品卖点 AI 拆视频时就会专门填写这一列。 #### 参与生成 如果这一列的值是: 防水、轻便、适合户外 生成这一镜时,这些内容会自动进入 prompt。 所以它不是“多一个备注栏”,而是: > 用户可以通过加列,给 AI 增加新的观察维度和生成约束。 ### 3.6 计划中的一键动作 视频分镜表方案计划有四种执行动作: 1. 逐行出图:先生成该镜的静态画面。 2. 逐行转视频:把该镜图片或关键帧转成视频。 3. 批量生成:把多个镜头交给批量 runner,遵守依赖和付费确认。 4. 批量重试:只重跑失败或被用户标记的镜头。 这些动作目前是方案内容,不代表这张表已经在 App 里存在。 --- ## 四、海报工厂:分镜表→一键生成海报 ### 4.1 它解决的不是视频生产,而是营销素材生产 一套产品截图 + 一批营销文案 ↓ 统一视觉模板 ↓ 一键得到一整套海报 它的分镜表文件是: docs/marketing/poster-shotlist.json 每一行包含: - id - 系列 - 竖版还是横版 - eyebrow 标签 - 标题分行 - 副标题 - 使用哪张真实截图 - 搜索框文案 - 可选 AI 底板 ### 4.2 为什么没有让 AI 直接生成整张海报 #### 产品截图不能被重绘 AI 会把截图里的按钮、文字、图标重新想象一遍。看起来像产品,但不是实际产品。 #### 中文标题不能赌 批量生成时,哪怕只有一张标题错字,也会让整张营销图不能发布。 #### 付费确认不适合悄悄跑几十张 Nomi 的生成闸是按真人确认设计的,不应该为了营销批量绕过用户授权。 所以最终采用两层结构: | 层 | 负责什么 | 是否花生成额度 | |---|---|---| | AI 底板 | 暗色氛围、光晕、背景质感 | 可选,会花额度 | | 程序化合成 | 真实截图、中文标题、Logo、搜索框、排版 | 不花额度 | ### 4.3 竖版海报设计 竖版规格:1080×1440,适合小红书、抖音等渠道。 Logo + 系列标签 ↓ 超大标题,白色和橙色强调 ↓ 灰色副标题 ↓ 倾斜的真实产品截图舞台 ↓ 独立的 GitHub Nomi 搜索框 ↓ 橙色品牌底条 硬约束: - 搜索框不能压在截图上 - 截图旋转后右上角会抬高,要给副标题留空间 - 截图舞台必须裁切溢出内容 - 颜色只用深黑、米白、一个橙色强调 - 不使用大量渐变、emoji 和重阴影 ### 4.4 横版海报设计 横版规格:1600×900,适合 B 站、X、网页分享。 左侧 53%:标签 + 标题 + 副标题 + 搜索入口 右侧 47%:真实产品截图 横版更像产品发布会宣传图,信息少一点,截图更大一点。 ### 4.5 “一键”具体指什么 它不是 App 里的按钮,而是一个批量渲染命令: node scripts/render-marketing-posters.mjs 程序会: 1. 读取 poster-shotlist.json; 2. 逐行读取标题、标签、副标题和截图路径; 3. 根据 xhs 或 wide 选择版式; 4. 自动调整过长标题的字号; 5. 保留截图原像素; 6. 输出对应 id 的 PNG; 7. 一次生成整套海报。 也可以只生成指定海报: node scripts/render-marketing-posters.mjs A1-one-project B2-3d-stage 这个“一键”真正解决的是: > 改一处 JSON 文案,不需要手工打开设计软件,也不需要重新设计 6 张图。 --- ## 五、两种“分镜表”的本质差异 | 对比项 | 视频分镜表 | 海报 shotlist | |---|---|---| | 一行代表 | 一个视频镜头 | 一张营销海报 | | 输入 | 对标视频 | 文案 + 截图 | | AI 做什么 | 读画面、转写、拆解、生成镜头 | 可选生成氛围底板 | | 程序做什么 | 调模型、批量执行、审片、排时间轴 | 精确排版、贴截图、输出 PNG | | 结果 | 计划中的图片/视频镜头 | 已生成的海报图片 | | 是否已有 UI | 还没有 | 没有 App UI,已有脚本工厂 | | 是否已经产出样张 | 没有真实表格 UI | 已有 6 张样张 | | 主要风险 | 跨镜一致性、参考槽、成本、审片 | 文字准确性、截图真实性、批量授权 | --- ## 六、目前到底哪些能用 ### 已经能用的 - 故事/剧本拆成分镜方案 - 分镜方案确认后落画布 - 画布批量生成多个镜头 - 失败镜头单独重试 - 已生成镜头一键排入时间轴 - 海报 shotlist + 批量 PNG 渲染脚本 - 海报六张实际样张 ### 只有方案、还没施工的 - 视频内容理解型拆解 - 可编辑视频分镜表 - 自定义列驱动 VLM 拆解 - 分镜表中逐行出图/转视频 - 视频分镜表直接复刻广告 - App 内的一键生成海报按钮 --- ## 七、最终判断 正确的产品关系应该是: 故事/剧本 ↓ 故事板分镜 ↓ 批量生成镜头 ↓ 时间轴初稿 另一条是: 对标视频 ↓ 视频分镜表 ↓ 换商品图 / 改卖点 / 改 prompt ↓ 批量复刻视频 海报工厂则是旁边的营销生产线: 产品截图 + 营销文案 ↓ poster-shotlist.json ↓ 批量渲染 ↓ 6 张统一风格海报 它们共享“结构化清单 + 批量执行”的思想,但不应该被做成一套混在一起的 UI。 --- ## 相关历史位置 - 视频分镜表方案:docs/plan/2026-08-13-video-deconstruction-storyboard-table.md - 海报工厂方案:docs/marketing/2026-08-20-poster-factory.md - 海报输入:docs/marketing/poster-shotlist.json - 海报渲染器:scripts/render-marketing-posters.mjs - 早期故事板计划:docs/archive/2026-05-shipped/nomi-agent-migration-plan-2026-05-23.md