From ae0cb1600cee5b6c076a00bcf6d16617b111ab4d Mon Sep 17 00:00:00 2001 From: CalamitousFelicitousness Date: Thu, 30 Apr 2026 03:42:11 +0100 Subject: [PATCH] fix(save): handle already-decoded images in save_intermediate --- modules/processing_helpers.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/modules/processing_helpers.py b/modules/processing_helpers.py index 7e4b1a4c6..55e2ccb42 100644 --- a/modules/processing_helpers.py +++ b/modules/processing_helpers.py @@ -562,12 +562,17 @@ def apply_circular(enable: bool, model): def save_intermediate(p, latents, suffix): - for i in range(len(latents)): - from modules.processing import create_infotext - info=create_infotext(p, p.all_prompts, p.all_seeds, p.all_subseeds, [], iteration=p.iteration, position_in_batch=i) + from modules.processing import create_infotext + from modules.image import convert + is_latent = torch.is_tensor(latents) and latents.shape[-1] != 3 + if is_latent: decoded = processing_vae.vae_decode(latents=latents, model=shared.sd_model, output_type='pil', vae_type=p.vae_type, width=p.width, height=p.height) - for j in range(len(decoded)): - images.save_image(decoded[j], path=p.outpath_samples, basename="", seed=p.seeds[i], prompt=p.prompts[i], extension=shared.opts.samples_format, info=info, p=p, suffix=suffix) + else: + items = latents if isinstance(latents, list) else ([latents[j] for j in range(latents.shape[0])] if hasattr(latents, 'shape') else [latents]) + decoded = [convert.to_pil(img) if not hasattr(img, 'width') else img for img in items] + for i in range(len(decoded)): + info = create_infotext(p, p.all_prompts, p.all_seeds, p.all_subseeds, [], iteration=p.iteration, position_in_batch=i) + images.save_image(decoded[i], path=p.outpath_samples, basename="", seed=p.seeds[i], prompt=p.prompts[i], extension=shared.opts.samples_format, info=info, p=p, suffix=suffix) def update_sampler(p, sd_model, second_pass=False):