mirror of
https://git.datalinker.icu/comfyanonymous/ComfyUI
synced 2026-08-16 01:36:41 +08:00
Merge branch 'master' into context-windows
This commit is contained in:
commit
30b1b75ced
@ -293,6 +293,15 @@ def model_lora_keys_unet(model, key_map={}):
|
|||||||
key_lora = k[len("diffusion_model."):-len(".weight")]
|
key_lora = k[len("diffusion_model."):-len(".weight")]
|
||||||
key_map["{}".format(key_lora)] = k
|
key_map["{}".format(key_lora)] = k
|
||||||
|
|
||||||
|
if isinstance(model, comfy.model_base.QwenImage):
|
||||||
|
for k in sdk:
|
||||||
|
if k.startswith("diffusion_model.") and k.endswith(".weight"): #QwenImage lora format
|
||||||
|
key_lora = k[len("diffusion_model."):-len(".weight")]
|
||||||
|
# Direct mapping for transformer_blocks format (QwenImage LoRA format)
|
||||||
|
key_map["{}".format(key_lora)] = k
|
||||||
|
# Support transformer prefix format
|
||||||
|
key_map["transformer.{}".format(key_lora)] = k
|
||||||
|
|
||||||
return key_map
|
return key_map
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -96,6 +96,7 @@ class LoRAAdapter(WeightAdapterBase):
|
|||||||
diffusers3_lora = "{}.lora.up.weight".format(x)
|
diffusers3_lora = "{}.lora.up.weight".format(x)
|
||||||
mochi_lora = "{}.lora_B".format(x)
|
mochi_lora = "{}.lora_B".format(x)
|
||||||
transformers_lora = "{}.lora_linear_layer.up.weight".format(x)
|
transformers_lora = "{}.lora_linear_layer.up.weight".format(x)
|
||||||
|
qwen_default_lora = "{}.lora_B.default.weight".format(x)
|
||||||
A_name = None
|
A_name = None
|
||||||
|
|
||||||
if regular_lora in lora.keys():
|
if regular_lora in lora.keys():
|
||||||
@ -122,6 +123,10 @@ class LoRAAdapter(WeightAdapterBase):
|
|||||||
A_name = transformers_lora
|
A_name = transformers_lora
|
||||||
B_name = "{}.lora_linear_layer.down.weight".format(x)
|
B_name = "{}.lora_linear_layer.down.weight".format(x)
|
||||||
mid_name = None
|
mid_name = None
|
||||||
|
elif qwen_default_lora in lora.keys():
|
||||||
|
A_name = qwen_default_lora
|
||||||
|
B_name = "{}.lora_A.default.weight".format(x)
|
||||||
|
mid_name = None
|
||||||
|
|
||||||
if A_name is not None:
|
if A_name is not None:
|
||||||
mid = None
|
mid = None
|
||||||
|
|||||||
@ -9,7 +9,11 @@ from typing import Type
|
|||||||
import av
|
import av
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import torch
|
import torch
|
||||||
import torchaudio
|
try:
|
||||||
|
import torchaudio
|
||||||
|
TORCH_AUDIO_AVAILABLE = True
|
||||||
|
except ImportError:
|
||||||
|
TORCH_AUDIO_AVAILABLE = False
|
||||||
from PIL import Image as PILImage
|
from PIL import Image as PILImage
|
||||||
from PIL.PngImagePlugin import PngInfo
|
from PIL.PngImagePlugin import PngInfo
|
||||||
|
|
||||||
@ -302,6 +306,8 @@ class AudioSaveHelper:
|
|||||||
|
|
||||||
# Resample if necessary
|
# Resample if necessary
|
||||||
if sample_rate != audio["sample_rate"]:
|
if sample_rate != audio["sample_rate"]:
|
||||||
|
if not TORCH_AUDIO_AVAILABLE:
|
||||||
|
raise Exception("torchaudio is not available; cannot resample audio.")
|
||||||
waveform = torchaudio.functional.resample(waveform, audio["sample_rate"], sample_rate)
|
waveform = torchaudio.functional.resample(waveform, audio["sample_rate"], sample_rate)
|
||||||
|
|
||||||
# Create output with specified format
|
# Create output with specified format
|
||||||
|
|||||||
@ -314,6 +314,29 @@ class ModelMergeCosmosPredict2_14B(comfy_extras.nodes_model_merging.ModelMergeBl
|
|||||||
|
|
||||||
return {"required": arg_dict}
|
return {"required": arg_dict}
|
||||||
|
|
||||||
|
class ModelMergeQwenImage(comfy_extras.nodes_model_merging.ModelMergeBlocks):
|
||||||
|
CATEGORY = "advanced/model_merging/model_specific"
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def INPUT_TYPES(s):
|
||||||
|
arg_dict = { "model1": ("MODEL",),
|
||||||
|
"model2": ("MODEL",)}
|
||||||
|
|
||||||
|
argument = ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01})
|
||||||
|
|
||||||
|
arg_dict["pos_embeds."] = argument
|
||||||
|
arg_dict["img_in."] = argument
|
||||||
|
arg_dict["txt_norm."] = argument
|
||||||
|
arg_dict["txt_in."] = argument
|
||||||
|
arg_dict["time_text_embed."] = argument
|
||||||
|
|
||||||
|
for i in range(60):
|
||||||
|
arg_dict["transformer_blocks.{}.".format(i)] = argument
|
||||||
|
|
||||||
|
arg_dict["proj_out."] = argument
|
||||||
|
|
||||||
|
return {"required": arg_dict}
|
||||||
|
|
||||||
NODE_CLASS_MAPPINGS = {
|
NODE_CLASS_MAPPINGS = {
|
||||||
"ModelMergeSD1": ModelMergeSD1,
|
"ModelMergeSD1": ModelMergeSD1,
|
||||||
"ModelMergeSD2": ModelMergeSD1, #SD1 and SD2 have the same blocks
|
"ModelMergeSD2": ModelMergeSD1, #SD1 and SD2 have the same blocks
|
||||||
@ -329,4 +352,5 @@ NODE_CLASS_MAPPINGS = {
|
|||||||
"ModelMergeWAN2_1": ModelMergeWAN2_1,
|
"ModelMergeWAN2_1": ModelMergeWAN2_1,
|
||||||
"ModelMergeCosmosPredict2_2B": ModelMergeCosmosPredict2_2B,
|
"ModelMergeCosmosPredict2_2B": ModelMergeCosmosPredict2_2B,
|
||||||
"ModelMergeCosmosPredict2_14B": ModelMergeCosmosPredict2_14B,
|
"ModelMergeCosmosPredict2_14B": ModelMergeCosmosPredict2_14B,
|
||||||
|
"ModelMergeQwenImage": ModelMergeQwenImage,
|
||||||
}
|
}
|
||||||
|
|||||||
6
nodes.py
6
nodes.py
@ -1229,12 +1229,12 @@ class RepeatLatentBatch:
|
|||||||
s = samples.copy()
|
s = samples.copy()
|
||||||
s_in = samples["samples"]
|
s_in = samples["samples"]
|
||||||
|
|
||||||
s["samples"] = s_in.repeat((amount, 1,1,1))
|
s["samples"] = s_in.repeat((amount,) + ((1,) * (s_in.ndim - 1)))
|
||||||
if "noise_mask" in samples and samples["noise_mask"].shape[0] > 1:
|
if "noise_mask" in samples and samples["noise_mask"].shape[0] > 1:
|
||||||
masks = samples["noise_mask"]
|
masks = samples["noise_mask"]
|
||||||
if masks.shape[0] < s_in.shape[0]:
|
if masks.shape[0] < s_in.shape[0]:
|
||||||
masks = masks.repeat(math.ceil(s_in.shape[0] / masks.shape[0]), 1, 1, 1)[:s_in.shape[0]]
|
masks = masks.repeat((math.ceil(s_in.shape[0] / masks.shape[0]),) + ((1,) * (masks.ndim - 1)))[:s_in.shape[0]]
|
||||||
s["noise_mask"] = samples["noise_mask"].repeat((amount, 1,1,1))
|
s["noise_mask"] = samples["noise_mask"].repeat((amount,) + ((1,) * (samples["noise_mask"].ndim - 1)))
|
||||||
if "batch_index" in s:
|
if "batch_index" in s:
|
||||||
offset = max(s["batch_index"]) - min(s["batch_index"]) + 1
|
offset = max(s["batch_index"]) - min(s["batch_index"]) + 1
|
||||||
s["batch_index"] = s["batch_index"] + [x + (i * offset) for i in range(1, amount) for x in s["batch_index"]]
|
s["batch_index"] = s["batch_index"] + [x + (i * offset) for i in range(1, amount) for x in s["batch_index"]]
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
comfyui-frontend-package==1.23.4
|
comfyui-frontend-package==1.24.4
|
||||||
comfyui-workflow-templates==0.1.51
|
comfyui-workflow-templates==0.1.52
|
||||||
comfyui-embedded-docs==0.2.4
|
comfyui-embedded-docs==0.2.4
|
||||||
torch
|
torch
|
||||||
torchsde
|
torchsde
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user