diff --git a/modules_forge/controlnet.py b/modules_forge/controlnet.py index a65e2c03..41d664e4 100644 --- a/modules_forge/controlnet.py +++ b/modules_forge/controlnet.py @@ -8,12 +8,10 @@ def apply_controlnet_advanced( positive_advanced_weighting=None, negative_advanced_weighting=None): - a = 0 - - unet.control_options = [1, 2, 3] + cnet = controlnet.copy().set_cond_hint(image, strength, (start_percent, end_percent)) + cnet.positive_advanced_weighting = positive_advanced_weighting + cnet.negative_advanced_weighting = negative_advanced_weighting m = unet.clone() - - m.control_options = [4, 5, 6] - + m.add_patched_controlnet(cnet) return m diff --git a/modules_forge/patch_basic.py b/modules_forge/patch_basic.py index 3941af10..3f36a674 100644 --- a/modules_forge/patch_basic.py +++ b/modules_forge/patch_basic.py @@ -7,17 +7,34 @@ og_model_patcher_clone = ModelPatcher.clone def patched_model_patcher_init(self, *args, **kwargs): h = og_model_patcher_init(self, *args, **kwargs) - self.control_options = [] + self.controlnet_linked_list = None return h def patched_model_patcher_clone(self): cloned = og_model_patcher_clone(self) - cloned.control_options = [x for x in self.control_options] + cloned.controlnet_linked_list = self.controlnet_linked_list return cloned +def model_patcher_add_patched_controlnet(self, cnet): + cnet.set_previous_controlnet(self.controlnet_linked_list) + self.controlnet_linked_list = cnet + return + + +def model_patcher_list_controlnets(self): + results = [] + pointer = self.controlnet_linked_list + while pointer is not None: + results.append(pointer) + pointer = pointer.previous_controlnet + return results + + def patch_all_basics(): ModelPatcher.__init__ = patched_model_patcher_init ModelPatcher.clone = patched_model_patcher_clone + ModelPatcher.add_patched_controlnet = model_patcher_add_patched_controlnet + ModelPatcher.list_controlnets = model_patcher_list_controlnets return