fix prompt scheduling

This commit is contained in:
Vladimir Mandic
2023-12-18 13:27:36 -05:00
parent c1aa146b5a
commit f13f2d03f9
4 changed files with 10 additions and 3 deletions
+1 -1
View File
@@ -667,7 +667,7 @@ class Api:
"enabled":ext.enabled
})
return ext_list
def launch(self):
config = {
"listen": shared.cmd_opts.listen,
+2
View File
@@ -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)
+2 -2
View File
@@ -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]
+5
View File
@@ -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):