mirror of
https://github.com/vladmandic/automatic
synced 2026-09-19 09:14:35 +02:00
refactor html-info and do some linting cleanups
This commit is contained in:
@@ -122,15 +122,21 @@ confidence=HIGH,
|
||||
INFERENCE_FAILURE,
|
||||
UNDEFINED
|
||||
# disable=C,R,W
|
||||
disable=raw-checker-failed,
|
||||
bad-inline-option,
|
||||
disable=bad-inline-option,
|
||||
bare-except,
|
||||
broad-exception-caught,
|
||||
consider-iterating-dictionary,
|
||||
consider-using-dict-items,
|
||||
consider-using-generator,
|
||||
consider-using-enumerate,
|
||||
consider-using-sys-exit,
|
||||
consider-using-from-import,
|
||||
consider-using-in,
|
||||
dangerous-default-value,
|
||||
deprecated-pragma,
|
||||
duplicate-code,
|
||||
file-ignored,
|
||||
import-error,
|
||||
import-outside-toplevel,
|
||||
invalid-name,
|
||||
line-too-long,
|
||||
@@ -139,16 +145,19 @@ disable=raw-checker-failed,
|
||||
missing-class-docstring,
|
||||
missing-function-docstring,
|
||||
missing-module-docstring,
|
||||
duplicate-code,
|
||||
no-else-return,
|
||||
pointless-string-statement,
|
||||
raw-checker-failed,
|
||||
simplifiable-if-expression,
|
||||
suppressed-message,
|
||||
too-many-nested-blocks,
|
||||
too-few-public-methods,
|
||||
unnecessary-dunder-call,
|
||||
unnecessary-lambda,
|
||||
use-dict-literal,
|
||||
use-symbolic-message-instead,
|
||||
too-many-nested-blocks,
|
||||
useless-suppression,
|
||||
wrong-import-position,
|
||||
import-error,
|
||||
simplifiable-if-expression
|
||||
wrong-import-position
|
||||
enable=c-extension-no-member
|
||||
|
||||
[METHOD_ARGS]
|
||||
|
||||
+1
-7
@@ -57,6 +57,7 @@ def grid(data):
|
||||
log.info({ 'grid': { 'name': f, 'size': image.size, 'images': len(data.image) } })
|
||||
image.save(f, 'JPEG', exif = exif(data.info, None, 'grid'), optimize = True, quality = 70)
|
||||
return image
|
||||
return data.image
|
||||
|
||||
|
||||
def exif(info, i = None, op = 'generate'):
|
||||
@@ -370,10 +371,3 @@ if __name__ == '__main__':
|
||||
log.info({ 'sampler performance': avg })
|
||||
log.info({ 'stats' : stats })
|
||||
asyncio.run(close())
|
||||
'''
|
||||
except Exception as e:
|
||||
log.info({ 'sampler performance': avg })
|
||||
log.info({ 'stats': stats })
|
||||
log.critical({ 'exception': e })
|
||||
exit()
|
||||
'''
|
||||
|
||||
+1
-1
@@ -14,7 +14,7 @@ from rich import print # pylint: disable=redefined-builtin
|
||||
class Exif: # pylint: disable=single-string-used-for-slots
|
||||
__slots__ = ('__dict__') # pylint: disable=superfluous-parens
|
||||
def __init__(self, image = None):
|
||||
super(Exif, self).__setattr__('exif', Image.Exif())
|
||||
super(Exif, self).__setattr__('exif', Image.Exif()) # pylint: disable=super-with-arguments
|
||||
self.pnginfo = PngImagePlugin.PngInfo()
|
||||
self.tags = {**dict(ExifTags.TAGS.items()), **dict(ExifTags.GPSTAGS.items())}
|
||||
self.ids = {**{v: k for k, v in ExifTags.TAGS.items()}, **{v: k for k, v in ExifTags.GPSTAGS.items()}}
|
||||
|
||||
@@ -18,6 +18,7 @@ from PIL import Image
|
||||
from util import log
|
||||
grid = importlib.import_module('image-grid').grid
|
||||
|
||||
|
||||
def color_to_df(param):
|
||||
colors_pre_list = str(param).replace('([(','').split(', (')[0:-1]
|
||||
df_rgb = [i.split('), ')[0] + ')' for i in colors_pre_list]
|
||||
@@ -87,7 +88,6 @@ def palette(img, params, output):
|
||||
log.info({ 'palette created': output })
|
||||
|
||||
plt.close()
|
||||
return
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
@@ -7,6 +7,7 @@ import xmltodict
|
||||
from rich import print # pylint: disable=redefined-builtin
|
||||
from util import log, Map
|
||||
|
||||
|
||||
def get_nvidia_smi(output='dict'):
|
||||
smi = shutil.which('nvidia-smi')
|
||||
if smi is None:
|
||||
@@ -26,6 +27,8 @@ def get_nvidia_smi(output='dict'):
|
||||
return d
|
||||
elif output == 'json':
|
||||
return json.dumps(d, indent=4)
|
||||
return None
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
res = get_nvidia_smi(output='dict')
|
||||
|
||||
+1
-1
@@ -20,7 +20,7 @@ all_images = []
|
||||
all_images_by_type = {}
|
||||
|
||||
|
||||
class Result(object):
|
||||
class Result():
|
||||
def __init__(self, typ: str, fn: str, tag: str = None, requested: list = []): # noqa: B006
|
||||
self.type = typ
|
||||
self.input = fn
|
||||
|
||||
+4
-4
@@ -62,7 +62,7 @@ async def result(req):
|
||||
return Map({ 'error': req.status, 'reason': req.reason, 'url': req.url })
|
||||
else:
|
||||
json = await req.json()
|
||||
if type(json) == list:
|
||||
if isinstance(json, list):
|
||||
res = json
|
||||
elif json is None:
|
||||
res = {}
|
||||
@@ -79,7 +79,7 @@ def resultsync(req: requests.Response):
|
||||
return Map({ 'error': req.status_code, 'reason': req.reason, 'url': req.url })
|
||||
else:
|
||||
json = req.json()
|
||||
if type(json) == list:
|
||||
if isinstance(json, list):
|
||||
res = json
|
||||
elif json is None:
|
||||
res = {}
|
||||
@@ -169,8 +169,8 @@ def progresssync():
|
||||
|
||||
def get_log():
|
||||
res = getsync('/sdapi/v1/log')
|
||||
for l in res:
|
||||
log.debug(l)
|
||||
for line in res:
|
||||
log.debug(line)
|
||||
return res
|
||||
|
||||
|
||||
|
||||
@@ -86,7 +86,6 @@ if __name__ == '__main__':
|
||||
# print stats
|
||||
print(json.dumps(results, indent = 4))
|
||||
|
||||
|
||||
"""
|
||||
Reference: <https://github.com/pytorch/pytorch/blob/4f4b62e4a255708e928445b6502139d5962974fa/docs/source/dynamo/get-started.rst>
|
||||
Training & Inference backends:
|
||||
|
||||
+4
-4
@@ -71,9 +71,9 @@ def get_memory():
|
||||
|
||||
|
||||
class Map(dict): # pylint: disable=C0205
|
||||
__slots__ = ('__dict__') # pylint: disable=C0325
|
||||
__slots__ = ('__dict__') # pylint: disable=superfluous-parens
|
||||
def __init__(self, *args, **kwargs):
|
||||
super(Map, self).__init__(*args, **kwargs)
|
||||
super(Map, self).__init__(*args, **kwargs) # pylint: disable=super-with-arguments
|
||||
for arg in args:
|
||||
if isinstance(arg, dict):
|
||||
for k, v in arg.items():
|
||||
@@ -100,12 +100,12 @@ class Map(dict): # pylint: disable=C0205
|
||||
def __setattr__(self, key, value):
|
||||
self.__setitem__(key, value)
|
||||
def __setitem__(self, key, value):
|
||||
super(Map, self).__setitem__(key, value)
|
||||
super(Map, self).__setitem__(key, value) # pylint: disable=super-with-arguments
|
||||
self.__dict__.update({key: value})
|
||||
def __delattr__(self, item):
|
||||
self.__delitem__(item)
|
||||
def __delitem__(self, key):
|
||||
super(Map, self).__delitem__(key)
|
||||
super(Map, self).__delitem__(key) # pylint: disable=super-with-arguments
|
||||
del self.__dict__[key]
|
||||
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ def extract(src: str, dst: str, rate: float = 0.015, fps: float = 0, start = 0,
|
||||
images = []
|
||||
if not os.path.isfile(src) or not filetype.is_video(src):
|
||||
log.error({ 'extract': 'input is not movie file' })
|
||||
return
|
||||
return 0
|
||||
dst = dst if dst.endswith('/') else dst + '/'
|
||||
|
||||
video = probe(src)
|
||||
|
||||
+4
-3
@@ -4,7 +4,7 @@ from PIL import Image, ImageOps, ImageFilter, ImageEnhance, ImageChops, Unidenti
|
||||
import modules.scripts
|
||||
from modules import sd_samplers, shared, processing
|
||||
from modules.generation_parameters_copypaste import create_override_settings_dict
|
||||
from modules.ui import plaintext_to_html, infotext_to_html
|
||||
from modules.ui import plaintext_to_html
|
||||
from modules.memstats import memory_stats
|
||||
|
||||
|
||||
@@ -67,7 +67,8 @@ def img2img(id_task: str, mode: int, prompt: str, negative_prompt: str, prompt_s
|
||||
|
||||
if shared.sd_model is None:
|
||||
shared.log.warning('Model not loaded')
|
||||
return
|
||||
return [], '', '', 'Error: model not loaded'
|
||||
|
||||
if init_img is None:
|
||||
shared.log.debug('Init image not set')
|
||||
|
||||
@@ -173,4 +174,4 @@ def img2img(id_task: str, mode: int, prompt: str, negative_prompt: str, prompt_s
|
||||
p.close()
|
||||
generation_info_js = processed.js()
|
||||
shared.log.debug(f'Processed: {len(processed.images)} Memory: {memory_stats()} img')
|
||||
return processed.images, generation_info_js, infotext_to_html(processed.info), plaintext_to_html(processed.comments)
|
||||
return processed.images, generation_info_js, processed.info, plaintext_to_html(processed.comments)
|
||||
|
||||
@@ -4,7 +4,7 @@ from typing import List
|
||||
|
||||
from PIL import Image
|
||||
|
||||
from modules import shared, images, devices, scripts, scripts_postprocessing, ui_common, generation_parameters_copypaste
|
||||
from modules import shared, images, devices, scripts, scripts_postprocessing, generation_parameters_copypaste
|
||||
from modules.shared import opts
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ def run_postprocessing(extras_mode, image, image_folder: List[tempfile.NamedTemp
|
||||
outputs.append(pp.image)
|
||||
|
||||
devices.torch_gc()
|
||||
return outputs, ui_common.infotext_to_html(infotext), params
|
||||
return outputs, infotext, params
|
||||
|
||||
|
||||
def run_extras(extras_mode, resize_mode, image, image_folder, input_dir, output_dir, show_extras_results, gfpgan_visibility, codeformer_visibility, codeformer_weight, upscaling_resize, upscaling_resize_w, upscaling_resize_h, upscaling_crop, extras_upscaler_1, extras_upscaler_2, extras_upscaler_2_visibility, upscale_first: bool, save_output: bool = True): #pylint: disable=unused-argument
|
||||
|
||||
+1
-12
@@ -667,14 +667,6 @@ def unload_model_weights(sd_model=None, _info=None):
|
||||
if shared.backend == shared.Backend.ORIGINAL:
|
||||
sd_hijack.model_hijack.undo_hijack(model_data.sd_model)
|
||||
sd_model = None
|
||||
"""
|
||||
if hasattr(model_data.sd_model, 'model'):
|
||||
del model_data.sd_model.model
|
||||
if hasattr(model_data.sd_model, 'first_stage_model'):
|
||||
del model_data.sd_model.first_stage_model
|
||||
if hasattr(model_data.sd_model, 'cond_stage_model'):
|
||||
del model_data.sd_model.cond_stage_model
|
||||
"""
|
||||
model_data.sd_model = None
|
||||
devices.torch_gc(force=True)
|
||||
shared.log.debug(f'Model weights unloaded: {memory_stats()}')
|
||||
@@ -682,11 +674,8 @@ def unload_model_weights(sd_model=None, _info=None):
|
||||
|
||||
|
||||
def apply_token_merging(sd_model, token_merging_ratio):
|
||||
"""
|
||||
Applies speed and memory optimizations from tomesd.
|
||||
"""
|
||||
current_token_merging_ratio = getattr(sd_model, 'applied_token_merged_ratio', 0)
|
||||
shared.log.debug(f'Appplying token merging: current={current_token_merging_ratio} target={token_merging_ratio}')
|
||||
# shared.log.debug(f'Appplying token merging: current={current_token_merging_ratio} target={token_merging_ratio}')
|
||||
if current_token_merging_ratio == token_merging_ratio:
|
||||
return
|
||||
if current_token_merging_ratio > 0:
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
import modules.scripts
|
||||
from modules import sd_samplers, shared, processing
|
||||
from modules.generation_parameters_copypaste import create_override_settings_dict
|
||||
from modules.ui import plaintext_to_html, infotext_to_html
|
||||
from modules.ui import plaintext_to_html
|
||||
from modules.memstats import memory_stats
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ def txt2img(id_task: str, prompt: str, negative_prompt: str, prompt_styles, step
|
||||
|
||||
if shared.sd_model is None:
|
||||
shared.log.warning('Model not loaded')
|
||||
return
|
||||
return [], '', '', 'Error: model not loaded'
|
||||
|
||||
p = processing.StableDiffusionProcessingTxt2Img(
|
||||
sd_model=shared.sd_model,
|
||||
@@ -57,4 +57,4 @@ def txt2img(id_task: str, prompt: str, negative_prompt: str, prompt_styles, step
|
||||
p.close()
|
||||
generation_info_js = processed.js()
|
||||
shared.log.debug(f'Processed: {len(processed.images)} Memory: {memory_stats()} txt')
|
||||
return processed.images, generation_info_js, infotext_to_html(processed.info), plaintext_to_html(processed.comments)
|
||||
return processed.images, generation_info_js, processed.info, plaintext_to_html(processed.comments)
|
||||
|
||||
+12
-15
@@ -59,11 +59,12 @@ extra_networks_symbol = '\U0001F310' # '\U0001F3B4' # 🎴
|
||||
switch_values_symbol = '\U000021C5' # ⇅
|
||||
|
||||
|
||||
def plaintext_to_html(text):
|
||||
|
||||
def plaintext_to_html(text): # may be referenced by extensions
|
||||
return ui_common.plaintext_to_html(text)
|
||||
|
||||
|
||||
def infotext_to_html(text):
|
||||
def infotext_to_html(text): # may be referenced by extensions
|
||||
return ui_common.infotext_to_html(text)
|
||||
|
||||
|
||||
@@ -109,9 +110,9 @@ def apply_styles(prompt, prompt_neg, styles):
|
||||
def process_interrogate(interrogation_function, mode, ii_input_dir, ii_output_dir, *ii_singles):
|
||||
if mode in {0, 1, 3, 4}:
|
||||
return [interrogation_function(ii_singles[mode]), None]
|
||||
elif mode == 2:
|
||||
if mode == 2:
|
||||
return [interrogation_function(ii_singles[mode]["image"]), None]
|
||||
elif mode == 5:
|
||||
if mode == 5:
|
||||
images = modules.shared.listfiles(ii_input_dir)
|
||||
if ii_output_dir != "":
|
||||
os.makedirs(ii_output_dir, exist_ok=True)
|
||||
@@ -121,9 +122,8 @@ def process_interrogate(interrogation_function, mode, ii_input_dir, ii_output_di
|
||||
img = Image.open(image)
|
||||
filename = os.path.basename(image)
|
||||
left, _ = os.path.splitext(filename)
|
||||
print(interrogation_function(img), file=open(os.path.join(ii_output_dir, f"{left}.txt"), 'a', encoding='utf-8'))
|
||||
|
||||
return [gr.update(), None]
|
||||
print(interrogation_function(img), file=open(os.path.join(ii_output_dir, f"{left}.txt"), 'a', encoding='utf-8')) # pylint: disable=consider-using-with
|
||||
return [gr.update(), None]
|
||||
|
||||
|
||||
def interrogate(image):
|
||||
@@ -273,7 +273,7 @@ def apply_setting(key, value):
|
||||
return gr.update()
|
||||
comp_args = opts.data_labels[key].component_args
|
||||
if comp_args and isinstance(comp_args, dict) and comp_args.get('visible') is False:
|
||||
return
|
||||
return gr.update()
|
||||
valtype = type(opts.data_labels[key].default)
|
||||
oldval = opts.data.get(key, None)
|
||||
opts.data[key] = valtype(value) if valtype != type(None) else value
|
||||
@@ -296,10 +296,6 @@ def create_refresh_button(refresh_component, refresh_method, refreshed_args, ele
|
||||
return refresh_button
|
||||
|
||||
|
||||
def create_output_panel(tabname, outdir):
|
||||
return ui_common.create_output_panel(tabname, outdir)
|
||||
|
||||
|
||||
def create_sampler_and_steps_selection(choices, tabname):
|
||||
with FormRow(elem_id=f"sampler_selection_{tabname}"):
|
||||
if 'UniPC' in [sampler.name for sampler in choices]:
|
||||
@@ -404,7 +400,7 @@ def create_ui():
|
||||
show_progress=False,
|
||||
)
|
||||
|
||||
txt2img_gallery, generation_info, html_info, html_log = create_output_panel("txt2img", opts.outdir_txt2img_samples)
|
||||
txt2img_gallery, generation_info, html_info, _html_info_formatted, html_log = ui_common.create_output_panel("txt2img", opts.outdir_txt2img_samples)
|
||||
connect_reuse_seed(seed, reuse_seed, generation_info, dummy_component, is_subseed=False)
|
||||
connect_reuse_seed(subseed, reuse_subseed, generation_info, dummy_component, is_subseed=True)
|
||||
|
||||
@@ -568,6 +564,7 @@ def create_ui():
|
||||
has_exact_match = np.any(np.all(np.array(image) == np.array(state), axis=-1))
|
||||
edited = same_size and has_exact_match
|
||||
return image if not edited or state is None else state
|
||||
return state
|
||||
|
||||
inpaint_color_sketch.change(update_orig, [inpaint_color_sketch, inpaint_color_sketch_orig], inpaint_color_sketch_orig)
|
||||
|
||||
@@ -719,7 +716,7 @@ def create_ui():
|
||||
outputs=[inpaint_controls, mask_alpha],
|
||||
)
|
||||
|
||||
img2img_gallery, generation_info, html_info, html_log = create_output_panel("img2img", opts.outdir_img2img_samples)
|
||||
img2img_gallery, generation_info, html_info, _html_info_formatted, html_log = ui_common.create_output_panel("img2img", opts.outdir_img2img_samples)
|
||||
|
||||
connect_reuse_seed(seed, reuse_seed, generation_info, dummy_component, is_subseed=False)
|
||||
connect_reuse_seed(subseed, reuse_subseed, generation_info, dummy_component, is_subseed=True)
|
||||
@@ -1643,7 +1640,7 @@ def setup_ui_api(app):
|
||||
from pydantic import BaseModel, Field # pylint: disable=no-name-in-module
|
||||
from typing import List
|
||||
|
||||
class QuicksettingsHint(BaseModel):
|
||||
class QuicksettingsHint(BaseModel): # pylint: disable=too-few-public-methods
|
||||
name: str = Field(title="Name of the quicksettings field")
|
||||
label: str = Field(title="Label of the quicksettings field")
|
||||
|
||||
|
||||
+13
-12
@@ -19,11 +19,11 @@ def update_generation_info(generation_info, html_info, img_index):
|
||||
if img_index < 0 or img_index >= len(generation_info["infotexts"]):
|
||||
return html_info, generation_info
|
||||
infotext = generation_info["infotexts"][img_index]
|
||||
html_text = infotext_to_html(infotext)
|
||||
return html_text, infotext
|
||||
html_info_formatted = infotext_to_html(infotext)
|
||||
return html_info, html_info_formatted
|
||||
except Exception:
|
||||
pass
|
||||
return html_info, generation_info
|
||||
return html_info, html_info
|
||||
|
||||
|
||||
def plaintext_to_html(text):
|
||||
@@ -69,7 +69,7 @@ def delete_files(js_data, images, _html_info, _do_make_zip, index):
|
||||
def save_files(js_data, images, html_info, do_make_zip, index):
|
||||
os.makedirs(shared.opts.outdir_save, exist_ok=True)
|
||||
|
||||
class PObject: #quick dictionary to class object conversion. Its necessary due apply_filename_pattern requiring it
|
||||
class PObject: # pylint: disable=too-few-public-methods
|
||||
def __init__(self, d=None):
|
||||
if d is not None:
|
||||
for key, value in d.items():
|
||||
@@ -152,11 +152,11 @@ def create_output_panel(tabname, outdir):
|
||||
if platform.system() == "Windows":
|
||||
os.startfile(path) # pylint: disable=no-member
|
||||
elif platform.system() == "Darwin":
|
||||
subprocess.Popen(["open", path])
|
||||
subprocess.Popen(["open", path]) # pylint: disable=consider-using-with
|
||||
elif "microsoft-standard-WSL2" in platform.uname().release:
|
||||
subprocess.Popen(["wsl-open", path])
|
||||
subprocess.Popen(["wsl-open", path]) # pylint: disable=consider-using-with
|
||||
else:
|
||||
subprocess.Popen(["xdg-open", path])
|
||||
subprocess.Popen(["xdg-open", path]) # pylint: disable=consider-using-with
|
||||
|
||||
with gr.Column(variant='panel', elem_id=f"{tabname}_results"):
|
||||
with gr.Group(elem_id=f"{tabname}_gallery_container"):
|
||||
@@ -173,14 +173,15 @@ def create_output_panel(tabname, outdir):
|
||||
open_folder_button.click(fn=lambda: open_folder(shared.opts.outdir_samples or outdir), inputs=[], outputs=[])
|
||||
download_files = gr.File(None, file_count="multiple", interactive=False, show_label=False, visible=False, elem_id=f'download_files_{tabname}')
|
||||
with gr.Group():
|
||||
html_info = gr.HTML(elem_id=f'html_info_{tabname}', elem_classes="infotext")
|
||||
html_info_raw = gr.Text(elem_id=f'html_info_raw_{tabname}', visible=False)
|
||||
html_info = gr.HTML(elem_id=f'html_info_{tabname}', elem_classes="infotext", visible=False) # contains raw infotext as returned by wrapped call
|
||||
html_info_formatted = gr.HTML(elem_id=f'html_info_formatted_{tabname}', elem_classes="infotext", visible=True) # contains html formatted infotext
|
||||
html_info.change(fn=infotext_to_html, inputs=[html_info], outputs=[html_info_formatted], show_progress=False)
|
||||
html_log = gr.HTML(elem_id=f'html_log_{tabname}')
|
||||
generation_info = gr.Textbox(visible=False, elem_id=f'generation_info_{tabname}')
|
||||
generation_info_button = gr.Button(visible=False, elem_id=f"{tabname}_generation_info_button")
|
||||
generation_info_button.click(fn=update_generation_info, _js="(x, y, z) => [x, y, selected_gallery_index()]", show_progress=False,
|
||||
generation_info_button.click(fn=update_generation_info, _js="(x, y, z) => [x, y, selected_gallery_index()]", show_progress=False, # triggered on gallery change from js
|
||||
inputs=[generation_info, html_info, html_info],
|
||||
outputs=[html_info, html_info_raw],
|
||||
outputs=[html_info, html_info_formatted],
|
||||
)
|
||||
save.click(fn=call_queue.wrap_gradio_call(save_files), _js="(x, y, z, q1, q2) => [x, y, z, false, selected_gallery_index()]", show_progress=False,
|
||||
inputs=[generation_info, result_gallery, html_info, html_info, html_info],
|
||||
@@ -205,4 +206,4 @@ def create_output_panel(tabname, outdir):
|
||||
parameters_copypaste.register_paste_params_button(parameters_copypaste.ParamBinding(
|
||||
paste_button=paste_button, tabname=paste_tabname, source_tabname=("txt2img" if tabname == "txt2img" else None), source_image_component=result_gallery, paste_field_names=paste_field_names
|
||||
))
|
||||
return result_gallery, generation_info, html_info, html_log
|
||||
return result_gallery, generation_info, html_info, html_info_formatted, html_log
|
||||
|
||||
@@ -43,7 +43,7 @@ def create_ui():
|
||||
interrupt.click(fn=lambda: shared.state.interrupt(), inputs=[], outputs=[])
|
||||
skip = gr.Button('Skip', elem_id=f"{id_part}_skip", variant='secondary')
|
||||
skip.click(fn=lambda: shared.state.skip(), inputs=[], outputs=[])
|
||||
result_images, generation_info, html_info, html_log = ui_common.create_output_panel("extras", shared.opts.outdir_extras_samples)
|
||||
result_images, generation_info, html_info, html_info_formatted, html_log = ui_common.create_output_panel("extras", shared.opts.outdir_extras_samples)
|
||||
gr.HTML('File metadata')
|
||||
exif_info = gr.HTML(elem_id="pnginfo_html_info")
|
||||
gen_info = gr.Text(elem_id="pnginfo_gen_info", visible=False)
|
||||
@@ -57,7 +57,7 @@ def create_ui():
|
||||
extras_image.change(
|
||||
fn=wrap_gradio_call(wrap_pnginfo),
|
||||
inputs=[extras_image],
|
||||
outputs=[_dummy, html_info, exif_info, gen_info],
|
||||
outputs=[_dummy, html_info_formatted, exif_info, gen_info],
|
||||
)
|
||||
submit.click(
|
||||
fn=call_queue.wrap_gradio_gpu_call(submit_click, extra_outputs=[None, '']),
|
||||
|
||||
Reference in New Issue
Block a user