Pārlūkot izejas kodu

Add drag/drop param loading.

Drop an image or generational text onto the prompt bar, it loads the info for parsing.
d8ahazard 2 gadi atpakaļ
vecāks
revīzija
54e0051bdd
4 mainītis faili ar 74 papildinājumiem un 1 dzēšanām
  1. 3 0
      javascript/dragdrop.js
  2. 22 0
      javascript/imageParams.js
  3. 20 0
      modules/images.py
  4. 29 1
      modules/ui.py

+ 3 - 0
javascript/dragdrop.js

@@ -53,6 +53,9 @@ window.document.addEventListener('dragover', e => {
 
 
 window.document.addEventListener('drop', e => {
 window.document.addEventListener('drop', e => {
     const target = e.composedPath()[0];
     const target = e.composedPath()[0];
+    if (target.placeholder === "Prompt") {
+        return;
+    }
     const imgWrap = target.closest('[data-testid="image"]');
     const imgWrap = target.closest('[data-testid="image"]');
     if ( !imgWrap ) {
     if ( !imgWrap ) {
         return;
         return;

+ 22 - 0
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'));
+            }
+        }
+    });
+
+});

+ 20 - 0
modules/images.py

@@ -463,3 +463,23 @@ def save_image(image, path, basename, seed=None, prompt=None, extension='png', i
         txt_fullfn = None
         txt_fullfn = None
 
 
     return fullfn, txt_fullfn
     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

+ 29 - 1
modules/ui.py

@@ -431,7 +431,6 @@ def create_toprow(is_img2img):
                 with gr.Column(scale=80):
                 with gr.Column(scale=80):
                     with gr.Row():
                     with gr.Row():
                         prompt = gr.Textbox(label="Prompt", elem_id=f"{id_part}_prompt", show_label=False, placeholder="Prompt", lines=2)
                         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"):
                 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)
                     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")
                     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:
     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)
         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)
         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.Row(elem_id='txt2img_progress_row'):
             with gr.Column(scale=1):
             with gr.Column(scale=1):
@@ -614,6 +614,18 @@ def create_ui(wrap_gradio_gpu_call):
             txt2img_prompt.submit(**txt2img_args)
             txt2img_prompt.submit(**txt2img_args)
             submit.click(**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(
             enable_hr.change(
                 fn=lambda x: gr_show(x),
                 fn=lambda x: gr_show(x),
                 inputs=[enable_hr],
                 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)
         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'):
         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):
             with gr.Column(scale=1):
                 pass
                 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(seed, reuse_seed, generation_info, dummy_component, is_subseed=False)
             connect_reuse_seed(subseed, reuse_subseed, generation_info, dummy_component, is_subseed=True)
             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(
             mask_mode.change(
                 lambda mode, img: {
                 lambda mode, img: {
                     init_img_with_mask: gr_show(mode == 0),
                     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 ''
                 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)
                 open_extras_folder = gr.Button('Open output directory', elem_id=button_id)
 
 
+
         submit.click(
         submit.click(
             fn=wrap_gradio_gpu_call(modules.extras.run_extras),
             fn=wrap_gradio_gpu_call(modules.extras.run_extras),
             _js="get_extras_tab_index",
             _js="get_extras_tab_index",