diff --git a/modules/api/api.py b/modules/api/api.py index d33a81834..1f60e5c01 100644 --- a/modules/api/api.py +++ b/modules/api/api.py @@ -667,7 +667,7 @@ class Api: "enabled":ext.enabled }) return ext_list - + def launch(self): config = { "listen": shared.cmd_opts.listen, diff --git a/modules/processing.py b/modules/processing.py index deaf81ac5..156a33810 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -697,6 +697,8 @@ def process_images(p: StableDiffusionProcessing) -> Processed: p.scripts.before_process(p) stored_opts = {} for k, v in p.override_settings.copy().items(): + if shared.opts.data.get(k, None) is None and shared.opts.data_labels.get(k, None) is None: + continue orig = shared.opts.data.get(k, None) or shared.opts.data_labels[k].default if orig == v or (type(orig) == str and os.path.splitext(orig)[0] == v): p.override_settings.pop(k, None) diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index 15e3bc3b8..73c3fcc09 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -314,14 +314,14 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro if os.environ.get('SD_PROMPT_DEBUG', None) is not None: errors.display(e, 'Prompt parser encode') if 'prompt' in possible: - if hasattr(model, 'text_encoder') and 'prompt_embeds' in possible and p.prompt_embeds[0] is not None: + if hasattr(model, 'text_encoder') and 'prompt_embeds' in possible and len(p.prompt_embeds) > 0 and p.prompt_embeds[0] is not None: args['prompt_embeds'] = p.prompt_embeds[0] if 'XL' in model.__class__.__name__: args['pooled_prompt_embeds'] = p.positive_pooleds[0] else: args['prompt'] = prompts if 'negative_prompt' in possible: - if hasattr(model, 'text_encoder') and 'negative_prompt_embeds' in possible and p.negative_embeds[0] is not None: + if hasattr(model, 'text_encoder') and 'negative_prompt_embeds' in possible and len(p.negative_embeds) > 0 and p.negative_embeds[0] is not None: args['negative_prompt_embeds'] = p.negative_embeds[0] if 'XL' in model.__class__.__name__: args['negative_pooled_prompt_embeds'] = p.negative_pooleds[0] diff --git a/modules/prompt_parser_diffusers.py b/modules/prompt_parser_diffusers.py index ae5acb8f6..f29a19b6d 100644 --- a/modules/prompt_parser_diffusers.py +++ b/modules/prompt_parser_diffusers.py @@ -1,4 +1,5 @@ import os +import time import typing import torch from compel import ReturnedEmbeddingsType @@ -59,12 +60,16 @@ class DiffusersTextualInversionManager(BaseTextualInversionManager): return self.pipe.tokenizer.encode(prompt, add_special_tokens=False) def get_prompt_schedule(p, prompt, steps): + t0 = time.time() temp = [] schedule = prompt_parser.get_learned_conditioning_prompt_schedules([prompt], steps)[0] + if all(x == schedule[0] for x in schedule): + return [prompt], False for chunk in schedule: for s in range(steps): if len(temp) < s + 1 <= chunk[0]: temp.append(chunk[1]) + debug(f'Prompt: schedule={temp} time={time.time()-t0}') return temp, len(schedule) > 1 def encode_prompts(pipe, p, prompts: list, negative_prompts: list, steps: int, step: int = 1, clip_skip: typing.Optional[int] = None):