Update nodes and address performance issues

This commit is contained in:
ExponentialML
2024-03-21 20:24:17 -07:00
committed by GitHub
parent 0e0373d0b7
commit 8f08611231
3 changed files with 628 additions and 11 deletions
+57 -11
View File
@@ -2,7 +2,39 @@ import comfy
import torch
import nodes
from .utils.attention_functions import VisualStyleProcessor, ATTENTION_LAYER_CANDIDATES
from .utils.attention_functions import VisualStyleProcessor
APPLY_STYLE_PROMPT_KEY = "apply_style_prompts"
class VisualStylePrompt:
@classmethod
def INPUT_TYPES(s):
return {
"required": {
"clip": ("CLIP", ),
"positive_prompt": ("STRING", {"multiline": True}),
"reference_image_prompt": ("STRING", {"multiline": True}),
}
}
CATEGORY = "VisualStylePrompting/encode"
RETURN_TYPES = ("CONDITIONING",)
RETURN_NAMES = ("visual_style_prompt",)
FUNCTION = "encode"
def encode(self, clip, positive_prompt, reference_image_prompt):
tokens_positive = clip.tokenize(positive_prompt)
cond_positive, pooled_positive = clip.encode_from_tokens(tokens_positive, return_pooled=True)
tokens_ref = clip.tokenize(positive_prompt)
cond_ref, pooled_ref = clip.encode_from_tokens(tokens_ref, return_pooled=True)
conds = {
"apply_style_prompts": [
[[cond_positive, {"pooled_output": pooled_positive}]],
[[cond_ref, {"pooled_output": pooled_ref}]]],
}
return (conds, )
class ApplyVisualStyle:
@classmethod
@@ -12,8 +44,7 @@ class ApplyVisualStyle:
"model": ("MODEL",),
"vae": ("VAE", ),
"reference_image": ("IMAGE",),
"conditioning_prompt": ("CONDITIONING",),
"reference_image_prompt": ("CONDITIONING",),
"visual_style_prompt": ("CONDITIONING", "VisualStylePrompt"),
"negative_prompt": ("CONDITIONING", ),
"enabled": ("BOOLEAN", {"default": True}),
"denoise": ("FLOAT", {"default": 1., "min": 0., "max": 1., "step": 1e-2}),
@@ -55,8 +86,7 @@ class ApplyVisualStyle:
model: comfy.model_patcher.ModelPatcher,
vae,
reference_image,
conditioning_prompt,
reference_image_prompt,
visual_style_prompt,
negative_prompt,
enabled,
denoise,
@@ -65,16 +95,26 @@ class ApplyVisualStyle:
output_blocks,
init_image = None
):
self.model = model
if APPLY_STYLE_PROMPT_KEY not in visual_style_prompt:
raise ValueError("Please use the Visual Style Prompt Encode Node.")
conditioning_prompt, reference_image_prompt = visual_style_prompt[APPLY_STYLE_PROMPT_KEY]
reference_latent = vae.encode(reference_image[:,:,:,:3])
block_choices = self.get_block_choices(input_blocks, middle_block, output_blocks)
for n, m in model.model.diffusion_model.named_modules():
if m.__class__.__name__ == "CrossAttention":
processor = VisualStyleProcessor(m, enabled=self.activate_block_choice(n, block_choices))
setattr(m, 'forward', processor.visual_style_forward)
is_enabled = self.activate_block_choice(n, block_choices)
if hasattr(m.forward, 'module_self'):
m.forward.enabled = is_enabled and enabled
else:
processor = VisualStyleProcessor(m, enabled=is_enabled)
setattr(m, 'forward', processor)
conditioning_prompt[0][0] = torch.cat([reference_image_prompt[0][0], conditioning_prompt[0][0]])
negative_prompt[0][0] = torch.cat([negative_prompt[0][0]] * 2)
@@ -92,6 +132,12 @@ class ApplyVisualStyle:
return (model, conditioning_prompt, negative_prompt, {"samples": latents, "noise_mask": denoise_mask})
NODE_CLASS_MAPPINGS = {"ApplyVisualStyle": ApplyVisualStyle}
NODE_CLASS_MAPPINGS = {
"ApplyVisualStyle": ApplyVisualStyle,
"VisualStylePrompt": VisualStylePrompt
}
NODE_DISPLAY_NAME_MAPPINGS = {"ApplyVisualStyle": "Apply Visual Style Prompting"}
NODE_DISPLAY_NAME_MAPPINGS = {
"ApplyVisualStyle": "Apply Visual Style Prompting",
"VisualStylePrompt": "Visual Style Prompt Encode"
}