Skip to content

Commit 9c67408

Browse files
authored
Allow saving "before-highres-fix. (#4150)
* Save image/s before doing highres fix.
1 parent 4a8cf01 commit 9c67408

File tree

3 files changed

+18
-5
lines changed

3 files changed

+18
-5
lines changed

modules/processing.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -521,7 +521,11 @@ def infotext(iteration=0, position_in_batch=0):
521521
shared.state.job = f"Batch {n+1} out of {p.n_iter}"
522522

523523
with devices.autocast():
524-
samples_ddim = p.sample(conditioning=c, unconditional_conditioning=uc, seeds=seeds, subseeds=subseeds, subseed_strength=p.subseed_strength)
524+
# Only Txt2Img needs an extra argument, n, when saving intermediate images pre highres fix.
525+
if isinstance(p, StableDiffusionProcessingTxt2Img):
526+
samples_ddim = p.sample(conditioning=c, unconditional_conditioning=uc, seeds=seeds, subseeds=subseeds, subseed_strength=p.subseed_strength, n=n)
527+
else:
528+
samples_ddim = p.sample(conditioning=c, unconditional_conditioning=uc, seeds=seeds, subseeds=subseeds, subseed_strength=p.subseed_strength)
525529

526530
samples_ddim = samples_ddim.to(devices.dtype_vae)
527531
x_samples_ddim = decode_first_stage(p.sd_model, samples_ddim)
@@ -649,7 +653,7 @@ def init(self, all_prompts, all_seeds, all_subseeds):
649653
self.truncate_x = int(self.firstphase_width - firstphase_width_truncated) // opt_f
650654
self.truncate_y = int(self.firstphase_height - firstphase_height_truncated) // opt_f
651655

652-
def sample(self, conditioning, unconditional_conditioning, seeds, subseeds, subseed_strength):
656+
def sample(self, conditioning, unconditional_conditioning, seeds, subseeds, subseed_strength, n=0):
653657
self.sampler = sd_samplers.create_sampler_with_index(sd_samplers.samplers, self.sampler_index, self.sd_model)
654658

655659
if not self.enable_hr:
@@ -685,6 +689,15 @@ def sample(self, conditioning, unconditional_conditioning, seeds, subseeds, subs
685689

686690
samples = self.sd_model.get_first_stage_encoding(self.sd_model.encode_first_stage(decoded_samples))
687691

692+
# Save a copy of the image/s before doing highres fix, if applicable.
693+
if opts.save and not self.do_not_save_samples and opts.save_images_before_highres_fix:
694+
for i in range(self.batch_size):
695+
# This batch's ith image.
696+
img = sd_samplers.sample_to_image(samples, i)
697+
# Index that accounts for both batch size and batch count.
698+
ind = i + self.batch_size*n
699+
images.save_image(img, self.outpath_samples, "", self.all_seeds[ind], self.all_prompts[ind], opts.samples_format, suffix=f"-before-highres-fix")
700+
688701
shared.state.nextjob()
689702

690703
self.sampler = sd_samplers.create_sampler_with_index(sd_samplers.samplers, self.sampler_index, self.sd_model)

modules/sd_samplers.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,8 @@ def single_sample_to_image(sample):
9393
return Image.fromarray(x_sample)
9494

9595

96-
def sample_to_image(samples):
97-
return single_sample_to_image(samples[0])
98-
96+
def sample_to_image(samples, index=0):
97+
return single_sample_to_image(samples[index])
9998

10099
def samples_to_image_grid(samples):
101100
return images.image_grid([single_sample_to_image(sample) for sample in samples])

modules/shared.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ def options_section(section_identifier, options_dict):
255255
"enable_pnginfo": OptionInfo(True, "Save text information about generation parameters as chunks to png files"),
256256
"save_txt": OptionInfo(False, "Create a text file next to every image with generation parameters."),
257257
"save_images_before_face_restoration": OptionInfo(False, "Save a copy of image before doing face restoration."),
258+
"save_images_before_highres_fix": OptionInfo(False, "Save a copy of image before applying highres fix."),
258259
"jpeg_quality": OptionInfo(80, "Quality for saved jpeg images", gr.Slider, {"minimum": 1, "maximum": 100, "step": 1}),
259260
"export_for_4chan": OptionInfo(True, "If PNG image is larger than 4MB or any dimension is larger than 4000, downscale and save copy as JPG"),
260261

0 commit comments

Comments
 (0)