diff --git a/modules/api/api.py b/modules/api/api.py index 0a35a8fcf..ce5bda675 100644 --- a/modules/api/api.py +++ b/modules/api/api.py @@ -448,7 +448,7 @@ class Api: def get_samplers(self): return [{"name": sampler[0], "aliases":sampler[2], "options":sampler[3]} for sampler in sd_samplers.all_samplers] - + def get_sd_vaes(self): return [{"model_name": x, "filename": vae_dict[x]} for x in vae_dict.keys()] diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index a305b9530..ffe3fe871 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -8,6 +8,7 @@ import modules.images as images from modules.lora_diffusers import lora_state, unload_diffusers_lora from modules.processing import StableDiffusionProcessing import modules.prompt_parser_diffusers as prompt_parser_diffusers +import typing try: import diffusers @@ -51,7 +52,7 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro return latents - def set_pipeline_args(model, prompt, negative_prompt, prompt_2=None, negative_prompt_2=None, refiner=False, **kwargs): + def set_pipeline_args(model, prompt: str, negative_prompt: str, prompt_2: typing.Optional[str] =None, negative_prompt_2: typing.Optional[str] = None, is_refiner: bool = False, **kwargs): args = {} pipeline = model signature = inspect.signature(type(pipeline).__call__) @@ -63,7 +64,7 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro negative_embed = None negative_pooled = None if shared.opts.data['prompt_attention'] != 'Fixed attention': - prompt_embed, pooled, negative_embed, negative_pooled = prompt_parser_diffusers.compel_encode_prompt(model, prompt, negative_prompt, prompt_2, negative_prompt_2, refiner) + prompt_embed, pooled, negative_embed, negative_pooled = prompt_parser_diffusers.compel_encode_prompt(model, prompt, negative_prompt, prompt_2, negative_prompt_2, is_refiner) if 'prompt' in possible: if hasattr(model, 'text_encoder') and 'prompt_embeds' in possible and prompt_embed is not None: args['prompt_embeds'] = prompt_embed @@ -157,7 +158,7 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro denoising_start=0 if refiner_enabled and p.refiner_start > 0 and p.refiner_start < 1 else None, denoising_end=p.refiner_start if refiner_enabled and p.refiner_start > 0 and p.refiner_start < 1 else None, output_type='latent' if hasattr(shared.sd_model, 'vae') else 'np', - refiner=False, + is_refiner=False, **task_specific_kwargs ) output = shared.sd_model(**pipe_args) # pylint: disable=not-callable @@ -211,7 +212,7 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro denoising_end=1 if p.refiner_start > 0 and p.refiner_start < 1 else None, image=output.images[i], output_type='latent' if hasattr(shared.sd_refiner, 'vae') else 'np', - refiner=True + is_refiner=True ) refiner_output = shared.sd_refiner(**pipe_args) # pylint: disable=not-callable if not shared.state.interrupted and not shared.state.skipped: @@ -230,4 +231,4 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro - return results \ No newline at end of file + return results diff --git a/modules/prompt_parser_diffusers.py b/modules/prompt_parser_diffusers.py index a23660f5c..1f21c0dee 100644 --- a/modules/prompt_parser_diffusers.py +++ b/modules/prompt_parser_diffusers.py @@ -26,7 +26,7 @@ def compel_encode_prompt(pipeline: typing.Any, *args, **kwargs): raise TypeError(f"Compel encoding not yet supported for {type(pipeline).__name__}.") return compel_encode_fn(pipeline, *args, **kwargs) -def compel_encode_prompt_sdxl(pipeline: diffusers.StableDiffusionXLPipeline, prompt: str, negative_prompt: str, prompt_2: typing.Optional[str]=None, negative_prompt_2: typing.Optional[str]=None, refiner=False): +def compel_encode_prompt_sdxl(pipeline: diffusers.StableDiffusionXLPipeline, prompt: str, negative_prompt: str, prompt_2: typing.Optional[str]=None, negative_prompt_2: typing.Optional[str]=None, is_refiner: bool = False): if shared.opts.data['prompt_attention'] != 'Compel parser': prompt = convert_to_compel(prompt) negative_prompt = convert_to_compel(negative_prompt) @@ -46,20 +46,20 @@ def compel_encode_prompt_sdxl(pipeline: diffusers.StableDiffusionXLPipeline, pro returned_embeddings_type=ReturnedEmbeddingsType.PENULTIMATE_HIDDEN_STATES_NON_NORMALIZED, requires_pooled=True, ) - if refiner is False: + if not is_refiner: positive_te1 = compel_te1(prompt) - positive_te2, pooled = compel_te2(prompt_2) + positive_te2, positive_pooled = compel_te2(prompt_2) positive = torch.cat((positive_te1, positive_te2), dim=-1) negative_te1 = compel_te1(negative_prompt) negative_te2, negative_pooled = compel_te2(negative_prompt_2) negative = torch.cat((negative_te1, negative_te2), dim=-1) else: - positive, pooled = compel_te2(prompt) + positive, positive_pooled = compel_te2(prompt) negative, negative_pooled = compel_te2(negative_prompt) shared.log.debug(compel_te1.parse_prompt_string(prompt)) [prompt_embed, negative_embed] = compel_te2.pad_conditioning_tensors_to_same_length([positive, negative]) - return prompt_embed, pooled, negative_embed, negative_pooled + return prompt_embed, positive_pooled, negative_embed, negative_pooled COMPEL_ENCODE_FN_DICT = {diffusers.StableDiffusionXLPipeline: compel_encode_prompt_sdxl}