ComfyUI Node

BD Bulk Save

Save N inputs in ONE Run using a save context. Wire BD_DerivePBR's 7 outputs to input_1..input_7, set labels accordingly, and all 7 files save in a single Run. No queueing. Replaces N parallel BD_SaveFile nodes for batch save scenarios.

By BizaNator·Created 7 months ago·Updated 16 days ago· 14
BD Bulk Save
  • alpha_mask
  • input_1
  • input_2
  • input_3
  • input_4
  • input_5
  • input_6
  • input_7
  • input_8
  • input_9
  • input_10
  • input_11
  • input_12
  • input_13
  • input_14
  • input_15
  • input_16
  • saved_count
  • filepaths
  • status
labelsalbedo normal roughness metallic ao
label_prefix_
context_id
formatpng
jpg_quality95
skip_if_existsfalse
custom_vars
save_alpha_separatelyfalse
invert_alphafalse
Category🧠BrainDead/Cache

Inputs (26)

NameTypeDefaultDescription
labelsSTRINGalbedo normal roughness metallic aoOne label per line, aligned with WIRED inputs (after skipping empty slots). If labels list is shorter than wired inputs, missing labels save with empty suffix.
label_prefixoptSTRING_Prepended to each label before becoming the save suffix. Default '_' so label='albedo' → suffix='_albedo' → file ends in '_albedo'.
context_idoptSTRINGMatch a BD_SaveContext id. Empty + exactly one context registered = auto-pick.
formatoptCOMBOpng3 options: png, jpg, webp
jpg_qualityoptINT951–100
skip_if_existsoptBOOLEANfalseIf True, don't overwrite existing files (still reports their path).
custom_varsoptSTRINGExtra variables applied to ALL bulk-saved files in this batch. One per line as key=value. Layered ON TOP of the context's custom_vars. Examples: subfolder=PBR materials=metal pass=4k Become %subfolder%, %materials%, %pass% in the template. Empty values OK.
save_alpha_separatelyoptBOOLEANfalseAlso write the alpha channel as a standalone greyscale PNG alongside the main file, named with the same suffix + '_alpha'. Source of the alpha pixels: • alpha_mask wired → uses the mask (after invert_alpha) • no mask wired, image has 4 channels (RGBA) → extracts the embedded A channel • no mask wired, image is RGB (3ch) → no alpha to extract; this output is skipped NOTE: the _alpha.png is a RAW greyscale representation — white pixel = opaque area, black pixel = transparent area. It is NOT a composited preview; open the main RGBA PNG in a viewer that supports transparency to see the actual cut-out.
alpha_maskoptMASKBake this mask into the saved file's alpha channel before writing. Convention: WHITE (1.0) = OPAQUE, BLACK (0.0) = TRANSPARENT. Face mask (white face, black background) → face is opaque, background is cut out. Background mask (white background, black face) → use invert_alpha=True. If you already have an RGBA image (4-channel), you do NOT need to wire alpha_mask — the embedded alpha is preserved automatically when saving. The upstream image tensor is NOT modified — transparency is baked only in the saved file. Accepts batched masks (B, H, W); single (H,W) or (1,H,W) applies to all frames.
invert_alphaoptBOOLEANfalseFlip the mask polarity before baking as alpha. Use when your mask has white=background / black=subject and you want the subject opaque.
input_1opt*Input slot #1. Wire any data type. Empty slots are skipped.
input_2opt*Input slot #2. Wire any data type. Empty slots are skipped.
input_3opt*Input slot #3. Wire any data type. Empty slots are skipped.
input_4opt*Input slot #4. Wire any data type. Empty slots are skipped.
input_5opt*Input slot #5. Wire any data type. Empty slots are skipped.
input_6opt*Input slot #6. Wire any data type. Empty slots are skipped.
input_7opt*Input slot #7. Wire any data type. Empty slots are skipped.
input_8opt*Input slot #8. Wire any data type. Empty slots are skipped.
input_9opt*Input slot #9. Wire any data type. Empty slots are skipped.
input_10opt*Input slot #10. Wire any data type. Empty slots are skipped.
input_11opt*Input slot #11. Wire any data type. Empty slots are skipped.
input_12opt*Input slot #12. Wire any data type. Empty slots are skipped.
input_13opt*Input slot #13. Wire any data type. Empty slots are skipped.
input_14opt*Input slot #14. Wire any data type. Empty slots are skipped.
input_15opt*Input slot #15. Wire any data type. Empty slots are skipped.
input_16opt*Input slot #16. Wire any data type. Empty slots are skipped.

Outputs (3)

NameTypeDescription
saved_countINT
filepathsSTRING
statusSTRING