update to v1.4.1

pull/39/head
butaixianran 2023-03-11 09:13:25 +08:00
parent 67d89cb791
commit 49c839a8a7
6 changed files with 100 additions and 21 deletions

View File

@ -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.

View File

@ -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")

View File

@ -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

View File

@ -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

View File

@ -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:

View File

@ -44,7 +44,7 @@ def scan_model(max_size_preview, skip_nsfw_preview):
output = "Failed to get model_info"
util.printD(output)
return output+", check console log for detail"
# write model info to file
model.write_model_info(info_file, model_info)