Commit 7581da5d authored by AUTOMATIC1111's avatar AUTOMATIC1111 Committed by GitHub

Merge pull request #14645 from AUTOMATIC1111/infotexts

geninfo from Infotexts
parents 41c2121e 45a51c07
...@@ -6,6 +6,7 @@ from modules import scripts, ui, errors ...@@ -6,6 +6,7 @@ from modules import scripts, ui, errors
from modules.infotext_utils import PasteField from modules.infotext_utils import PasteField
from modules.shared import cmd_opts from modules.shared import cmd_opts
from modules.ui_components import ToolButton from modules.ui_components import ToolButton
from modules import infotext_utils
class ScriptSeed(scripts.ScriptBuiltinUI): class ScriptSeed(scripts.ScriptBuiltinUI):
...@@ -77,7 +78,6 @@ class ScriptSeed(scripts.ScriptBuiltinUI): ...@@ -77,7 +78,6 @@ class ScriptSeed(scripts.ScriptBuiltinUI):
p.seed_resize_from_h = seed_resize_from_h p.seed_resize_from_h = seed_resize_from_h
def connect_reuse_seed(seed: gr.Number, reuse_seed: gr.Button, generation_info: gr.Textbox, is_subseed): def connect_reuse_seed(seed: gr.Number, reuse_seed: gr.Button, generation_info: gr.Textbox, is_subseed):
""" Connects a 'reuse (sub)seed' button's click event so that it copies last used """ Connects a 'reuse (sub)seed' button's click event so that it copies last used
(sub)seed value from generation info the to the seed field. If copying subseed and subseed strength (sub)seed value from generation info the to the seed field. If copying subseed and subseed strength
...@@ -85,21 +85,14 @@ def connect_reuse_seed(seed: gr.Number, reuse_seed: gr.Button, generation_info: ...@@ -85,21 +85,14 @@ def connect_reuse_seed(seed: gr.Number, reuse_seed: gr.Button, generation_info:
def copy_seed(gen_info_string: str, index): def copy_seed(gen_info_string: str, index):
res = -1 res = -1
try: try:
gen_info = json.loads(gen_info_string) gen_info = json.loads(gen_info_string)
index -= gen_info.get('index_of_first_image', 0) infotext = gen_info.get('infotexts')[index]
gen_parameters = infotext_utils.parse_generation_parameters(infotext, [])
if is_subseed and gen_info.get('subseed_strength', 0) > 0: res = int(gen_parameters.get('Variation seed' if is_subseed else 'Seed', -1))
all_subseeds = gen_info.get('all_subseeds', [-1]) except Exception:
res = all_subseeds[index if 0 <= index < len(all_subseeds) else 0]
else:
all_seeds = gen_info.get('all_seeds', [-1])
res = all_seeds[index if 0 <= index < len(all_seeds) else 0]
except json.decoder.JSONDecodeError:
if gen_info_string: if gen_info_string:
errors.report(f"Error parsing JSON generation info: {gen_info_string}") errors.report(f"Error retrieving seed from generation info: {gen_info_string}", exc_info=True)
return [res, gr.update()] return [res, gr.update()]
......
...@@ -40,8 +40,9 @@ def save_files(js_data, images, do_make_zip, index): ...@@ -40,8 +40,9 @@ def save_files(js_data, images, do_make_zip, index):
import csv import csv
filenames = [] filenames = []
fullfns = [] fullfns = []
parsed_infotexts = []
#quick dictionary to class object conversion. Its necessary due apply_filename_pattern requiring it # quick dictionary to class object conversion. Its necessary due apply_filename_pattern requiring it
class MyObject: class MyObject:
def __init__(self, d=None): def __init__(self, d=None):
if d is not None: if d is not None:
...@@ -49,16 +50,14 @@ def save_files(js_data, images, do_make_zip, index): ...@@ -49,16 +50,14 @@ def save_files(js_data, images, do_make_zip, index):
setattr(self, key, value) setattr(self, key, value)
data = json.loads(js_data) data = json.loads(js_data)
p = MyObject(data) p = MyObject(data)
path = shared.opts.outdir_save path = shared.opts.outdir_save
save_to_dirs = shared.opts.use_save_to_dirs_for_ui save_to_dirs = shared.opts.use_save_to_dirs_for_ui
extension: str = shared.opts.samples_format extension: str = shared.opts.samples_format
start_index = 0 start_index = 0
only_one = False
if index > -1 and shared.opts.save_selected_only and (index >= data["index_of_first_image"]): # ensures we are looking at a specific non-grid picture, and we have save_selected_only if index > -1 and shared.opts.save_selected_only and (index >= data["index_of_first_image"]): # ensures we are looking at a specific non-grid picture, and we have save_selected_only
only_one = True
images = [images[index]] images = [images[index]]
start_index = index start_index = index
...@@ -74,10 +73,12 @@ def save_files(js_data, images, do_make_zip, index): ...@@ -74,10 +73,12 @@ def save_files(js_data, images, do_make_zip, index):
image = image_from_url_text(filedata) image = image_from_url_text(filedata)
is_grid = image_index < p.index_of_first_image is_grid = image_index < p.index_of_first_image
i = 0 if is_grid else (image_index - p.index_of_first_image)
p.batch_index = image_index-1 p.batch_index = image_index-1
fullfn, txt_fullfn = modules.images.save_image(image, path, "", seed=p.all_seeds[i], prompt=p.all_prompts[i], extension=extension, info=p.infotexts[image_index], grid=is_grid, p=p, save_to_dirs=save_to_dirs)
parameters = parameters_copypaste.parse_generation_parameters(data["infotexts"][image_index], [])
parsed_infotexts.append(parameters)
fullfn, txt_fullfn = modules.images.save_image(image, path, "", seed=parameters['Seed'], prompt=parameters['Prompt'], extension=extension, info=p.infotexts[image_index], grid=is_grid, p=p, save_to_dirs=save_to_dirs)
filename = os.path.relpath(fullfn, path) filename = os.path.relpath(fullfn, path)
filenames.append(filename) filenames.append(filename)
...@@ -86,12 +87,12 @@ def save_files(js_data, images, do_make_zip, index): ...@@ -86,12 +87,12 @@ def save_files(js_data, images, do_make_zip, index):
filenames.append(os.path.basename(txt_fullfn)) filenames.append(os.path.basename(txt_fullfn))
fullfns.append(txt_fullfn) fullfns.append(txt_fullfn)
writer.writerow([data["prompt"], data["seed"], data["width"], data["height"], data["sampler_name"], data["cfg_scale"], data["steps"], filenames[0], data["negative_prompt"]]) writer.writerow([parsed_infotexts[0]['Prompt'], parsed_infotexts[0]['Seed'], data["width"], data["height"], data["sampler_name"], data["cfg_scale"], data["steps"], filenames[0], parsed_infotexts[0]['Negative prompt']])
# Make Zip # Make Zip
if do_make_zip: if do_make_zip:
zip_fileseed = p.all_seeds[index-1] if only_one else p.all_seeds[0] p.all_seeds = [parameters['Seed'] for parameters in parsed_infotexts]
namegen = modules.images.FilenameGenerator(p, zip_fileseed, p.all_prompts[0], image, True) namegen = modules.images.FilenameGenerator(p, parsed_infotexts[0]['Seed'], parsed_infotexts[0]['Prompt'], image, True)
zip_filename = namegen.apply(shared.opts.grid_zip_filename_pattern or "[datetime]_[[model_name]]_[seed]-[seed_last]") zip_filename = namegen.apply(shared.opts.grid_zip_filename_pattern or "[datetime]_[[model_name]]_[seed]-[seed_last]")
zip_filepath = os.path.join(path, f"{zip_filename}.zip") zip_filepath = os.path.join(path, f"{zip_filename}.zip")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment