File size: 11,157 Bytes
34097e9 |
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 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 |
# -*- coding: UTF-8 -*-
# This extension can help you manage your models from civitai. It can download preview, add trigger words, open model page and use the prompt from preview image
# repo: https://github.com/butaixianran/
import modules.scripts as scripts
import gradio as gr
import os
import webbrowser
import requests
import random
import hashlib
import json
import shutil
import re
import modules
from modules import script_callbacks
from modules import shared
from scripts.ch_lib import model
from scripts.ch_lib import js_action_civitai
from scripts.ch_lib import model_action_civitai
from scripts.ch_lib import setting
from scripts.ch_lib import civitai
from scripts.ch_lib import util
# init
# root path
root_path = os.getcwd()
# extension path
extension_path = scripts.basedir()
model.get_custom_model_folder()
setting.load()
# set proxy
if setting.data["general"]["proxy"]:
util.printD("Set Proxy: "+setting.data["general"]["proxy"])
util.proxies = {
"http": setting.data["general"]["proxy"],
"https": setting.data["general"]["proxy"],
}
def on_ui_tabs():
# init
# init_py_msg = {
# # relative extension path
# "extension_path": util.get_relative_path(extension_path, root_path),
# }
# init_py_msg_str = json.dumps(init_py_msg)
# get prompt textarea
# check modules/ui.py, search for txt2img_paste_fields
# Negative prompt is the second element
txt2img_prompt = modules.ui.txt2img_paste_fields[0][0]
txt2img_neg_prompt = modules.ui.txt2img_paste_fields[1][0]
img2img_prompt = modules.ui.img2img_paste_fields[0][0]
img2img_neg_prompt = modules.ui.img2img_paste_fields[1][0]
# ====Event's function====
def get_model_names_by_input(model_type, empty_info_only):
names = civitai.get_model_names_by_input(model_type, empty_info_only)
return model_name_drop.update(choices=names)
def get_model_info_by_url(url):
r = model_action_civitai.get_model_info_by_url(url)
model_info = {}
model_name = ""
model_type = ""
subfolders = []
version_strs = []
if r:
model_info, model_name, model_type, subfolders, version_strs = r
return [model_info, model_name, model_type, dl_subfolder_drop.update(choices=subfolders), dl_version_drop.update(choices=version_strs)]
# ====UI====
with gr.Blocks(analytics_enabled=False) as civitai_helper:
# with gr.Blocks(css=".block.padded {padding: 10px !important}") as civitai_helper:
# init
max_size_preview = setting.data["model"]["max_size_preview"]
skip_nsfw_preview = setting.data["model"]["skip_nsfw_preview"]
open_url_with_js = setting.data["general"]["open_url_with_js"]
always_display = setting.data["general"]["always_display"]
show_btn_on_thumb = setting.data["general"]["show_btn_on_thumb"]
proxy = setting.data["general"]["proxy"]
model_types = list(model.folders.keys())
no_info_model_names = civitai.get_model_names_by_input("ckp", False)
# session data
dl_model_info = gr.State({})
with gr.Box(elem_classes="ch_box"):
with gr.Column():
gr.Markdown("### Scan Models for Civitai")
with gr.Row():
max_size_preview_ckb = gr.Checkbox(label="Download Max Size Preview", value=max_size_preview, elem_id="ch_max_size_preview_ckb")
skip_nsfw_preview_ckb = gr.Checkbox(label="Skip NSFW Preview Images", value=skip_nsfw_preview, elem_id="ch_skip_nsfw_preview_ckb")
scan_model_types_ckbg = gr.CheckboxGroup(choices=model_types, label="Model Types", value=model_types)
# with gr.Row():
scan_model_civitai_btn = gr.Button(value="Scan", variant="primary", elem_id="ch_scan_model_civitai_btn")
# with gr.Row():
scan_model_log_md = gr.Markdown(value="Scanning takes time, just wait. Check console log for detail", elem_id="ch_scan_model_log_md")
with gr.Box(elem_classes="ch_box"):
with gr.Column():
gr.Markdown("### Get Model Info from Civitai by URL")
gr.Markdown("Use this when scanning can not find a local model on civitai")
with gr.Row():
model_type_drop = gr.Dropdown(choices=model_types, label="Model Type", value="ckp", multiselect=False)
empty_info_only_ckb = gr.Checkbox(label="Only Show Models have no Info", value=False, elem_id="ch_empty_info_only_ckb", elem_classes="ch_vpadding")
model_name_drop = gr.Dropdown(choices=no_info_model_names, label="Model", value="ckp", multiselect=False)
model_url_or_id_txtbox = gr.Textbox(label="Civitai URL", lines=1, value="")
get_civitai_model_info_by_id_btn = gr.Button(value="Get Model Info from Civitai", variant="primary")
get_model_by_id_log_md = gr.Markdown("")
with gr.Box(elem_classes="ch_box"):
with gr.Column():
gr.Markdown("### Download Model")
with gr.Row():
dl_model_url_or_id_txtbox = gr.Textbox(label="Civitai URL", lines=1, value="")
dl_model_info_btn = gr.Button(value="1. Get Model Info by Civitai Url", variant="primary")
gr.Markdown(value="2. Pick Subfolder and Model Version")
with gr.Row():
dl_model_name_txtbox = gr.Textbox(label="Model Name", interactive=False, lines=1, value="")
dl_model_type_txtbox = gr.Textbox(label="Model Type", interactive=False, lines=1, value="")
dl_subfolder_drop = gr.Dropdown(choices=[], label="Sub-folder", value="", interactive=True, multiselect=False)
dl_version_drop = gr.Dropdown(choices=[], label="Model Version", value="", interactive=True, multiselect=False)
dl_all_ckb = gr.Checkbox(label="Download All files", value=False, elem_id="ch_dl_all_ckb", elem_classes="ch_vpadding")
dl_civitai_model_by_id_btn = gr.Button(value="3. Download Model", variant="primary")
dl_log_md = gr.Markdown(value="Check Console log for Downloading Status")
with gr.Box(elem_classes="ch_box"):
with gr.Column():
gr.Markdown("### Check models' new version")
with gr.Row():
model_types_ckbg = gr.CheckboxGroup(choices=model_types, label="Model Types", value=["lora"])
check_models_new_version_btn = gr.Button(value="Check New Version from Civitai", variant="primary")
check_models_new_version_log_md = gr.HTML("It takes time, just wait. Check console log for detail")
with gr.Box(elem_classes="ch_box"):
with gr.Column():
gr.Markdown("### Other Setting")
with gr.Row():
open_url_with_js_ckb = gr.Checkbox(label="Open Url At Client Side", value=open_url_with_js, elem_id="ch_open_url_with_js_ckb")
always_display_ckb = gr.Checkbox(label="Always Display Buttons", value=always_display, elem_id="ch_always_display_ckb")
show_btn_on_thumb_ckb = gr.Checkbox(label="Show Button On Thumb Mode", value=show_btn_on_thumb, elem_id="ch_show_btn_on_thumb_ckb")
proxy_txtbox = gr.Textbox(label="Proxy", interactive=True, lines=1, value=proxy, info="format: http://127.0.0.1:port")
save_setting_btn = gr.Button(value="Save Setting")
general_log_md = gr.Markdown(value="")
# ====Footer====
gr.Markdown(f"<center>version:{util.version}</center>")
# ====hidden component for js, not in any tab====
js_msg_txtbox = gr.Textbox(label="Request Msg From Js", visible=False, lines=1, value="", elem_id="ch_js_msg_txtbox")
py_msg_txtbox = gr.Textbox(label="Response Msg From Python", visible=False, lines=1, value="", elem_id="ch_py_msg_txtbox")
js_open_url_btn = gr.Button(value="Open Model Url", visible=False, elem_id="ch_js_open_url_btn")
js_add_trigger_words_btn = gr.Button(value="Add Trigger Words", visible=False, elem_id="ch_js_add_trigger_words_btn")
js_use_preview_prompt_btn = gr.Button(value="Use Prompt from Preview Image", visible=False, elem_id="ch_js_use_preview_prompt_btn")
js_dl_model_new_version_btn = gr.Button(value="Download Model's new version", visible=False, elem_id="ch_js_dl_model_new_version_btn")
# ====events====
# Scan Models for Civitai
scan_model_civitai_btn.click(model_action_civitai.scan_model, inputs=[scan_model_types_ckbg, max_size_preview_ckb, skip_nsfw_preview_ckb], outputs=scan_model_log_md)
# Get Civitai Model Info by Model Page URL
model_type_drop.change(get_model_names_by_input, inputs=[model_type_drop, empty_info_only_ckb], outputs=model_name_drop)
empty_info_only_ckb.change(get_model_names_by_input, inputs=[model_type_drop, empty_info_only_ckb], outputs=model_name_drop)
get_civitai_model_info_by_id_btn.click(model_action_civitai.get_model_info_by_input, inputs=[model_type_drop, model_name_drop, model_url_or_id_txtbox, max_size_preview_ckb, skip_nsfw_preview_ckb], outputs=get_model_by_id_log_md)
# Download Model
dl_model_info_btn.click(get_model_info_by_url, inputs=dl_model_url_or_id_txtbox, outputs=[dl_model_info, dl_model_name_txtbox, dl_model_type_txtbox, dl_subfolder_drop, dl_version_drop])
dl_civitai_model_by_id_btn.click(model_action_civitai.dl_model_by_input, inputs=[dl_model_info, dl_model_type_txtbox, dl_subfolder_drop, dl_version_drop, dl_all_ckb, max_size_preview_ckb, skip_nsfw_preview_ckb], outputs=dl_log_md)
# Check models' new version
check_models_new_version_btn.click(model_action_civitai.check_models_new_version_to_md, inputs=model_types_ckbg, outputs=check_models_new_version_log_md)
# Other Setting
save_setting_btn.click(setting.save_from_input, inputs=[max_size_preview_ckb, skip_nsfw_preview_ckb, open_url_with_js_ckb, always_display_ckb, show_btn_on_thumb_ckb, proxy_txtbox], outputs=general_log_md)
# js action
js_open_url_btn.click(js_action_civitai.open_model_url, inputs=[js_msg_txtbox, open_url_with_js_ckb], outputs=py_msg_txtbox)
js_add_trigger_words_btn.click(js_action_civitai.add_trigger_words, inputs=[js_msg_txtbox], outputs=[txt2img_prompt, img2img_prompt])
js_use_preview_prompt_btn.click(js_action_civitai.use_preview_image_prompt, inputs=[js_msg_txtbox], outputs=[txt2img_prompt, txt2img_neg_prompt, img2img_prompt, img2img_neg_prompt])
js_dl_model_new_version_btn.click(js_action_civitai.dl_model_new_version, inputs=[js_msg_txtbox, max_size_preview_ckb, skip_nsfw_preview_ckb], outputs=dl_log_md)
# the third parameter is the element id on html, with a "tab_" as prefix
return (civitai_helper , "Civitai Helper", "civitai_helper"),
script_callbacks.on_ui_tabs(on_ui_tabs)
|