Adobe Firefly 3.0 生成填充批量处理 / 先跑通一张再放大到整批

文章导读
几十张商品图要用生成填充批量处理,真正的卡点通常不在生成本身,而在两件事:单张流程能不能被稳定重复,以及批量脚本有没有把原图挡在只读位置。Adobe Firefly 3.0 的生成填充在画布上带交互,点“生成填充”之后还要在结果栏里确认变体,这类操作不一定能被 Photoshop 动作完整录制并回放。稳妥的路径是先把单张步骤固化成可回放的流程,做出“输出张数、文件大小、保存路径”三项对比,再考虑用
📋 目录
  1. 先在单张图上把生成填充流程录成动作
  2. 列出每次生成前后要对比的三个量
  3. 写一段通用脚本骨架,把选区、提示词、保存路径做成变量
  4. 在副本目录上试跑 10 张,确认没有覆盖原图
  5. 扩到整批时的分批与中断处理
A A

几十张商品图要用生成填充批量处理,真正的卡点通常不在生成本身,而在两件事:单张流程能不能被稳定重复,以及批量脚本有没有把原图挡在只读位置。Adobe Firefly 3.0 的生成填充在画布上带交互,点“生成填充”之后还要在结果栏里确认变体,这类操作不一定能被 Photoshop 动作完整录制并回放。稳妥的路径是先把单张步骤固化成可回放的流程,做出“输出张数、文件大小、保存路径”三项对比,再考虑用带变量和校验的脚本扩到整批;原图只进副本目录,输出写独立目录,回滚靠备份,而不是指望脚本一次写对。

先跑通一张的判断标准不是生成效果好不好,而是同一张输入重复执行两次能落到同一输出路径、输出张数一致、原图修改时间未被改动。批量前把输入复制到副本目录、输出写到独立目录、脚本只读输入,覆盖风险就落在备份和回滚流程上。生成填充的点击与结果确认是否可录制,需要在本机实际回放确认,不能默认它一定能被动作记录。

先在单张图上把生成填充流程录成动作

动作能录到什么程度,取决于本机 Photoshop 版本和动作面板的实际表现,需要自己录一遍确认。通常能录下来的是:打开文件、新建图层、矩形/套索/快速选择工具画出选区、另存为副本、导出。生成填充的点击动作和结果栏里的确认操作,在不少版本里不会被完整记录,回放时容易停在等待状态或直接跳过这一步。

  • 检查点:录完后逐条看动作面板里的步骤,凡是步骤名带“生成填充 / Generative Fill”或参数为空的条目,先按“不可回放”处理,不要直接拿去做批处理。
  • 替代做法:把打开—画选区—另存副本录成动作,生成填充这一步留手动确认;或者把选区坐标、提示词做成脚本参数传入,在本机脚本编辑器里调用它提示出来的命令,不要假设某个未验证的接口名可用。
  • 回放验证:在原图之外复制一份副本,对副本回放两次,检查输出张数、输出文件路径、原图修改时间是否变化。两次结果一致、且原图未被改动,才算这条流程具备批量化的基础。

风险边界是:动作回放通过只说明本机当前版本可复现,换版本或换机器后需要重新验证一次。

列出每次生成前后要对比的三个量

批量跑几十张时,判断有没有出错不能靠肉眼逐张看,建议在每次生成前后对比三个量。

Adobe Firefly 3.0 生成填充批量处理 / 先跑通一张再放大到整批
  • 输出张数:每张原图预期生成几个变体,实际输出文件是不是这个数量。
  • 文件大小:输出文件是否明显偏小(例如只有几 KB),可能意味着只写了占位或保存中断。
  • 保存路径:输出是否落在 output 目录,而不是写回了原图目录。

记录表至少保留这些字段:批次号、序号、原图文件名、原图大小、原图修改时间、输出文件名、输出大小、输出张数、输出路径、状态、备注。

出现偏差时按这个顺序处理:先暂停批处理,让当前文件收尾;再对比原图的大小和修改时间,确认是否被覆盖;然后核对输出目录张数与预期是否一致;如果原图被改动,从 backup 恢复;最后缩小批次,在副本目录上重跑,稳定后再放大。

写一段通用脚本骨架,把选区、提示词、保存路径做成变量

脚本骨架的作用,是把“换一张图就要改一遍”的地方抽成变量。下面这段是示意结构,具体命令名以本机脚本编辑器给出的提示为准,不预设任何未验证的接口。

// 示意图:变量占位 + 执行前校验
var cfg = {
  inputDir:  'D:/work/input_copy',   // 原图副本,脚本只读
  outputDir: 'D:/work/output',       // 生成结果目录
  backupDir: 'D:/work/backup',
  logFile:   'D:/work/logs/run.log',
  prompt:    '替换为本次提示词',
  selection: { left: 0, top: 0, right: 0, bottom: 0 }, // 选区坐标,按像素或画布比例填
  batchSize: 10
};

function checkPaths(c) {
  ['inputDir', 'outputDir', 'backupDir'].forEach(function (k) {
    if (!new Folder(c[k]).exists) throw new Error('目录不存在: ' + c[k]);
  });
  if (c.inputDir === c.outputDir) throw new Error('输入目录与输出目录不能相同');
  var probe = new File(c.outputDir + '/.__probe');
  if (!probe.open('w')) throw new Error('输出目录不可写: ' + c.outputDir);
  probe.writeln('probe'); probe.close(); probe.remove();
}

变量占位建议统一写成 INPUT_DIRPROMPTOUTPUT_DIR 这类形式,从配置文件或命令行读入,不要把某一张图的坐标和提示词写死在脚本里。执行前至少做三项检查:输入目录存在、输出目录存在且可写、输入目录和输出目录不是同一个路径。

Adobe Firefly 3.0 生成填充批量处理 / 先跑通一张再放大到整批
# 执行前路径检查(示意)
test -d "$INPUT_DIR" || { echo "输入目录不存在"; exit 1; }
test -d "$OUTPUT_DIR" && test -w "$OUTPUT_DIR" || { echo "输出目录不可写"; exit 1; }
[ "$INPUT_DIR" != "$OUTPUT_DIR" ] || { echo "输入输出目录相同"; exit 1; }

在副本目录上试跑 10 张,确认没有覆盖原图

正式批次之前,先在副本目录上跑 10 张。这一步唯一的目标是确认原图没有被覆盖,不是确认生成效果好不好。

work/
  input_copy/   # 原图副本,脚本只读
  output/       # 本轮结果
  backup/       # 覆盖前的备份
  logs/         # 运行日志
  done.txt      # 已完成文件清单

备份动作放在试跑之前:把原图目录整体复制到 backup,至少也要复制将被改动的那些文件,并记录校验和(例如用 sha256sum 生成一份清单)。试跑时输出一律写 output,不允许写回 input_copy。

中断后的回滚步骤:停止脚本;对比 input_copy 与 backup 的文件列表、大小和修改时间;对被改动的文件从 backup 恢复;重新计算校验和,与备份清单一致;清掉 output 里这一轮不完整的文件,再重跑。验证方式是回滚后对 input_copy 再做一次校验和比对,并确认文件数量与原图一致。

Adobe Firefly 3.0 生成填充批量处理 / 先跑通一张再放大到整批

扩到整批时的分批与中断处理

确认 10 张没问题之后,再考虑扩到整批,并保留分批和中断能力。批次大小可以先从 10 张一批开始,观察日志和输出目录,稳定后再放大;批次越大,一次中断要重跑的范围也越大。

日志建议记录:批次号、起始序号、结束序号、原始文件名、输出文件名、输出张数、输出大小、开始时间、结束时间、状态(成功/跳过/失败)、失败原因。日志写到文件,不要只打印在控制台。

中断后定位继续位置有两种做法:读日志里最后一条状态为成功的记录,从它的下一张开始;或者维护一个 done 清单,每完成一张追加一行文件名,脚本启动时先读清单跳过已完成项。如果日志里已经有失败记录,建议先把失败项单独重跑并确认输出,再继续整批,不要直接跳到下一批。