File size: 7,471 Bytes
f575d14
 
 
 
 
 
cf1dbe1
 
 
 
4fd7f9a
 
cf1dbe1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f575d14
 
1e9dd50
 
 
 
d1bc90c
1e9dd50
d1bc90c
 
1e9dd50
 
 
 
 
 
 
 
 
 
f575d14
 
 
 
 
 
ac07e15
 
cf1dbe1
 
 
15704fd
cf1dbe1
 
 
f575d14
 
 
5519c1a
 
cf1dbe1
f575d14
1e9dd50
f575d14
 
 
5519c1a
 
 
f0ff983
f575d14
f0ff983
76b9a66
1e9dd50
818d649
5519c1a
 
 
 
 
 
 
 
 
 
 
 
 
818d649
f575d14
 
f0ff983
f575d14
 
 
 
76b9a66
f575d14
 
 
1e9dd50
 
 
 
 
 
f575d14
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
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",
]
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 = """"""

with gr.Blocks(theme="NoCrypt/miku@>=1.2.2", css=css) as demo:
    gr.Markdown("# Download and convert any Stable Diffusion XL safetensors to Diffusers and create your repo")
    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():
        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)
        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)
        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)
        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)
        presets = gr.Radio(label="Presets", choices=list(preset_dict.keys()), value="Default")
        with gr.Accordion("Advanced settings", open=False):
            is_half = gr.Checkbox(label="Half precision", value=True)
            vae = gr.Dropdown(label="VAE", choices=vaes, value="", allow_custom_value=True)
            scheduler = gr.Dropdown(label="Scheduler (Sampler)", choices=schedulers, value="Euler a")
            lora1 = gr.Dropdown(label="LoRA1", choices=loras, value="", allow_custom_value=True)
            lora1s = gr.Slider(minimum=-2, maximum=2, step=0.01, value=1.00, label="LoRA1 weight scale")
            lora2 = gr.Dropdown(label="LoRA2", choices=loras, value="", allow_custom_value=True)
            lora2s = gr.Slider(minimum=-2, maximum=2, step=0.01, value=1.00, label="LoRA2 weight scale")
            lora3 = gr.Dropdown(label="LoRA3", choices=loras, value="", allow_custom_value=True)
            lora3s = gr.Slider(minimum=-2, maximum=2, step=0.01, value=1.00, label="LoRA3 weight scale")
            lora4 = gr.Dropdown(label="LoRA4", choices=loras, value="", allow_custom_value=True)
            lora4s = gr.Slider(minimum=-2, maximum=2, step=0.01, value=1.00, label="LoRA4 weight scale")
            lora5 = gr.Dropdown(label="LoRA5", choices=loras, value="", allow_custom_value=True)
            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")
    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_upload_sf, repo_urls, is_half, vae, scheduler,
                 lora1, lora1s, lora2, lora2s, lora3, lora3s, lora4, lora4s, lora5, lora5s],
        outputs=[repo_urls, output_md],
    )
    presets.change(
        fn=set_presets,
        inputs=[presets],
        outputs=[is_half, vae, scheduler, lora1, lora1s, lora2, lora2s, lora3, lora3s, lora4, lora4s, lora5, lora5s],
        queue=False,
    )

demo.queue()
demo.launch()