File size: 4,417 Bytes
3a9c7c3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
from merge_gr import gen_repo_list, upload_repo_list, clear_repo_list, process_repos_gr

css = """"""

with gr.Blocks(theme="NoCrypt/miku@>=1.2.2", css=css) as demo:
    gr.Markdown("# SDXL/SD1.5 DARE Merger (experiment)")
    gr.Markdown(
        f"""

This Space is a mod version of [martyn](https://huggingface.co/martyn)'s [safetensors-merge-supermario](https://github.com/martyn/safetensors-merge-supermario) forced to be compatible with Diffusers.

Since the space is completely experimental and unfinished,

I recommend using [ComfyUI-DareMerge](https://github.com/54rt1n/ComfyUI-DareMerge)

 or [WebUI SuperMerger](https://github.com/hako-mikan/sd-webui-supermerger) for actual merging.

 Also, I think most safetensors models with the same structure can be merged even if they are not SD models, but I haven't tried.<br>

**⚠️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 running.

Keys and tokens could be set to SECRET (HF_TOKEN) 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.

- Input your HF user ID. e.g. 'yourid'.

- Input your new merged repo name.

- Input information for merging models.

- Set the parameters. If not sure, just use the defaults.

- Click "Submit".

- Patiently wait until the output changes. It takes approximately 5~6 minutes (downloading from HF).

            """
    )
    with gr.Column():
        with gr.Group():
            hf_token = gr.Textbox(label="Your HF write token", placeholder="hf_...", 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", value="", max_lines=1)
        with gr.Group():
            with gr.Accordion("YAML", open=True):
                merge_yaml_input = gr.Textbox(label="List of Repos or URLs to merge", placeholder="author/repo\nauthor/repo\n...", value="", lines=4)
                merge_yaml_md = gr.Markdown()
                merge_yaml_upload = gr.UploadButton(label="Upload YAML file", file_types=["text"])
                merge_yaml_clear = gr.Button("Clear YAML files")
            with gr.Row():
                merge_p = gr.Number(label="Default dropout probability", value=0.5, minimum=0, maximum=1.0, step=0.01)
                merge_lambda = gr.Number(label="Default scaling factor for the weight delta", value=1.0, minimum=0, maximum=2.0, step=0.01)
            merge_mode = gr.Radio(label="Mode", choices=["SDXL", "SD1.5", "Single files"], value="SDXL")
            merge_is_upload_sf = gr.Checkbox(label="Convert Diffusers files to single safetensors file", value=False)
            merge_skip = gr.CheckboxGroup(label="Skip Diffusers folders", choices=["vae", "text_encoder", "text_encoder_2", "text_encoder_3"], value=["vae", "text_encoder"])
            merge_is_upload = gr.Checkbox(label="Upload files into new Repo", value=True)
            merge_repo_exists_ok = gr.Checkbox(label="Overwrite exsisting Repo", value=False)
        run_button = gr.Button(value="Submit")
        repo_urls = gr.CheckboxGroup(visible=False, choices=[], value=None)
        output_md = gr.Markdown(label="Output")
        merge_files = gr.Files(label="Download", interactive=False, value=[])

    merge_yaml_input.change(gen_repo_list, [merge_yaml_input, merge_p, merge_lambda], [merge_yaml_md], queue=False)
    merge_yaml_upload.upload(upload_repo_list, [merge_yaml_upload, merge_p, merge_lambda], [merge_yaml_md], queue=False)
    merge_yaml_clear.click(clear_repo_list, None, [merge_yaml_input, merge_yaml_md], queue=False)
    gr.on(
        triggers=[run_button.click],
        fn=process_repos_gr,
        inputs=[merge_mode, merge_p, merge_lambda, merge_skip, hf_user, hf_repo, hf_token,
                 merge_is_upload, merge_is_upload_sf, merge_repo_exists_ok, merge_files, repo_urls],
        outputs=[merge_files, repo_urls, output_md],
    )

demo.queue()
demo.launch()