@ -16,11 +16,16 @@ import modules.images as images
import modules . scripts
def process_batch ( p , input_dir , output_dir , args) :
def process_batch ( p , input_dir , output_dir , inpaint_mask_dir, args) :
processing . fix_seed ( p )
images = shared . listfiles ( input_dir )
inpaint_masks = shared . listfiles ( inpaint_mask_dir )
is_inpaint_batch = inpaint_mask_dir and len ( inpaint_masks ) > 0
if is_inpaint_batch :
print ( f " \n Inpaint batch is enabled. { len ( inpaint_masks ) } masks found. " )
print ( f " Will process { len ( images ) } images, creating { p . n_iter * p . batch_size } new images for each. " )
save_normally = output_dir == ' '
@ -43,6 +48,15 @@ def process_batch(p, input_dir, output_dir, args):
img = ImageOps . exif_transpose ( img )
p . init_images = [ img ] * p . batch_size
if is_inpaint_batch :
# try to find corresponding mask for an image using simple filename matching
mask_image_path = os . path . join ( inpaint_mask_dir , os . path . basename ( image ) )
# if not found use first one ("same mask for all images" use-case)
if not mask_image_path in inpaint_masks :
mask_image_path = inpaint_masks [ 0 ]
mask_image = Image . open ( mask_image_path )
p . image_mask = mask_image
proc = modules . scripts . scripts_img2img . run ( p , * args )
if proc is None :
proc = process_images ( p )
@ -59,7 +73,7 @@ def process_batch(p, input_dir, output_dir, args):
processed_image . save ( os . path . join ( output_dir , filename ) )
def img2img ( id_task : str , mode : int , prompt : str , negative_prompt : str , prompt_styles , init_img , sketch , init_img_with_mask , inpaint_color_sketch , inpaint_color_sketch_orig , init_img_inpaint , init_mask_inpaint , steps : int , sampler_index : int , mask_blur : int , mask_alpha : float , inpainting_fill : int , restore_faces : bool , tiling : bool , n_iter : int , batch_size : int , cfg_scale : float , denoising_strength : float , seed : int , subseed : int , subseed_strength : float , seed_resize_from_h : int , seed_resize_from_w : int , seed_enable_extras : bool , height : int , width : int , resize_mode : int , inpaint_full_res : bool , inpaint_full_res_padding : int , inpainting_mask_invert : int , img2img_batch_input_dir : str , img2img_batch_output_dir : str , * args ) :
def img2img ( id_task : str , mode : int , prompt : str , negative_prompt : str , prompt_styles , init_img , sketch , init_img_with_mask , inpaint_color_sketch , inpaint_color_sketch_orig , init_img_inpaint , init_mask_inpaint , steps : int , sampler_index : int , mask_blur : int , mask_alpha : float , inpainting_fill : int , restore_faces : bool , tiling : bool , n_iter : int , batch_size : int , cfg_scale : float , denoising_strength : float , seed : int , subseed : int , subseed_strength : float , seed_resize_from_h : int , seed_resize_from_w : int , seed_enable_extras : bool , height : int , width : int , resize_mode : int , inpaint_full_res : bool , inpaint_full_res_padding : int , inpainting_mask_invert : int , img2img_batch_input_dir : str , img2img_batch_output_dir : str , img2img_batch_inpaint_mask_dir : str , * args ) :
is_batch = mode == 5
if mode == 0 : # img2img
@ -139,7 +153,7 @@ def img2img(id_task: str, mode: int, prompt: str, negative_prompt: str, prompt_s
if is_batch :
assert not shared . cmd_opts . hide_ui_dir_config , " Launched with --hide-ui-dir-config, batch img2img disabled "
process_batch ( p , img2img_batch_input_dir , img2img_batch_output_dir , args)
process_batch ( p , img2img_batch_input_dir , img2img_batch_output_dir , img2img_batch_inpaint_mask_dir, args)
processed = Processed ( p , [ ] , p . seed , " " )
else :