Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| from convert_url_to_diffusers_sdxl_gr import ( | |
| convert_url_to_diffusers_repo, | |
| SCHEDULER_CONFIG_MAP, | |
| ) | |
| vaes = [ | |
| "", | |
| "https://huggingface.co/madebyollin/sdxl-vae-fp16-fix/blob/main/sdxl.vae.safetensors", | |
| "https://huggingface.co/nubby/blessed-sdxl-vae-fp16-fix/blob/main/sdxl_vae-fp16fix-blessed.safetensors", | |
| "https://huggingface.co/John6666/safetensors_converting_test/blob/main/xlVAEC_e7.safetensors", | |
| "https://huggingface.co/John6666/safetensors_converting_test/blob/main/xlVAEC_f1.safetensors", | |
| ] | |
| clips = [ | |
| "", | |
| "openai/clip-vit-large-patch14", | |
| ] | |
| loras = [ | |
| "", | |
| "https://huggingface.co/SPO-Diffusion-Models/SPO-SDXL_4k-p_10ep_LoRA/blob/main/spo_sdxl_10ep_4k-data_lora_diffusers.safetensors", | |
| "https://huggingface.co/wangfuyun/PCM_Weights/blob/main/sdxl/pcm_sdxl_smallcfg_2step_converted.safetensors", | |
| "https://huggingface.co/wangfuyun/PCM_Weights/blob/main/sdxl/pcm_sdxl_smallcfg_4step_converted.safetensors", | |
| "https://huggingface.co/wangfuyun/PCM_Weights/blob/main/sdxl/pcm_sdxl_smallcfg_8step_converted.safetensors", | |
| "https://huggingface.co/wangfuyun/PCM_Weights/blob/main/sdxl/pcm_sdxl_normalcfg_8step_converted.safetensors", | |
| "https://huggingface.co/wangfuyun/PCM_Weights/blob/main/sdxl/pcm_sdxl_normalcfg_16step_converted.safetensors", | |
| "https://huggingface.co/ByteDance/Hyper-SD/blob/main/Hyper-SDXL-1step-lora.safetensors", | |
| "https://huggingface.co/ByteDance/Hyper-SD/blob/main/Hyper-SDXL-2steps-lora.safetensors", | |
| "https://huggingface.co/ByteDance/Hyper-SD/blob/main/Hyper-SDXL-4steps-lora.safetensors", | |
| "https://huggingface.co/ByteDance/Hyper-SD/blob/main/Hyper-SDXL-8steps-CFG-lora.safetensors", | |
| "https://huggingface.co/ByteDance/Hyper-SD/blob/main/Hyper-SDXL-12steps-CFG-lora.safetensors", | |
| "https://huggingface.co/latent-consistency/lcm-lora-sdxl/blob/main/pytorch_lora_weights.safetensors", | |
| ] | |
| schedulers = list(SCHEDULER_CONFIG_MAP.keys()) | |
| preset_dict = { | |
| "Default": [True, "", "Euler a", "", 1.0, "", 1.0, "", 1.0, "", 1.0, "", 1.0], | |
| "Bake in standard VAE": [True, "https://huggingface.co/madebyollin/sdxl-vae-fp16-fix/blob/main/sdxl.vae.safetensors", | |
| "Euler a", "", 1.0, "", 1.0, "", 1.0, "", 1.0, "", 1.0], | |
| "Hyper-SDXL / SPO": [True, "https://huggingface.co/madebyollin/sdxl-vae-fp16-fix/blob/main/sdxl.vae.safetensors", | |
| "TCD", "https://huggingface.co/ByteDance/Hyper-SD/blob/main/Hyper-SDXL-8steps-CFG-lora.safetensors", 1.0, | |
| "https://huggingface.co/SPO-Diffusion-Models/SPO-SDXL_4k-p_10ep_LoRA/blob/main/spo_sdxl_10ep_4k-data_lora_diffusers.safetensors", | |
| 1.0, "", 1.0, "", 1.0, "", 1.0], | |
| } | |
| def set_presets(preset: str="Default"): | |
| p = [] | |
| if preset in preset_dict.keys(): p = preset_dict[preset] | |
| else: p = preset_dict["Default"] | |
| return p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10], p[11], p[12] | |
| css = """ | |
| .title { font-size: 3em; align-items: center; text-align: center; } | |
| .info { align-items: center; text-align: center; } | |
| .block.result { margin: 1em 0; padding: 1em; box-shadow: 0 0 3px 3px #664422, 0 0 3px 2px #664422 inset; border-radius: 6px; background: #665544; } | |
| """ | |
| with gr.Blocks(theme="NoCrypt/miku@>=1.2.2", fill_width=True, css=css, delete_cache=(60, 3600)) as demo: | |
| gr.Markdown("# Download and convert any Stable Diffusion XL safetensors to Diffusers and create your repo", elem_classes="title") | |
| gr.Markdown( | |
| f""" | |
| - [A CLI version of this tool (without uploading-related function) is available here](https://huggingface.co/spaces/John6666/sdxl-to-diffusers-v2/tree/main/local). | |
| **⚠️IMPORTANT NOTICE⚠️**<br> | |
| From an information security standpoint, it is dangerous to expose your access token or key to others. | |
| If you do use it, I recommend that you duplicate this space on your own account before doing so. | |
| Keys and tokens could be set to SECRET (HF_TOKEN, CIVITAI_API_KEY) if it's placed in your own space. | |
| It saves you the trouble of typing them in.<br> | |
| <br> | |
| **The steps are the following**: | |
| - Paste a write-access token from [hf.co/settings/tokens](https://huggingface.co/settings/tokens). | |
| - Input a model download url from the Hub or Civitai or other sites. | |
| - If you want to download a model from Civitai, paste a Civitai API Key. | |
| - Input your HF user ID. e.g. 'yourid'. | |
| - Input your new repo name. If empty, auto-complete. e.g. 'newrepo'. | |
| - Set the parameters. If not sure, just use the defaults. | |
| - Click "Submit". | |
| - Patiently wait until the output changes. It takes approximately 2 to 3 minutes (downloading from HF). | |
| """ | |
| ) | |
| with gr.Column(): | |
| with gr.Group(): | |
| dl_url = gr.Textbox(label="URL to download", placeholder="https://huggingface.co/bluepen5805/blue_pencil-XL/blob/main/blue_pencil-XL-v7.0.0.safetensors", value="", max_lines=1) | |
| with gr.Row(): | |
| hf_user = gr.Textbox(label="Your HF user ID", placeholder="username", value="", max_lines=1) | |
| hf_repo = gr.Textbox(label="New repo name", placeholder="reponame", info="If empty, auto-complete", value="", max_lines=1) | |
| with gr.Row(): | |
| hf_token = gr.Textbox(label="Your HF write token", placeholder="hf_...", value="", max_lines=1) | |
| civitai_key = gr.Textbox(label="Your Civitai API Key (Optional)", info="If you download model from Civitai...", placeholder="", value="", max_lines=1) | |
| with gr.Row(): | |
| is_upload_sf = gr.Checkbox(label="Upload single safetensors file into new repo", value=False) | |
| is_private = gr.Checkbox(label="Create private repo", value=True) | |
| is_overwrite = gr.Checkbox(label="Overwrite repo", value=False) | |
| presets = gr.Radio(label="Presets", choices=list(preset_dict.keys()), value="Default") | |
| with gr.Accordion("Advanced settings", open=False): | |
| dtype = gr.Radio(label="Output data type", choices=["fp16", "fp32", "bf16", "fp8", "default"], value="fp16") | |
| with gr.Row(): | |
| vae = gr.Dropdown(label="VAE", choices=vaes, value="", allow_custom_value=True) | |
| clip = gr.Dropdown(label="CLIP", choices=clips, value="", allow_custom_value=True) | |
| scheduler = gr.Dropdown(label="Scheduler (Sampler)", choices=schedulers, value="Euler a") | |
| with gr.Row(): | |
| with gr.Column(): | |
| lora1 = gr.Dropdown(label="LoRA1", choices=loras, value="", allow_custom_value=True, min_width=320) | |
| lora1s = gr.Slider(minimum=-2, maximum=2, step=0.01, value=1.00, label="LoRA1 weight scale") | |
| with gr.Column(): | |
| lora2 = gr.Dropdown(label="LoRA2", choices=loras, value="", allow_custom_value=True, min_width=320) | |
| lora2s = gr.Slider(minimum=-2, maximum=2, step=0.01, value=1.00, label="LoRA2 weight scale") | |
| with gr.Column(): | |
| lora3 = gr.Dropdown(label="LoRA3", choices=loras, value="", allow_custom_value=True, min_width=320) | |
| lora3s = gr.Slider(minimum=-2, maximum=2, step=0.01, value=1.00, label="LoRA3 weight scale") | |
| with gr.Column(): | |
| lora4 = gr.Dropdown(label="LoRA4", choices=loras, value="", allow_custom_value=True, min_width=320) | |
| lora4s = gr.Slider(minimum=-2, maximum=2, step=0.01, value=1.00, label="LoRA4 weight scale") | |
| with gr.Column(): | |
| lora5 = gr.Dropdown(label="LoRA5", choices=loras, value="", allow_custom_value=True, min_width=320) | |
| lora5s = gr.Slider(minimum=-2, maximum=2, step=0.01, value=1.00, label="LoRA5 weight scale") | |
| run_button = gr.Button(value="Submit") | |
| repo_urls = gr.CheckboxGroup(visible=False, choices=[], value=None) | |
| output_md = gr.Markdown(label="Output", value="<br><br>", elem_classes="result") | |
| gr.DuplicateButton(value="Duplicate Space") | |
| gr.on( | |
| triggers=[run_button.click], | |
| fn=convert_url_to_diffusers_repo, | |
| inputs=[dl_url, hf_user, hf_repo, hf_token, civitai_key, is_private, is_overwrite, is_upload_sf, repo_urls, dtype, vae, clip, scheduler, | |
| lora1, lora1s, lora2, lora2s, lora3, lora3s, lora4, lora4s, lora5, lora5s], | |
| outputs=[repo_urls, output_md], | |
| ) | |
| presets.change( | |
| fn=set_presets, | |
| inputs=[presets], | |
| outputs=[dtype, vae, scheduler, lora1, lora1s, lora2, lora2s, lora3, lora3s, lora4, lora4s, lora5, lora5s], | |
| queue=False, | |
| ) | |
| demo.queue() | |
| demo.launch() | |