mirror of
https://github.com/AUTOMATIC1111/stable-diffusion-webui.git
synced 2025-01-04 13:55:06 +08:00
options to refresh list of models and hypernetworks
This commit is contained in:
parent
dccc181b55
commit
a10b0e11fc
@ -13,7 +13,7 @@ import modules.memmon
|
|||||||
import modules.sd_models
|
import modules.sd_models
|
||||||
import modules.styles
|
import modules.styles
|
||||||
import modules.devices as devices
|
import modules.devices as devices
|
||||||
from modules import sd_samplers
|
from modules import sd_samplers, sd_models
|
||||||
from modules.hypernetworks import hypernetwork
|
from modules.hypernetworks import hypernetwork
|
||||||
from modules.paths import models_path, script_path, sd_path
|
from modules.paths import models_path, script_path, sd_path
|
||||||
|
|
||||||
@ -145,13 +145,14 @@ def realesrgan_models_names():
|
|||||||
|
|
||||||
|
|
||||||
class OptionInfo:
|
class OptionInfo:
|
||||||
def __init__(self, default=None, label="", component=None, component_args=None, onchange=None, show_on_main_page=False):
|
def __init__(self, default=None, label="", component=None, component_args=None, onchange=None, show_on_main_page=False, refresh=None):
|
||||||
self.default = default
|
self.default = default
|
||||||
self.label = label
|
self.label = label
|
||||||
self.component = component
|
self.component = component
|
||||||
self.component_args = component_args
|
self.component_args = component_args
|
||||||
self.onchange = onchange
|
self.onchange = onchange
|
||||||
self.section = None
|
self.section = None
|
||||||
|
self.refresh = refresh
|
||||||
|
|
||||||
|
|
||||||
def options_section(section_identifier, options_dict):
|
def options_section(section_identifier, options_dict):
|
||||||
@ -236,8 +237,8 @@ options_templates.update(options_section(('training', "Training"), {
|
|||||||
}))
|
}))
|
||||||
|
|
||||||
options_templates.update(options_section(('sd', "Stable Diffusion"), {
|
options_templates.update(options_section(('sd', "Stable Diffusion"), {
|
||||||
"sd_model_checkpoint": OptionInfo(None, "Stable Diffusion checkpoint", gr.Dropdown, lambda: {"choices": modules.sd_models.checkpoint_tiles()}),
|
"sd_model_checkpoint": OptionInfo(None, "Stable Diffusion checkpoint", gr.Dropdown, lambda: {"choices": modules.sd_models.checkpoint_tiles()}, refresh=sd_models.list_models),
|
||||||
"sd_hypernetwork": OptionInfo("None", "Stable Diffusion finetune hypernetwork", gr.Dropdown, lambda: {"choices": ["None"] + [x for x in hypernetworks.keys()]}),
|
"sd_hypernetwork": OptionInfo("None", "Stable Diffusion finetune hypernetwork", gr.Dropdown, lambda: {"choices": ["None"] + [x for x in hypernetworks.keys()]}, refresh=reload_hypernetworks),
|
||||||
"img2img_color_correction": OptionInfo(False, "Apply color correction to img2img results to match original colors."),
|
"img2img_color_correction": OptionInfo(False, "Apply color correction to img2img results to match original colors."),
|
||||||
"save_images_before_color_correction": OptionInfo(False, "Save a copy of image before applying color correction to img2img results"),
|
"save_images_before_color_correction": OptionInfo(False, "Save a copy of image before applying color correction to img2img results"),
|
||||||
"img2img_fix_steps": OptionInfo(False, "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising)."),
|
"img2img_fix_steps": OptionInfo(False, "With img2img, do exactly the amount of steps the slider specifies (normally you'd do less with less denoising)."),
|
||||||
|
@ -78,6 +78,8 @@ reuse_symbol = '\u267b\ufe0f' # ♻️
|
|||||||
art_symbol = '\U0001f3a8' # 🎨
|
art_symbol = '\U0001f3a8' # 🎨
|
||||||
paste_symbol = '\u2199\ufe0f' # ↙
|
paste_symbol = '\u2199\ufe0f' # ↙
|
||||||
folder_symbol = '\U0001f4c2' # 📂
|
folder_symbol = '\U0001f4c2' # 📂
|
||||||
|
refresh_symbol = '\U0001f504' # 🔄
|
||||||
|
|
||||||
|
|
||||||
def plaintext_to_html(text):
|
def plaintext_to_html(text):
|
||||||
text = "<p>" + "<br>\n".join([f"{html.escape(x)}" for x in text.split('\n')]) + "</p>"
|
text = "<p>" + "<br>\n".join([f"{html.escape(x)}" for x in text.split('\n')]) + "</p>"
|
||||||
@ -1210,8 +1212,7 @@ def create_ui(wrap_gradio_gpu_call):
|
|||||||
outputs=[],
|
outputs=[],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
def create_setting_component(key, is_quicksettings=False):
|
||||||
def create_setting_component(key):
|
|
||||||
def fun():
|
def fun():
|
||||||
return opts.data[key] if key in opts.data else opts.data_labels[key].default
|
return opts.data[key] if key in opts.data else opts.data_labels[key].default
|
||||||
|
|
||||||
@ -1231,7 +1232,31 @@ def create_ui(wrap_gradio_gpu_call):
|
|||||||
else:
|
else:
|
||||||
raise Exception(f'bad options item type: {str(t)} for key {key}')
|
raise Exception(f'bad options item type: {str(t)} for key {key}')
|
||||||
|
|
||||||
return comp(label=info.label, value=fun, **(args or {}))
|
if info.refresh is not None:
|
||||||
|
if is_quicksettings:
|
||||||
|
res = comp(label=info.label, value=fun, **(args or {}))
|
||||||
|
refresh_button = gr.Button(value=refresh_symbol, elem_id="refresh_"+key)
|
||||||
|
else:
|
||||||
|
with gr.Row(variant="compact"):
|
||||||
|
res = comp(label=info.label, value=fun, **(args or {}))
|
||||||
|
refresh_button = gr.Button(value=refresh_symbol, elem_id="refresh_" + key)
|
||||||
|
|
||||||
|
def refresh():
|
||||||
|
info.refresh()
|
||||||
|
refreshed_args = info.component_args() if callable(info.component_args) else info.component_args
|
||||||
|
res.choices = refreshed_args["choices"]
|
||||||
|
return gr.update(**(refreshed_args or {}))
|
||||||
|
|
||||||
|
refresh_button.click(
|
||||||
|
fn=refresh,
|
||||||
|
inputs=[],
|
||||||
|
outputs=[res],
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
res = comp(label=info.label, value=fun, **(args or {}))
|
||||||
|
|
||||||
|
|
||||||
|
return res
|
||||||
|
|
||||||
components = []
|
components = []
|
||||||
component_dict = {}
|
component_dict = {}
|
||||||
@ -1401,7 +1426,7 @@ Requested path was: {f}
|
|||||||
with gr.Blocks(css=css, analytics_enabled=False, title="Stable Diffusion") as demo:
|
with gr.Blocks(css=css, analytics_enabled=False, title="Stable Diffusion") as demo:
|
||||||
with gr.Row(elem_id="quicksettings"):
|
with gr.Row(elem_id="quicksettings"):
|
||||||
for i, k, item in quicksettings_list:
|
for i, k, item in quicksettings_list:
|
||||||
component = create_setting_component(k)
|
component = create_setting_component(k, is_quicksettings=True)
|
||||||
component_dict[k] = component
|
component_dict[k] = component
|
||||||
|
|
||||||
settings_interface.gradio_ref = demo
|
settings_interface.gradio_ref = demo
|
||||||
|
21
style.css
21
style.css
@ -228,6 +228,8 @@ fieldset span.text-gray-500, .gr-block.gr-box span.text-gray-500, label.block s
|
|||||||
border-top: 1px solid #eee;
|
border-top: 1px solid #eee;
|
||||||
border-left: 1px solid #eee;
|
border-left: 1px solid #eee;
|
||||||
border-right: 1px solid #eee;
|
border-right: 1px solid #eee;
|
||||||
|
|
||||||
|
z-index: 300;
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark fieldset span.text-gray-500, .dark .gr-block.gr-box span.text-gray-500, .dark label.block span{
|
.dark fieldset span.text-gray-500, .dark .gr-block.gr-box span.text-gray-500, .dark label.block span{
|
||||||
@ -480,17 +482,30 @@ input[type="range"]{
|
|||||||
background: #a55000;
|
background: #a55000;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#quicksettings {
|
||||||
|
gap: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
#quicksettings > div{
|
#quicksettings > div{
|
||||||
border: none;
|
border: none;
|
||||||
background: none;
|
background: none;
|
||||||
|
flex: unset;
|
||||||
|
gap: 0.5em;
|
||||||
}
|
}
|
||||||
|
|
||||||
#quicksettings > div > div{
|
#quicksettings > div > div{
|
||||||
max-width: 32em;
|
max-width: 32em;
|
||||||
|
min-width: 24em;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin-right: 0.75em;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#refresh_sd_model_checkpoint, #refresh_sd_hypernetwork{
|
||||||
|
max-width: 2.5em;
|
||||||
|
min-width: 2.5em;
|
||||||
|
height: 2.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
canvas[key="mask"] {
|
canvas[key="mask"] {
|
||||||
z-index: 12 !important;
|
z-index: 12 !important;
|
||||||
filter: invert();
|
filter: invert();
|
||||||
@ -507,3 +522,7 @@ canvas[key="mask"] {
|
|||||||
z-index: 200;
|
z-index: 200;
|
||||||
width: 8em;
|
width: 8em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.row.gr-compact{
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user