|
|
import modules.controlnet as controlnet |
|
|
from modules.controlnet import ( |
|
|
cn_options, |
|
|
load_cnsettings, |
|
|
save_cnsettings, |
|
|
NEWCN, |
|
|
) |
|
|
import gradio as gr |
|
|
from shared import add_ctrl, path_manager |
|
|
import ui_evolve |
|
|
import ui_llama |
|
|
from PIL import Image |
|
|
|
|
|
def add_controlnet_tab(main_view, inpaint_view, prompt, image_number, run_event): |
|
|
with gr.Tab(label="PowerUp"): |
|
|
with gr.Row(): |
|
|
cn_selection = gr.Dropdown( |
|
|
label="Cheat Code", |
|
|
choices=["None"] + list(cn_options.keys()) + [NEWCN], |
|
|
value="None", |
|
|
) |
|
|
add_ctrl("cn_selection", cn_selection) |
|
|
|
|
|
cn_name = gr.Textbox( |
|
|
show_label=False, |
|
|
placeholder="Name", |
|
|
interactive=True, |
|
|
visible=False, |
|
|
) |
|
|
cn_save_btn = gr.Button( |
|
|
value="Save", |
|
|
visible=False, |
|
|
) |
|
|
|
|
|
type_choices=list(map(lambda x: x.capitalize(), controlnet.controlnet_models.keys())) |
|
|
cn_type = gr.Dropdown( |
|
|
label="Type", |
|
|
choices=type_choices, |
|
|
value=type_choices[0], |
|
|
visible=False, |
|
|
) |
|
|
add_ctrl("cn_type", cn_type) |
|
|
|
|
|
cn_edge_low = gr.Slider( |
|
|
label="Edge (low)", |
|
|
minimum=0.0, |
|
|
maximum=1.0, |
|
|
step=0.01, |
|
|
value=0.2, |
|
|
visible=False, |
|
|
) |
|
|
add_ctrl("cn_edge_low", cn_edge_low) |
|
|
|
|
|
cn_edge_high = gr.Slider( |
|
|
label="Edge (high)", |
|
|
minimum=0.0, |
|
|
maximum=1.0, |
|
|
step=0.01, |
|
|
value=0.8, |
|
|
visible=False, |
|
|
) |
|
|
add_ctrl("cn_edge_high", cn_edge_high) |
|
|
|
|
|
cn_start = gr.Slider( |
|
|
label="Start", |
|
|
minimum=0.0, |
|
|
maximum=1.0, |
|
|
step=0.01, |
|
|
value=0.0, |
|
|
visible=False, |
|
|
) |
|
|
add_ctrl("cn_start", cn_start) |
|
|
|
|
|
cn_stop = gr.Slider( |
|
|
label="Stop", |
|
|
minimum=0.0, |
|
|
maximum=1.0, |
|
|
step=0.01, |
|
|
value=1.0, |
|
|
visible=False, |
|
|
) |
|
|
add_ctrl("cn_stop", cn_stop) |
|
|
|
|
|
cn_strength = gr.Slider( |
|
|
label="Strength", |
|
|
minimum=0.0, |
|
|
maximum=2.0, |
|
|
step=0.01, |
|
|
value=1.0, |
|
|
visible=False, |
|
|
) |
|
|
add_ctrl("cn_strength", cn_strength) |
|
|
|
|
|
cn_upscaler = gr.Dropdown( |
|
|
label=f"Upscaler", |
|
|
show_label=False, |
|
|
choices=["None"] + path_manager.upscaler_filenames, |
|
|
value="None", |
|
|
visible=False, |
|
|
) |
|
|
add_ctrl("cn_upscale", cn_upscaler) |
|
|
|
|
|
cn_outputs = [ |
|
|
cn_name, |
|
|
cn_save_btn, |
|
|
cn_type, |
|
|
] |
|
|
cn_sliders = [ |
|
|
cn_start, |
|
|
cn_stop, |
|
|
cn_strength, |
|
|
cn_edge_low, |
|
|
cn_edge_high, |
|
|
cn_upscaler, |
|
|
] |
|
|
|
|
|
@cn_selection.change( |
|
|
inputs=[cn_selection], outputs=[cn_name] + cn_outputs + cn_sliders |
|
|
) |
|
|
def cn_changed(selection): |
|
|
if selection != NEWCN: |
|
|
return [gr.update(visible=False)] + [gr.update(visible=False)] * len( |
|
|
cn_outputs + cn_sliders |
|
|
) |
|
|
else: |
|
|
return [gr.update(value="")] + [gr.update(visible=True)] * len( |
|
|
cn_outputs + cn_sliders |
|
|
) |
|
|
|
|
|
@cn_type.change( |
|
|
inputs=[cn_type], |
|
|
outputs=cn_sliders, |
|
|
) |
|
|
def cn_type_changed(selection): |
|
|
|
|
|
slider_states = { |
|
|
"canny": [True, True, True, True, True, False], |
|
|
"img2img": [False, False, True, False, False, False], |
|
|
"default": [True, True, True, False, False, False], |
|
|
"upscale": [False, False, False, False, False, True], |
|
|
"faceswap": [False, False, False, False, False, False], |
|
|
} |
|
|
if selection.lower() in slider_states: |
|
|
show = slider_states[selection.lower()] |
|
|
else: |
|
|
show = slider_states["default"] |
|
|
|
|
|
result = [] |
|
|
for vis in show: |
|
|
result += [gr.update(visible=vis)] |
|
|
|
|
|
return result |
|
|
|
|
|
@cn_save_btn.click( |
|
|
inputs=cn_outputs + cn_sliders, |
|
|
outputs=[cn_selection], |
|
|
) |
|
|
def cn_save( |
|
|
cn_name, |
|
|
cn_save_btn, |
|
|
cn_type, |
|
|
cn_start, |
|
|
cn_stop, |
|
|
cn_strength, |
|
|
cn_edge_low, |
|
|
cn_edge_high, |
|
|
upscale_model, |
|
|
): |
|
|
if cn_name != "": |
|
|
cn_options = load_cnsettings() |
|
|
opts = { |
|
|
"type": cn_type.lower(), |
|
|
"start": cn_start, |
|
|
"stop": cn_stop, |
|
|
"strength": cn_strength, |
|
|
"upscaler": cn_upscaler, |
|
|
} |
|
|
if cn_type.lower() == "canny": |
|
|
opts.update( |
|
|
{ |
|
|
"edge_low": cn_edge_low, |
|
|
"edge_high": cn_edge_high, |
|
|
} |
|
|
) |
|
|
cn_options[cn_name] = opts |
|
|
save_cnsettings(cn_options) |
|
|
choices = list(cn_options.keys()) + [NEWCN] |
|
|
return gr.update(choices=choices, value=cn_name) |
|
|
else: |
|
|
return gr.update() |
|
|
|
|
|
input_image = gr.Image( |
|
|
label="Input image", |
|
|
type="pil", |
|
|
visible=True, |
|
|
) |
|
|
add_ctrl("input_image", input_image) |
|
|
inpaint_toggle = gr.Checkbox(label="Inpainting", value=False) |
|
|
|
|
|
add_ctrl("inpaint_toggle", inpaint_toggle) |
|
|
|
|
|
@inpaint_toggle.change( |
|
|
inputs=[inpaint_toggle, main_view], outputs=[main_view, inpaint_view] |
|
|
) |
|
|
def inpaint_checked(r, image): |
|
|
if r: |
|
|
base_height = 600 |
|
|
img = Image.open(image) |
|
|
scale = (base_height / float(img.size[1])) |
|
|
width = int((float(img.size[0]) * float(scale))) |
|
|
img = img.resize((width, base_height), Image.Resampling.LANCZOS) |
|
|
|
|
|
return { |
|
|
main_view: gr.update(visible=False), |
|
|
inpaint_view: gr.update( |
|
|
visible=True, |
|
|
interactive=True, |
|
|
value={ |
|
|
'background': img, |
|
|
'layers': [Image.new("RGBA", (width, base_height))], |
|
|
'composite': None, |
|
|
}, |
|
|
) |
|
|
} |
|
|
else: |
|
|
return { |
|
|
main_view: gr.update(visible=True), |
|
|
inpaint_view: gr.update( |
|
|
visible=False, |
|
|
interactive=False, |
|
|
), |
|
|
} |
|
|
|
|
|
ui_evolve.add_evolve_tab(prompt, image_number, run_event) |
|
|
|
|
|
ui_llama.add_llama_tab(prompt) |
|
|
|
|
|
return inpaint_toggle |
|
|
|
|
|
|