diff --git a/modules/processing_diffusers.py b/modules/processing_diffusers.py index d6d5617dd..bbe0d5fb5 100644 --- a/modules/processing_diffusers.py +++ b/modules/processing_diffusers.py @@ -68,15 +68,17 @@ def process_diffusers(p: StableDiffusionProcessing, seeds, prompts, negative_pro 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 - args['pooled_prompt_embeds'] = pooled - args['prompt_2'] = None #Cannot pass prompts when passing embeds + if shared.sd_model_type == "sdxl": + args['pooled_prompt_embeds'] = pooled + args['prompt_2'] = None #Cannot pass prompts when passing embeds else: args['prompt'] = prompt if 'negative_prompt' in possible: if hasattr(model, 'text_encoder') and 'negative_prompt_embeds' in possible and negative_embed is not None: args['negative_prompt_embeds'] = negative_embed - args['negative_pooled_prompt_embeds'] = negative_pooled - args['negative_prompt_2'] = None + if shared.sd_model_type == "sdxl": + args['negative_pooled_prompt_embeds'] = negative_pooled + args['negative_prompt_2'] = None else: args['negative_prompt'] = negative_prompt if 'num_inference_steps' in possible: diff --git a/modules/prompt_parser_diffusers.py b/modules/prompt_parser_diffusers.py index d202b728f..70ce69f28 100644 --- a/modules/prompt_parser_diffusers.py +++ b/modules/prompt_parser_diffusers.py @@ -38,7 +38,7 @@ def compel_encode_prompt( shared.log.warning( f"Compel encoding not yet supported for {type(pipeline).__name__}." ) - return (None,) * 4 + return (None, None, None, None) if shared.opts.data["prompt_attention"] != "Compel parser": prompt = convert_to_compel(prompt) negative_prompt = convert_to_compel(negative_prompt) @@ -52,26 +52,33 @@ def compel_encode_prompt( requires_pooled=False, ) - compel_te2 = Compel( - tokenizer=pipeline.tokenizer_2, - text_encoder=pipeline.text_encoder_2, - returned_embeddings_type=ReturnedEmbeddingsType.PENULTIMATE_HIDDEN_STATES_NON_NORMALIZED, - requires_pooled=True, - ) - if not is_refiner: - positive_te1 = compel_te1(prompt) - positive_te2, positive_pooled = compel_te2(prompt_2) - positive = torch.cat((positive_te1, positive_te2), dim=-1) + if shared.sd_model_type == "sdxl": + compel_te2 = Compel( + tokenizer=pipeline.tokenizer_2, + text_encoder=pipeline.text_encoder_2, + returned_embeddings_type=ReturnedEmbeddingsType.PENULTIMATE_HIDDEN_STATES_NON_NORMALIZED, + requires_pooled=True, + ) + if not is_refiner: + positive_te1 = compel_te1(prompt) + 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, positive_pooled = compel_te2(prompt) - negative, negative_pooled = compel_te2(negative_prompt) + 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, 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( + shared.log.debug(f"Parsed Compel string: {compel_te1.parse_prompt_string(prompt)}") + [prompt_embed, negative_embed] = compel_te2.pad_conditioning_tensors_to_same_length( + [positive, negative] + ) + return prompt_embed, positive_pooled, negative_embed, negative_pooled + + positive, negative = compel_te1(prompt), compel_te1(negative_prompt) + [prompt_embed, negative_embed] = compel_te1.pad_conditioning_tensors_to_same_length( [positive, negative] ) - return prompt_embed, positive_pooled, negative_embed, negative_pooled + return prompt_embed, None, negative_embed, None