Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b0709f5f2 | ||
|
|
d7af7e2917 |
@@ -3,8 +3,6 @@ import sys
|
||||
|
||||
cli_mode_flag = os.path.join(os.path.dirname(__file__), '.enable-cli-only-mode')
|
||||
|
||||
print("[DBG] point14")
|
||||
|
||||
if not os.path.exists(cli_mode_flag):
|
||||
sys.path.append(os.path.join(os.path.dirname(__file__), "glob"))
|
||||
import manager_server # noqa: F401
|
||||
|
||||
12
cm-cli.py
12
cm-cli.py
@@ -1021,7 +1021,17 @@ def save_snapshot(
|
||||
] = True,
|
||||
):
|
||||
cmd_ctx.set_user_directory(user_directory)
|
||||
path = core.save_snapshot_with_postfix('snapshot', output, not full_snapshot)
|
||||
|
||||
if(not output.endswith('.json') and not output.endswith('.yaml')):
|
||||
print("ERROR: output path should be either '.json' or '.yaml' file.")
|
||||
raise typer.Exit(code=1)
|
||||
|
||||
dir_path = os.path.dirname(output)
|
||||
if(dir_path != '' and not os.path.exists(dir_path)):
|
||||
print(f"ERROR: {output} path not exists.")
|
||||
raise typer.Exit(code=1)
|
||||
|
||||
path = asyncio.run(core.save_snapshot_with_postfix('snapshot', output, not full_snapshot))
|
||||
print(f"Current snapshot is saved as `{path}`")
|
||||
|
||||
|
||||
|
||||
@@ -8745,7 +8745,7 @@
|
||||
"https://github.com/olduvai-jp/ComfyUI-HfLoader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Lora Loader From HF"
|
||||
"description": "A simple and easy to use Hugging Face model loader."
|
||||
},
|
||||
{
|
||||
"author": "AiMiDi",
|
||||
|
||||
@@ -11648,10 +11648,11 @@
|
||||
],
|
||||
"https://github.com/austinbrown34/ComfyUI-IO-Helpers": [
|
||||
[
|
||||
"Encoded Prompt from File",
|
||||
"Encoded Prompt to File",
|
||||
"Sampled Latents from File",
|
||||
"Sampled Latents to File"
|
||||
"EncodedPromptFromFile",
|
||||
"EncodedPromptToFile",
|
||||
"IO_LoadImage",
|
||||
"SampledLatentsFromFile",
|
||||
"SampledLatentsToFile"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-IO-Helpers"
|
||||
@@ -17554,12 +17555,11 @@
|
||||
"BiRefNet",
|
||||
"ControlImagePreprocessor",
|
||||
"ControlNetModelLoader",
|
||||
"DiffusersMVModelMakeup",
|
||||
"DiffusersMVPipelineLoader",
|
||||
"DiffusersMVSampler",
|
||||
"DiffusersModelMakeup",
|
||||
"DiffusersPipelineLoader",
|
||||
"DiffusersSampler",
|
||||
"DiffusersSchedulerLoader",
|
||||
"DiffusersVaeLoader",
|
||||
"DiffusersMVSchedulerLoader",
|
||||
"DiffusersMVVaeLoader",
|
||||
"ImagePreprocessor",
|
||||
"LdmPipelineLoader",
|
||||
"LdmVaeLoader",
|
||||
@@ -21757,6 +21757,7 @@
|
||||
],
|
||||
"https://github.com/lum3on/comfyui_LLM_Polymath": [
|
||||
[
|
||||
"SaveAbsolute",
|
||||
"polymath_chat",
|
||||
"polymath_scraper"
|
||||
],
|
||||
@@ -23286,6 +23287,7 @@
|
||||
],
|
||||
"https://github.com/olduvai-jp/ComfyUI-HfLoader": [
|
||||
[
|
||||
"ControlNet Loader From HF",
|
||||
"Lora Loader From HF"
|
||||
],
|
||||
{
|
||||
|
||||
@@ -42,7 +42,7 @@ import manager_downloader
|
||||
from node_package import InstalledNodePackage
|
||||
|
||||
|
||||
version_code = [3, 21]
|
||||
version_code = [3, 21, 1]
|
||||
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
||||
|
||||
|
||||
@@ -1619,7 +1619,6 @@ def read_config():
|
||||
}
|
||||
|
||||
except Exception:
|
||||
traceback.print_exc()
|
||||
manager_util.use_uv = False
|
||||
return {
|
||||
'http_channel_enabled': False,
|
||||
|
||||
@@ -599,6 +599,7 @@ async def task_worker():
|
||||
nodepack_result[ui_id] = msg
|
||||
ui_target = "main"
|
||||
elif kind == 'update-comfyui':
|
||||
nodepack_result['comfyui'] = msg
|
||||
ui_target = "main"
|
||||
else:
|
||||
nodepack_result[ui_id] = msg
|
||||
|
||||
@@ -269,27 +269,18 @@ class PIPFixer:
|
||||
self.prev_pip_versions = { **prev_pip_versions }
|
||||
|
||||
def torch_rollback(self):
|
||||
print("[DBG] point(torch_rollback) 1")
|
||||
spec = self.prev_pip_versions['torch'].split('+')
|
||||
print("[DBG] point(torch_rollback) 2")
|
||||
if len(spec) > 0:
|
||||
platform = spec[1]
|
||||
else:
|
||||
print("[DBG] point(torch_rollback) 3")
|
||||
cmd = make_pip_cmd(['install', '--force', 'torch', 'torchvision', 'torchaudio'])
|
||||
subprocess.check_output(cmd, universal_newlines=True)
|
||||
print("[DBG] point(torch_rollback) 4")
|
||||
logging.error(cmd)
|
||||
print("[DBG] point(torch_rollback) 5")
|
||||
return
|
||||
|
||||
print("[DBG] point(torch_rollback) 6")
|
||||
torch_ver = StrictVersion(spec[0])
|
||||
print("[DBG] point(torch_rollback) 7")
|
||||
torch_ver = f"{torch_ver.major}.{torch_ver.minor}.{torch_ver.patch}"
|
||||
print("[DBG] point(torch_rollback) 8")
|
||||
torch_torchvision_torchaudio_ver = torch_torchvision_torchaudio_version_map.get(torch_ver)
|
||||
print("[DBG] point(torch_rollback) 9")
|
||||
|
||||
if torch_torchvision_torchaudio_ver is None:
|
||||
cmd = make_pip_cmd(['install', '--pre', 'torch', 'torchvision', 'torchaudio',
|
||||
@@ -301,64 +292,46 @@ class PIPFixer:
|
||||
'--index-url', f"https://download.pytorch.org/whl/{platform}"])
|
||||
logging.info(f"[ComfyUI-Manager] restore PyTorch to {torch_ver}+{platform}")
|
||||
|
||||
print("[DBG] point(torch_rollback) 10")
|
||||
subprocess.check_output(cmd, universal_newlines=True)
|
||||
print("[DBG] point(torch_rollback) 11")
|
||||
|
||||
def fix_broken(self):
|
||||
print("[DBG] point9-1")
|
||||
new_pip_versions = get_installed_packages(True)
|
||||
|
||||
print("[DBG] point9-2")
|
||||
# remove `comfy` python package
|
||||
try:
|
||||
print("[DBG] point9-3")
|
||||
if 'comfy' in new_pip_versions:
|
||||
print("[DBG] point9-3-1")
|
||||
cmd = make_pip_cmd(['uninstall', 'comfy'])
|
||||
subprocess.check_output(cmd, universal_newlines=True)
|
||||
|
||||
logging.warning("[ComfyUI-Manager] 'comfy' python package is uninstalled.\nWARN: The 'comfy' package is completely unrelated to ComfyUI and should never be installed as it causes conflicts with ComfyUI.")
|
||||
print("[DBG] point9-4")
|
||||
except Exception as e:
|
||||
print("[DBG] point9-5")
|
||||
logging.error("[ComfyUI-Manager] Failed to uninstall `comfy` python package")
|
||||
logging.error(e)
|
||||
|
||||
# fix torch - reinstall torch packages if version is changed
|
||||
print("[DBG] point9-6")
|
||||
try:
|
||||
print("[DBG] point9-7")
|
||||
if 'torch' not in self.prev_pip_versions or 'torchvision' not in self.prev_pip_versions or 'torchaudio' not in self.prev_pip_versions:
|
||||
print("[DBG] point9-8")
|
||||
logging.error("[ComfyUI-Manager] PyTorch is not installed")
|
||||
elif self.prev_pip_versions['torch'] != new_pip_versions['torch'] \
|
||||
or self.prev_pip_versions['torchvision'] != new_pip_versions['torchvision'] \
|
||||
or self.prev_pip_versions['torchaudio'] != new_pip_versions['torchaudio']:
|
||||
print("[DBG] point9-9")
|
||||
self.torch_rollback()
|
||||
print("[DBG] point9-10")
|
||||
except Exception as e:
|
||||
print("[DBG] point9-11")
|
||||
logging.error("[ComfyUI-Manager] Failed to restore PyTorch")
|
||||
logging.error(e)
|
||||
|
||||
# fix opencv
|
||||
try:
|
||||
print("[DBG] point9-12")
|
||||
ocp = new_pip_versions.get('opencv-contrib-python')
|
||||
ocph = new_pip_versions.get('opencv-contrib-python-headless')
|
||||
op = new_pip_versions.get('opencv-python')
|
||||
oph = new_pip_versions.get('opencv-python-headless')
|
||||
|
||||
print("[DBG] point9-13")
|
||||
versions = [ocp, ocph, op, oph]
|
||||
versions = [StrictVersion(x) for x in versions if x is not None]
|
||||
versions.sort(reverse=True)
|
||||
|
||||
print("[DBG] point9-14")
|
||||
if len(versions) > 0:
|
||||
print("[DBG] point9-15")
|
||||
# upgrade to maximum version
|
||||
targets = []
|
||||
cur = versions[0]
|
||||
@@ -371,40 +344,27 @@ class PIPFixer:
|
||||
if oph is not None and StrictVersion(oph) != cur:
|
||||
targets.append('opencv-python-headless')
|
||||
|
||||
print("[DBG] point9-16")
|
||||
if len(targets) > 0:
|
||||
print("[DBG] point9-17")
|
||||
for x in targets:
|
||||
cmd = make_pip_cmd(['install', f"{x}=={versions[0].version_string}"])
|
||||
subprocess.check_output(cmd, universal_newlines=True)
|
||||
|
||||
logging.info(f"[ComfyUI-Manager] 'opencv' dependencies were fixed: {targets}")
|
||||
print("[DBG] point9-18")
|
||||
except Exception as e:
|
||||
print("[DBG] point9-19")
|
||||
logging.error("[ComfyUI-Manager] Failed to restore opencv")
|
||||
logging.error(e)
|
||||
print("[DBG] point9-20")
|
||||
|
||||
# fix numpy
|
||||
try:
|
||||
print("[DBG] point9-21")
|
||||
np = new_pip_versions.get('numpy')
|
||||
print("[DBG] point9-22")
|
||||
if np is not None:
|
||||
print("[DBG] point9-23")
|
||||
if StrictVersion(np) >= StrictVersion('2'):
|
||||
print("[DBG] point9-24")
|
||||
cmd = make_pip_cmd(['install', "numpy<2"])
|
||||
subprocess.check_output(cmd , universal_newlines=True)
|
||||
print("[DBG] point9-25")
|
||||
except Exception as e:
|
||||
print("[DBG] point9-26")
|
||||
logging.error("[ComfyUI-Manager] Failed to restore numpy")
|
||||
logging.error(e)
|
||||
|
||||
print("[DBG] point9-28")
|
||||
|
||||
|
||||
def sanitize(data):
|
||||
return data.replace("<", "<").replace(">", ">")
|
||||
|
||||
@@ -698,16 +698,24 @@ async function onQueueStatus(event) {
|
||||
return;
|
||||
}
|
||||
|
||||
is_updating_all = false;
|
||||
|
||||
let success_list = [];
|
||||
let failed_list = [];
|
||||
let comfyui_state = null;
|
||||
|
||||
for(let k in event.detail.nodepack_result){
|
||||
let v = event.detail.nodepack_result[k];
|
||||
|
||||
if(v == 'success')
|
||||
success_list.push(k);
|
||||
if(v == 'success') {
|
||||
if(k == 'comfyui')
|
||||
comfyui_state = 'success';
|
||||
else
|
||||
success_list.push(k);
|
||||
}
|
||||
else if(v == 'skip') {
|
||||
// do nothing
|
||||
if(k == 'comfyui')
|
||||
comfyui_state = 'skip';
|
||||
}
|
||||
else
|
||||
failed_list.push(k);
|
||||
@@ -715,18 +723,31 @@ async function onQueueStatus(event) {
|
||||
|
||||
let msg = "";
|
||||
|
||||
if(success_list.length == 0) {
|
||||
if(success_list.length == 0 && comfyui_state != 'success') {
|
||||
if(failed_list.length == 0) {
|
||||
msg += "All custom nodes are already up to date.";
|
||||
}
|
||||
}
|
||||
else {
|
||||
msg = "To apply the updates, you need to <button class='cm-small-button' id='cm-reboot-button5'>RESTART</button> ComfyUI.<hr>";
|
||||
msg += "The following custom nodes have been updated:<ul>";
|
||||
for(let x in success_list) {
|
||||
msg += '<li>'+success_list[x]+'</li>';
|
||||
|
||||
if(comfyui_state == 'success') {
|
||||
msg += "ComfyUI is updated.<BR><BR>";
|
||||
}
|
||||
else if(comfyui_state == 'skip') {
|
||||
msg += "ComfyUI is already up-to-date.<BR><BR>"
|
||||
}
|
||||
|
||||
if(success_list.length > 0) {
|
||||
msg += "The following custom nodes have been updated:<ul>";
|
||||
for(let x in success_list) {
|
||||
if(success_list[x] == 'comfyui')
|
||||
continue;
|
||||
|
||||
msg += '<li>'+success_list[x]+'</li>';
|
||||
}
|
||||
msg += "</ul>";
|
||||
}
|
||||
msg += "</ul>";
|
||||
|
||||
setNeedRestart(true);
|
||||
}
|
||||
|
||||
@@ -4028,6 +4028,7 @@
|
||||
],
|
||||
"https://github.com/lum3on/comfyui_LLM_Polymath": [
|
||||
[
|
||||
"SaveAbsolute",
|
||||
"polymath_chat",
|
||||
"polymath_scraper"
|
||||
],
|
||||
|
||||
@@ -693,69 +693,6 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a custom node for ComfyUI.\nIt reduces colors based on a specified number and allows for adjustments to hue, saturation, and brightness.\nFeatures:Each parameter can be set to random, You can toggle masking (not changing colors) using color numbers, Mask inversion can also be toggled on or off."
|
||||
},
|
||||
{
|
||||
"author": "852wa",
|
||||
"title": "ComfyUI-AdvancedAlphaProcessor",
|
||||
"reference": "https://github.com/852wa/ComfyUI-AAP",
|
||||
"files": [
|
||||
"https://github.com/852wa/ComfyUI-AAP"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This is a custom node for ComfyUI.\nFeatures:Removes white areas in the input image by making them transparent based on brightness, Outputs in black and transparent, Outputs in gray and transparent.\nThis is a simple node with the above functionalities implemented. It also supports sequential processing."
|
||||
},
|
||||
{
|
||||
"author": "jinanlongen",
|
||||
"title": "ComfyUI Prompt Expander Node",
|
||||
"reference": "https://github.com/jinanlongen/ComfyUI-Prompt-Expander",
|
||||
"files": [
|
||||
"https://github.com/jinanlongen/ComfyUI-Prompt-Expander"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for ComfyUI that expands text prompts using the SuperPrompt-v1 T5 model. This node helps generate more detailed and descriptive prompts from simple input text, which can be particularly useful for image generation workflows."
|
||||
},
|
||||
{
|
||||
"author": "Style-Mosaic",
|
||||
"title": "ComfyUI DINO-X Detector Node",
|
||||
"reference": "https://github.com/Style-Mosaic/dino-x-comfyui-node",
|
||||
"files": [
|
||||
"https://github.com/Style-Mosaic/dino-x-comfyui-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI node that integrates DINO-X API for object detection and segmentation. This node allows you to detect and segment objects in images using text prompts."
|
||||
},
|
||||
{
|
||||
"author": "gmorks",
|
||||
"title": "ComfyUI-SendToDiscord",
|
||||
"reference": "https://github.com/gmorks/ComfyUI-SendToDiscord",
|
||||
"files": [
|
||||
"https://github.com/gmorks/ComfyUI-SendToDiscord"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI-SendToDiscord is a custom node for ComfyUI that simplifies sending preview images to Discord via webhooks. It supports both single-image uploads and batch mode, making it an efficient tool for sharing your generated images directly with your Discord server."
|
||||
},
|
||||
|
||||
{
|
||||
"author": "CY-CHENYUE",
|
||||
"title": "ComfyUI-Janus-Pro",
|
||||
"id": "ComfyUI-Janus-Pro",
|
||||
"reference": "https://github.com/CY-CHENYUE/ComfyUI-Janus-Pro",
|
||||
"files": [
|
||||
"https://github.com/CY-CHENYUE/ComfyUI-Janus-Pro"
|
||||
],
|
||||
"description": "ComfyUI nodes for Janus-Pro, a unified multimodal understanding and generation framework.",
|
||||
"install_type": "git-clone"
|
||||
},
|
||||
{
|
||||
"author": "burnsbert",
|
||||
"title": "EBU LMStudio LLM Integration",
|
||||
"id": "ebu-lmstudio",
|
||||
"reference": "https://github.com/burnsbert/ComfyUI-EBU-LMStudio",
|
||||
"files": [
|
||||
"https://github.com/burnsbert/ComfyUI-EBU-LMStudio"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom nodes for integrating LM Studio's LLM functionality into ComfyUI. Includes EBU-LMStudio-Load, EBU-LMStudio-Unload, and EBU-LMStudio-Request."
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -11648,10 +11648,11 @@
|
||||
],
|
||||
"https://github.com/austinbrown34/ComfyUI-IO-Helpers": [
|
||||
[
|
||||
"Encoded Prompt from File",
|
||||
"Encoded Prompt to File",
|
||||
"Sampled Latents from File",
|
||||
"Sampled Latents to File"
|
||||
"EncodedPromptFromFile",
|
||||
"EncodedPromptToFile",
|
||||
"IO_LoadImage",
|
||||
"SampledLatentsFromFile",
|
||||
"SampledLatentsToFile"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-IO-Helpers"
|
||||
@@ -17554,12 +17555,11 @@
|
||||
"BiRefNet",
|
||||
"ControlImagePreprocessor",
|
||||
"ControlNetModelLoader",
|
||||
"DiffusersMVModelMakeup",
|
||||
"DiffusersMVPipelineLoader",
|
||||
"DiffusersMVSampler",
|
||||
"DiffusersModelMakeup",
|
||||
"DiffusersPipelineLoader",
|
||||
"DiffusersSampler",
|
||||
"DiffusersSchedulerLoader",
|
||||
"DiffusersVaeLoader",
|
||||
"DiffusersMVSchedulerLoader",
|
||||
"DiffusersMVVaeLoader",
|
||||
"ImagePreprocessor",
|
||||
"LdmPipelineLoader",
|
||||
"LdmVaeLoader",
|
||||
@@ -21757,6 +21757,7 @@
|
||||
],
|
||||
"https://github.com/lum3on/comfyui_LLM_Polymath": [
|
||||
[
|
||||
"SaveAbsolute",
|
||||
"polymath_chat",
|
||||
"polymath_scraper"
|
||||
],
|
||||
@@ -23286,6 +23287,7 @@
|
||||
],
|
||||
"https://github.com/olduvai-jp/ComfyUI-HfLoader": [
|
||||
[
|
||||
"ControlNet Loader From HF",
|
||||
"Lora Loader From HF"
|
||||
],
|
||||
{
|
||||
|
||||
@@ -475,7 +475,6 @@ def read_downgrade_blacklist():
|
||||
|
||||
read_downgrade_blacklist()
|
||||
|
||||
print("[DBG] point1")
|
||||
|
||||
def check_bypass_ssl():
|
||||
try:
|
||||
@@ -488,14 +487,12 @@ def check_bypass_ssl():
|
||||
|
||||
check_bypass_ssl()
|
||||
|
||||
print("[DBG] point2")
|
||||
|
||||
# Perform install
|
||||
processed_install = set()
|
||||
script_list_path = os.path.join(folder_paths.user_directory, "default", "ComfyUI-Manager", "startup-scripts", "install-scripts.txt")
|
||||
pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages())
|
||||
|
||||
print("[DBG] point3")
|
||||
|
||||
def is_installed(name):
|
||||
name = name.strip()
|
||||
@@ -547,7 +544,6 @@ def is_installed(name):
|
||||
|
||||
return True # prevent downgrade
|
||||
|
||||
print("[DBG] point4")
|
||||
|
||||
if os.path.exists(restore_snapshot_path):
|
||||
try:
|
||||
@@ -597,8 +593,6 @@ if os.path.exists(restore_snapshot_path):
|
||||
def execute_lazy_install_script(repo_path, executable):
|
||||
global processed_install
|
||||
|
||||
print("[DBG] point5")
|
||||
|
||||
install_script_path = os.path.join(repo_path, "install.py")
|
||||
requirements_path = os.path.join(repo_path, "requirements.txt")
|
||||
|
||||
@@ -631,8 +625,6 @@ def execute_lazy_cnr_switch(target, zip_url, from_path, to_path, no_deps, custom
|
||||
import uuid
|
||||
import shutil
|
||||
|
||||
print("[DBG] point6")
|
||||
|
||||
# 1. download
|
||||
archive_name = f"CNR_temp_{str(uuid.uuid4())}.zip" # should be unpredictable name - security precaution
|
||||
download_path = os.path.join(custom_nodes_path, archive_name)
|
||||
@@ -682,17 +674,12 @@ def execute_lazy_cnr_switch(target, zip_url, from_path, to_path, no_deps, custom
|
||||
|
||||
def execute_migration(moves):
|
||||
import shutil
|
||||
|
||||
print("[DBG] point7")
|
||||
|
||||
for x in moves:
|
||||
if os.path.exists(x[0]) and not os.path.exists(x[1]):
|
||||
shutil.move(x[0], x[1])
|
||||
print(f"[ComfyUI-Manager] MIGRATION: '{x[0]}' -> '{x[1]}'")
|
||||
|
||||
|
||||
print("[DBG] point8")
|
||||
|
||||
# Check if script_list_path exists
|
||||
if os.path.exists(script_list_path):
|
||||
print("\n#######################################################################")
|
||||
@@ -751,20 +738,14 @@ if os.path.exists(script_list_path):
|
||||
print("\n[ComfyUI-Manager] Startup script completed.")
|
||||
print("#######################################################################\n")
|
||||
|
||||
print("[DBG] point9")
|
||||
|
||||
pip_fixer.fix_broken()
|
||||
|
||||
print("[DBG] point10")
|
||||
|
||||
del processed_install
|
||||
del pip_fixer
|
||||
manager_util.clear_pip_cache()
|
||||
|
||||
print("[DBG] point11")
|
||||
|
||||
def check_windows_event_loop_policy():
|
||||
print("[DBG] point12")
|
||||
try:
|
||||
import configparser
|
||||
config = configparser.ConfigParser()
|
||||
@@ -782,10 +763,6 @@ def check_windows_event_loop_policy():
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
print("[DBG] point13")
|
||||
|
||||
if platform.system() == 'Windows':
|
||||
check_windows_event_loop_policy()
|
||||
|
||||
|
||||
print("[DBG] point14")
|
||||
@@ -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.21"
|
||||
version = "3.21.1"
|
||||
license = { file = "LICENSE.txt" }
|
||||
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]
|
||||
|
||||
|
||||
Reference in New Issue
Block a user