mirror of
https://github.com/sd-webui/stable-diffusion-webui.git
synced 2024-12-14 23:02:00 +03:00
Merge branch 'sd-webui:dev' into dev
This commit is contained in:
commit
cf924ca11f
@ -7,6 +7,7 @@
|
|||||||
|
|
||||||
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )
|
||||||
cd $SCRIPT_DIR
|
cd $SCRIPT_DIR
|
||||||
|
export PYTHONPATH=$SCRIPT_DIR
|
||||||
|
|
||||||
MODEL_DIR="${SCRIPT_DIR}/model_cache"
|
MODEL_DIR="${SCRIPT_DIR}/model_cache"
|
||||||
# Array of model files to pre-download
|
# Array of model files to pre-download
|
||||||
@ -31,6 +32,7 @@ ENV_UPDATED=0
|
|||||||
ENV_MODIFIED=$(date -r $ENV_FILE "+%s")
|
ENV_MODIFIED=$(date -r $ENV_FILE "+%s")
|
||||||
ENV_MODIFED_FILE="${SCRIPT_DIR}/.env_updated"
|
ENV_MODIFED_FILE="${SCRIPT_DIR}/.env_updated"
|
||||||
if [[ -f $ENV_MODIFED_FILE ]]; then ENV_MODIFIED_CACHED=$(<${ENV_MODIFED_FILE}); else ENV_MODIFIED_CACHED=0; fi
|
if [[ -f $ENV_MODIFED_FILE ]]; then ENV_MODIFIED_CACHED=$(<${ENV_MODIFED_FILE}); else ENV_MODIFIED_CACHED=0; fi
|
||||||
|
export PIP_EXISTS_ACTION=w
|
||||||
|
|
||||||
# Create/update conda env if needed
|
# Create/update conda env if needed
|
||||||
if ! conda env list | grep ".*${ENV_NAME}.*" >/dev/null 2>&1; then
|
if ! conda env list | grep ".*${ENV_NAME}.*" >/dev/null 2>&1; then
|
||||||
|
@ -812,7 +812,7 @@ def oxlamon_matrix(prompt, seed, n_iter, batch_size):
|
|||||||
return all_seeds, n_iter, prompt_matrix_parts, all_prompts, needrows
|
return all_seeds, n_iter, prompt_matrix_parts, all_prompts, needrows
|
||||||
|
|
||||||
def perform_masked_image_restoration(image, init_img, init_mask, mask_blur_strength, mask_restore, use_RealESRGAN, RealESRGAN):
|
def perform_masked_image_restoration(image, init_img, init_mask, mask_blur_strength, mask_restore, use_RealESRGAN, RealESRGAN):
|
||||||
if not mask_restore:
|
if not mask_restore:
|
||||||
return image
|
return image
|
||||||
else:
|
else:
|
||||||
init_mask = init_mask.filter(ImageFilter.GaussianBlur(mask_blur_strength))
|
init_mask = init_mask.filter(ImageFilter.GaussianBlur(mask_blur_strength))
|
||||||
@ -840,7 +840,7 @@ def perform_color_correction(img_rgb, correction_target_lab, do_color_correction
|
|||||||
except:
|
except:
|
||||||
print("Install scikit-image to perform color correction")
|
print("Install scikit-image to perform color correction")
|
||||||
return img_rgb
|
return img_rgb
|
||||||
|
|
||||||
if not do_color_correction: return img_rgb
|
if not do_color_correction: return img_rgb
|
||||||
if correction_target_lab is None: return img_rgb
|
if correction_target_lab is None: return img_rgb
|
||||||
|
|
||||||
@ -854,7 +854,7 @@ def perform_color_correction(img_rgb, correction_target_lab, do_color_correction
|
|||||||
channel_axis=2
|
channel_axis=2
|
||||||
), cv2.COLOR_LAB2RGB).astype("uint8")
|
), cv2.COLOR_LAB2RGB).astype("uint8")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
def process_images(
|
def process_images(
|
||||||
outpath, func_init, func_sample, prompt, seed, sampler_name, skip_grid, skip_save, batch_size,
|
outpath, func_init, func_sample, prompt, seed, sampler_name, skip_grid, skip_save, batch_size,
|
||||||
@ -1027,7 +1027,7 @@ def process_images(
|
|||||||
while(torch.cuda.memory_allocated()/1e6 >= mem):
|
while(torch.cuda.memory_allocated()/1e6 >= mem):
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|
||||||
cur_variant_amount = variant_amount
|
cur_variant_amount = variant_amount
|
||||||
if variant_amount == 0.0:
|
if variant_amount == 0.0:
|
||||||
# we manually generate all input noises because each one should have a specific seed
|
# we manually generate all input noises because each one should have a specific seed
|
||||||
x = create_random_tensors(shape, seeds=seeds)
|
x = create_random_tensors(shape, seeds=seeds)
|
||||||
@ -1114,10 +1114,10 @@ def process_images(
|
|||||||
gfpgan_image = Image.fromarray(gfpgan_sample)
|
gfpgan_image = Image.fromarray(gfpgan_sample)
|
||||||
gfpgan_image = perform_color_correction(gfpgan_image, correction_target, do_color_correction)
|
gfpgan_image = perform_color_correction(gfpgan_image, correction_target, do_color_correction)
|
||||||
gfpgan_image = perform_masked_image_restoration(
|
gfpgan_image = perform_masked_image_restoration(
|
||||||
gfpgan_image, init_img, init_mask,
|
gfpgan_image, init_img, init_mask,
|
||||||
mask_blur_strength, mask_restore,
|
mask_blur_strength, mask_restore,
|
||||||
use_RealESRGAN = False, RealESRGAN = None
|
use_RealESRGAN = False, RealESRGAN = None
|
||||||
)
|
)
|
||||||
gfpgan_metadata = copy.copy(metadata)
|
gfpgan_metadata = copy.copy(metadata)
|
||||||
gfpgan_metadata.GFPGAN = True
|
gfpgan_metadata.GFPGAN = True
|
||||||
ImageMetadata.set_on_image( gfpgan_image, gfpgan_metadata )
|
ImageMetadata.set_on_image( gfpgan_image, gfpgan_metadata )
|
||||||
@ -1137,7 +1137,7 @@ skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoisin
|
|||||||
esrgan_image = Image.fromarray(esrgan_sample)
|
esrgan_image = Image.fromarray(esrgan_sample)
|
||||||
esrgan_image = perform_color_correction(esrgan_image, correction_target, do_color_correction)
|
esrgan_image = perform_color_correction(esrgan_image, correction_target, do_color_correction)
|
||||||
esrgan_image = perform_masked_image_restoration(
|
esrgan_image = perform_masked_image_restoration(
|
||||||
esrgan_image, init_img, init_mask,
|
esrgan_image, init_img, init_mask,
|
||||||
mask_blur_strength, mask_restore,
|
mask_blur_strength, mask_restore,
|
||||||
use_RealESRGAN, RealESRGAN
|
use_RealESRGAN, RealESRGAN
|
||||||
)
|
)
|
||||||
@ -1159,7 +1159,7 @@ skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size, i, denoisin
|
|||||||
gfpgan_esrgan_image = Image.fromarray(gfpgan_esrgan_sample)
|
gfpgan_esrgan_image = Image.fromarray(gfpgan_esrgan_sample)
|
||||||
gfpgan_esrgan_image = perform_color_correction(gfpgan_esrgan_image, correction_target, do_color_correction)
|
gfpgan_esrgan_image = perform_color_correction(gfpgan_esrgan_image, correction_target, do_color_correction)
|
||||||
gfpgan_esrgan_image = perform_masked_image_restoration(
|
gfpgan_esrgan_image = perform_masked_image_restoration(
|
||||||
gfpgan_esrgan_image, init_img, init_mask,
|
gfpgan_esrgan_image, init_img, init_mask,
|
||||||
mask_blur_strength, mask_restore,
|
mask_blur_strength, mask_restore,
|
||||||
use_RealESRGAN, RealESRGAN
|
use_RealESRGAN, RealESRGAN
|
||||||
)
|
)
|
||||||
@ -1175,7 +1175,7 @@ skip_save, skip_grid, sort_samples, sampler_name, ddim_eta, n_iter, batch_size,
|
|||||||
output_images.append(image)
|
output_images.append(image)
|
||||||
|
|
||||||
image = perform_masked_image_restoration(
|
image = perform_masked_image_restoration(
|
||||||
image, init_img, init_mask,
|
image, init_img, init_mask,
|
||||||
mask_blur_strength, mask_restore,
|
mask_blur_strength, mask_restore,
|
||||||
# RealESRGAN image already processed in if-case above.
|
# RealESRGAN image already processed in if-case above.
|
||||||
use_RealESRGAN = False, RealESRGAN = None
|
use_RealESRGAN = False, RealESRGAN = None
|
||||||
@ -1505,7 +1505,7 @@ def img2img(prompt: str, image_editor_mode: str, mask_mode: str, mask_blur_stren
|
|||||||
#let's try and find where init_image is 0's
|
#let's try and find where init_image is 0's
|
||||||
#shape is probably (3,width,height)?
|
#shape is probably (3,width,height)?
|
||||||
|
|
||||||
if image_editor_mode == "Uncrop":
|
if image_editor_mode == "Uncrop":
|
||||||
_image=image.numpy()[0]
|
_image=image.numpy()[0]
|
||||||
_mask=np.ones((_image.shape[1],_image.shape[2]))
|
_mask=np.ones((_image.shape[1],_image.shape[2]))
|
||||||
|
|
||||||
@ -1526,7 +1526,7 @@ def img2img(prompt: str, image_editor_mode: str, mask_mode: str, mask_blur_stren
|
|||||||
boundingbox=np.zeros(shape=(height,width))
|
boundingbox=np.zeros(shape=(height,width))
|
||||||
boundingbox[colstart+PAD_IMG:colend-PAD_IMG,rowstart+PAD_IMG:rowend-PAD_IMG]=1
|
boundingbox[colstart+PAD_IMG:colend-PAD_IMG,rowstart+PAD_IMG:rowend-PAD_IMG]=1
|
||||||
boundingbox=blurArr(boundingbox,4)
|
boundingbox=blurArr(boundingbox,4)
|
||||||
|
|
||||||
#this is the mask for outpainting
|
#this is the mask for outpainting
|
||||||
PAD_MASK=24
|
PAD_MASK=24
|
||||||
boundingbox2=np.zeros(shape=(height,width))
|
boundingbox2=np.zeros(shape=(height,width))
|
||||||
@ -1557,7 +1557,7 @@ def img2img(prompt: str, image_editor_mode: str, mask_mode: str, mask_blur_stren
|
|||||||
init_image = init_image.to(device)
|
init_image = init_image.to(device)
|
||||||
init_image = repeat(init_image, '1 ... -> b ...', b=batch_size)
|
init_image = repeat(init_image, '1 ... -> b ...', b=batch_size)
|
||||||
init_latent = (model if not opt.optimized else modelFS).get_first_stage_encoding((model if not opt.optimized else modelFS).encode_first_stage(init_image)) # move to latent space
|
init_latent = (model if not opt.optimized else modelFS).get_first_stage_encoding((model if not opt.optimized else modelFS).encode_first_stage(init_image)) # move to latent space
|
||||||
|
|
||||||
if opt.optimized:
|
if opt.optimized:
|
||||||
mem = torch.cuda.memory_allocated()/1e6
|
mem = torch.cuda.memory_allocated()/1e6
|
||||||
modelFS.to("cpu")
|
modelFS.to("cpu")
|
||||||
@ -1617,7 +1617,7 @@ def img2img(prompt: str, image_editor_mode: str, mask_mode: str, mask_blur_stren
|
|||||||
|
|
||||||
# turn on color correction for loopback to prevent known issue of color drift
|
# turn on color correction for loopback to prevent known issue of color drift
|
||||||
do_color_correction = True
|
do_color_correction = True
|
||||||
|
|
||||||
for i in range(n_iter):
|
for i in range(n_iter):
|
||||||
if do_color_correction and i == 0:
|
if do_color_correction and i == 0:
|
||||||
correction_target = cv2.cvtColor(np.asarray(init_img.copy()), cv2.COLOR_RGB2LAB)
|
correction_target = cv2.cvtColor(np.asarray(init_img.copy()), cv2.COLOR_RGB2LAB)
|
||||||
@ -1658,9 +1658,9 @@ def img2img(prompt: str, image_editor_mode: str, mask_mode: str, mask_blur_stren
|
|||||||
write_info_files=write_info_files,
|
write_info_files=write_info_files,
|
||||||
write_sample_info_to_log_file=write_sample_info_to_log_file,
|
write_sample_info_to_log_file=write_sample_info_to_log_file,
|
||||||
jpg_sample=jpg_sample,
|
jpg_sample=jpg_sample,
|
||||||
job_info=job_info,
|
job_info=job_info,
|
||||||
do_color_correction=do_color_correction,
|
do_color_correction=do_color_correction,
|
||||||
correction_target=correction_target
|
correction_target=correction_target
|
||||||
)
|
)
|
||||||
|
|
||||||
if initial_seed is None:
|
if initial_seed is None:
|
||||||
@ -2074,7 +2074,7 @@ def imgproc(image,image_batch,imgproc_prompt,imgproc_toggles, imgproc_upscale_to
|
|||||||
if 1 in imgproc_toggles:
|
if 1 in imgproc_toggles:
|
||||||
if imgproc_upscale_toggles == 0:
|
if imgproc_upscale_toggles == 0:
|
||||||
ModelLoader(['GFPGAN','LDSR'],False,True) # Unload unused models
|
ModelLoader(['GFPGAN','LDSR'],False,True) # Unload unused models
|
||||||
ModelLoader(['RealESGAN'],True,False,imgproc_realesrgan_model_name) # Load used models
|
ModelLoader(['RealESGAN'],True,False,imgproc_realesrgan_model_name) # Load used models
|
||||||
elif imgproc_upscale_toggles == 1:
|
elif imgproc_upscale_toggles == 1:
|
||||||
ModelLoader(['GFPGAN','LDSR'],False,True) # Unload unused models
|
ModelLoader(['GFPGAN','LDSR'],False,True) # Unload unused models
|
||||||
ModelLoader(['RealESGAN','model'],True,False) # Load used models
|
ModelLoader(['RealESGAN','model'],True,False) # Load used models
|
||||||
@ -2306,7 +2306,7 @@ img2img_toggles = [
|
|||||||
'Write sample info files',
|
'Write sample info files',
|
||||||
'Write sample info to one file',
|
'Write sample info to one file',
|
||||||
'jpg samples',
|
'jpg samples',
|
||||||
'Color correction (always enabled on loopback mode)'
|
'Color correction (always enabled on loopback mode)',
|
||||||
'Filter NSFW content',
|
'Filter NSFW content',
|
||||||
]
|
]
|
||||||
# removed for now becuase of Image Lab implementation
|
# removed for now becuase of Image Lab implementation
|
||||||
@ -2412,7 +2412,7 @@ class ServerLauncher(threading.Thread):
|
|||||||
'inbrowser': opt.inbrowser,
|
'inbrowser': opt.inbrowser,
|
||||||
'server_name': '0.0.0.0',
|
'server_name': '0.0.0.0',
|
||||||
'server_port': opt.port,
|
'server_port': opt.port,
|
||||||
'share': opt.share,
|
'share': opt.share,
|
||||||
'show_error': True
|
'show_error': True
|
||||||
}
|
}
|
||||||
if not opt.share:
|
if not opt.share:
|
||||||
|
Loading…
Reference in New Issue
Block a user