File size: 6,926 Bytes
c25cab5
82ce3ab
5e85279
 
c25cab5
 
07a3a3d
08cbaa7
07a3a3d
97f1e49
c25cab5
 
 
 
07a3a3d
ec20d35
8c84074
c25cab5
07a3a3d
ec20d35
c25cab5
 
f7f6d75
82ce3ab
 
782be4f
f7f6d75
4bee8c1
 
c25cab5
82ce3ab
 
 
 
782be4f
82ce3ab
80368d1
 
5e85279
 
82ce3ab
 
5e85279
82ce3ab
 
 
08cbaa7
 
 
 
 
 
 
 
 
 
 
dd5d767
 
 
 
08cbaa7
c25cab5
07a3a3d
c25cab5
 
 
 
 
08cbaa7
c25cab5
 
 
4bee8c1
c25cab5
82ce3ab
ec20d35
 
 
c25cab5
 
 
ec20d35
5e85279
 
1069789
ec20d35
 
c25cab5
 
 
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
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)

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=[])
            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.Slider(label="Limit", minimum=1, maximum=100, step=1, value=100)
                search_civitai_page = gr.Slider(label="Page", minimum=1, maximum=100, 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)
        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")
    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],
        outputs=[uploaded_urls, urls_md],
    )
    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_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=True,
        show_api=False,
    )
    search_civitai_result.change(select_civitai_item, [search_civitai_result, state], [search_civitai_desc, search_civitai_json], 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()