diff --git a/modules/shared.py b/modules/shared.py index 372569b58..c10e5a549 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -110,7 +110,8 @@ class Options: "outdir_txt2img_grids": OptionInfo("outputs/txt2img-grids", 'Output directory for txt2img grids', component_args=hide_dirs), "outdir_img2img_grids": OptionInfo("outputs/img2img-grids", 'Output directory for img2img grids', component_args=hide_dirs), "outdir_save": OptionInfo("log/images", "Directory for saving images using the Save button", component_args=hide_dirs), - "samples_save": OptionInfo(True, "Save indiviual samples"), + "samples_save": OptionInfo(True, "Save individual samples"), + "save_selected_only": OptionInfo(False, "Save selected image only, not entire job"), "samples_format": OptionInfo('png', 'File format for individual samples'), "filter_nsfw": OptionInfo(False, "Filter NSFW content"), "grid_save": OptionInfo(True, "Save image grids"), diff --git a/modules/ui.py b/modules/ui.py index d1aa77932..da481fbfc 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -79,15 +79,19 @@ def send_gradio_gallery_to_image(x): return image_from_url_text(x[0]) - -def save_files(js_data, images): +def save_files(js_data, images, index): import csv + os.makedirs(opts.outdir_save, exist_ok=True) filenames = [] data = json.loads(js_data) + + if index > -1 and opts.save_selected_only and len(images) > 1 and (index > 0 or not opts.return_grid): # ensures we are looking at a specific picture, we have save_selected_only, and there's more than a single image (for correct seed logging in case of return_grid) + images = [images[index]] + data["seed"] += (index - 1 if opts.return_grid else index) with open(os.path.join(opts.outdir_save, "log.csv"), "a", encoding="utf8", newline='') as file: at_start = file.tell() == 0 @@ -348,9 +352,11 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): save.click( fn=wrap_gradio_call(save_files), + _js = "(x, y, z) => [x, y, selected_gallery_index()]", inputs=[ generation_info, txt2img_gallery, + html_info ], outputs=[ html_info, @@ -568,9 +574,11 @@ def create_ui(txt2img, img2img, run_extras, run_pnginfo): save.click( fn=wrap_gradio_call(save_files), + _js = "(x, y, z) => [x, y, selected_gallery_index()]", inputs=[ generation_info, img2img_gallery, + html_info ], outputs=[ html_info,