mirror of
https://github.com/sd-webui/stable-diffusion-webui.git
synced 2025-01-05 20:28:01 +03:00
#354 + playground.py update
This commit is contained in:
parent
cfc9f00a93
commit
dffdaaaf77
@ -153,7 +153,7 @@ def draw_gradio_ui(opt, img2img=lambda x: x, txt2img=lambda x: x, txt2img_defaul
|
|||||||
value=3, visible=False)
|
value=3, visible=False)
|
||||||
|
|
||||||
img2img_resize = gr.Radio(label="Resize mode",
|
img2img_resize = gr.Radio(label="Resize mode",
|
||||||
choices=["Just resize", "Crop and resize", "Resize and fill"],
|
choices=["Just resize"],
|
||||||
type="index",
|
type="index",
|
||||||
value=img2img_resize_modes[img2img_defaults['resize_mode']])
|
value=img2img_resize_modes[img2img_defaults['resize_mode']])
|
||||||
|
|
||||||
|
164
webui.py
164
webui.py
@ -847,13 +847,10 @@ def process_images(
|
|||||||
if use_GFPGAN and GFPGAN is not None and not use_RealESRGAN:
|
if use_GFPGAN and GFPGAN is not None and not use_RealESRGAN:
|
||||||
skip_save = True # #287 >_>
|
skip_save = True # #287 >_>
|
||||||
torch_gc()
|
torch_gc()
|
||||||
cropped_faces, restored_faces, restored_img = GFPGAN.enhance(x_sample[:,:,::-1], has_aligned=False, only_center_face=False, paste_back=True)
|
cropped_faces, restored_faces, restored_img = GFPGAN.enhance(original_sample[:,:,::-1], has_aligned=False, only_center_face=False, paste_back=True)
|
||||||
gfpgan_sample = restored_img[:,:,::-1]
|
gfpgan_sample = restored_img[:,:,::-1]
|
||||||
gfpgan_image = Image.fromarray(gfpgan_sample)
|
gfpgan_image = Image.fromarray(gfpgan_sample)
|
||||||
gfpgan_filename = original_filename + '-gfpgan'
|
gfpgan_filename = original_filename + '-gfpgan'
|
||||||
save_sample(image, sample_path_i, original_filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
|
||||||
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
|
||||||
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
|
||||||
save_sample(gfpgan_image, sample_path_i, gfpgan_filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
save_sample(gfpgan_image, sample_path_i, gfpgan_filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
||||||
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
||||||
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
||||||
@ -866,13 +863,10 @@ skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoisin
|
|||||||
torch_gc()
|
torch_gc()
|
||||||
if RealESRGAN.model.name != realesrgan_model_name:
|
if RealESRGAN.model.name != realesrgan_model_name:
|
||||||
try_loading_RealESRGAN(realesrgan_model_name)
|
try_loading_RealESRGAN(realesrgan_model_name)
|
||||||
output, img_mode = RealESRGAN.enhance(x_sample[:,:,::-1])
|
output, img_mode = RealESRGAN.enhance(original_sample[:,:,::-1])
|
||||||
esrgan_filename = original_filename + '-esrgan4x'
|
esrgan_filename = original_filename + '-esrgan4x'
|
||||||
esrgan_sample = output[:,:,::-1]
|
esrgan_sample = output[:,:,::-1]
|
||||||
esrgan_image = Image.fromarray(esrgan_sample)
|
esrgan_image = Image.fromarray(esrgan_sample)
|
||||||
save_sample(image, sample_path_i, original_filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
|
||||||
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
|
||||||
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
|
||||||
save_sample(esrgan_image, sample_path_i, esrgan_filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
save_sample(esrgan_image, sample_path_i, esrgan_filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
||||||
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
||||||
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
||||||
@ -891,9 +885,6 @@ skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoisin
|
|||||||
gfpgan_esrgan_filename = original_filename + '-gfpgan-esrgan4x'
|
gfpgan_esrgan_filename = original_filename + '-gfpgan-esrgan4x'
|
||||||
gfpgan_esrgan_sample = output[:,:,::-1]
|
gfpgan_esrgan_sample = output[:,:,::-1]
|
||||||
gfpgan_esrgan_image = Image.fromarray(gfpgan_esrgan_sample)
|
gfpgan_esrgan_image = Image.fromarray(gfpgan_esrgan_sample)
|
||||||
save_sample(image, sample_path_i, original_filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
|
||||||
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
|
||||||
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
|
||||||
save_sample(gfpgan_esrgan_image, sample_path_i, gfpgan_esrgan_filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
save_sample(gfpgan_esrgan_image, sample_path_i, gfpgan_esrgan_filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
||||||
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
||||||
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
||||||
@ -901,7 +892,7 @@ skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoisin
|
|||||||
if simple_templating:
|
if simple_templating:
|
||||||
grid_captions.append( captions[i] + "\ngfpgan_esrgan" )
|
grid_captions.append( captions[i] + "\ngfpgan_esrgan" )
|
||||||
|
|
||||||
if not skip_save or (not use_GFPGAN or not use_RealESRGAN):
|
if not skip_save:
|
||||||
save_sample(image, sample_path_i, filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
save_sample(image, sample_path_i, filename, jpg_sample, prompts, seeds, width, height, steps, cfg_scale,
|
||||||
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
normalize_prompt_weights, use_GFPGAN, write_info_files, prompt_matrix, init_img, uses_loopback, uses_random_seed_loopback, skip_save,
|
||||||
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoising_strength, resize_mode)
|
||||||
@ -1126,7 +1117,7 @@ def img2img(prompt: str, image_editor_mode: str, init_info, mask_mode: str, mask
|
|||||||
|
|
||||||
if image_editor_mode == 'Mask':
|
if image_editor_mode == 'Mask':
|
||||||
init_img = init_info["image"]
|
init_img = init_info["image"]
|
||||||
init_img = init_img.convert("RGBA")
|
init_img = init_img.convert("RGB")
|
||||||
init_img = resize_image(resize_mode, init_img, width, height)
|
init_img = resize_image(resize_mode, init_img, width, height)
|
||||||
init_mask = init_info["mask"]
|
init_mask = init_info["mask"]
|
||||||
init_mask = init_mask.convert("RGB")
|
init_mask = init_mask.convert("RGB")
|
||||||
@ -1134,7 +1125,7 @@ def img2img(prompt: str, image_editor_mode: str, init_info, mask_mode: str, mask
|
|||||||
keep_mask = mask_mode == 0
|
keep_mask = mask_mode == 0
|
||||||
init_mask = init_mask if keep_mask else ImageOps.invert(init_mask)
|
init_mask = init_mask if keep_mask else ImageOps.invert(init_mask)
|
||||||
else:
|
else:
|
||||||
init_img = init_info
|
init_img = init_info.convert("RGB")
|
||||||
init_mask = None
|
init_mask = None
|
||||||
keep_mask = False
|
keep_mask = False
|
||||||
|
|
||||||
@ -1150,7 +1141,7 @@ def img2img(prompt: str, image_editor_mode: str, init_info, mask_mode: str, mask
|
|||||||
|
|
||||||
mask_channel = None
|
mask_channel = None
|
||||||
if image_editor_mode == "Uncrop":
|
if image_editor_mode == "Uncrop":
|
||||||
alpha = init_img.convert("RGBA")
|
alpha = init_img.convert("RGB")
|
||||||
alpha = resize_image(resize_mode, alpha, width // 8, height // 8)
|
alpha = resize_image(resize_mode, alpha, width // 8, height // 8)
|
||||||
mask_channel = alpha.split()[-1]
|
mask_channel = alpha.split()[-1]
|
||||||
mask_channel = mask_channel.filter(ImageFilter.GaussianBlur(4))
|
mask_channel = mask_channel.filter(ImageFilter.GaussianBlur(4))
|
||||||
@ -1229,70 +1220,13 @@ def img2img(prompt: str, image_editor_mode: str, init_info, mask_mode: str, mask
|
|||||||
return samples_ddim
|
return samples_ddim
|
||||||
|
|
||||||
|
|
||||||
try:
|
|
||||||
if loopback:
|
|
||||||
output_images, info = None, None
|
|
||||||
history = []
|
|
||||||
initial_seed = None
|
|
||||||
|
|
||||||
for i in range(n_iter):
|
if loopback:
|
||||||
output_images, seed, info, stats = process_images(
|
output_images, info = None, None
|
||||||
outpath=outpath,
|
history = []
|
||||||
func_init=init,
|
initial_seed = None
|
||||||
func_sample=sample,
|
|
||||||
prompt=prompt,
|
|
||||||
seed=seed,
|
|
||||||
sampler_name=sampler_name,
|
|
||||||
skip_save=skip_save,
|
|
||||||
skip_grid=skip_grid,
|
|
||||||
batch_size=1,
|
|
||||||
n_iter=1,
|
|
||||||
steps=ddim_steps,
|
|
||||||
cfg_scale=cfg_scale,
|
|
||||||
width=width,
|
|
||||||
height=height,
|
|
||||||
prompt_matrix=prompt_matrix,
|
|
||||||
use_GFPGAN=use_GFPGAN,
|
|
||||||
use_RealESRGAN=False, # Forcefully disable upscaling when using loopback
|
|
||||||
realesrgan_model_name=realesrgan_model_name,
|
|
||||||
fp=fp,
|
|
||||||
do_not_save_grid=True,
|
|
||||||
normalize_prompt_weights=normalize_prompt_weights,
|
|
||||||
init_img=init_img,
|
|
||||||
init_mask=init_mask,
|
|
||||||
keep_mask=keep_mask,
|
|
||||||
mask_blur_strength=mask_blur_strength,
|
|
||||||
denoising_strength=denoising_strength,
|
|
||||||
resize_mode=resize_mode,
|
|
||||||
uses_loopback=loopback,
|
|
||||||
uses_random_seed_loopback=random_seed_loopback,
|
|
||||||
sort_samples=sort_samples,
|
|
||||||
write_info_files=write_info_files,
|
|
||||||
jpg_sample=jpg_sample,
|
|
||||||
)
|
|
||||||
|
|
||||||
if initial_seed is None:
|
for i in range(n_iter):
|
||||||
initial_seed = seed
|
|
||||||
|
|
||||||
init_img = output_images[0]
|
|
||||||
if not random_seed_loopback:
|
|
||||||
seed = seed + 1
|
|
||||||
else:
|
|
||||||
seed = seed_to_int(None)
|
|
||||||
denoising_strength = max(denoising_strength * 0.95, 0.1)
|
|
||||||
history.append(init_img)
|
|
||||||
|
|
||||||
if not skip_grid:
|
|
||||||
grid_count = get_next_sequence_number(outpath, 'grid-')
|
|
||||||
grid = image_grid(history, batch_size, force_n_rows=1)
|
|
||||||
grid_file = f"grid-{grid_count:05}-{seed}_{prompt.replace(' ', '_').translate({ord(x): '' for x in invalid_filename_chars})[:128]}.{grid_ext}"
|
|
||||||
grid.save(os.path.join(outpath, grid_file), grid_format, quality=grid_quality, lossless=grid_lossless, optimize=True)
|
|
||||||
|
|
||||||
|
|
||||||
output_images = history
|
|
||||||
seed = initial_seed
|
|
||||||
|
|
||||||
else:
|
|
||||||
output_images, seed, info, stats = process_images(
|
output_images, seed, info, stats = process_images(
|
||||||
outpath=outpath,
|
outpath=outpath,
|
||||||
func_init=init,
|
func_init=init,
|
||||||
@ -1302,17 +1236,18 @@ def img2img(prompt: str, image_editor_mode: str, init_info, mask_mode: str, mask
|
|||||||
sampler_name=sampler_name,
|
sampler_name=sampler_name,
|
||||||
skip_save=skip_save,
|
skip_save=skip_save,
|
||||||
skip_grid=skip_grid,
|
skip_grid=skip_grid,
|
||||||
batch_size=batch_size,
|
batch_size=1,
|
||||||
n_iter=n_iter,
|
n_iter=1,
|
||||||
steps=ddim_steps,
|
steps=ddim_steps,
|
||||||
cfg_scale=cfg_scale,
|
cfg_scale=cfg_scale,
|
||||||
width=width,
|
width=width,
|
||||||
height=height,
|
height=height,
|
||||||
prompt_matrix=prompt_matrix,
|
prompt_matrix=prompt_matrix,
|
||||||
use_GFPGAN=use_GFPGAN,
|
use_GFPGAN=use_GFPGAN,
|
||||||
use_RealESRGAN=use_RealESRGAN,
|
use_RealESRGAN=False, # Forcefully disable upscaling when using loopback
|
||||||
realesrgan_model_name=realesrgan_model_name,
|
realesrgan_model_name=realesrgan_model_name,
|
||||||
fp=fp,
|
fp=fp,
|
||||||
|
do_not_save_grid=True,
|
||||||
normalize_prompt_weights=normalize_prompt_weights,
|
normalize_prompt_weights=normalize_prompt_weights,
|
||||||
init_img=init_img,
|
init_img=init_img,
|
||||||
init_mask=init_mask,
|
init_mask=init_mask,
|
||||||
@ -1321,22 +1256,71 @@ def img2img(prompt: str, image_editor_mode: str, init_info, mask_mode: str, mask
|
|||||||
denoising_strength=denoising_strength,
|
denoising_strength=denoising_strength,
|
||||||
resize_mode=resize_mode,
|
resize_mode=resize_mode,
|
||||||
uses_loopback=loopback,
|
uses_loopback=loopback,
|
||||||
|
uses_random_seed_loopback=random_seed_loopback,
|
||||||
sort_samples=sort_samples,
|
sort_samples=sort_samples,
|
||||||
write_info_files=write_info_files,
|
write_info_files=write_info_files,
|
||||||
jpg_sample=jpg_sample,
|
jpg_sample=jpg_sample,
|
||||||
)
|
)
|
||||||
|
|
||||||
del sampler
|
if initial_seed is None:
|
||||||
|
initial_seed = seed
|
||||||
|
|
||||||
|
init_img = output_images[0]
|
||||||
|
if not random_seed_loopback:
|
||||||
|
seed = seed + 1
|
||||||
|
else:
|
||||||
|
seed = seed_to_int(None)
|
||||||
|
denoising_strength = max(denoising_strength * 0.95, 0.1)
|
||||||
|
history.append(init_img)
|
||||||
|
|
||||||
|
if not skip_grid:
|
||||||
|
grid_count = get_next_sequence_number(outpath, 'grid-')
|
||||||
|
grid = image_grid(history, batch_size, force_n_rows=1)
|
||||||
|
grid_file = f"grid-{grid_count:05}-{seed}_{prompt.replace(' ', '_').translate({ord(x): '' for x in invalid_filename_chars})[:128]}.{grid_ext}"
|
||||||
|
grid.save(os.path.join(outpath, grid_file), grid_format, quality=grid_quality, lossless=grid_lossless, optimize=True)
|
||||||
|
|
||||||
|
|
||||||
|
output_images = history
|
||||||
|
seed = initial_seed
|
||||||
|
|
||||||
|
else:
|
||||||
|
output_images, seed, info, stats = process_images(
|
||||||
|
outpath=outpath,
|
||||||
|
func_init=init,
|
||||||
|
func_sample=sample,
|
||||||
|
prompt=prompt,
|
||||||
|
seed=seed,
|
||||||
|
sampler_name=sampler_name,
|
||||||
|
skip_save=skip_save,
|
||||||
|
skip_grid=skip_grid,
|
||||||
|
batch_size=batch_size,
|
||||||
|
n_iter=n_iter,
|
||||||
|
steps=ddim_steps,
|
||||||
|
cfg_scale=cfg_scale,
|
||||||
|
width=width,
|
||||||
|
height=height,
|
||||||
|
prompt_matrix=prompt_matrix,
|
||||||
|
use_GFPGAN=use_GFPGAN,
|
||||||
|
use_RealESRGAN=use_RealESRGAN,
|
||||||
|
realesrgan_model_name=realesrgan_model_name,
|
||||||
|
fp=fp,
|
||||||
|
normalize_prompt_weights=normalize_prompt_weights,
|
||||||
|
init_img=init_img,
|
||||||
|
init_mask=init_mask,
|
||||||
|
keep_mask=keep_mask,
|
||||||
|
mask_blur_strength=mask_blur_strength,
|
||||||
|
denoising_strength=denoising_strength,
|
||||||
|
resize_mode=resize_mode,
|
||||||
|
uses_loopback=loopback,
|
||||||
|
sort_samples=sort_samples,
|
||||||
|
write_info_files=write_info_files,
|
||||||
|
jpg_sample=jpg_sample,
|
||||||
|
)
|
||||||
|
|
||||||
|
del sampler
|
||||||
|
|
||||||
|
return output_images, seed, info, stats
|
||||||
|
|
||||||
return output_images, seed, info, stats
|
|
||||||
except RuntimeError as e:
|
|
||||||
err = e
|
|
||||||
err_msg = f'CRASHED:<br><textarea rows="5" style="color:white;background: black;width: -webkit-fill-available;font-family: monospace;font-size: small;font-weight: bold;">{str(e)}</textarea><br><br>Please wait while the program restarts.'
|
|
||||||
stats = err_msg
|
|
||||||
return [], seed, 'err', stats
|
|
||||||
finally:
|
|
||||||
if err:
|
|
||||||
crash(err, '!!Runtime error (img2img)!!')
|
|
||||||
|
|
||||||
prompt_parser = re.compile("""
|
prompt_parser = re.compile("""
|
||||||
(?P<prompt> # capture group for 'prompt'
|
(?P<prompt> # capture group for 'prompt'
|
||||||
|
@ -100,7 +100,9 @@ txt2img_defaults = {
|
|||||||
'height': 512,
|
'height': 512,
|
||||||
'width': 512,
|
'width': 512,
|
||||||
'fp': None,
|
'fp': None,
|
||||||
'submit_on_enter': 'Yes'
|
'submit_on_enter': 'Yes',
|
||||||
|
'variant_amount': 0,
|
||||||
|
'variant_seed': ''
|
||||||
}
|
}
|
||||||
|
|
||||||
if 'txt2img' in user_defaults:
|
if 'txt2img' in user_defaults:
|
||||||
|
Loading…
Reference in New Issue
Block a user