Extensions/ComfyUI_BatchImages
ComfyUI Extension

ComfyUI_BatchImages

ComfyUI nodes for batch loading images from ZIP archives, filtering by index, and saving with original filenames. (Description by CC)

By kegeai888·Created 4 months ago·Updated 4 months ago· 0
kegeai888/ComfyUI_BatchImages
Nodes
On cloudLocal install
Stars0
Updated4 months ago
Readme

ComfyUI_BatchImages

ComfyUI 自定义节点,用于从 ZIP 压缩包批量加载图片、按索引筛选,并按原始文件名保存输出。

安装方式

  1. 将本仓库放到 ComfyUI/custom_nodes/ 目录下。
  2. 重启 ComfyUI。
  3. 重启后可在 BatchImages 分类下找到相关节点。

节点说明

RHUploadZip_V2

用途:从 ComfyUI 的 input 目录选择一个 .zip 文件,解压其中支持的图片并输出清单。

  • 输入:
    • image:ZIP 文件名,只显示 input 目录中的 .zip 文件。
  • 前端行为:
    • 节点会额外提供一个 Upload ZIP 按钮。
    • 点击后会打开文件选择框,并把 ZIP 上传到 ComfyUI 的 /upload/image 接口。
  • 输出:
    • images(as list):解压后成功读取的图片列表。
    • masks(as list):与图片对应的遮罩列表。
    • folder_path:本次批量解压的临时目录。
    • manifest:图片清单,供后续节点继续使用。

处理规则:

  • 仅识别 .png.jpg.jpeg.webp
  • ZIP 内目录、隐藏文件、隐藏目录、__MACOSX 条目会跳过。
  • ZIP 成员路径会做校验,不允许绝对路径或 .. 越界路径。
  • 如果某个图片文件无法读取,会跳过该文件;如果全部都不可读,则节点报错。
  • 多帧图片不支持,遇到后会跳过该文件。

RHBatchImages:

用途:按索引表达式从图片列表中筛选子集,并同步筛选对应的 manifest。

  • 输入:
    • images:上游图片列表。
    • image_indices:索引表达式,默认 0-100
    • manifest:上游清单。
  • 输出:
    • image:筛选后的图片列表。
    • selected_manifest:筛选后的清单。

索引语法:

  • 单个索引:0
  • 多个索引:0,2,5
  • 范围:0-3
  • 混合写法:0,2-4,7

补充说明:

  • 索引从 0 开始。
  • 超出范围的索引会被忽略。
  • 重复索引只会保留一次,并按输入顺序输出。
  • 如果表达式格式错误,或最终没有任何有效索引,会报错。

RHSaveImageOriginalName

用途:将图片按原始文件名保存到 ComfyUI 输出目录,并尽量保留 ZIP 内原有目录结构。

  • 输入:
    • images:待保存图片列表。
    • manifest:与图片对应的清单。
    • filename_prefix:输出根目录前缀,默认 ComfyUI
  • 输出:
    • 作为输出节点写入文件,并在 UI 中返回保存结果。

保存规则:

  • 输出根目录为 ComfyUI 的 output 目录。
  • 最终路径形式为:output/<filename_prefix>/<ZIP中的相对子目录>/<原文件名>
  • 文件名来自原图文件名,扩展名沿用原始清单中的后缀。
  • 若目标文件已存在,会自动追加 _1_2 等后缀避免覆盖。
  • filename_prefix 和目录段会做安全清洗,不允许写到 output 目录之外。
  • PNG 输出会写入 prompt 与 extra_pnginfo 元数据;JPG/JPEG/WebP 不写 PNG 元数据。

典型工作流

推荐连接方式:

RHUploadZip_V2 -> RHBatchImages: -> 处理中间节点 -> RHSaveImageOriginalName

示例流程:

  1. RHUploadZip_V2 中选择或上传一个 ZIP。
  2. images(as list)manifest 连接到 RHBatchImages:
  3. image_indices 中填写要处理的图片范围,例如 0-90,2,4-6
  4. 将筛选后的 image 接到你的处理节点。
  5. 将处理后的图片和 selected_manifest 一起传给 RHSaveImageOriginalName
  6. filename_prefix 中设置输出子目录,例如 batch_run_01

输出行为

  • 保存位置在 ComfyUI 的 output 目录下。
  • 会保留 ZIP 中图片的相对子目录结构;目录名会经过安全清洗。
  • 如果原始路径中包含不安全字符,会替换为下划线。
  • 若同名文件已存在,不会覆盖,而是自动增加数字后缀。

例如 ZIP 内有:

  • setA/cat.png
  • setA/dog.jpg

filename_prefixbatch_demo,则输出类似:

  • output/batch_demo/setA/cat.png
  • output/batch_demo/setA/dog.jpg

如果 cat.png 已存在,则会生成 cat_1.png

注意事项

  • 支持格式仅为 .png.jpg.jpeg.webp
  • ZIP 中的隐藏文件、隐藏目录以及 __MACOSX 条目会被跳过。
  • 多帧图片不支持。
  • image_indices 中越界的索引会忽略,不会单独报错。
  • 如果图片列表与 manifest 数量不一致,筛选或保存节点会报错。

验证方式

可按下面命令验证实现与 README 描述是否一致:

pytest tests-unit/custom_nodes/test_comfyui_batch_images.py -v
pytest tests/execution/test_batch_images_execution.py -v

建议核对以下几点:

  • 节点名是否为 RHUploadZip_V2RHBatchImages:RHSaveImageOriginalName
  • 支持格式是否仅包含 .png/.jpg/.jpeg/.webp
  • 索引表达式是否支持 0,2-4 这类写法
  • 输出路径是否保留相对子目录,且重名时自动追加后缀

Repository

  • GitHub: https://github.com/kegeai888/ComfyUI_BatchImages