diff --git a/CHANGELOG.md b/CHANGELOG.md index 76dac5867..3f4c804e4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -46,6 +46,7 @@ But there's more than SD3: *example*: load FP4 or FP8 quantized T5 text-encoder into PixArt Sigma! - support for `torch-directml` **0.2.2**, thanks @lshqqytiger! *note*: new directml is finally based on modern `torch` 2.3.1! +- xyz grid: add support for LoRA selector - extra networks: info display now contains link to source url if model if its known works for civitai and huggingface models - force gc for lowvram users and improve gc logging diff --git a/modules/shared.py b/modules/shared.py index 81b32fa8b..ea551ea3b 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -821,7 +821,7 @@ options_templates.update(options_section(('extra_networks', "Networks"), { "extra_networks_sep2": OptionInfo("

Extra networks general

", "", gr.HTML), "extra_network_reference": OptionInfo(False, "Use reference values when available", gr.Checkbox), "extra_network_skip_indexing": OptionInfo(False, "Build info on first access", gr.Checkbox), - "extra_networks_default_multiplier": OptionInfo(1.0, "Default multiplier for extra networks", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), + "extra_networks_default_multiplier": OptionInfo(1.0, "Default strength for extra networks", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}), "diffusers_convert_embed": OptionInfo(False, "Auto-convert SD 1.5 embeddings to SDXL ", gr.Checkbox, {"visible": native}), "extra_networks_sep3": OptionInfo("

Extra networks settings

", "", gr.HTML), "extra_networks_styles": OptionInfo(True, "Show built-in styles"), diff --git a/scripts/xyz_grid.py b/scripts/xyz_grid.py index c4b44282d..7de4b138f 100644 --- a/scripts/xyz_grid.py +++ b/scripts/xyz_grid.py @@ -65,6 +65,7 @@ def apply_sampler(p, x, xs): else: p.sampler_name = sampler_name + def apply_hr_sampler_name(p, x, xs): hr_sampler_name = sd_samplers.samplers_map.get(x.lower(), None) if hr_sampler_name is None: @@ -72,6 +73,7 @@ def apply_hr_sampler_name(p, x, xs): else: p.hr_sampler_name = hr_sampler_name + def confirm_samplers(p, xs): for x in xs: if x.lower() not in sd_samplers.samplers_map: @@ -138,6 +140,19 @@ def apply_vae(p, x, xs): sd_vae.reload_vae_weights(shared.sd_model, vae_file=find_vae(x)) +def list_lora(): + import sys + lora = [v for k, v in sys.modules.items() if k == 'networks'][0] + loras = [v.name for v in lora.available_networks.values()] + return ['None'] + loras + + +def apply_lora(p, x, xs): + if x == 'None': + return + p.prompt = p.prompt + f" " + + def apply_te(p, x, xs): shared.opts.data["sd_text_encoder"] = x sd_models.reload_text_encoder() @@ -235,6 +250,7 @@ axis_options = [ AxisOption("Prompt S/R", str, apply_prompt, fmt=format_value), AxisOption("Model", str, apply_checkpoint, fmt=format_value, cost=1.0, choices=lambda: sorted(sd_models.checkpoints_list)), AxisOption("VAE", str, apply_vae, cost=0.7, choices=lambda: ['None'] + list(sd_vae.vae_dict)), + AxisOption("LoRA", str, apply_lora, cost=0.5, choices=list_lora), AxisOption("Text encoder", str, apply_te, cost=0.7, choices=lambda: ['None', 'T5 FP4', 'T5 FP8', 'T5 FP16']), AxisOption("Styles", str, apply_styles, choices=lambda: [s.name for s in shared.prompt_styles.styles.values()]), AxisOption("Seed", int, apply_field("seed")),