File size: 7,394 Bytes
c25cab5
82ce3ab
5e85279
6386a0c
c25cab5
 
07a3a3d
08cbaa7
07a3a3d
97f1e49
c25cab5
 
 
 
07a3a3d
ec20d35
8c84074
c25cab5
07a3a3d
ec20d35
6386a0c
c25cab5
 
f7f6d75
49431cb
 
782be4f
f7f6d75
4bee8c1
 
c25cab5
82ce3ab
 
 
 
782be4f
82ce3ab
80368d1
 
5e85279
 
82ce3ab
 
5e85279
82ce3ab
 
 
08cbaa7
 
 
 
 
 
 
 
 
 
 
dd5d767
 
 
 
23f79a8
08cbaa7
c25cab5
07a3a3d
f6aa72c
c25cab5
 
 
 
 
23f79a8
f6aa72c
49431cb
c25cab5
 
4bee8c1
c25cab5
82ce3ab
6386a0c
2cf1735
ec20d35
 
49431cb
c25cab5
 
23f79a8
5e85279
 
1069789
ec20d35
 
c25cab5
 
23f79a8
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
import gradio as gr
from civitai_to_hf import (search_civitai, download_civitai, select_civitai_item, add_civitai_item, get_civitai_tag, select_civitai_all_item,
                           update_civitai_selection, update_civitai_checkbox, from_civitai_checkbox,
                           CIVITAI_TYPE, CIVITAI_BASEMODEL, CIVITAI_SORT, CIVITAI_PERIOD, CIVITAI_FILETYPE)

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; }

.desc [src$='#float'] { float: right; margin: 20px; }

"""

with gr.Blocks(theme="NoCrypt/miku@>=1.2.2", fill_width=True, css=css, delete_cache=(60, 3600)) as demo:
    with gr.Column():
        gr.Markdown("# CivitAI to HF🤗 Downloader & Uploader", elem_classes="title")
        state = gr.State(value={})
        with gr.Accordion("Search Civitai", open=True):
            with gr.Row():
                search_civitai_type = gr.CheckboxGroup(label="Type", choices=CIVITAI_TYPE, value=["Checkpoint", "LORA"])
                search_civitai_basemodel = gr.CheckboxGroup(label="Base Model", choices=CIVITAI_BASEMODEL, value=[])
                search_civitai_filetype = gr.CheckboxGroup(label="File type", choices=CIVITAI_FILETYPE, value=["Model"])
            with gr.Row():
                search_civitai_sort = gr.Radio(label="Sort", choices=CIVITAI_SORT, value=CIVITAI_SORT[0])
                search_civitai_period = gr.Radio(label="Period", choices=CIVITAI_PERIOD, value="Month")
                search_civitai_limit = gr.Number(label="Limit", minimum=1, maximum=100, step=1, value=100)
                search_civitai_page = gr.Number(label="Page", info="If 0, retrieve all pages", minimum=0, maximum=10, step=1, value=1)
            with gr.Row(equal_height=True):
                search_civitai_query = gr.Textbox(label="Query", placeholder="flux", lines=1)
                search_civitai_tag = gr.Dropdown(label="Tag", choices=get_civitai_tag(), value=get_civitai_tag()[0], allow_custom_value=True)
                search_civitai_user = gr.Textbox(label="Username", lines=1)
                search_civitai_submit = gr.Button("Search on Civitai")
            with gr.Accordion("Results", open=True):
                with gr.Row():
                    search_civitai_desc = gr.Markdown(value="", visible=False, elem_classes="desc")
                    search_civitai_json = gr.JSON(value={}, visible=False)
                with gr.Row(equal_height=True):
                    with gr.Column(scale=9):
                        with gr.Accordion("Select from Gallery", open=False):
                            search_civitai_gallery = gr.Gallery([], label="Results", allow_preview=False, columns=5, elem_id="gallery", show_share_button=False, interactive=False)
                        with gr.Accordion("Select by Checkbox", open=False):
                            search_civitai_result_checkbox = gr.CheckboxGroup(label="", choices=[], value=[])
                        search_civitai_result = gr.Dropdown(label="Search Results", choices=[("", "")], value=[],
                                                            allow_custom_value=True, visible=True, multiselect=True)
                        search_civitai_result_info = gr.Markdown("Search result.", elem_classes="info")
                    with gr.Column(scale=1):
                        search_civitai_add = gr.Button("Add to download URLs")
                        search_civitai_select_all = gr.Button("Select All", variant="secondary", size="sm")
        with gr.Group():
            dl_url = gr.Textbox(label="Download URL(s)", placeholder="https://civitai.com/api/download/models/28907\n...", value="", lines=3, max_lines=255)
            with gr.Column():
                civitai_key = gr.Textbox(label="Your Civitai Key", value="", max_lines=1)
                gr.Markdown("Your Civitai API key is available at [https://civitai.com/user/account](https://civitai.com/user/account).", elem_classes="info")
        with gr.Group():
            with gr.Row():
                with gr.Column():
                    hf_token = gr.Textbox(label="Your HF write token", placeholder="hf_...", value="", max_lines=1)
                    gr.Markdown("Your token is available at [hf.co/settings/tokens](https://huggingface.co/settings/tokens).", elem_classes="info")
                newrepo_id = gr.Textbox(label="Upload repo ID", placeholder="yourid/yourrepo", value="", max_lines=1)
            with gr.Row():
                newrepo_type = gr.Radio(label="Upload repo type", choices=["model", "dataset"], value="model")
                is_private = gr.Checkbox(label="Create private repo", value=True)
                is_info = gr.Checkbox(label="Upload Civitai information files", value=False)
                is_rename = gr.Checkbox(label="Auto rename", value=True)
        run_button = gr.Button(value="Download and Upload", variant="primary")
        uploaded_urls = gr.CheckboxGroup(visible=False, choices=[], value=None) # hidden
        urls_md = gr.Markdown("<br><br>", elem_classes="result")
        urls_remain = gr.Textbox("Remaining URLs", value="", show_copy_button=True, visible=False)
    gr.DuplicateButton(value="Duplicate Space")

    gr.on(
        triggers=[run_button.click],
        fn=download_civitai,
        inputs=[dl_url, civitai_key, hf_token, uploaded_urls, newrepo_id, newrepo_type, is_private, is_info, is_rename],
        outputs=[uploaded_urls, urls_md, urls_remain],
        queue=True,
    )
    gr.on(
        triggers=[search_civitai_submit.click, search_civitai_query.submit, search_civitai_user.submit],
        fn=search_civitai,
        inputs=[search_civitai_query, search_civitai_type, search_civitai_basemodel, search_civitai_sort,
                search_civitai_period, search_civitai_tag, search_civitai_user, search_civitai_limit,
                search_civitai_page, search_civitai_filetype, civitai_key, search_civitai_gallery, state],
        outputs=[search_civitai_result, search_civitai_desc, search_civitai_submit, search_civitai_query, search_civitai_gallery,
                 search_civitai_result_checkbox, search_civitai_result_info, state],
        queue=False,
        show_api=False,
    )
    search_civitai_result.change(select_civitai_item, [search_civitai_result, state], [search_civitai_desc, search_civitai_json, state], queue=False, show_api=False)\
    .success(update_civitai_checkbox, [search_civitai_result], [search_civitai_result_checkbox], queue=True, show_api=False)
    search_civitai_result_checkbox.select(from_civitai_checkbox, [search_civitai_result_checkbox], [search_civitai_result], queue=False, show_api=False)
    search_civitai_add.click(add_civitai_item, [search_civitai_result, dl_url], [dl_url], queue=False, show_api=False)
    search_civitai_select_all.click(select_civitai_all_item, [search_civitai_select_all, state], [search_civitai_select_all, search_civitai_result], queue=False, show_api=False)
    search_civitai_gallery.select(update_civitai_selection, [search_civitai_result, state], [search_civitai_result], queue=False, show_api=False)

demo.queue()
demo.launch(ssr_mode=False)