diff --git a/modules/processing.py b/modules/processing.py index 1d76ce839..003ca69bc 100644 --- a/modules/processing.py +++ b/modules/processing.py @@ -922,7 +922,18 @@ class StableDiffusionProcessingTxt2Img(StableDiffusionProcessing): decoded_samples = torch.from_numpy(np.array(batch_images)) decoded_samples = decoded_samples.to(shared.device) decoded_samples = 2. * decoded_samples - 1. - samples = self.sd_model.get_first_stage_encoding(self.sd_model.encode_first_stage(decoded_samples)) + if shared.opts.sd_vae_sliced_encode: + samples = torch.stack([ + self.sd_model.get_first_stage_encoding( + self.sd_model.encode_first_stage(torch.unsqueeze(decoded_sample, 0)) + )[0] + for decoded_sample + in decoded_samples + ]) + else: + samples = self.sd_model.get_first_stage_encoding( + self.sd_model.encode_first_stage(decoded_samples) + ) image_conditioning = self.img2img_image_conditioning(decoded_samples, samples) shared.state.nextjob() img2img_sampler_name = self.sampler_name diff --git a/modules/shared.py b/modules/shared.py index b213a94d1..397324709 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -282,6 +282,7 @@ options_templates.update(options_section(('sd', "Stable Diffusion"), { "sd_checkpoint_cache": OptionInfo(0, "Model checkpoints to cache in RAM", gr.Slider, {"minimum": 0, "maximum": 10, "step": 1}), "sd_vae_checkpoint_cache": OptionInfo(0, "VAE checkpoints to cache in RAM", gr.Slider, {"minimum": 0, "maximum": 10, "step": 1}), "sd_vae": OptionInfo("Automatic", "Select VAE", gr.Dropdown, lambda: {"choices": shared_items.sd_vae_items()}, refresh=shared_items.refresh_vae_list), + "sd_vae_sliced_encode": OptionInfo(False, "During HR fix, encode each image in a batch separately"), "stream_load": OptionInfo(False, "When loading models attempt stream loading optimized for slow or network storage"), "model_reuse_dict": OptionInfo(False, "When loading models attempt to reuse previous model dictionary"), "cross_attention_optimization": OptionInfo(cross_attention_optimization_default, "Cross-attention optimization method", gr.Radio, lambda: {"choices": shared_items.list_crossattention() }),