update to v1.4.1
parent
67d89cb791
commit
49c839a8a7
|
|
@ -125,6 +125,10 @@ Enjoy!
|
||||||
|
|
||||||
|
|
||||||
# Change Log
|
# 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
|
## v1.4
|
||||||
* Support checking model's new version, display the result in UI and offer download url
|
* 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.
|
* Remove addintional sub tabs on extension tab. make ui simpler.
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ from scripts.lib import setting
|
||||||
from scripts.lib import civitai
|
from scripts.lib import civitai
|
||||||
|
|
||||||
# init
|
# init
|
||||||
|
version = "1.4.1"
|
||||||
model.get_custom_model_folder()
|
model.get_custom_model_folder()
|
||||||
setting.load()
|
setting.load()
|
||||||
|
|
||||||
|
|
@ -105,7 +106,11 @@ def on_ui_tabs():
|
||||||
save_setting_btn = gr.Button(value="Save Setting", elem_id="ch_save_setting_btn")
|
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")
|
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")
|
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")
|
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_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
|
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
|
# 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)
|
# 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:
|
if not model_path:
|
||||||
util.printD("model_path is empty")
|
util.printD("model_path is empty")
|
||||||
return
|
return
|
||||||
|
|
@ -390,6 +446,10 @@ def check_model_new_version_by_path(model_path:str) -> tuple:
|
||||||
|
|
||||||
# get model info by id from civitai
|
# get model info by id from civitai
|
||||||
model_info = get_model_info_by_id(model_id)
|
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:
|
if not model_info:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
@ -467,7 +527,7 @@ def check_model_new_version_by_path(model_path:str) -> tuple:
|
||||||
# check model's new version
|
# check model's new version
|
||||||
# parameter: delay - float, how many seconds to delay between each request to civitai
|
# 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)
|
# 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")
|
util.printD("Checking models' new version")
|
||||||
|
|
||||||
if not model_types:
|
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)
|
base, ext = os.path.splitext(item)
|
||||||
if ext in model.exts:
|
if ext in model.exts:
|
||||||
# find a model
|
# find a model
|
||||||
r = check_model_new_version_by_path(item)
|
r = check_model_new_version_by_path(item, delay)
|
||||||
|
|
||||||
# delay before next request, to prevent to be treat as DDoS
|
|
||||||
util.printD(f"delay:{delay} second")
|
|
||||||
time.sleep(delay)
|
|
||||||
|
|
||||||
if not r:
|
if not r:
|
||||||
continue
|
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
|
# add to list
|
||||||
new_versions.append(r)
|
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
|
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):
|
def load_model_info(path):
|
||||||
util.printD("Load model info from file: " + path)
|
# util.printD("Load model info from file: " + path)
|
||||||
model_info = None
|
model_info = None
|
||||||
with open(path, 'r') as f:
|
with open(path, 'r') as f:
|
||||||
try:
|
try:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue