mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2025-07-27 08:16:44 +00:00
Add nested style of dual cfg to DualCFGGuider node. (#8965)
This commit is contained in:
parent
7f492522b6
commit
1b96fae1d4
@ -683,9 +683,10 @@ class CFGGuider:
|
|||||||
return (guider,)
|
return (guider,)
|
||||||
|
|
||||||
class Guider_DualCFG(comfy.samplers.CFGGuider):
|
class Guider_DualCFG(comfy.samplers.CFGGuider):
|
||||||
def set_cfg(self, cfg1, cfg2):
|
def set_cfg(self, cfg1, cfg2, nested=False):
|
||||||
self.cfg1 = cfg1
|
self.cfg1 = cfg1
|
||||||
self.cfg2 = cfg2
|
self.cfg2 = cfg2
|
||||||
|
self.nested = nested
|
||||||
|
|
||||||
def set_conds(self, positive, middle, negative):
|
def set_conds(self, positive, middle, negative):
|
||||||
middle = node_helpers.conditioning_set_values(middle, {"prompt_type": "negative"})
|
middle = node_helpers.conditioning_set_values(middle, {"prompt_type": "negative"})
|
||||||
@ -695,6 +696,12 @@ class Guider_DualCFG(comfy.samplers.CFGGuider):
|
|||||||
negative_cond = self.conds.get("negative", None)
|
negative_cond = self.conds.get("negative", None)
|
||||||
middle_cond = self.conds.get("middle", None)
|
middle_cond = self.conds.get("middle", None)
|
||||||
positive_cond = self.conds.get("positive", None)
|
positive_cond = self.conds.get("positive", None)
|
||||||
|
|
||||||
|
if self.nested:
|
||||||
|
out = comfy.samplers.calc_cond_batch(self.inner_model, [negative_cond, middle_cond, positive_cond], x, timestep, model_options)
|
||||||
|
pred_text = comfy.samplers.cfg_function(self.inner_model, out[2], out[1], self.cfg1, x, timestep, model_options=model_options, cond=positive_cond, uncond=middle_cond)
|
||||||
|
return out[0] + self.cfg2 * (pred_text - out[0])
|
||||||
|
else:
|
||||||
if model_options.get("disable_cfg1_optimization", False) == False:
|
if model_options.get("disable_cfg1_optimization", False) == False:
|
||||||
if math.isclose(self.cfg2, 1.0):
|
if math.isclose(self.cfg2, 1.0):
|
||||||
negative_cond = None
|
negative_cond = None
|
||||||
@ -714,6 +721,7 @@ class DualCFGGuider:
|
|||||||
"negative": ("CONDITIONING", ),
|
"negative": ("CONDITIONING", ),
|
||||||
"cfg_conds": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}),
|
"cfg_conds": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}),
|
||||||
"cfg_cond2_negative": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}),
|
"cfg_cond2_negative": ("FLOAT", {"default": 8.0, "min": 0.0, "max": 100.0, "step":0.1, "round": 0.01}),
|
||||||
|
"style": (["regular", "nested"],),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -722,10 +730,10 @@ class DualCFGGuider:
|
|||||||
FUNCTION = "get_guider"
|
FUNCTION = "get_guider"
|
||||||
CATEGORY = "sampling/custom_sampling/guiders"
|
CATEGORY = "sampling/custom_sampling/guiders"
|
||||||
|
|
||||||
def get_guider(self, model, cond1, cond2, negative, cfg_conds, cfg_cond2_negative):
|
def get_guider(self, model, cond1, cond2, negative, cfg_conds, cfg_cond2_negative, style):
|
||||||
guider = Guider_DualCFG(model)
|
guider = Guider_DualCFG(model)
|
||||||
guider.set_conds(cond1, cond2, negative)
|
guider.set_conds(cond1, cond2, negative)
|
||||||
guider.set_cfg(cfg_conds, cfg_cond2_negative)
|
guider.set_cfg(cfg_conds, cfg_cond2_negative, nested=(style == "nested"))
|
||||||
return (guider,)
|
return (guider,)
|
||||||
|
|
||||||
class DisableNoise:
|
class DisableNoise:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user