Add files via upload

This commit is contained in:
Extraltodeus
2024-05-15 06:07:07 +02:00
committed by GitHub
parent 1dba516410
commit b7c0afabb5
+80 -3
View File
@@ -131,7 +131,7 @@ def gaussian_kernel(size, sigma):
kernel = torch.exp(-(xx**2 + yy**2) / (2. * sigma**2))
return kernel / kernel.sum()
def blur_tensor(input_tensor,kernel_size = 7, sigma = 2.0):
def blur_tensor(input_tensor, kernel_size = 7, sigma = 2.0):
device = input_tensor.device
x_coord = torch.arange(kernel_size) - (kernel_size - 1) / 2
xy_grid = torch.square(x_coord.repeat(kernel_size).view(kernel_size, kernel_size)) + torch.square(x_coord.repeat(kernel_size).view(kernel_size, kernel_size).t())
@@ -737,7 +737,7 @@ class simpleDynamicCFG:
class presetLoader:
@classmethod
def INPUT_TYPES(s):
presets_files = [pj.replace(".json","") for pj in os.listdir(json_preset_path) if ".json" in pj]
presets_files = [pj.replace(".json","") for pj in os.listdir(json_preset_path) if ".json" in pj and "do_not_delete" not in pj]
presets_files = sorted(presets_files, key=str.lower)
return {"required": {
"model": ("MODEL",),
@@ -895,7 +895,7 @@ class simpleDynamicCFGExcellentattentionPatch:
return {"required": {
"model": ("MODEL",),
"Auto_CFG": ("BOOLEAN", {"default": True}),
"patch_multiplier": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10000.0, "step": 0.1, "round": 0.01}),
"patch_multiplier": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 100.0, "step": 1.0, "round": 0.01}),
"patch_cond": ("BOOLEAN", {"default": True}),
"patch_uncond": ("BOOLEAN", {"default": True}),
"light_patch": ("BOOLEAN", {"default": False}),
@@ -965,3 +965,80 @@ class simpleDynamicCFGExcellentattentionPatch:
m = advcfg.patch(model, **patch_parameters)[0]
return (m, parameters_as_string, )
class simpleDynamicCFGCustomAttentionPatch:
@classmethod
def INPUT_TYPES(s):
return {"required": {
"model": ("MODEL",),
"Auto_CFG": ("BOOLEAN", {"default": True}),
"cond_mode" : (["replace_by_custom","normal+(normal-custom_cond)*multiplier","normal+(normal-custom_uncond)*multiplier"],),
"uncond_mode" : (["replace_by_custom","normal+(normal-custom_cond)*multiplier","normal+(normal-custom_uncond)*multiplier"],),
"cond_diff_multiplier": ("FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.1, "round": 0.01}),
"uncond_diff_multiplier": ("FLOAT", {"default": 1.0, "min": -100.0, "max": 100.0, "step": 0.1, "round": 0.01}),
"uncond_sigma_end": ("FLOAT", {"default": 1.0, "min": 0.0, "max": 10000, "step": 0.1, "round": 0.01}),
"save_as_preset": ("BOOLEAN", {"default": False}),
"preset_name": ("STRING", {"multiline": False}),
},
"optional":{
"attn_mod_for_positive_operation": ("ATTNMOD", {"forceInput": True}),
"attn_mod_for_negative_operation": ("ATTNMOD", {"forceInput": True}),
}}
RETURN_TYPES = ("MODEL",)
RETURN_NAMES = ("Model",)
FUNCTION = "patch"
CATEGORY = "model_patches/automatic_cfg/experimental_attention_modifiers"
def patch(self, model, Auto_CFG, cond_mode, uncond_mode, cond_diff_multiplier, uncond_diff_multiplier, uncond_sigma_end, save_as_preset, preset_name,
attn_mod_for_positive_operation = [], attn_mod_for_negative_operation = []):
with open(os.path.join(json_preset_path, "do_not_delete.json"), 'r', encoding='utf-8') as f:
patch_parameters = json.load(f)
patch_parameters["cond_exp_value"] = cond_diff_multiplier
patch_parameters["uncond_exp_value"] = uncond_diff_multiplier
if cond_mode != "replace_by_custom":
patch_parameters["disable_cond"] = False
if cond_mode == "normal+(normal-custom_cond)*multiplier":
patch_parameters["cond_exp_method"] = "subtract_attention_modifiers_input_using_cond"
elif cond_mode == "normal+(normal-custom_uncond)*multiplier":
patch_parameters["cond_exp_method"] = "subtract_attention_modifiers_input_using_uncond"
if uncond_mode != "replace_by_custom":
patch_parameters["uncond_sigma_start"] = 1000.0
patch_parameters["fake_uncond_exp"] = False
patch_parameters["uncond_exp"] = True
if uncond_mode == "normal+(normal-custom_cond)*multiplier":
patch_parameters["uncond_exp_method"] = "subtract_attention_modifiers_input_using_cond"
elif uncond_mode == "normal+(normal-custom_uncond)*multiplier":
patch_parameters["uncond_exp_method"] = "subtract_attention_modifiers_input_using_uncond"
if cond_mode != "replace_by_custom" and attn_mod_for_positive_operation != []:
smallest_sigma = min([float(x['sigma_end']) for x in attn_mod_for_positive_operation])
patch_parameters["disable_cond_sigma_end"] = smallest_sigma
patch_parameters["cond_exp_sigma_end"] = smallest_sigma
if uncond_mode != "replace_by_custom" and attn_mod_for_negative_operation != []:
smallest_sigma = min([float(x['sigma_end']) for x in attn_mod_for_negative_operation])
patch_parameters["uncond_exp_sigma_end"] = smallest_sigma
patch_parameters["fake_uncond_start"] = False
# else:
# biggest_sigma = max([float(x['sigma_start']) for x in attn_mod_for_negative_operation])
# patch_parameters["fake_uncond_sigma_start"] = biggest_sigma
patch_parameters["automatic_cfg"] = "hard" if Auto_CFG else "None"
patch_parameters['attention_modifiers_positive'] = attn_mod_for_positive_operation
patch_parameters['attention_modifiers_negative'] = attn_mod_for_negative_operation
patch_parameters['attention_modifiers_fake_negative'] = attn_mod_for_negative_operation
patch_parameters["uncond_sigma_end"] = uncond_sigma_end
patch_parameters["fake_uncond_sigma_end"] = uncond_sigma_end
patch_parameters["save_as_preset"] = save_as_preset
patch_parameters["preset_name"] = preset_name
advcfg = advancedDynamicCFG()
m = advcfg.patch(model, **patch_parameters)[0]
return (m, )