diff options
author | d8ahazard <d8ahazard@gmail.com> | 2022-10-12 23:17:26 +0000 |
---|---|---|
committer | d8ahazard <d8ahazard@gmail.com> | 2022-10-12 23:17:26 +0000 |
commit | 54e0051bdd7dea7348825c09600ec61ea0771cb8 (patch) | |
tree | 78c225890f9e9700a9af209d5855622e9beb8522 | |
parent | cc5803603b8591075542d99ae8596ab5b130a82f (diff) | |
download | stable-diffusion-webui-gfx803-54e0051bdd7dea7348825c09600ec61ea0771cb8.tar.gz stable-diffusion-webui-gfx803-54e0051bdd7dea7348825c09600ec61ea0771cb8.tar.bz2 stable-diffusion-webui-gfx803-54e0051bdd7dea7348825c09600ec61ea0771cb8.zip |
Add drag/drop param loading.
Drop an image or generational text onto the prompt bar, it loads the info for parsing.
-rw-r--r-- | javascript/dragdrop.js | 3 | ||||
-rw-r--r-- | javascript/imageParams.js | 22 | ||||
-rw-r--r-- | modules/images.py | 20 | ||||
-rw-r--r-- | modules/ui.py | 30 |
4 files changed, 74 insertions, 1 deletions
diff --git a/javascript/dragdrop.js b/javascript/dragdrop.js index 5aac57f7..cf900f50 100644 --- a/javascript/dragdrop.js +++ b/javascript/dragdrop.js @@ -53,6 +53,9 @@ window.document.addEventListener('dragover', e => { window.document.addEventListener('drop', e => { const target = e.composedPath()[0]; + if (target.placeholder === "Prompt") { + return; + } const imgWrap = target.closest('[data-testid="image"]'); if ( !imgWrap ) { return; diff --git a/javascript/imageParams.js b/javascript/imageParams.js new file mode 100644 index 00000000..f9d0c0aa --- /dev/null +++ b/javascript/imageParams.js @@ -0,0 +1,22 @@ +window.onload = (function(){ + window.addEventListener('drop', e => { + const target = e.composedPath()[0]; + const idx = selected_gallery_index(); + let prompt_target = "txt2img_prompt_image"; + if (idx === 1) { + prompt_target = "img2img_prompt_image"; + } + if (target.placeholder === "Prompt") { + e.stopPropagation(); + e.preventDefault(); + const imgParent = gradioApp().getElementById(prompt_target); + const files = e.dataTransfer.files; + const fileInput = imgParent.querySelector('input[type="file"]'); + if ( fileInput ) { + fileInput.files = files; + fileInput.dispatchEvent(new Event('change')); + } + } + }); + +});
\ No newline at end of file diff --git a/modules/images.py b/modules/images.py index c0a90676..f1155b7f 100644 --- a/modules/images.py +++ b/modules/images.py @@ -463,3 +463,23 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i txt_fullfn = None
return fullfn, txt_fullfn
+
+
+def image_data(image_path):
+ file, ext = os.path.splitext(image_path.name)
+ data = {}
+ if "png" in ext:
+ image = Image.open(image_path.name, "r")
+ print(f"Image data requested for {image_path.name} {image.format} of {type(image)}")
+ try:
+ data = image.text["parameters"]
+ except Exception as e:
+ print(f"Exception: {e}")
+ pass
+ print(f"Image data: {data}")
+ if "txt" in ext:
+ myfile = open(image_path.name, 'r')
+ data = myfile.read()
+ myfile.close()
+
+ return data, None
diff --git a/modules/ui.py b/modules/ui.py index 2b332267..dd793c39 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -431,7 +431,6 @@ def create_toprow(is_img2img): with gr.Column(scale=80):
with gr.Row():
prompt = gr.Textbox(label="Prompt", elem_id=f"{id_part}_prompt", show_label=False, placeholder="Prompt", lines=2)
-
with gr.Column(scale=1, elem_id="roll_col"):
roll = gr.Button(value=art_symbol, elem_id="roll", visible=len(shared.artist_db.artists) > 0)
paste = gr.Button(value=paste_symbol, elem_id="paste")
@@ -513,6 +512,7 @@ def create_ui(wrap_gradio_gpu_call): with gr.Blocks(analytics_enabled=False) as txt2img_interface:
txt2img_prompt, roll, txt2img_prompt_style, txt2img_negative_prompt, txt2img_prompt_style2, submit, _, _, txt2img_prompt_style_apply, txt2img_save_style, paste, token_counter, token_button = create_toprow(is_img2img=False)
dummy_component = gr.Label(visible=False)
+ txt_prompt_img = gr.File(label="", elem_id="txt2img_prompt_image", file_count="single", type="file", visible=False)
with gr.Row(elem_id='txt2img_progress_row'):
with gr.Column(scale=1):
@@ -614,6 +614,18 @@ def create_ui(wrap_gradio_gpu_call): txt2img_prompt.submit(**txt2img_args)
submit.click(**txt2img_args)
+ txt_prompt_img.change(
+ fn=modules.images.image_data,
+ # _js = "get_extras_tab_index",
+ inputs=[
+ txt_prompt_img
+ ],
+ outputs=[
+ txt2img_prompt,
+ txt_prompt_img
+ ]
+ )
+
enable_hr.change(
fn=lambda x: gr_show(x),
inputs=[enable_hr],
@@ -674,6 +686,9 @@ def create_ui(wrap_gradio_gpu_call): img2img_prompt, roll, img2img_prompt_style, img2img_negative_prompt, img2img_prompt_style2, submit, img2img_interrogate, img2img_deepbooru, img2img_prompt_style_apply, img2img_save_style, paste, token_counter, token_button = create_toprow(is_img2img=True)
with gr.Row(elem_id='img2img_progress_row'):
+ img2img_prompt_img = gr.File(label="", elem_id="txt_prompt_image", file_count="single", type="file",
+ visible=False)
+
with gr.Column(scale=1):
pass
@@ -768,6 +783,18 @@ def create_ui(wrap_gradio_gpu_call): 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)
+ img2img_prompt_img.change(
+ fn=modules.images.image_data,
+ # _js = "get_extras_tab_index",
+ inputs=[
+ txt_prompt_img
+ ],
+ outputs=[
+ img2img_prompt,
+ img2img_prompt_img
+ ]
+ )
+
mask_mode.change(
lambda mode, img: {
init_img_with_mask: gr_show(mode == 0),
@@ -956,6 +983,7 @@ def create_ui(wrap_gradio_gpu_call): button_id = "hidden_element" if shared.cmd_opts.hide_ui_dir_config else ''
open_extras_folder = gr.Button('Open output directory', elem_id=button_id)
+
submit.click(
fn=wrap_gradio_gpu_call(modules.extras.run_extras),
_js="get_extras_tab_index",
|