Path: blob/master/extensions-builtin/hypertile/scripts/hypertile_script.py
2448 views
import hypertile1from modules import scripts, script_callbacks, shared234class ScriptHypertile(scripts.Script):5name = "Hypertile"67def title(self):8return self.name910def show(self, is_img2img):11return scripts.AlwaysVisible1213def process(self, p, *args):14hypertile.set_hypertile_seed(p.all_seeds[0])1516configure_hypertile(p.width, p.height, enable_unet=shared.opts.hypertile_enable_unet)1718self.add_infotext(p)1920def before_hr(self, p, *args):2122enable = shared.opts.hypertile_enable_unet_secondpass or shared.opts.hypertile_enable_unet2324# exclusive hypertile seed for the second pass25if enable:26hypertile.set_hypertile_seed(p.all_seeds[0])2728configure_hypertile(p.hr_upscale_to_x, p.hr_upscale_to_y, enable_unet=enable)2930if enable and not shared.opts.hypertile_enable_unet:31p.extra_generation_params["Hypertile U-Net second pass"] = True3233self.add_infotext(p, add_unet_params=True)3435def add_infotext(self, p, add_unet_params=False):36def option(name):37value = getattr(shared.opts, name)38default_value = shared.opts.get_default(name)39return None if value == default_value else value4041if shared.opts.hypertile_enable_unet:42p.extra_generation_params["Hypertile U-Net"] = True4344if shared.opts.hypertile_enable_unet or add_unet_params:45p.extra_generation_params["Hypertile U-Net max depth"] = option('hypertile_max_depth_unet')46p.extra_generation_params["Hypertile U-Net max tile size"] = option('hypertile_max_tile_unet')47p.extra_generation_params["Hypertile U-Net swap size"] = option('hypertile_swap_size_unet')4849if shared.opts.hypertile_enable_vae:50p.extra_generation_params["Hypertile VAE"] = True51p.extra_generation_params["Hypertile VAE max depth"] = option('hypertile_max_depth_vae')52p.extra_generation_params["Hypertile VAE max tile size"] = option('hypertile_max_tile_vae')53p.extra_generation_params["Hypertile VAE swap size"] = option('hypertile_swap_size_vae')545556def configure_hypertile(width, height, enable_unet=True):57hypertile.hypertile_hook_model(58shared.sd_model.first_stage_model,59width,60height,61swap_size=shared.opts.hypertile_swap_size_vae,62max_depth=shared.opts.hypertile_max_depth_vae,63tile_size_max=shared.opts.hypertile_max_tile_vae,64enable=shared.opts.hypertile_enable_vae,65)6667hypertile.hypertile_hook_model(68shared.sd_model.model,69width,70height,71swap_size=shared.opts.hypertile_swap_size_unet,72max_depth=shared.opts.hypertile_max_depth_unet,73tile_size_max=shared.opts.hypertile_max_tile_unet,74enable=enable_unet,75is_sdxl=shared.sd_model.is_sdxl76)777879def on_ui_settings():80import gradio as gr8182options = {83"hypertile_explanation": shared.OptionHTML("""84<a href='https://github.com/tfernd/HyperTile'>Hypertile</a> optimizes the self-attention layer within U-Net and VAE models,85resulting in a reduction in computation time ranging from 1 to 4 times. The larger the generated image is, the greater the86benefit.87"""),8889"hypertile_enable_unet": shared.OptionInfo(False, "Enable Hypertile U-Net", infotext="Hypertile U-Net").info("enables hypertile for all modes, including hires fix second pass; noticeable change in details of the generated picture"),90"hypertile_enable_unet_secondpass": shared.OptionInfo(False, "Enable Hypertile U-Net for hires fix second pass", infotext="Hypertile U-Net second pass").info("enables hypertile just for hires fix second pass - regardless of whether the above setting is enabled"),91"hypertile_max_depth_unet": shared.OptionInfo(3, "Hypertile U-Net max depth", gr.Slider, {"minimum": 0, "maximum": 3, "step": 1}, infotext="Hypertile U-Net max depth").info("larger = more neural network layers affected; minor effect on performance"),92"hypertile_max_tile_unet": shared.OptionInfo(256, "Hypertile U-Net max tile size", gr.Slider, {"minimum": 0, "maximum": 512, "step": 16}, infotext="Hypertile U-Net max tile size").info("larger = worse performance"),93"hypertile_swap_size_unet": shared.OptionInfo(3, "Hypertile U-Net swap size", gr.Slider, {"minimum": 0, "maximum": 64, "step": 1}, infotext="Hypertile U-Net swap size"),94"hypertile_enable_vae": shared.OptionInfo(False, "Enable Hypertile VAE", infotext="Hypertile VAE").info("minimal change in the generated picture"),95"hypertile_max_depth_vae": shared.OptionInfo(3, "Hypertile VAE max depth", gr.Slider, {"minimum": 0, "maximum": 3, "step": 1}, infotext="Hypertile VAE max depth"),96"hypertile_max_tile_vae": shared.OptionInfo(128, "Hypertile VAE max tile size", gr.Slider, {"minimum": 0, "maximum": 512, "step": 16}, infotext="Hypertile VAE max tile size"),97"hypertile_swap_size_vae": shared.OptionInfo(3, "Hypertile VAE swap size ", gr.Slider, {"minimum": 0, "maximum": 64, "step": 1}, infotext="Hypertile VAE swap size"),98}99100for name, opt in options.items():101opt.section = ('hypertile', "Hypertile")102shared.opts.add_option(name, opt)103104105def add_axis_options():106xyz_grid = [x for x in scripts.scripts_data if x.script_class.__module__ == "xyz_grid.py"][0].module107xyz_grid.axis_options.extend([108xyz_grid.AxisOption("[Hypertile] Unet First pass Enabled", str, xyz_grid.apply_override('hypertile_enable_unet', boolean=True), choices=xyz_grid.boolean_choice(reverse=True)),109xyz_grid.AxisOption("[Hypertile] Unet Second pass Enabled", str, xyz_grid.apply_override('hypertile_enable_unet_secondpass', boolean=True), choices=xyz_grid.boolean_choice(reverse=True)),110xyz_grid.AxisOption("[Hypertile] Unet Max Depth", int, xyz_grid.apply_override("hypertile_max_depth_unet"), confirm=xyz_grid.confirm_range(0, 3, '[Hypertile] Unet Max Depth'), choices=lambda: [str(x) for x in range(4)]),111xyz_grid.AxisOption("[Hypertile] Unet Max Tile Size", int, xyz_grid.apply_override("hypertile_max_tile_unet"), confirm=xyz_grid.confirm_range(0, 512, '[Hypertile] Unet Max Tile Size')),112xyz_grid.AxisOption("[Hypertile] Unet Swap Size", int, xyz_grid.apply_override("hypertile_swap_size_unet"), confirm=xyz_grid.confirm_range(0, 64, '[Hypertile] Unet Swap Size')),113xyz_grid.AxisOption("[Hypertile] VAE Enabled", str, xyz_grid.apply_override('hypertile_enable_vae', boolean=True), choices=xyz_grid.boolean_choice(reverse=True)),114xyz_grid.AxisOption("[Hypertile] VAE Max Depth", int, xyz_grid.apply_override("hypertile_max_depth_vae"), confirm=xyz_grid.confirm_range(0, 3, '[Hypertile] VAE Max Depth'), choices=lambda: [str(x) for x in range(4)]),115xyz_grid.AxisOption("[Hypertile] VAE Max Tile Size", int, xyz_grid.apply_override("hypertile_max_tile_vae"), confirm=xyz_grid.confirm_range(0, 512, '[Hypertile] VAE Max Tile Size')),116xyz_grid.AxisOption("[Hypertile] VAE Swap Size", int, xyz_grid.apply_override("hypertile_swap_size_vae"), confirm=xyz_grid.confirm_range(0, 64, '[Hypertile] VAE Swap Size')),117])118119120script_callbacks.on_ui_settings(on_ui_settings)121script_callbacks.on_before_ui(add_axis_options)122123124