update to v1.4.1
parent
67d89cb791
commit
49c839a8a7
|
|
@ -125,6 +125,10 @@ Enjoy!
|
|||
|
||||
|
||||
# Change Log
|
||||
## v1.4.1
|
||||
* When checking new versions, also searching and ignore already existed ones.
|
||||
* Add version number to the bottom of this extension's tab
|
||||
|
||||
## v1.4
|
||||
* Support checking model's new version, display the result in UI and offer download url
|
||||
* Remove addintional sub tabs on extension tab. make ui simpler.
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ from scripts.lib import setting
|
|||
from scripts.lib import civitai
|
||||
|
||||
# init
|
||||
version = "1.4.1"
|
||||
model.get_custom_model_folder()
|
||||
setting.load()
|
||||
|
||||
|
|
@ -105,7 +106,11 @@ def on_ui_tabs():
|
|||
save_setting_btn = gr.Button(value="Save Setting", elem_id="ch_save_setting_btn")
|
||||
general_log_md = gr.Markdown(value="", elem_id="ch_general_log_md")
|
||||
|
||||
# hidden component for js, not in any tab
|
||||
|
||||
# ====Footer====
|
||||
gr.Markdown(f"<center>version:{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")
|
||||
|
|
|
|||
|
|
@ -351,9 +351,65 @@ def get_preview_image_by_model_path(model_path:str, max_size_preview, skip_nsfw_
|
|||
break
|
||||
|
||||
|
||||
|
||||
# search local model by version id in 1 folder, no subfolder
|
||||
# return - model_info
|
||||
def search_local_model_info_by_version_id(folder:str, version_id:int) -> dict:
|
||||
util.printD("Searching local model by version id")
|
||||
util.printD("folder: " + folder)
|
||||
util.printD("version_id: " + str(version_id))
|
||||
|
||||
if not folder:
|
||||
util.printD("folder is none")
|
||||
return
|
||||
|
||||
if not os.path.isdir(folder):
|
||||
util.printD("folder is not a dir")
|
||||
return
|
||||
|
||||
if not version_id:
|
||||
util.printD("version_id is none")
|
||||
return
|
||||
|
||||
# search civitai model info file
|
||||
for filename in os.listdir(folder):
|
||||
# check ext
|
||||
base, ext = os.path.splitext(filename)
|
||||
if ext == model.info_ext:
|
||||
# find info file
|
||||
if len(base) < 9:
|
||||
# not a civitai info file
|
||||
continue
|
||||
|
||||
if base[-8:] == suffix:
|
||||
# find a civitai info file
|
||||
path = os.path.join(folder, filename)
|
||||
model_info = model.load_model_info(path)
|
||||
if not model_info:
|
||||
continue
|
||||
|
||||
if "id" not in model_info.keys():
|
||||
continue
|
||||
|
||||
id = model_info["id"]
|
||||
if not id:
|
||||
continue
|
||||
|
||||
# util.printD(f"Compare version id, src: {id}, target:{version_id}")
|
||||
if str(id) == str(version_id):
|
||||
# find the one
|
||||
return model_info
|
||||
|
||||
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
# check new version for a model by model path
|
||||
# return (model_path, model_id, model_name, new_verion_id, new_version_name, description, download_url, img_url)
|
||||
def check_model_new_version_by_path(model_path:str) -> tuple:
|
||||
def check_model_new_version_by_path(model_path:str, delay:float=1) -> tuple:
|
||||
if not model_path:
|
||||
util.printD("model_path is empty")
|
||||
return
|
||||
|
|
@ -390,6 +446,10 @@ def check_model_new_version_by_path(model_path:str) -> tuple:
|
|||
|
||||
# get model info by id from civitai
|
||||
model_info = get_model_info_by_id(model_id)
|
||||
# delay before next request, to prevent to be treat as DDoS
|
||||
util.printD(f"delay:{delay} second")
|
||||
time.sleep(delay)
|
||||
|
||||
if not model_info:
|
||||
return
|
||||
|
||||
|
|
@ -467,7 +527,7 @@ def check_model_new_version_by_path(model_path:str) -> tuple:
|
|||
# check model's new version
|
||||
# parameter: delay - float, how many seconds to delay between each request to civitai
|
||||
# return: new_versions - a list for all new versions, each one is (model_path, model_id, model_name, new_verion_id, new_version_name, description, download_url, img_url)
|
||||
def check_models_new_version_by_model_types(model_types:list, delay:float=0.5) -> list:
|
||||
def check_models_new_version_by_model_types(model_types:list, delay:float=1) -> list:
|
||||
util.printD("Checking models' new version")
|
||||
|
||||
if not model_types:
|
||||
|
|
@ -502,15 +562,34 @@ def check_models_new_version_by_model_types(model_types:list, delay:float=0.5) -
|
|||
base, ext = os.path.splitext(item)
|
||||
if ext in model.exts:
|
||||
# find a model
|
||||
r = check_model_new_version_by_path(item)
|
||||
|
||||
# delay before next request, to prevent to be treat as DDoS
|
||||
util.printD(f"delay:{delay} second")
|
||||
time.sleep(delay)
|
||||
r = check_model_new_version_by_path(item, delay)
|
||||
|
||||
if not r:
|
||||
continue
|
||||
|
||||
model_path, model_id, model_name, current_version_id, new_version_name, description, downloadUrl, img_url = r
|
||||
# check exist
|
||||
if not current_version_id:
|
||||
continue
|
||||
|
||||
# check this version id in list
|
||||
is_already_in_list = False
|
||||
for new_version in new_versions:
|
||||
if current_version_id == new_version[3]:
|
||||
# already in list
|
||||
is_already_in_list = True
|
||||
break
|
||||
|
||||
if is_already_in_list:
|
||||
util.printD("New version is already in list")
|
||||
continue
|
||||
|
||||
# search this new version id to check if this model is already downloaded
|
||||
target_model_info = search_local_model_info_by_version_id(root, current_version_id)
|
||||
if target_model_info:
|
||||
util.printD("New version is already existed")
|
||||
continue
|
||||
|
||||
# add to list
|
||||
new_versions.append(r)
|
||||
|
||||
|
|
@ -518,3 +597,5 @@ def check_models_new_version_by_model_types(model_types:list, delay:float=0.5) -
|
|||
|
||||
|
||||
return new_versions
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -1,11 +0,0 @@
|
|||
# -*- coding: UTF-8 -*-
|
||||
# handle msg between js and python side
|
||||
import os
|
||||
import json
|
||||
import requests
|
||||
import shutil
|
||||
import webbrowser
|
||||
from . import util
|
||||
from . import model
|
||||
from . import civitai
|
||||
from . import msg_handler
|
||||
|
|
@ -54,7 +54,7 @@ def write_model_info(path, model_info):
|
|||
|
||||
|
||||
def load_model_info(path):
|
||||
util.printD("Load model info from file: " + path)
|
||||
# util.printD("Load model info from file: " + path)
|
||||
model_info = None
|
||||
with open(path, 'r') as f:
|
||||
try:
|
||||
|
|
|
|||
Loading…
Reference in New Issue