aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryfszzx <yfszzx@gmail.com>2022-10-10 10:33:49 +0000
committeryfszzx <yfszzx@gmail.com>2022-10-10 10:33:49 +0000
commit23f2989799ee3911d2959cfceb74b921f20c9a51 (patch)
tree98a3f98b8f7bb9f901b64af3a6e2f484d744bb66
parent8a7c07a2140c98bceca858087525d77fd0352fda (diff)
downloadstable-diffusion-webui-gfx803-23f2989799ee3911d2959cfceb74b921f20c9a51.tar.gz
stable-diffusion-webui-gfx803-23f2989799ee3911d2959cfceb74b921f20c9a51.tar.bz2
stable-diffusion-webui-gfx803-23f2989799ee3911d2959cfceb74b921f20c9a51.zip
images history over
-rw-r--r--javascript/images_history.js4
-rw-r--r--modules/images_history.py141
-rw-r--r--modules/ui.py9
-rw-r--r--testui.py124
4 files changed, 94 insertions, 184 deletions
diff --git a/javascript/images_history.js b/javascript/images_history.js
index f30b7eff..93d2b89a 100644
--- a/javascript/images_history.js
+++ b/javascript/images_history.js
@@ -58,9 +58,9 @@ function set_history_index_from_img(e){
}
}
}
-function images_history_get_current_img(is_image2image){
+function images_history_get_current_img(is_image2image, image_path, files){
head = is_image2image?"img2img":"txt2img"
s = $(gradioApp().getElementById(head + '_images_history_set_index')).attr("img_index")
- return s
+ return [s, image_path, files]
}
diff --git a/modules/images_history.py b/modules/images_history.py
index 23d83557..0e0a48f3 100644
--- a/modules/images_history.py
+++ b/modules/images_history.py
@@ -1,5 +1,6 @@
import os
-def get_recent_images(is_img2img, dir_name, page_index, step):
+def get_recent_images(dir_name, page_index, step, image_index):
+ print(image_index)
page_index = int(page_index)
f_list = os.listdir(dir_name)
file_list = []
@@ -8,7 +9,7 @@ def get_recent_images(is_img2img, dir_name, page_index, step):
continue
file_list.append(file)
file_list = sorted(file_list, key=lambda file: -os.path.getctime(os.path.join(dir_name, file)))
- num = 24
+ num = 48
max_page_index = len(file_list) // num + 1
page_index = max_page_index if page_index == -1 else page_index + step
page_index = 1 if page_index < 1 else page_index
@@ -16,75 +17,101 @@ def get_recent_images(is_img2img, dir_name, page_index, step):
idx_frm = (page_index - 1) * num
file_list = file_list[idx_frm:idx_frm + num]
print(f"Loading history page {page_index}")
- return [os.path.join(dir_name, file) for file in file_list], page_index, file_list
-def first_page_click(is_img2img, dir_name):
- return get_recent_images(is_img2img, dir_name, 1, 0)
-def end_page_click(is_img2img, dir_name):
- return get_recent_images(is_img2img, dir_name, -1, 0)
-def prev_page_click(is_img2img, dir_name, page_index):
- return get_recent_images(is_img2img, dir_name, page_index, -1)
-def next_page_click(is_img2img, dir_name, page_index):
- return get_recent_images(is_img2img, dir_name, page_index, 1)
-def page_index_change(is_img2img, dir_name, page_index):
- return get_recent_images(is_img2img, dir_name, page_index, 0)
-def show_image_info(num, filenames):
- return filenames[int(num)]
-def delete_image(is_img2img, dir_name, name, page_index, filenames):
+ image_index = int(image_index)
+ if image_index < 0 or image_index > len(file_list) - 1:
+ current_file = None
+ hide_image = None
+ else:
+ current_file = file_list[int(image_index)]
+ hide_image = os.path.join(dir_name, current_file)
+ return [os.path.join(dir_name, file) for file in file_list], page_index, file_list, current_file, hide_image
+def first_page_click(dir_name, page_index, image_index):
+ return get_recent_images(dir_name, 1, 0, image_index)
+def end_page_click(dir_name, page_index, image_index):
+ return get_recent_images(dir_name, -1, 0, image_index)
+def prev_page_click(dir_name, page_index, image_index):
+ return get_recent_images(dir_name, page_index, -1, image_index)
+def next_page_click(dir_name, page_index, image_index):
+ return get_recent_images(dir_name, page_index, 1, image_index)
+def page_index_change(dir_name, page_index, image_index):
+ return get_recent_images(dir_name, page_index, 0, image_index)
+
+def show_image_info(num, image_path, filenames):
+ file = filenames[int(num)]
+ return file, num, os.path.join(image_path, file)
+def delete_image(is_img2img, dir_name, name, page_index, filenames, image_index):
+ print("filename", name)
path = os.path.join(dir_name, name)
if os.path.exists(path):
print(f"Delete file {path}")
os.remove(path)
- i = 0
- for f in filenames:
- if f == name:
- break
- i += 1
- images, page_index, file_list = get_recent_images(is_img2img, dir_name, page_index, 0)
- current_file = file_list[i] if i < len(file_list) else None
- return images, page_index, file_list, current_file
+ images, page_index, file_list, current_file, hide_image = get_recent_images(dir_name, page_index, 0, image_index)
+ return images, page_index, file_list, current_file, hide_image
-def show_images_history(gr, opts, is_img2img):
+def show_images_history(gr, opts, is_img2img, run_pnginfo, switch_dict):
def id_name(is_img2img, name):
return ("img2img" if is_img2img else "txt2img") + "_" + name
- with gr.Row():
- if is_img2img:
- dir_name = opts.outdir_img2img_samples
- else:
- dir_name = opts.outdir_txt2img_samples
- first_page = gr.Button('First Page', elem_id=id_name(is_img2img,"images_history_first_page"))
- prev_page = gr.Button('Prev Page')
- page_index = gr.Number(value=1)
- next_page = gr.Button('Next Page')
- end_page = gr.Button('End Page')
- with gr.Row():
- delete = gr.Button('Delete')
- Send = gr.Button('Send')
- with gr.Row():
- with gr.Column(elem_id=id_name(is_img2img,"images_history")):
- history_gallery = gr.Gallery(label="Images history").style(grid=6)
- img_file_name = gr.Textbox()
- img_file_info = gr.Textbox(dir_name)
- img_path = gr.Textbox(dir_name, visible=False)
- set_index = gr.Button('set_index', elem_id=id_name(is_img2img,"images_history_set_index"))
- is_img2img_flag = gr.Checkbox(is_img2img, visible=False)
- filenames = gr.State()
- first_page.click(first_page_click, inputs=[is_img2img_flag, img_path], outputs=[history_gallery, page_index, filenames])
- next_page.click(next_page_click, inputs=[is_img2img_flag, img_path, page_index], outputs=[history_gallery, page_index, filenames])
- prev_page.click(prev_page_click, inputs=[is_img2img_flag, img_path, page_index], outputs=[history_gallery, page_index, filenames])
- end_page.click(end_page_click, inputs=[is_img2img_flag, img_path], outputs=[history_gallery, page_index, filenames])
- page_index.submit(page_index_change, inputs=[is_img2img_flag, img_path, page_index], outputs=[history_gallery, page_index, filenames])
- set_index.click(show_image_info, _js="images_history_get_current_img",inputs=[is_img2img_flag, filenames], outputs=img_file_name)
- delete.click(delete_image, inputs=[is_img2img_flag, img_path, img_file_name, page_index, filenames], outputs=[history_gallery, page_index, filenames,img_file_name])
+ if is_img2img:
+ dir_name = opts.outdir_img2img_samples
+ else:
+ dir_name = opts.outdir_txt2img_samples
+ with gr.Row():
+ first_page = gr.Button('First', elem_id=id_name(is_img2img,"images_history_first_page"))
+ prev_page = gr.Button('Prev')
+ page_index = gr.Number(value=1, label="Page Index")
+ next_page = gr.Button('Next')
+ end_page = gr.Button('End')
+ with gr.Row(elem_id=id_name(is_img2img,"images_history")):
+ with gr.Row():
+ with gr.Column():
+ history_gallery = gr.Gallery(show_label=False).style(grid=6)
+ with gr.Column():
+ with gr.Row():
+ delete = gr.Button('Delete')
+ pnginfo_send_to_txt2img = gr.Button('Send to txt2img')
+ pnginfo_send_to_img2img = gr.Button('Send to img2img')
+ with gr.Row():
+ with gr.Column():
+ img_file_info = gr.Textbox(dir_name, label="Generate Info")
+ img_file_name = gr.Textbox(label="File Name")
+ with gr.Row():
+ # hiden items
+ img_path = gr.Textbox(dir_name, visible=False)
+ is_img2img_flag = gr.Checkbox(is_img2img, visible=False)
+ image_index = gr.Textbox(value=-1, visible=False)
+ set_index = gr.Button('set_index', elem_id=id_name(is_img2img,"images_history_set_index"))
+ filenames = gr.State()
+ hide_image = gr.Image(visible=False, type="pil")
+ info1 = gr.Textbox(visible=False)
+ info2 = gr.Textbox(visible=False)
+
+
+ # turn pages
+ gallery_inputs = [img_path, page_index, image_index]
+ gallery_outputs = [history_gallery, page_index, filenames, img_file_name, hide_image]
+ first_page.click(first_page_click, inputs=gallery_inputs, outputs=gallery_outputs)
+ next_page.click(next_page_click, inputs=gallery_inputs, outputs=gallery_outputs)
+ prev_page.click(prev_page_click, inputs=gallery_inputs, outputs=gallery_outputs)
+ end_page.click(end_page_click, inputs=gallery_inputs, outputs=gallery_outputs)
+ page_index.submit(page_index_change, inputs=gallery_inputs, outputs=gallery_outputs)
#page_index.change(page_index_change, inputs=[is_img2img_flag, img_path, page_index], outputs=[history_gallery, page_index])
+
+ #other funcitons
+ set_index.click(show_image_info, _js="images_history_get_current_img", inputs=[is_img2img_flag, img_path, filenames], outputs=[img_file_name, image_index, hide_image])
+ delete.click(delete_image, inputs=[is_img2img_flag, img_path, img_file_name, page_index, filenames, image_index], outputs=gallery_outputs)
+ hide_image.change(fn=run_pnginfo, inputs=[hide_image], outputs=[info1, img_file_info, info2])
+ switch_dict["fn"](pnginfo_send_to_txt2img, switch_dict["t2i"], img_file_info, 'switch_to_txt2img')
+ switch_dict["fn"](pnginfo_send_to_img2img, switch_dict["i2i"], img_file_info, 'switch_to_img2img_img2img')
+
-def create_history_tabs(gr, opts):
+def create_history_tabs(gr, opts, run_pnginfo, switch_dict):
with gr.Blocks(analytics_enabled=False) as images_history:
with gr.Tabs() as tabs:
with gr.Tab("txt2img history", id="images_history_txt2img"):
with gr.Blocks(analytics_enabled=False) as images_history_txt2img:
- show_images_history(gr, opts, is_img2img=False)
+ show_images_history(gr, opts, False, run_pnginfo, switch_dict)
with gr.Tab("img2img history", id="images_history_img2img"):
with gr.Blocks(analytics_enabled=False) as images_history_img2img:
- show_images_history(gr, opts, is_img2img=True)
+ show_images_history(gr, opts, True, run_pnginfo, switch_dict)
return images_history
diff --git a/modules/ui.py b/modules/ui.py
index 8762fcf5..21c9236b 100644
--- a/modules/ui.py
+++ b/modules/ui.py
@@ -1131,8 +1131,15 @@ def create_ui(wrap_gradio_gpu_call):
return f'{changed} settings changed.', opts.dumpjson()
+ #images history
+ images_history_switch_dict = {
+ "fn":modules.generation_parameters_copypaste.connect_paste,
+ "t2i":txt2img_paste_fields,
+ "i2i":img2img_paste_fields
+ }
+ images_history = img_his.create_history_tabs(gr, opts, wrap_gradio_call(modules.extras.run_pnginfo), images_history_switch_dict)
- images_history = img_his.create_history_tabs(gr, opts)
+
with gr.Blocks(analytics_enabled=False) as settings_interface:
settings_submit = gr.Button(value="Apply settings", variant='primary')
result = gr.HTML()
diff --git a/testui.py b/testui.py
deleted file mode 100644
index f54e4a62..00000000
--- a/testui.py
+++ /dev/null
@@ -1,124 +0,0 @@
-import os
-import threading
-import time
-import importlib
-import signal
-import threading
-
-from modules.paths import script_path
-
-from modules import devices, sd_samplers
-import modules.codeformer_model as codeformer
-import modules.extras
-import modules.face_restoration
-import modules.gfpgan_model as gfpgan
-import modules.img2img
-
-import modules.lowvram
-import modules.paths
-import modules.scripts
-import modules.sd_hijack
-import modules.sd_models
-import modules.shared as shared
-import modules.txt2img
-
-import modules.ui
-from modules import devices
-from modules import modelloader
-from modules.paths import script_path
-from modules.shared import cmd_opts
-
-modelloader.cleanup_models()
-modules.sd_models.setup_model()
-codeformer.setup_model(cmd_opts.codeformer_models_path)
-gfpgan.setup_model(cmd_opts.gfpgan_models_path)
-shared.face_restorers.append(modules.face_restoration.FaceRestoration())
-modelloader.load_upscalers()
-queue_lock = threading.Lock()
-
-
-def wrap_queued_call(func):
- def f(*args, **kwargs):
- with queue_lock:
- res = func(*args, **kwargs)
-
- return res
-
- return f
-
-
-def wrap_gradio_gpu_call(func, extra_outputs=None):
- def f(*args, **kwargs):
- devices.torch_gc()
-
- shared.state.sampling_step = 0
- shared.state.job_count = -1
- shared.state.job_no = 0
- shared.state.job_timestamp = shared.state.get_job_timestamp()
- shared.state.current_latent = None
- shared.state.current_image = None
- shared.state.current_image_sampling_step = 0
- shared.state.interrupted = False
- shared.state.textinfo = None
-
- with queue_lock:
- res = func(*args, **kwargs)
-
- shared.state.job = ""
- shared.state.job_count = 0
-
- devices.torch_gc()
-
- return res
-
- return modules.ui.wrap_gradio_call(f, extra_outputs=extra_outputs)
-
-
-modules.scripts.load_scripts(os.path.join(script_path, "scripts"))
-
-shared.sd_model = None #modules.sd_models.load_model()
-#shared.opts.onchange("sd_model_checkpoint", wrap_queued_call(lambda: modules.sd_models.reload_model_weights(shared.sd_model)))
-
-
-def webui():
- # make the program just exit at ctrl+c without waiting for anything
- def sigint_handler(sig, frame):
- print(f'Interrupted with signal {sig} in {frame}')
- os._exit(0)
-
- signal.signal(signal.SIGINT, sigint_handler)
-
- while 1:
-
- demo = modules.ui.create_ui(wrap_gradio_gpu_call=wrap_gradio_gpu_call)
-
- demo.launch(
- share=cmd_opts.share,
- server_name="0.0.0.0" if cmd_opts.listen else None,
- server_port=cmd_opts.port,
- debug=cmd_opts.gradio_debug,
- auth=[tuple(cred.split(':')) for cred in cmd_opts.gradio_auth.strip('"').split(',')] if cmd_opts.gradio_auth else None,
- inbrowser=cmd_opts.autolaunch,
- prevent_thread_lock=True
- )
-
- while 1:
- time.sleep(0.5)
- if getattr(demo, 'do_restart', False):
- time.sleep(0.5)
- demo.close()
- time.sleep(0.5)
- break
-
- sd_samplers.set_samplers()
-
- print('Reloading Custom Scripts')
- modules.scripts.reload_scripts(os.path.join(script_path, "scripts"))
- print('Reloading modules: modules.ui')
- importlib.reload(modules.ui)
- print('Restarting Gradio')
-
-
-
-if __name__ == "__main__":
- webui()