File size: 7,246 Bytes
b8a2e65
 
9f09367
b8a2e65
 
 
 
 
 
 
 
 
 
 
 
 
 
d65f8f9
 
 
 
 
 
 
 
 
 
 
 
 
 
8f38b17
 
 
 
 
b8a2e65
8f38b17
 
b8a2e65
 
3e2880a
 
b8a2e65
 
 
 
 
 
 
 
 
 
29cdb8f
 
b8a2e65
 
d65f8f9
b8a2e65
 
 
8f38b17
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
b8a2e65
 
8f38b17
2024d03
b8a2e65
 
 
9f09367
7a355b6
b8a2e65
 
 
 
d65f8f9
 
 
 
 
 
 
b8a2e65
 
 
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
import gradio as gr
from convert_url_to_diffusers_sd_gr import (
    convert_url_to_diffusers_repo_sd,
    SCHEDULER_CONFIG_MAP,
)

vaes = [
    "",
    "https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.ckpt",
    "https://huggingface.co/stabilityai/sd-vae-ft-ema-original/resolve/main/vae-ft-ema-560000-ema-pruned.ckpt",
]
loras = [
    "",
    "https://huggingface.co/SPO-Diffusion-Models/SPO-SD-v1-5_4k-p_10ep_LoRA/blob/main/spo-sd-v1-5_4k-p_10ep_lora_diffusers.safetensors",
]
schedulers = list(SCHEDULER_CONFIG_MAP.keys())

preset_dict = {
    "Default": [True, "", "Euler", "", 1.0, "", 1.0, "", 1.0, "", 1.0, "", 1.0, "v1", 768, "ema"],
    "Bake in standard VAE": [True, "https://huggingface.co/stabilityai/sd-vae-ft-mse-original/resolve/main/vae-ft-mse-840000-ema-pruned.ckpt",
                              "Euler", "", 1.0, "", 1.0, "", 1.0, "", 1.0, "", 1.0, "v1", 768, "ema"],
}


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], p[13], p[14], p[15]


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 1.5 / 2.0 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/sd-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 1 minutes (downloading from HF).

            """
    )
    with gr.Column():
        with gr.Group():
            dl_url = gr.Textbox(label="URL to download", placeholder="https://huggingface.co/SG161222/RealVisXL_V4.0/blob/main/RealVisXL_V4.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):
                with gr.Row():
                    is_half = gr.Checkbox(label="Half precision", value=True)
                    model_type = gr.Radio(label="Model type", choices=["v1", "v2"], value="v1")
                    sample_size = gr.Radio(label="Sample size (px)", choices=[512, 768], value=768)
                    ema = gr.Radio(label="Extract EMA or non-EMA?", choices=["ema", "non-ema"], value="ema")
                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")
                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_sd,
        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,
                 model_type, sample_size, ema],
        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,
                 model_type, sample_size, ema],
        queue=False,
    )

demo.queue()
demo.launch()