From 0b51381b34efebb6919dc613f019f3071e84d954 Mon Sep 17 00:00:00 2001 From: butaixianran Date: Wed, 8 Mar 2023 20:08:19 +0800 Subject: [PATCH] update js to check no null value --- .gitignore | 1 + javascript/civitai_helper.js | 17 ++++--- scripts/lib/operator.py | 2 +- scripts/lib/setting.py | 35 +++++++++++++- scripts/ui.py | 89 ++++++++++++++++++++++++++++++++++++ 5 files changed, 132 insertions(+), 12 deletions(-) create mode 100644 scripts/ui.py diff --git a/.gitignore b/.gitignore index e30f246..b1c59cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ scripts/__pycache__/ +scripts/lib/__pycache__/ diff --git a/javascript/civitai_helper.js b/javascript/civitai_helper.js index ec4c467..3ceee20 100644 --- a/javascript/civitai_helper.js +++ b/javascript/civitai_helper.js @@ -212,15 +212,14 @@ onUiLoaded(() => { extra_network_node = gradioApp().getElementById(extra_network_id); // check if extr network is under thumbnail mode is_thumb_mode = false - if (extra_network_node.className.indexOf("extra-network-thumbs") != -1) { - console.log(extra_network_id + " is in thumbnail mode"); - is_thumb_mode = true; - // won't work good in thumb mode, skip it for now - continue; - } - - - if (!extra_network_node) { + if (extra_network_node) { + if (extra_network_node.className == "extra-network-thumbs") { + console.log(extra_network_id + " is in thumbnail mode"); + is_thumb_mode = true; + // won't work good in thumb mode, skip it for now + continue; + } + } else { console.log("can not find extra_network_node: " + extra_network_id); continue; } diff --git a/scripts/lib/operator.py b/scripts/lib/operator.py index 54e62f8..3c7245a 100644 --- a/scripts/lib/operator.py +++ b/scripts/lib/operator.py @@ -13,7 +13,7 @@ from . import msg # scan model to generate SHA256, then use this SHA256 to get model info from civitai -def scan_model(low_memory_sha, max_size_preview, readable_model_info, skip_nsfw_preview): +def scan_model(low_memory_sha, max_size_preview, skip_nsfw_preview): util.printD("Start scan_model") model_count = 0 diff --git a/scripts/lib/setting.py b/scripts/lib/setting.py index d6d8a66..8ec239a 100644 --- a/scripts/lib/setting.py +++ b/scripts/lib/setting.py @@ -13,7 +13,6 @@ data = { "model":{ "low_memory_sha": True, "max_size_preview": True, - "readable_model_info": True, "skip_nsfw_preview": False }, "general":{ @@ -71,4 +70,36 @@ def load(): data = json_data - return \ No newline at end of file + return + +# save setting from parameter +def save_from_input(low_memory_sha, max_size_preview, skip_nsfw_preview, open_url_with_js, check_model_version_at_startup): + global data + data = { + "model":{ + "low_memory_sha": low_memory_sha, + "max_size_preview": max_size_preview, + "skip_nsfw_preview": skip_nsfw_preview + }, + "general":{ + "open_url_with_js": open_url_with_js, + "check_model_version_at_startup": check_model_version_at_startup, + }, + "tool":{ + } + } + + save() + +# load to output +def load_to_output(): + load() + + low_memory_sha = data["model"]["low_memory_sha"] + max_size_preview = data["model"]["max_size_preview"] + skip_nsfw_preview = data["model"]["skip_nsfw_preview"] + open_url_with_js = data["general"]["open_url_with_js"] + check_model_version_at_startup = data["general"]["check_model_version_at_startup"] + + + return [low_memory_sha, max_size_preview, skip_nsfw_preview, open_url_with_js, check_model_version_at_startup] \ No newline at end of file diff --git a/scripts/ui.py b/scripts/ui.py new file mode 100644 index 0000000..3a688cd --- /dev/null +++ b/scripts/ui.py @@ -0,0 +1,89 @@ +# -*- 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.lib import operator +from scripts.lib import setting + + +# load setting +setting.load() + +def on_ui_tabs(): + # init + + # get prompt textarea + # UI structure + # 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] + + + # ====UI==== + # with gr.Blocks(analytics_enabled=False) as civitai_helper: + with gr.Blocks() as civitai_helper: + + # init + low_memory_sha = setting.data["model"]["low_memory_sha"] + 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"] + check_model_version_at_startup = setting.data["general"]["check_model_version_at_startup"] + + + # UI will have 3 tabs: + # Model Info: Scan model or force a model link to civitai model info by model id or url + # Settging: Setting for general use, also can save setting for all tabs + # Tool: handy functions, like making all model info readable. + with gr.Tab("Model"): + with gr.Row(): + low_memory_sha_ckb = gr.Checkbox(label="Memory Optimised SHA256", value=low_memory_sha, elem_id="ch_low_memory_sha_ckb") + 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_btn = gr.Button(value="Scan model", elem_id="ch_scan_model_btn") + + gr.Markdown("Check console log window for detail, after clicking Scan button") + + + # with gr.Tab("Settging"): + + # with gr.Tab("Tool"): + + # 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") + + # ====events==== + scan_model_btn.click(operator.scan_model, inputs=[low_memory_sha_ckb, max_size_preview_ckb, skip_nsfw_preview_ckb]) + js_open_url_btn.click(operator.open_model_url, inputs=[js_msg_txtbox]) + js_add_trigger_words_btn.click(operator.add_trigger_words, inputs=[js_msg_txtbox], outputs=[txt2img_prompt, img2img_prompt]) + js_use_preview_prompt_btn.click(operator.use_preview_image_prompt, inputs=[js_msg_txtbox], outputs=[txt2img_prompt, txt2img_neg_prompt, img2img_prompt, img2img_neg_prompt]) + + # 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) + +