dikdimon's picture
Upload extensions using SD-Hub extension
c336648 verified
import modules.scripts as scripts
import gradio as gr
from latent_upscale_overrides.schedulers import sampler_noise_scheduler_override
from latent_upscale_overrides.init import init
opt_C = 4
opt_f = 8
class Script(scripts.Script):
# The title of the script. This is what will be displayed in the dropdown menu.
def title(self):
return "Latent Upscale"
# Determines when the script should be shown in the dropdown menu via the
# returned value. As an example:
# is_img2img is True if the current tab is img2img, and False if it is txt2img.
# Thus, return is_img2img to only show the script on the img2img tab.
def show(self, is_img2img):
return is_img2img
# return scripts.AlwaysVisible
# How the script's is displayed in the UI. See https://gradio.app/docs/#components
# for the different UI components you can use and how to create them.
# Most UI components can return a value, such as a boolean for a checkbox.
# The returned values are passed to the run method as parameters.
def ui(self, is_img2img):
with gr.Row():
upscale_method = gr.Dropdown(["bilinear", "bilinear-antialiased",
"bicubic", "bicubic-antialiased",
"linear", "trilinear",
"area", "nearest", "nearest-exact"],
label="Upscale method")
scheduler = gr.Dropdown(["simple", "normal", "karras", "exponential",
"polyexponential", "automatic"],
label="Scheduler")
return [upscale_method, scheduler]
# This is where the additional processing is implemented. The parameters include
# self, the model object "p" (a StableDiffusionProcessing class, see
# processing.py), and the parameters returned by the ui method.
# Custom functions can be defined here, and additional libraries can be imported
# to be used in processing. The return value should be a Processed object, which is
# what is returned by the process_images method.
def run(self, p, upscale_method, scheduler):
print(f"set Upscale method in run: {upscale_method}")
print(f"scheduler: {scheduler}")
# override the sampler_noise_scheduler_override method
# if the selected method is not recognized, use the default scheduler
if scheduler in ["simple", "normal", "karras",
"exponential", "polyexponential"]:
p.sampler_noise_scheduler_override \
= lambda steps: sampler_noise_scheduler_override(p, scheduler, steps)
# override the init method
p.init = lambda all_prompts, all_seeds, all_subseeds, **kwargs: init(
p, upscale_method, all_prompts, all_seeds, all_subseeds, **kwargs)