127 lines
3.8 KiB
Python
127 lines
3.8 KiB
Python
import math
|
|
import os
|
|
import modules.shared as shared
|
|
import modules.sd_models
|
|
import gradio as gr
|
|
from scripts import postprocessing_upscale
|
|
from .prompt_util import readJsonPrompt
|
|
import asyncio
|
|
|
|
|
|
def fix_env_Path_ffprobe():
|
|
envpath = os.environ["PATH"]
|
|
ffppath = shared.opts.data.get("infzoom_ffprobepath", "")
|
|
|
|
if ffppath and not ffppath in envpath:
|
|
path_sep = ";" if os.name == "nt" else ":"
|
|
os.environ["PATH"] = envpath + path_sep + ffppath
|
|
|
|
|
|
def closest_upper_divisible_by_eight(num):
|
|
if num % 8 == 0:
|
|
return num
|
|
else:
|
|
return math.ceil(num / 8) * 8
|
|
|
|
|
|
def load_model_from_setting(model_field_name, progress, progress_desc):
|
|
# fix typo in Automatic1111 vs Vlad111
|
|
if hasattr(modules.sd_models, "checkpoint_alisases"):
|
|
checkPList = modules.sd_models.checkpoint_alisases
|
|
elif hasattr(modules.sd_models, "checkpoint_aliases"):
|
|
checkPList = modules.sd_models.checkpoint_aliases
|
|
else:
|
|
raise Exception(
|
|
"This is not a compatible StableDiffusion Platform, can not access checkpoints"
|
|
)
|
|
|
|
model_name = shared.opts.data.get(model_field_name)
|
|
if model_name is not None and model_name != "":
|
|
checkinfo = checkPList[model_name]
|
|
|
|
if not checkinfo:
|
|
raise NameError(model_field_name + " Does not exist in your models.")
|
|
|
|
if progress:
|
|
progress(0, desc=progress_desc + checkinfo.name)
|
|
|
|
modules.sd_models.load_model(checkinfo)
|
|
|
|
|
|
def do_upscaleImg(curImg, upscale_do, upscaler_name, upscale_by):
|
|
if not upscale_do:
|
|
return curImg
|
|
|
|
# ensure even width and even height for ffmpeg
|
|
# if odd, switch to scale to mode
|
|
rwidth = round(curImg.width * upscale_by)
|
|
rheight = round(curImg.height * upscale_by)
|
|
|
|
ups_mode = 2 # upscale_by
|
|
if (rwidth % 2) == 1:
|
|
ups_mode = 1
|
|
rwidth += 1
|
|
if (rheight % 2) == 1:
|
|
ups_mode = 1
|
|
rheight += 1
|
|
|
|
if 1 == ups_mode:
|
|
print(
|
|
"Infinite Zoom: aligning output size to even width and height: "
|
|
+ str(rwidth)
|
|
+ " x "
|
|
+ str(rheight),
|
|
end="\r",
|
|
)
|
|
|
|
pp = postprocessing_upscale.scripts_postprocessing.PostprocessedImage(curImg)
|
|
ups = postprocessing_upscale.ScriptPostprocessingUpscale()
|
|
ups.process(
|
|
pp,
|
|
upscale_mode=ups_mode,
|
|
upscale_by=upscale_by,
|
|
upscale_to_width=rwidth,
|
|
upscale_to_height=rheight,
|
|
upscale_crop=False,
|
|
upscaler_1_name=upscaler_name,
|
|
upscaler_2_name=None,
|
|
upscaler_2_visibility=0.0,
|
|
)
|
|
return pp.image
|
|
|
|
async def showGradioErrorAsync(txt, delay=1):
|
|
await asyncio.sleep(delay) # sleep for 1 second
|
|
raise gr.Error(txt)
|
|
|
|
def putPrompts(files):
|
|
try:
|
|
with open(files.name, "r") as f:
|
|
file_contents = f.read()
|
|
|
|
data = readJsonPrompt(file_contents,False)
|
|
return [
|
|
gr.Textbox.update(data["prePrompt"]),
|
|
gr.DataFrame.update(data["prompts"]),
|
|
gr.Textbox.update(data["postPrompt"]),
|
|
gr.Textbox.update(data["negPrompt"])
|
|
]
|
|
|
|
except Exception:
|
|
print(
|
|
"[InfiniteZoom:] Loading your prompt failed. It seems to be invalid. Your prompt table is preserved."
|
|
)
|
|
|
|
# error only be shown with raise, so ui gets broken.
|
|
#asyncio.run(showGradioErrorAsync("Loading your prompts failed. It seems to be invalid. Your prompt table has been preserved.",5))
|
|
|
|
return [gr.Textbox.update(), gr.DataFrame.update(), gr.Textbox.update(),gr.Textbox.update()]
|
|
|
|
|
|
def clearPrompts():
|
|
return [
|
|
gr.DataFrame.update(value=[[0, "Infinite Zoom. Start over"]]),
|
|
gr.Textbox.update(""),
|
|
gr.Textbox.update(""),
|
|
gr.Textbox.update("")
|
|
]
|