Open bluelovers opened 2 weeks ago
I found a similar issue that might be relevant to your problem: Got this error: RuntimeError: Inference tensors do not track version counter [1].
To resolve the "RuntimeError: bad number of images passed: 3; expecting 1 or less" error when running postprocess_image
in ADetailer, ensure that the init_images
parameter in the StableDiffusionProcessingImg2Img
instance is correctly set to a single image. The error suggests that multiple images are being passed where only one is expected.
Here is a snippet to ensure init_images
is correctly set:
def _postprocess_image_inner(self, p, pp, args: ADetailerArgs, *, n: int = 0) -> bool:
if state.interrupted or state.skipped:
return False
i = get_i(p)
# Ensure pp.image is a single image
pp.image = ensure_pil_image(pp.image, "RGB")
i2i = self.get_i2i_p(p, args, pp.image)
seed, subseed = self.get_seed(p)
ad_prompts, ad_negatives = self.get_prompt(p, args)
is_mediapipe = args.is_mediapipe()
kwargs = {}
if is_mediapipe:
predictor = mediapipe_predict
ad_model = args.ad_model
else:
predictor = ultralytics_predict
ad_model = self.get_ad_model(args.ad_model)
kwargs["device"] = self.ultralytics_device
kwargs["classes"] = args.ad_model_classes
with change_torch_load():
pred = predictor(ad_model, pp.image, args.ad_confidence, **kwargs)
if pred.preview is None:
print(f"[-] ADetailer: nothing detected on image {i + 1} with {ordinal(n + 1)} settings.")
return False
masks = self.pred_preprocessing(p, pred, args)
shared.state.assign_current_image(pred.preview)
self.save_image(
p,
pred.preview,
condition="ad_save_previews",
suffix="-ad-preview" + suffix(n, "-"),
)
steps = len(masks)
processed = None
state.job_count += steps
if is_mediapipe:
print(f"mediapipe: {steps} detected.")
p2 = copy(i2i)
for j in range(steps):
p2.image_mask = masks[j]
p2.init_images[0] = ensure_pil_image(p2.init_images[0], "RGB")
self.i2i_prompts_replace(p2, ad_prompts, ad_negatives, j)
if re.match(r"^\s*\[SKIP\]\s*$", p2.prompt):
continue
p2.seed = self.get_each_tab_seed(seed, j)
p2.subseed = self.get_each_tab_seed(subseed, j)
p2.cached_c = [None, None]
p2.cached_uc = [None, None]
try:
processed = process_images(p2)
except NansException as e:
msg = f"[-] ADetailer: 'NansException' occurred with {ordinal(n + 1)} settings.\n{e}"
print(msg, file=sys.stderr)
continue
finally:
p2.close()
self.compare_prompt(p.extra_generation_params, processed, n=n)
p2 = copy(i2i)
p2.init_images = [processed.images[0]]
if processed is not None:
pp.image = processed.images[0]
return True
return False
Ensure that pp.image
and p2.init_images
are always single images and not lists of images. This should resolve the "bad number of images passed" error [2].
To continue talking to Dosu, mention @dosu.
thanks
Describe the bug
Steps to reproduce
.
Screenshots
Console logs, from start to end.
List of installed extensions
No response