diff --git a/README.md b/README.md index 0da6c55..9d393fc 100644 --- a/README.md +++ b/README.md @@ -246,6 +246,9 @@ Since v1.5.5, we've already optimized the SHA256 function to the top. So the onl # Change Log +## v1.6.4 +* Add "Download All files" checkbox for downloading model section. Uncheck means only download 1 file. + ## v1.6.3 * Support downloading multiple files, not avaiable when checking new version. diff --git a/scripts/ch_lib/model_action_civitai.py b/scripts/ch_lib/model_action_civitai.py index c5fd88a..f09f075 100644 --- a/scripts/ch_lib/model_action_civitai.py +++ b/scripts/ch_lib/model_action_civitai.py @@ -380,7 +380,7 @@ def get_id_and_dl_url_by_version_str(version_str:str, model_info:dict) -> tuple: # download model from civitai by input # output to markdown log -def dl_model_by_input(model_info:dict, model_type:str, subfolder_str:str, version_str:str, max_size_preview:bool, skip_nsfw_preview:bool) -> str: +def dl_model_by_input(model_info:dict, model_type:str, subfolder_str:str, version_str:str, dl_all_bool:bool, max_size_preview:bool, skip_nsfw_preview:bool) -> str: output = "" @@ -438,37 +438,55 @@ def dl_model_by_input(model_info:dict, model_type:str, subfolder_str:str, versio version_id = ver_info["id"] - # get all download url from files info - # some model versions have multiple files - download_urls = [] - if "files" in ver_info.keys(): - for file_info in ver_info["files"]: - if "downloadUrl" in file_info.keys(): - download_urls.append(file_info["downloadUrl"]) - if not len(download_urls): - if "downloadUrl" in ver_info.keys(): - download_urls.append(ver_info["downloadUrl"]) + if dl_all_bool: + # get all download url from files info + # some model versions have multiple files + download_urls = [] + if "files" in ver_info.keys(): + for file_info in ver_info["files"]: + if "downloadUrl" in file_info.keys(): + download_urls.append(file_info["downloadUrl"]) + + if not len(download_urls): + if "downloadUrl" in ver_info.keys(): + download_urls.append(ver_info["downloadUrl"]) - # check if this model is already existed - r = civitai.search_local_model_info_by_version_id(model_folder, version_id) - if r: - output = "This model version is already existed" - util.printD(output) - return output - - # download - filepath = "" - for url in download_urls: - model_filepath = downloader.dl(url, model_folder, None, None) - if not model_filepath: - output = "Downloading failed, check console log for detail" + # check if this model is already existed + r = civitai.search_local_model_info_by_version_id(model_folder, version_id) + if r: + output = "This model version is already existed" util.printD(output) return output - if url == ver_info["downloadUrl"]: - filepath = model_filepath + # download + filepath = "" + for url in download_urls: + model_filepath = downloader.dl(url, model_folder, None, None) + if not model_filepath: + output = "Downloading failed, check console log for detail" + util.printD(output) + return output + + if url == ver_info["downloadUrl"]: + filepath = model_filepath + else: + # only download one file + # get download url + url = ver_info["downloadUrl"] + if not url: + output = "Fail to get download url, check console log for detail" + util.printD(output) + return output + + # download + filepath = downloader.dl(url, model_folder, None, None) + if not filepath: + output = "Downloading failed, check console log for detail" + util.printD(output) + return output + if not filepath: filepath = model_filepath diff --git a/scripts/ch_lib/util.py b/scripts/ch_lib/util.py index eedd874..3e43c98 100644 --- a/scripts/ch_lib/util.py +++ b/scripts/ch_lib/util.py @@ -6,7 +6,7 @@ import requests import shutil -version = "1.6.3" +version = "1.6.4" def_headers = {'User-Agent': 'Mozilla/5.0 (iPad; CPU OS 12_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148'} diff --git a/scripts/civitai_helper.py b/scripts/civitai_helper.py index c5d84a5..323f66c 100644 --- a/scripts/civitai_helper.py +++ b/scripts/civitai_helper.py @@ -123,7 +123,7 @@ def on_ui_tabs(): 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="cn_empty_info_only_ckb", elem_classes="ch_vpadding") + 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="") @@ -143,6 +143,7 @@ def on_ui_tabs(): 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") @@ -194,7 +195,7 @@ def on_ui_tabs(): # 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, max_size_preview_ckb, skip_nsfw_preview_ckb], outputs=dl_log_md) + 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)