File size: 8,338 Bytes
f575d14
 
 
 
 
 
cf1dbe1
 
 
 
4fd7f9a
 
cf1dbe1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
f575d14
 
1e9dd50
 
 
 
d1bc90c
1e9dd50
d1bc90c
 
1e9dd50
 
 
 
 
 
 
 
 
 
be33247
 
 
 
 
f575d14
be33247
 
f575d14
 
ac07e15
 
cf1dbe1
 
 
15704fd
cf1dbe1
 
 
f575d14
 
 
5519c1a
 
cf1dbe1
f575d14
1e9dd50
f575d14
 
 
5519c1a
be33247
 
 
 
 
 
 
 
 
1e9dd50
818d649
5519c1a
be33247
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
818d649
f575d14
be33247
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
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 = """

.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():
        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)
        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)
            with gr.Row():
                vae = gr.Dropdown(label="VAE", choices=vaes, 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_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()