Compare commits

...

6 Commits
3.16 ... 3.17.3

Author SHA1 Message Date
Dr.Lt.Data
df2a7ddca4 fixed: auto dependencies installation
- missing `rich` module
2025-02-02 21:17:35 +09:00
Dr.Lt.Data
ba9c71ffa4 fixed: close dialogs before restart
fixed: visual bug
2025-02-02 18:57:23 +09:00
Dr.Lt.Data
21b6c6569c feat: show restart confirm window when reconnected
fixed: `uv` related crash
2025-02-02 18:36:04 +09:00
Dr.Lt.Data
92aba9565a version marker 2025-02-02 18:17:27 +09:00
HuangYongliang
6ea0aebb0b fix channel_url config (#1501)
* 1.fix channel_url not effecte for default_cache_update
2.support http channel url for airgap env

* fix pylint
2025-02-02 18:16:39 +09:00
Dr.Lt.Data
b5cdcb75b4 feat: add always_lazy_install config option. 2025-02-02 18:01:16 +09:00
6 changed files with 46 additions and 27 deletions

View File

@@ -263,6 +263,7 @@ The following settings are applied based on the section marked as `is_default`.
model_download_by_agent = <When downloading models, use an agent instead of torchvision_download_url.>
downgrade_blacklist = <Set a list of packages to prevent downgrades. List them separated by commas.>
security_level = <Set the security level.>
always_lazy_install = <Whether to perform dependency installation on restart even in environments other than Windows.>
```
## Additional Feature

View File

@@ -42,7 +42,7 @@ import manager_downloader
from node_package import InstalledNodePackage
version_code = [3, 16]
version_code = [3, 17, 3]
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
@@ -174,7 +174,7 @@ git_script_path = os.path.join(manager_util.comfyui_manager_path, "git_helper.py
manager_files_path = None
manager_config_path = None
manager_channel_list_path = None
manager_startup_script_path = None
manager_startup_script_path:str = None
manager_snapshot_path = None
manager_pip_overrides_path = None
manager_components_path = None
@@ -325,6 +325,8 @@ def normalize_channel(channel):
return None
elif channel.startswith('https://'):
return channel
elif channel.startswith('http://') and get_config()['http_channel_enabled'] == True:
return channel
tmp_dict = get_channel_dict()
channel_url = tmp_dict.get(channel)
@@ -1557,6 +1559,7 @@ def write_config():
'downgrade_blacklist': get_config()['downgrade_blacklist'],
'security_level': get_config()['security_level'],
'skip_migration_check': get_config()['skip_migration_check'],
'always_lazy_install': get_config()['always_lazy_install']
}
directory = os.path.dirname(manager_config_path)
@@ -1585,6 +1588,7 @@ def read_config():
manager_util.use_uv = default_conf['use_uv'].lower() == 'true' if 'use_uv' in default_conf else False
return {
'http_channel_enabled': default_conf['http_channel_enabled'].lower() == 'true' if 'http_channel_enabled' in default_conf else False,
'preview_method': default_conf['preview_method'] if 'preview_method' in default_conf else manager_funcs.get_current_preview_method(),
'git_exe': default_conf['git_exe'] if 'git_exe' in default_conf else '',
'use_uv': default_conf['use_uv'].lower() == 'true' if 'use_uv' in default_conf else False,
@@ -1597,12 +1601,14 @@ def read_config():
'model_download_by_agent': default_conf['model_download_by_agent'].lower() == 'true' if 'model_download_by_agent' in default_conf else False,
'downgrade_blacklist': default_conf['downgrade_blacklist'] if 'downgrade_blacklist' in default_conf else '',
'skip_migration_check': default_conf['skip_migration_check'].lower() == 'true' if 'skip_migration_check' in default_conf else False,
'always_lazy_install': default_conf['always_lazy_install'].lower() == 'true' if 'always_lazy_install' in default_conf else False,
'security_level': security_level,
}
except Exception:
manager_util.use_uv = False
return {
'http_channel_enabled': False,
'preview_method': manager_funcs.get_current_preview_method(),
'git_exe': '',
'use_uv': False,
@@ -1615,6 +1621,7 @@ def read_config():
'model_download_by_agent': False,
'downgrade_blacklist': '',
'skip_migration_check': False,
'always_lazy_install': False,
'security_level': 'normal',
}
@@ -1624,6 +1631,8 @@ def get_config():
if cached_config is None:
cached_config = read_config()
if cached_config['http_channel_enabled']:
print("[ComfyUI-Manager] Warning: http channel enabled, make sure server in secure env")
return cached_config
@@ -1672,7 +1681,9 @@ def switch_to_default_branch(repo):
def try_install_script(url, repo_path, install_cmd, instant_execution=False):
if not instant_execution and ((len(install_cmd) > 0 and install_cmd[0].startswith('#')) or (platform.system() == "Windows" and comfy_ui_commit_datetime.date() >= comfy_ui_required_commit_datetime.date())):
if not instant_execution and (
(len(install_cmd) > 0 and install_cmd[0].startswith('#')) or platform.system() == "Windows" or get_config()['always_lazy_install']
):
if not os.path.exists(manager_startup_script_path):
os.makedirs(manager_startup_script_path)
@@ -2081,14 +2092,8 @@ async def get_data_by_mode(mode, filename, channel_url=None):
cache_uri = str(manager_util.simple_hash(uri))+'_'+filename
cache_uri = os.path.join(manager_util.cache_dir, cache_uri)
if mode == "cache":
if manager_util.is_file_created_within_one_day(cache_uri):
if mode == "cache" and manager_util.is_file_created_within_one_day(cache_uri):
json_obj = await manager_util.get_data(cache_uri)
else:
json_obj = await manager_util.get_data(uri)
with manager_util.cache_lock:
with open(cache_uri, "w", encoding='utf-8') as file:
json.dump(json_obj, file, indent=4, sort_keys=True)
else:
json_obj = await manager_util.get_data(uri)
with manager_util.cache_lock:
@@ -2427,7 +2432,7 @@ def check_state_of_git_node_pack_single(item, do_fetch=False, do_update_check=Tr
def get_installed_pip_packages():
# extract pip package infos
cmd = manager_util.make_pip_cmd(['pip', 'freeze'])
cmd = manager_util.make_pip_cmd(['freeze'])
pips = subprocess.check_output(cmd, text=True).split('\n')
res = {}

View File

@@ -1576,8 +1576,9 @@ cm_global.register_api('cm.try-install-custom-node', confirm_try_install)
async def default_cache_update():
channel_url = core.get_config()['channel_url']
async def get_cache(filename):
uri = f"{core.DEFAULT_CHANNEL}/{filename}"
uri = f"{channel_url}/{filename}"
cache_uri = str(manager_util.simple_hash(uri)) + '_' + filename
cache_uri = os.path.join(manager_util.cache_dir, cache_uri)
@@ -1598,7 +1599,7 @@ async def default_cache_update():
# load at least once
await core.unified_manager.reload('remote', dont_wait=False)
await core.unified_manager.get_custom_nodes('default', 'remote')
await core.unified_manager.get_custom_nodes(channel_url, 'remote')
logging.info("[ComfyUI-Manager] All startup tasks have been completed.")

View File

@@ -400,6 +400,7 @@ export class CustomNodesManager {
this.init();
api.addEventListener("cm-queue-status", this.onQueueStatus);
api.addEventListener('reconnected', this.onReconnected);
}
init() {
@@ -762,10 +763,9 @@ export class CustomNodesManager {
".cn-manager-restart": {
click: () => {
if(rebootAPI()) {
this.close();
this.manager_dialog.close();
}
this.close();
this.manager_dialog.close();
rebootAPI();
}
},
@@ -1385,19 +1385,14 @@ export class CustomNodesManager {
this.install_context = {btn: btn, targets: target_items};
for(let k in target_items) {
let item = this.install_context.targets[k];
this.grid.updateCell(item, "action");
}
if(errorMsg) {
this.showError(errorMsg);
show_message("Installation Error:\n"+errorMsg);
// reset
for (const hash of list) {
const item = this.grid.getRowItemBy("hash", hash);
self.grid.updateCell(item, "action");
for(let k in target_items) {
let item = this.install_context.targets[k];
this.grid.updateCell(item, "action");
}
}
else {
@@ -1406,6 +1401,21 @@ export class CustomNodesManager {
}
}
async onReconnected(event) {
let self = CustomNodesManager.instance;
if(self.need_restart) {
self.need_restart = false;
const confirmed = await customConfirm("To apply the changes to the node pack's installation status, you need to refresh the browser. Would you like to refresh?");
if (!confirmed) {
return;
}
window.location.reload(true);
}
}
async onQueueStatus(event) {
let self = CustomNodesManager.instance;
if(event.detail.status == 'in_progress' && event.detail.ui_target == 'nodepack_manager') {
@@ -1879,6 +1889,7 @@ export class CustomNodesManager {
showRestart() {
this.element.querySelector(".cn-manager-restart").style.display = "block";
this.need_restart = true;
}
showStop() {

View File

@@ -429,8 +429,9 @@ except Exception as e:
try:
import git # noqa: F401
import git # noqa: F401
import toml # noqa: F401
import rich # noqa: F401
except ModuleNotFoundError:
my_path = os.path.dirname(__file__)
requirements_path = os.path.join(my_path, "requirements.txt")

View File

@@ -1,7 +1,7 @@
[project]
name = "comfyui-manager"
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
version = "3.16"
version = "3.17.3"
license = { file = "LICENSE.txt" }
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]