|
|
|
@ -87,6 +87,50 @@ class CLIPMergeSimple:
|
|
|
|
|
m.add_patches({k: kp[k]}, 1.0 - ratio, ratio) |
|
|
|
|
return (m, ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CLIPSubtract: |
|
|
|
|
@classmethod |
|
|
|
|
def INPUT_TYPES(s): |
|
|
|
|
return {"required": { "clip1": ("CLIP",), |
|
|
|
|
"clip2": ("CLIP",), |
|
|
|
|
"multiplier": ("FLOAT", {"default": 1.0, "min": -10.0, "max": 10.0, "step": 0.01}), |
|
|
|
|
}} |
|
|
|
|
RETURN_TYPES = ("CLIP",) |
|
|
|
|
FUNCTION = "merge" |
|
|
|
|
|
|
|
|
|
CATEGORY = "advanced/model_merging" |
|
|
|
|
|
|
|
|
|
def merge(self, clip1, clip2, multiplier): |
|
|
|
|
m = clip1.clone() |
|
|
|
|
kp = clip2.get_key_patches() |
|
|
|
|
for k in kp: |
|
|
|
|
if k.endswith(".position_ids") or k.endswith(".logit_scale"): |
|
|
|
|
continue |
|
|
|
|
m.add_patches({k: kp[k]}, - multiplier, multiplier) |
|
|
|
|
return (m, ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class CLIPAdd: |
|
|
|
|
@classmethod |
|
|
|
|
def INPUT_TYPES(s): |
|
|
|
|
return {"required": { "clip1": ("CLIP",), |
|
|
|
|
"clip2": ("CLIP",), |
|
|
|
|
}} |
|
|
|
|
RETURN_TYPES = ("CLIP",) |
|
|
|
|
FUNCTION = "merge" |
|
|
|
|
|
|
|
|
|
CATEGORY = "advanced/model_merging" |
|
|
|
|
|
|
|
|
|
def merge(self, clip1, clip2): |
|
|
|
|
m = clip1.clone() |
|
|
|
|
kp = clip2.get_key_patches() |
|
|
|
|
for k in kp: |
|
|
|
|
if k.endswith(".position_ids") or k.endswith(".logit_scale"): |
|
|
|
|
continue |
|
|
|
|
m.add_patches({k: kp[k]}, 1.0, 1.0) |
|
|
|
|
return (m, ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ModelMergeBlocks: |
|
|
|
|
@classmethod |
|
|
|
|
def INPUT_TYPES(s): |
|
|
|
@ -279,6 +323,8 @@ NODE_CLASS_MAPPINGS = {
|
|
|
|
|
"ModelMergeAdd": ModelAdd, |
|
|
|
|
"CheckpointSave": CheckpointSave, |
|
|
|
|
"CLIPMergeSimple": CLIPMergeSimple, |
|
|
|
|
"CLIPMergeSubtract": CLIPSubtract, |
|
|
|
|
"CLIPMergeAdd": CLIPAdd, |
|
|
|
|
"CLIPSave": CLIPSave, |
|
|
|
|
"VAESave": VAESave, |
|
|
|
|
} |
|
|
|
|