Skip to content

Commit

Permalink
create send to buttons in one module
Browse files Browse the repository at this point in the history
  • Loading branch information
yfszzx committed Oct 27, 2022
1 parent 4ff4730 commit 4a4647e
Show file tree
Hide file tree
Showing 5 changed files with 187 additions and 270 deletions.
24 changes: 2 additions & 22 deletions javascript/ui.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,14 +45,14 @@ function switch_to_txt2img(){
return args_to_array(arguments);
}

function switch_to_img2img_img2img(){
function switch_to_img2img(){
gradioApp().querySelector('#tabs').querySelectorAll('button')[1].click();
gradioApp().getElementById('mode_img2img').querySelectorAll('button')[0].click();

return args_to_array(arguments);
}

function switch_to_img2img_inpaint(){
function switch_to_inpaint(){
gradioApp().querySelector('#tabs').querySelectorAll('button')[1].click();
gradioApp().getElementById('mode_img2img').querySelectorAll('button')[1].click();

Expand All @@ -65,26 +65,6 @@ function switch_to_extras(){
return args_to_array(arguments);
}

function extract_image_from_gallery_txt2img(gallery){
switch_to_txt2img()
return extract_image_from_gallery(gallery);
}

function extract_image_from_gallery_img2img(gallery){
switch_to_img2img_img2img()
return extract_image_from_gallery(gallery);
}

function extract_image_from_gallery_inpaint(gallery){
switch_to_img2img_inpaint()
return extract_image_from_gallery(gallery);
}

function extract_image_from_gallery_extras(gallery){
switch_to_extras()
return extract_image_from_gallery(gallery);
}

function get_tab_index(tabId){
var res = 0

Expand Down
86 changes: 82 additions & 4 deletions modules/generation_parameters_copypaste.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,16 @@
import gradio as gr
from modules.shared import script_path
from modules import shared
import tempfile
from PIL import Image, PngImagePlugin

re_param_code = r'\s*([\w ]+):\s*("(?:\\|\"|[^\"])+"|[^,]*)(?:,|$)'
re_param = re.compile(re_param_code)
re_params = re.compile(r"^(?:" + re_param_code + "){3,}$")
re_imagesize = re.compile(r"^(\d+)x(\d+)$")
type_of_gr_update = type(gr.update())

paste_fields = {}
bind_list = []

def quote(text):
if ',' not in str(text):
Expand All @@ -20,6 +23,81 @@ def quote(text):
text = text.replace('"', '\\"')
return f'"{text}"'

def image_from_url_text(filedata):
if type(filedata) == dict and filedata["is_file"]:
filename = filedata["name"]
tempdir = os.path.normpath(tempfile.gettempdir())
normfn = os.path.normpath(filename)
assert normfn.startswith(tempdir), 'trying to open image file not in temporary directory'

return Image.open(filename)

if type(filedata) == list:
if len(filedata) == 0:
return None

filedata = filedata[0]

if filedata.startswith("data:image/png;base64,"):
filedata = filedata[len("data:image/png;base64,"):]

filedata = base64.decodebytes(filedata.encode('utf-8'))
image = Image.open(io.BytesIO(filedata))
return image

def add_paste_fields(tabname, init_img, fields):
paste_fields[tabname] = {"init_img":init_img, "fields": fields}

def create_buttons(tabs_list):
buttons = {}
for tab in tabs_list:
buttons[tab] = gr.Button(f"Send to {tab}")
return buttons

#if send_generate_info is a tab name, mean generate_info comes from the params fields of the tab
def bind_buttons(buttons, send_image, send_generate_info):
bind_list.append([buttons, send_image, send_generate_info])

def run_bind():
for buttons, send_image, send_generate_info in bind_list:
for tab in buttons:
button = buttons[tab]
if send_image and paste_fields[tab]["init_img"]:
if type(send_image) == gr.Gallery:
button.click(
fn=lambda x: image_from_url_text(x),
_js="extract_image_from_gallery",
inputs=[send_image],
outputs=[paste_fields[tab]["init_img"]],
)
else:
button.click(
fn=lambda x:x,
inputs=[send_image],
outputs=[paste_fields[tab]["init_img"]],
)

if send_generate_info and paste_fields[tab]["fields"] is not None:
paste_field_names = ['Prompt', 'Negative prompt', 'Steps', 'Face restoration', 'Size-1', 'Size-2']
if shared.opts.send_seed:
paste_field_names += ["Seed"]
if send_generate_info in paste_fields:
button.click(
fn=lambda *x:x,
inputs=[field for field,name in paste_fields[send_generate_info]["fields"] if name in paste_field_names],
outputs=[field for field,name in paste_fields[tab]["fields"] if name in paste_field_names],
)

else:
connect_paste(button, [(field, name) for field, name in paste_fields[tab]["fields"] if name in paste_field_names], send_generate_info)

button.click(
fn=None,
_js=f"switch_to_{tab}",
inputs=None,
outputs=None,
)

def parse_generation_parameters(x: str):
"""parses generation parameters string, the one you see in text field under the picture in UI:
```
Expand Down Expand Up @@ -67,8 +145,7 @@ def parse_generation_parameters(x: str):

return res


def connect_paste(button, paste_fields, input_comp, js=None):
def connect_paste(button, paste_fields, input_comp):
def paste_func(prompt):
if not prompt and not shared.cmd_opts.hide_ui_dir_config:
filename = os.path.join(script_path, "params.txt")
Expand Down Expand Up @@ -106,7 +183,8 @@ def paste_func(prompt):

button.click(
fn=paste_func,
_js=js,
inputs=[input_comp],
outputs=[x[0] for x in paste_fields],
)


1 change: 1 addition & 0 deletions modules/shared.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,7 @@ def options_section(section_identifier, options_dict):
"filter_nsfw": OptionInfo(False, "Filter NSFW content"),
'CLIP_stop_at_last_layers': OptionInfo(1, "Stop At last layers of CLIP model", gr.Slider, {"minimum": 1, "maximum": 12, "step": 1}),
"random_artist_categories": OptionInfo([], "Allowed categories for random artists selection when using the Roll button", gr.CheckboxGroup, {"choices": artist_db.categories()}),
"send_seed": OptionInfo(False, "Send seed when sending prompt or image to other interface"),
}))

options_templates.update(options_section(('interrogate', "Interrogate Options"), {
Expand Down
Loading

0 comments on commit 4a4647e

Please sign in to comment.