mirror of
https://github.com/vladmandic/automatic
synced 2026-09-19 17:24:32 +02:00
unique ui labels
This commit is contained in:
+4
-3
@@ -1,8 +1,8 @@
|
||||
# Change Log for SD.Next
|
||||
|
||||
## Update for 2024-09-12
|
||||
## Update for 2024-09-13
|
||||
|
||||
### Highlights for 2024-09-12
|
||||
### Highlights for 2024-09-13
|
||||
|
||||
Major refactor of [FLUX.1](https://blackforestlabs.ai/announcing-black-forest-labs/) support:
|
||||
- Full **ControlNet** support, better **LoRA** support, full **prompt attention** implementation
|
||||
@@ -27,7 +27,7 @@ Plus tons of other items and fixes - see [changelog](https://github.com/vladmand
|
||||
Examples:
|
||||
- Built-in prompt-enhancer, TAESD optimizations, new DC-Solver scheduler, global XYZ grid management, etc.
|
||||
|
||||
### Details for 2024-09-12
|
||||
### Details for 2024-09-13
|
||||
|
||||
**Major refactor of FLUX.1 support:**
|
||||
- allow configuration of individual FLUX.1 model components: *transformer, text-encoder, vae*
|
||||
@@ -141,6 +141,7 @@ Examples:
|
||||
- fix model path typos
|
||||
- fix guidance end handler
|
||||
- fix script sorting
|
||||
- fix all ui labels are unique
|
||||
|
||||
## Update for 2024-08-31
|
||||
|
||||
|
||||
@@ -97,11 +97,11 @@ def create_ui(_blocks: gr.Blocks=None):
|
||||
with gr.Accordion(open=False, label="Size", elem_id="control_size", elem_classes=["small-accordion"]):
|
||||
with gr.Tabs():
|
||||
with gr.Tab('Before'):
|
||||
resize_mode_before, resize_name_before, resize_context_before, width_before, height_before, scale_by_before, selected_scale_tab_before = ui_sections.create_resize_inputs('control_before', [], accordion=False, latent=True)
|
||||
resize_mode_before, resize_name_before, resize_context_before, width_before, height_before, scale_by_before, selected_scale_tab_before = ui_sections.create_resize_inputs('control_before', [], accordion=False, latent=True, prefix='before')
|
||||
with gr.Tab('After'):
|
||||
resize_mode_after, resize_name_after, resize_context_after, width_after, height_after, scale_by_after, selected_scale_tab_after = ui_sections.create_resize_inputs('control_after', [], accordion=False, latent=False)
|
||||
resize_mode_after, resize_name_after, resize_context_after, width_after, height_after, scale_by_after, selected_scale_tab_after = ui_sections.create_resize_inputs('control_after', [], accordion=False, latent=False, prefix='after')
|
||||
with gr.Tab('Mask'):
|
||||
resize_mode_mask, resize_name_mask, resize_context_mask, width_mask, height_mask, scale_by_mask, selected_scale_tab_mask = ui_sections.create_resize_inputs('control_mask', [], accordion=False, latent=False)
|
||||
resize_mode_mask, resize_name_mask, resize_context_mask, width_mask, height_mask, scale_by_mask, selected_scale_tab_mask = ui_sections.create_resize_inputs('control_mask', [], accordion=False, latent=False, prefix='mask')
|
||||
|
||||
with gr.Accordion(open=False, label="Sampler", elem_id="control_sampler", elem_classes=["small-accordion"]):
|
||||
steps, sampler_index = ui_sections.create_sampler_and_steps_selection(None, "control")
|
||||
|
||||
@@ -590,9 +590,9 @@ def create_ui(container, button_parent, tabname, skip_indexing = False):
|
||||
ui.details_components.append(meta)
|
||||
with gr.Group(elem_id=f"{tabname}_extra_details_text", elem_classes=["extra-details-text"], visible=False) as ui.details_text:
|
||||
description = gr.Textbox(label='Description', lines=1, placeholder="Style description...")
|
||||
prompt = gr.Textbox(label='Prompt', lines=2, placeholder="Prompt...")
|
||||
negative = gr.Textbox(label='Negative prompt', lines=2, placeholder="Negative prompt...")
|
||||
extra = gr.Textbox(label='Parameters', lines=2, placeholder="Generation parameters overrides...")
|
||||
prompt = gr.Textbox(label='Network prompt', lines=2, placeholder="Prompt...")
|
||||
negative = gr.Textbox(label='Network negative prompt', lines=2, placeholder="Negative prompt...")
|
||||
extra = gr.Textbox(label='Network parameters', lines=2, placeholder="Generation parameters overrides...")
|
||||
wildcards = gr.Textbox(label='Wildcards', lines=2, placeholder="Wildcard prompt replacements...")
|
||||
ui.details_components += [description, prompt, negative, extra, wildcards]
|
||||
with gr.Row():
|
||||
|
||||
@@ -4,6 +4,9 @@ from modules import errors
|
||||
from modules.ui_components import ToolButton
|
||||
|
||||
|
||||
debug = os.environ.get('SD_UI_DEBUG', None)
|
||||
|
||||
|
||||
class UiLoadsave:
|
||||
"""allows saving and restorig default values for gradio components"""
|
||||
|
||||
@@ -43,6 +46,8 @@ class UiLoadsave:
|
||||
setattr(obj, field, saved_value)
|
||||
if init_field is not None:
|
||||
init_field(saved_value)
|
||||
if debug and key in self.component_mapping and not key.startswith('customscript'):
|
||||
errors.log.warning(f'UI duplicate: key="{key}" id={getattr(obj, "elem_id", None)} class={getattr(obj, "elem_classes", None)}')
|
||||
if field == 'value' and key not in self.component_mapping:
|
||||
self.component_mapping[key] = x
|
||||
if field == 'open' and key not in self.component_mapping:
|
||||
@@ -194,12 +199,11 @@ class UiLoadsave:
|
||||
return text
|
||||
|
||||
def ui_apply(self, *values):
|
||||
from modules.shared import log
|
||||
num_changed = 0
|
||||
current_ui_settings = self.read_from_file()
|
||||
for name, old_value, new_value, default_value in self.iter_changes(values):
|
||||
component = self.component_mapping[name]
|
||||
log.debug(f'Settings: name={name} component={component} old={old_value} default={default_value} new={new_value}')
|
||||
errors.log.debug(f'Settings: name={name} component={component} old={old_value} default={default_value} new={new_value}')
|
||||
num_changed += 1
|
||||
current_ui_settings[name] = new_value
|
||||
if num_changed == 0:
|
||||
@@ -228,11 +232,10 @@ class UiLoadsave:
|
||||
text += f"<tr><td>{k}</td><td>{'open' if opened else 'closed'}</td></tr>"
|
||||
text += "</tbody></table>"
|
||||
|
||||
from modules.shared import log
|
||||
num_changed = 0
|
||||
current_ui_settings = self.read_from_file()
|
||||
for name, _old_value, new_value, default_value in self.iter_menus():
|
||||
log.debug(f'Settings: name={name} default={default_value} new={new_value}')
|
||||
errors.log.debug(f'Settings: name={name} default={default_value} new={new_value}')
|
||||
num_changed += 1
|
||||
current_ui_settings[name] = new_value
|
||||
if num_changed == 0:
|
||||
|
||||
@@ -45,7 +45,7 @@ def create_ui():
|
||||
trending = gr.Label(elem_id="interrogate_label_trending", label="Trending", num_top_classes=5)
|
||||
flavor = gr.Label(elem_id="interrogate_label_flavor", label="Flavor", num_top_classes=5)
|
||||
with gr.Row():
|
||||
clip_model = gr.Dropdown([], value='ViT-L-14/openai', label='CLIP Model')
|
||||
clip_model = gr.Dropdown([], value='ViT-L-14/openai', label='CLiP Model')
|
||||
ui_common.create_refresh_button(clip_model, interrogate.get_clip_models, lambda: {"choices": interrogate.get_clip_models()}, 'refresh_interrogate_models')
|
||||
mode = gr.Radio(['best', 'fast', 'classic', 'caption', 'negative'], label='Mode', value='best')
|
||||
with gr.Row(elem_id='interrogate_buttons_image'):
|
||||
@@ -67,7 +67,7 @@ def create_ui():
|
||||
with gr.Row():
|
||||
batch = gr.Text(label="Prompts", lines=10)
|
||||
with gr.Row():
|
||||
clip_model = gr.Dropdown([], value='ViT-L-14/openai', label='CLIP Model')
|
||||
clip_model = gr.Dropdown([], value='ViT-L-14/openai', label='CLiP Batch Model')
|
||||
ui_common.create_refresh_button(clip_model, interrogate.get_clip_models, lambda: {"choices": interrogate.get_clip_models()}, 'refresh_interrogate_models')
|
||||
with gr.Row(elem_id='interrogate_buttons_batch'):
|
||||
btn_interrogate_batch = gr.Button("Interrogate", elem_id="interrogate_btn_interrogate", variant='primary')
|
||||
|
||||
@@ -306,14 +306,16 @@ def create_hires_inputs(tab):
|
||||
return enable_hr, hr_sampler_index, denoising_strength, hr_resize_mode, hr_resize_context, hr_upscaler, hr_force, hr_second_pass_steps, hr_scale, hr_resize_x, hr_resize_y, refiner_steps, refiner_start, refiner_prompt, refiner_negative
|
||||
|
||||
|
||||
def create_resize_inputs(tab, images, accordion=True, latent=False, non_zero=True):
|
||||
def create_resize_inputs(tab, images, accordion=True, latent=False, non_zero=True, prefix=''):
|
||||
dummy_component = gr.Number(visible=False, value=0)
|
||||
if len(prefix) > 0 and not prefix.startswith(' '):
|
||||
prefix = f' {prefix}'
|
||||
with gr.Accordion(open=False, label="Resize", elem_classes=["small-accordion"], elem_id=f"{tab}_resize_group") if accordion else gr.Group():
|
||||
with gr.Row():
|
||||
resize_mode = gr.Dropdown(label="Mode" if non_zero else "Resize mode", elem_id=f"{tab}_resize_mode", choices=shared.resize_modes, type="index", value='Fixed')
|
||||
resize_name = gr.Dropdown(label="Method", elem_id=f"{tab}_resize_name", choices=([] if not latent else list(shared.latent_upscale_modes)) + [x.name for x in shared.sd_upscalers], value=shared.latent_upscale_default_mode, visible=True)
|
||||
resize_mode = gr.Dropdown(label=f"Mode{prefix}" if non_zero else "Resize mode", elem_id=f"{tab}_resize_mode", choices=shared.resize_modes, type="index", value='Fixed')
|
||||
resize_name = gr.Dropdown(label=f"Method{prefix}", elem_id=f"{tab}_resize_name", choices=([] if not latent else list(shared.latent_upscale_modes)) + [x.name for x in shared.sd_upscalers], value=shared.latent_upscale_default_mode, visible=True)
|
||||
resize_context_choices = ["Add with forward", "Remove with forward", "Add with backward", "Remove with backward"]
|
||||
resize_context = gr.Dropdown(label="Context", elem_id=f"{tab}_resize_context", choices=resize_context_choices, value=resize_context_choices[0], visible=False)
|
||||
resize_context = gr.Dropdown(label=f"Context{prefix}", elem_id=f"{tab}_resize_context", choices=resize_context_choices, value=resize_context_choices[0], visible=False)
|
||||
ui_common.create_refresh_button(resize_name, modelloader.load_upscalers, lambda: {"choices": modelloader.load_upscalers()}, 'refresh_upscalers')
|
||||
|
||||
def resize_mode_change(mode):
|
||||
@@ -330,8 +332,8 @@ def create_resize_inputs(tab, images, accordion=True, latent=False, non_zero=Tru
|
||||
with gr.Row():
|
||||
with gr.Column(elem_id=f"{tab}_column_size_fixed"):
|
||||
with gr.Row():
|
||||
width = gr.Slider(minimum=64 if non_zero else 0, maximum=8192, step=8, label="Width" if non_zero else "Resize width", value=1024 if non_zero else 0, elem_id=f"{tab}_resize_width")
|
||||
height = gr.Slider(minimum=64 if non_zero else 0, maximum=8192, step=8, label="Height" if non_zero else "Resize height", value=1024 if non_zero else 0, elem_id=f"{tab}_resize_height")
|
||||
width = gr.Slider(minimum=64 if non_zero else 0, maximum=8192, step=8, label=f"Width {prefix}" if non_zero else "Resize width", value=1024 if non_zero else 0, elem_id=f"{tab}_resize_width")
|
||||
height = gr.Slider(minimum=64 if non_zero else 0, maximum=8192, step=8, label=f"Height {prefix}" if non_zero else "Resize height", value=1024 if non_zero else 0, elem_id=f"{tab}_resize_height")
|
||||
ar_list = ['AR'] + [x.strip() for x in shared.opts.aspect_ratios.split(',') if x.strip() != '']
|
||||
ar_dropdown = gr.Dropdown(show_label=False, interactive=True, choices=ar_list, value=ar_list[0], elem_id=f"{tab}_resize_ar", elem_classes=["ar-dropdown"])
|
||||
for c in [ar_dropdown, width, height]:
|
||||
@@ -342,7 +344,7 @@ def create_resize_inputs(tab, images, accordion=True, latent=False, non_zero=Tru
|
||||
el = tab.split('_')[0]
|
||||
detect_image_size_btn.click(fn=lambda w, h, _: (w or gr.update(), h or gr.update()), _js=f'currentImageResolution{el}', inputs=[dummy_component, dummy_component, dummy_component], outputs=[width, height], show_progress=False)
|
||||
with gr.Tab(label="Scale", id=1, elem_id=f"{tab}_scale_tab_scale") as tab_scale_by:
|
||||
scale_by = gr.Slider(minimum=0.05, maximum=8.0, step=0.05, label="Scale" if non_zero else "Resize scale", value=1.0, elem_id=f"{tab}_scale")
|
||||
scale_by = gr.Slider(minimum=0.05, maximum=8.0, step=0.05, label=f"Scale {prefix}" if non_zero else "Resize scale", value=1.0, elem_id=f"{tab}_scale")
|
||||
if images is not None:
|
||||
for component in images:
|
||||
component.change(fn=lambda: None, _js="updateImg2imgResizeToTextAfterChangingImage", inputs=[], outputs=[], show_progress=False)
|
||||
|
||||
Reference in New Issue
Block a user