from safetensors.torch import load_file from huggingface_hub import hf_hub_download import gradio as gr from modules import scripts_manager, processing, shared, sd_models, devices repo = 'jiaxiangc/res-adapter' models = { 'None': '', 'SD15 v2 general': 'resadapter_v2_sd1.5', 'SDXL v2 general': 'resadapter_v2_sdxl', 'SD15 v1 general': 'resadapter_v1_sd1.5', 'SD15 v1 extrapolation': 'resadapter_v1_sd1.5_extrapolation', 'SD15 v1 interpolation': 'resadapter_v1_sd1.5_interpolation', 'SDXL v1 general': 'resadapter_v1_sdxl', 'SDXL v1 extrapolation': 'resadapter_v1_sdxl_extrapolation', 'SDXL v1 interpolation': 'resadapter_v1_sdxl_interpolation', } class Script(scripts_manager.Script): def title(self): return 'ResAdapter: Domain Consistent Resolution' def show(self, is_img2img): return not is_img2img # return signature is array of gradio components def ui(self, _is_img2img): with gr.Row(): gr.HTML('  ResAdapter: Domain Consistent Resolution
') with gr.Row(): model = gr.Dropdown(label="Model", choices=list(models), value="None") weight = gr.Slider(minimum=0.0, maximum=1.0, step=0.05, label="Weight", value=1.0) return [model, weight] def run(self, p: processing.StableDiffusionProcessing, model, weight): # pylint: disable=arguments-differ if model == 'None': return None if shared.sd_model_type == 'sd': if not model.startswith('SD15'): shared.log.warning(f'ResAdapter: pipeline={shared.sd_model_type} selected={model}') return None if shared.sd_model_type == 'sdxl': if not model.startswith('SDXL'): shared.log.warning(f'ResAdapter: pipeline={shared.sd_model_type} selected={model}') return None old_pipe = shared.sd_model shared.sd_model.load_lora_weights(hf_hub_download(repo_id=repo, subfolder=models[model], filename="pytorch_lora_weights.safetensors"), adapter_name="res_adapter") shared.sd_model.set_adapters(["res_adapter"], adapter_weights=[weight]) shared.sd_model.unet.load_state_dict(load_file(hf_hub_download(repo_id=repo, subfolder=models[model], filename="diffusion_pytorch_model.safetensors")), strict=False) sd_models.move_model(shared.sd_model, devices.device) # move pipeline to device sd_models.set_diffuser_options(shared.sd_model, vae=None, op='model') shared.log.debug(f'ResAdapter: pipeline={shared.sd_model.__class__.__name__} model="{model}" weight={weight} file="{models[model]}"') processed = processing.process_images(p) shared.sd_model = old_pipe return processed