Skip to content

Commit

Permalink
Add a node to merge CLIP models.
Browse files Browse the repository at this point in the history
  • Loading branch information
comfyanonymous committed Jul 14, 2023
1 parent 907c9fb commit 91ed281
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 2 deletions.
7 changes: 5 additions & 2 deletions comfy/sd.py
Original file line number Diff line number Diff line change
Expand Up @@ -479,8 +479,8 @@ def clone(self):
def load_from_state_dict(self, sd):
self.cond_stage_model.load_sd(sd)

def add_patches(self, patches, strength=1.0):
return self.patcher.add_patches(patches, strength)
def add_patches(self, patches, strength_patch=1.0, strength_model=1.0):
return self.patcher.add_patches(patches, strength_patch, strength_model)

def clip_layer(self, layer_idx):
self.layer_idx = layer_idx
Expand Down Expand Up @@ -514,6 +514,9 @@ def patch_model(self):
def unpatch_model(self):
self.patcher.unpatch_model()

def get_key_patches(self):
return self.patcher.get_key_patches()

class VAE:
def __init__(self, ckpt_path=None, device=None, config=None):
if config is None:
Expand Down
22 changes: 22 additions & 0 deletions comfy_extras/nodes_model_merging.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,27 @@ def merge(self, model1, model2, ratio):
m.add_patches({k: kp[k]}, 1.0 - ratio, ratio)
return (m, )

class CLIPMergeSimple:
@classmethod
def INPUT_TYPES(s):
return {"required": { "clip1": ("CLIP",),
"clip2": ("CLIP",),
"ratio": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 1.0, "step": 0.01}),
}}
RETURN_TYPES = ("CLIP",)
FUNCTION = "merge"

CATEGORY = "advanced/model_merging"

def merge(self, clip1, clip2, ratio):
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 - ratio, ratio)
return (m, )

class ModelMergeBlocks:
@classmethod
def INPUT_TYPES(s):
Expand Down Expand Up @@ -94,4 +115,5 @@ def save(self, model, clip, vae, filename_prefix, prompt=None, extra_pnginfo=Non
"ModelMergeSimple": ModelMergeSimple,
"ModelMergeBlocks": ModelMergeBlocks,
"CheckpointSave": CheckpointSave,
"CLIPMergeSimple": CLIPMergeSimple,
}

0 comments on commit 91ed281

Please sign in to comment.