mirror of
https://github.com/vladmandic/automatic
synced 2026-09-18 16:54:33 +02:00
fix prompt scheduling
This commit is contained in:
+1
-1
@@ -667,7 +667,7 @@ class Api:
|
||||
"enabled":ext.enabled
|
||||
})
|
||||
return ext_list
|
||||
|
||||
|
||||
def launch(self):
|
||||
config = {
|
||||
"listen": shared.cmd_opts.listen,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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):
|
||||
|
||||
Reference in New Issue
Block a user