diff --git a/nodes.py b/nodes.py index 4c1ab21..920cf23 100644 --- a/nodes.py +++ b/nodes.py @@ -3104,6 +3104,8 @@ class WanVideoSampler: frame_num = clip_length = image_embeds.get("num_frames", 81) vae = image_embeds.get("vae", None) clip_embeds = image_embeds.get("clip_context", None) + if clip_embeds is not None: + clip_embeds = clip_embeds.to(dtype) colormatch = image_embeds.get("colormatch", "disabled") motion_frame = image_embeds.get("motion_frame", 25) target_w = image_embeds.get("target_w", None) @@ -3295,7 +3297,7 @@ class WanVideoSampler: cfg[idx], text_embeds["prompt_embeds"], text_embeds["negative_prompt_embeds"], - timestep, idx, y.squeeze(0), clip_embeds.to(dtype), control_latents, vace_data, unianim_data, audio_proj, control_camera_latents, add_cond, + timestep, idx, y.squeeze(0), clip_embeds, control_latents, vace_data, unianim_data, audio_proj, control_camera_latents, add_cond, cache_state=self.cache_state, multitalk_audio_embeds=audio_embs) if callback is not None: diff --git a/utils.py b/utils.py index 71782f7..b40f36d 100644 --- a/utils.py +++ b/utils.py @@ -208,6 +208,17 @@ def apply_lora(model, device_to, transformer_load_device, params_to_keep=None, d continue m.comfy_patched_weights = True #pbar.update(1) + + # After LoRA patching, scale weights that have scale_weight but are NOT LoRA patched + if len(scale_weights) > 0: + for name, param in model.model.diffusion_model.named_parameters(): + scale_key = name.replace("weight", "scale_weight").replace("diffusion_model.", "") if "weight" in name else None + full_param_name = f"diffusion_model.{name}" + if scale_key and scale_key in scale_weights and full_param_name not in model.patches: + scale = scale_weights[scale_key] + param_fp32 = param.to(torch.float32) + param_fp32.mul_(scale.to(param.device, torch.float32)) + param.copy_(param_fp32.to(param.dtype)) model.current_weight_patches_uuid = model.patches_uuid if low_mem_load: