From 04d8f2dfea201cf47766e35bfdc5ba84070d02a0 Mon Sep 17 00:00:00 2001 From: psychedelicious <4822129+psychedelicious@users.noreply.github.com> Date: Mon, 13 Nov 2023 15:06:04 +1100 Subject: [PATCH] fix(backend): fix controlnet zip len Do not use `strict=True` when scaling controlnet conditioning. When using `guess_mode` (e.g. `more_control` or `more_prompt`), `down_block_res_samples` and `scales` are zipped. These two objects are of different lengths, so using zip's strict mode raises an error. In testing, `len(scales) === len(down_block_res_samples) + 1`. It appears this behaviour is intentional, as the final "extra" item in `scales` is used immediately afterwards. --- invokeai/backend/util/hotfixes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/backend/util/hotfixes.py b/invokeai/backend/util/hotfixes.py index 835575c7a1..b0e31796d5 100644 --- a/invokeai/backend/util/hotfixes.py +++ b/invokeai/backend/util/hotfixes.py @@ -748,7 +748,7 @@ class ControlNetModel(ModelMixin, ConfigMixin, FromOriginalControlnetMixin): scales = scales * conditioning_scale down_block_res_samples = [ - sample * scale for sample, scale in zip(down_block_res_samples, scales, strict=True) + sample * scale for sample, scale in zip(down_block_res_samples, scales, strict=False) ] mid_block_res_sample = mid_block_res_sample * scales[-1] # last one else: