| 484 | |
| 485 | |
| 486 | class AdvancedControlBase: |
| 487 | ACN_VERSION = CURRENT_WRAPPER_VERSION |
| 488 | |
| 489 | def __init__(self, base: ControlBase, timestep_keyframes: TimestepKeyframeGroup, weights_default: ControlWeights, require_vae=False, allow_condhint_latents=False): |
| 490 | self.base = base |
| 491 | self.compatible_weights = [ControlWeightType.UNIVERSAL, ControlWeightType.DEFAULT] |
| 492 | self.add_compatible_weight(weights_default.weight_type) |
| 493 | # mask for which parts of controlnet output to keep |
| 494 | self.mask_cond_hint_original = None |
| 495 | self.mask_cond_hint = None |
| 496 | self.tk_mask_cond_hint_original = None |
| 497 | self.tk_mask_cond_hint = None |
| 498 | self.weight_mask_cond_hint = None |
| 499 | # actual index values |
| 500 | self.sub_idxs = None |
| 501 | self.full_latent_length = 0 |
| 502 | self.context_length = 0 |
| 503 | # timesteps |
| 504 | self.t: float = None |
| 505 | self.prev_t: float = None |
| 506 | self.batched_number: int = None |
| 507 | self.batch_size: int = 0 |
| 508 | self.cond_or_uncond: list[int] = None |
| 509 | # weights + override |
| 510 | self.weights: ControlWeights = None |
| 511 | self.weights_default: ControlWeights = weights_default |
| 512 | self.weights_override: ControlWeights = None |
| 513 | # latent keyframe + override |
| 514 | self.latent_keyframes: LatentKeyframeGroup = None |
| 515 | self.latent_keyframe_override: LatentKeyframeGroup = None |
| 516 | # initialize timestep_keyframes |
| 517 | self.set_timestep_keyframes(timestep_keyframes) |
| 518 | # override some functions |
| 519 | self.get_control = self.get_control_inject |
| 520 | self.control_merge = self.control_merge_inject |
| 521 | self.pre_run = self.pre_run_inject |
| 522 | self.cleanup = self.cleanup_inject |
| 523 | self.set_previous_controlnet = self.set_previous_controlnet_inject |
| 524 | self.set_cond_hint = self.set_cond_hint_inject |
| 525 | # vae to store |
| 526 | self.adv_vae = None |
| 527 | self.mult_by_ratio_when_vae = True |
| 528 | # compression ratio stuff |
| 529 | self.real_compression_ratio = None |
| 530 | # require model/vae to be passed into Apply Advanced ControlNet 🛂🅐🅒🅝 node |
| 531 | self.require_vae = require_vae |
| 532 | self.allow_condhint_latents = allow_condhint_latents |
| 533 | self.postpone_condhint_latents_check = False |
| 534 | # disarm - when set to False, used to force usage of Apply Advanced ControlNet 🛂🅐🅒🅝 node (which will set it to True) |
| 535 | self.disarmed = True |
| 536 | |
| 537 | def add_compatible_weight(self, control_weight_type: str): |
| 538 | self.compatible_weights.append(control_weight_type) |
| 539 | |
| 540 | def verify_all_weights(self, throw_error=True): |
| 541 | # first, check if override exists - if so, only need to check the override |
| 542 | if self.weights_override is not None: |
| 543 | if self.weights_override.weight_type not in self.compatible_weights: |
nothing calls this directly
no outgoing calls
no test coverage detected