Compare commits
13 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
faf1209eba | ||
|
|
4dee009d51 | ||
|
|
9ad54bb86c | ||
|
|
2710d72e07 | ||
|
|
c3a1401960 | ||
|
|
585cc0d991 | ||
|
|
15ecb5b1d4 | ||
|
|
00a2ac7f2f | ||
|
|
4d34b5a3ee | ||
|
|
32dcedd703 | ||
|
|
42d48e4bfb | ||
|
|
6b12e9902c | ||
|
|
2801b929e7 |
14
cm-cli.py
14
cm-cli.py
@@ -12,6 +12,7 @@ from rich import print
|
||||
from typing_extensions import List, Annotated
|
||||
import re
|
||||
import git
|
||||
import importlib
|
||||
|
||||
|
||||
sys.path.append(os.path.dirname(__file__))
|
||||
@@ -88,12 +89,20 @@ read_downgrade_blacklist() # This is a preparation step for manager_core
|
||||
|
||||
|
||||
class Ctx:
|
||||
folder_paths = None
|
||||
|
||||
def __init__(self):
|
||||
self.channel = 'default'
|
||||
self.no_deps = False
|
||||
self.mode = 'cache'
|
||||
self.user_directory = None
|
||||
self.custom_nodes_paths = [os.path.join(core.comfy_path, 'custom_nodes')]
|
||||
|
||||
if Ctx.folder_paths is None:
|
||||
try:
|
||||
Ctx.folder_paths = importlib.import_module('folder_paths')
|
||||
except ImportError:
|
||||
print("Warning: Unable to import folder_paths module")
|
||||
|
||||
def set_channel_mode(self, channel, mode):
|
||||
if mode is not None:
|
||||
@@ -145,7 +154,10 @@ class Ctx:
|
||||
|
||||
@staticmethod
|
||||
def get_custom_nodes_paths():
|
||||
return folder_paths.get_folder_paths('custom_nodes')
|
||||
if Ctx.folder_paths is None:
|
||||
print("Error: folder_paths module is not available")
|
||||
return []
|
||||
return Ctx.folder_paths.get_folder_paths('custom_nodes')
|
||||
|
||||
|
||||
cmd_ctx = Ctx()
|
||||
|
||||
@@ -490,7 +490,7 @@
|
||||
{
|
||||
"author": "YinBailiang",
|
||||
"title": "MergeBlockWeighted_fo_ComfyUI",
|
||||
"id": "mbw",
|
||||
"id": "mergeblockweighted_fo_comfyui",
|
||||
"reference": "https://github.com/YinBailiang/MergeBlockWeighted_fo_ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/YinBailiang/MergeBlockWeighted_fo_ComfyUI"
|
||||
@@ -4004,6 +4004,17 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Integrates GLSL shader support."
|
||||
},
|
||||
{
|
||||
"author": "amorano",
|
||||
"title": "Jovi_Spout",
|
||||
"id": "jovi_spout",
|
||||
"reference": "https://github.com/Amorano/Jovi_Spout",
|
||||
"files": [
|
||||
"https://github.com/Amorano/Jovi_Spout"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Nodes for using Spout streams."
|
||||
},
|
||||
{
|
||||
"author": "Umikaze-job",
|
||||
"title": "select_folder_path_easy",
|
||||
@@ -18040,7 +18051,17 @@
|
||||
"https://github.com/LucipherDev/ComfyUI-Golden-Noise"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Custom Node for [a/'Golden Noise for Diffusion Models: A Learning Framework'](https://arxiv.org/abs/2411.09502) and most of the code is adapted from [a/here](https://github.com/xie-lab-ml/Golden-Noise-for-Diffusion-Models). This node refines the initial latent noise in the diffusion process, enhancing both image quality and semantic coherence."
|
||||
"description": "ComfyUI Custom Node for 'Golden Noise for Diffusion Models: A Learning Framework'. This node refines the initial latent noise in the diffusion process, enhancing both image quality and semantic coherence."
|
||||
},
|
||||
{
|
||||
"author": "LucipherDev",
|
||||
"title": "ComfyUI-AniDoc",
|
||||
"reference": "https://github.com/LucipherDev/ComfyUI-AniDoc",
|
||||
"files": [
|
||||
"https://github.com/LucipherDev/ComfyUI-AniDoc"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Custom Nodes for 'AniDoc: Animation Creation Made Easier'. This approach automates line art video colorization using a novel model that aligns color information from references, ensures temporal consistency, and reduces manual effort in animation production."
|
||||
},
|
||||
{
|
||||
"author": "envy-ai",
|
||||
@@ -18757,6 +18778,59 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Workflow to run audioldm-l-full pipeline\n[a/https://huggingface.co/cvssp/audioldm-l-full](https://huggingface.co/cvssp/audioldm-l-full)"
|
||||
},
|
||||
{
|
||||
"author": "bear2b",
|
||||
"title": "ColorMatrixGPU Node for ComfyUI",
|
||||
"reference": "https://github.com/bear2b/comfyui-argo-nodes",
|
||||
"files": [
|
||||
"https://github.com/bear2b/comfyui-argo-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This node applies a custom 4x4 color matrix to an image using GPU acceleration via PyTorch."
|
||||
},
|
||||
{
|
||||
"author": "phuvinh010701",
|
||||
"title": "ComfyUI-Nudenet",
|
||||
"reference": "https://github.com/phuvinh010701/ComfyUI-Nudenet",
|
||||
"files": [
|
||||
"https://github.com/phuvinh010701/ComfyUI-Nudenet"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes for NSFW content filtering"
|
||||
},
|
||||
{
|
||||
"author": "Vaibhavs10",
|
||||
"title": "ComfyUI-DDUF",
|
||||
"reference": "https://github.com/Vaibhavs10/ComfyUI-DDUF",
|
||||
"files": [
|
||||
"https://github.com/Vaibhavs10/ComfyUI-DDUF"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Run DDUF in ComfyUI - powered by Diffusers."
|
||||
},
|
||||
{
|
||||
"author": "AconexOfficial",
|
||||
"title": "ComfyUI GOAT Nodes",
|
||||
"reference": "https://github.com/AconexOfficial/ComfyUI_GOAT_Nodes",
|
||||
"files": [
|
||||
"https://github.com/AconexOfficial/ComfyUI_GOAT_Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes to level up your workflows performance and streamline specific functions."
|
||||
},
|
||||
{
|
||||
"author": "Jaminanim",
|
||||
"title": "ComfyUI-Random-Int-Divisor-Node",
|
||||
"reference": "https://github.com/Jaminanim/ComfyUI-Random-Int-Divisor-Node",
|
||||
"files": [
|
||||
"https://github.com/Jaminanim/ComfyUI-Random-Int-Divisor-Node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A set of custom ComfyUI nodes for generating random integers within a range, adjusted to the nearest multiple of a user-defined divisor. Needlessly includes both an efficient and simple list implementation. Updates with each generation."
|
||||
},
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
],
|
||||
"https://github.com/1038lab/ComfyUI-RMBG": [
|
||||
[
|
||||
"ClothesSegment",
|
||||
"RMBG",
|
||||
"Segment"
|
||||
],
|
||||
@@ -1225,6 +1226,27 @@
|
||||
"title_aux": "ComfyUI Nodes for External Tooling"
|
||||
}
|
||||
],
|
||||
"https://github.com/AconexOfficial/ComfyUI_GOAT_Nodes": [
|
||||
[
|
||||
"Advanced_Upscale_Image_Using_Model",
|
||||
"Capped_Float_Positive",
|
||||
"Capped_Int_Positive",
|
||||
"Embedding_Selector",
|
||||
"Fast_Color_Match",
|
||||
"Fast_Film_Grain",
|
||||
"Get_Side_Length_Of_Image",
|
||||
"Image_Dimensions",
|
||||
"Image_Tiler",
|
||||
"Image_Untiler",
|
||||
"Int_Divide_Rounded",
|
||||
"Sampler_Settings",
|
||||
"Smart_Seed",
|
||||
"Triple_Prompt"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI GOAT Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/Aerse/ComfyUI-Seed-Nodes": [
|
||||
[
|
||||
"Seed-Nodes: ImagePixelator",
|
||||
@@ -1348,6 +1370,15 @@
|
||||
"title_aux": "Jovi_GLSL"
|
||||
}
|
||||
],
|
||||
"https://github.com/Amorano/Jovi_Spout": [
|
||||
[
|
||||
"SPOUT READER (JOV_SP) \ud83d\udcfa",
|
||||
"SPOUT WRITER (JOV_SP) \ud83c\udfa5"
|
||||
],
|
||||
{
|
||||
"title_aux": "Jovi_Spout"
|
||||
}
|
||||
],
|
||||
"https://github.com/Amorano/Jovimetrix": [
|
||||
[
|
||||
"ADJUST (JOV) \ud83d\udd78\ufe0f",
|
||||
@@ -2486,6 +2517,7 @@
|
||||
"ImageMinusMask",
|
||||
"Light or Dark",
|
||||
"Load Random Images",
|
||||
"Mask Preprocess Morphology",
|
||||
"PhotoShop Transfer",
|
||||
"Yuan"
|
||||
],
|
||||
@@ -4335,6 +4367,15 @@
|
||||
"title_aux": "ComfyUI-AI-Assistant"
|
||||
}
|
||||
],
|
||||
"https://github.com/Jaminanim/ComfyUI-Random-Int-Divisor-Node": [
|
||||
[
|
||||
"RandomIntegerNodeEfficient",
|
||||
"RandomIntegerNodeList"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Random-Int-Divisor-Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/Jannchie/ComfyUI-J": [
|
||||
[
|
||||
"DiffusersCompelPromptEmbedding",
|
||||
@@ -5203,6 +5244,17 @@
|
||||
"title_aux": "ComfyUI-RawSaver"
|
||||
}
|
||||
],
|
||||
"https://github.com/LucipherDev/ComfyUI-AniDoc": [
|
||||
[
|
||||
"AniDocLoader",
|
||||
"AniDocSampler",
|
||||
"GetAniDocControlnetImages",
|
||||
"LoadCoTracker"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-AniDoc"
|
||||
}
|
||||
],
|
||||
"https://github.com/LucipherDev/ComfyUI-Golden-Noise": [
|
||||
[
|
||||
"GoldenNoise"
|
||||
@@ -5779,6 +5831,7 @@
|
||||
"ImageSizeAdjusterV3",
|
||||
"LoadVideoDirectory",
|
||||
"ProjectFilePathNode",
|
||||
"SequentialNumberGenerator",
|
||||
"StringWeights",
|
||||
"ZenkaiPrompt",
|
||||
"ZenkaiPromptV2",
|
||||
@@ -7297,7 +7350,8 @@
|
||||
],
|
||||
"https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper": [
|
||||
[
|
||||
"D_LatentSyncNode"
|
||||
"D_LatentSyncNode",
|
||||
"D_VideoLengthAdjuster"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-LatentSyncWrapper"
|
||||
@@ -7669,6 +7723,7 @@
|
||||
"SDVN Image Repeat",
|
||||
"SDVN Image Size",
|
||||
"SDVN Inpaint",
|
||||
"SDVN Join Parameter",
|
||||
"SDVN KSampler",
|
||||
"SDVN Load Checkpoint",
|
||||
"SDVN Load Image",
|
||||
@@ -7676,6 +7731,7 @@
|
||||
"SDVN Load Image From List",
|
||||
"SDVN Load Image Url",
|
||||
"SDVN Load Lora",
|
||||
"SDVN Load Model",
|
||||
"SDVN Load Text",
|
||||
"SDVN Logic",
|
||||
"SDVN Lora Download",
|
||||
@@ -8693,6 +8749,18 @@
|
||||
"title_aux": "Tripo for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/Vaibhavs10/ComfyUI-DDUF": [
|
||||
[
|
||||
"DDUFLoader",
|
||||
"DiffusersModelMakeup",
|
||||
"DiffusersPipelineLoader",
|
||||
"DiffusersSchedulerLoader",
|
||||
"DiffusersSimpleSampler"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-DDUF"
|
||||
}
|
||||
],
|
||||
"https://github.com/VangengLab/ComfyUI-LivePortrait_v2": [
|
||||
[
|
||||
"LivePortraitProcess_animal"
|
||||
@@ -9131,7 +9199,9 @@
|
||||
"InstaCText",
|
||||
"InstaCTextML",
|
||||
"InstaPromptMultipleStyleSelector",
|
||||
"InstaPromptStyleSelector"
|
||||
"InstaPromptStyleSelector",
|
||||
"LoadVideo",
|
||||
"PreViewVideo"
|
||||
],
|
||||
{
|
||||
"title_aux": "InstaSD nodes for ComfyUI"
|
||||
@@ -10798,6 +10868,14 @@
|
||||
"title_aux": "Mikey Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/bear2b/comfyui-argo-nodes": [
|
||||
[
|
||||
"ColorMatrixGPU"
|
||||
],
|
||||
{
|
||||
"title_aux": "ColorMatrixGPU Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/bedovyy/ComfyUI_NAIDGenerator": [
|
||||
[
|
||||
"ColorizeNAID",
|
||||
@@ -14263,7 +14341,8 @@
|
||||
"Genera.BatchTester",
|
||||
"Genera.GCPStorageNode",
|
||||
"Genera.MaskDrawer",
|
||||
"Genera.Utils"
|
||||
"Genera.Utils",
|
||||
"PainterNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-GeneraNodes"
|
||||
@@ -15369,6 +15448,7 @@
|
||||
"Griptape Util: Create Agent Modelfile",
|
||||
"Griptape Util: Create Model from Modelfile",
|
||||
"Griptape Util: Remove Ollama Model",
|
||||
"Griptape Util: Switch Node",
|
||||
"Griptape Vector Store Driver: Amazon OpenSearch",
|
||||
"Griptape Vector Store Driver: Azure MongoDB",
|
||||
"Griptape Vector Store Driver: Griptape Cloud",
|
||||
@@ -16538,7 +16618,9 @@
|
||||
"Ksampler Parameters JK",
|
||||
"Latent Crop Offset JK",
|
||||
"Latent Upscale Parameters Extract JK",
|
||||
"Load Image With Alpha JK",
|
||||
"Load Image With Metadata JK",
|
||||
"Make Image Grid JK",
|
||||
"Metadata Pipe Extract JK",
|
||||
"Metadata Pipe JK",
|
||||
"NodesState JK",
|
||||
@@ -16609,6 +16691,7 @@
|
||||
"Save Image with Metadata Flow JK",
|
||||
"Save Image with Metadata JK",
|
||||
"Scale To Resolution JK",
|
||||
"Split Image Grid JK",
|
||||
"Stability Conservative Upscale",
|
||||
"Stability Control Sketch",
|
||||
"Stability Control Structure",
|
||||
@@ -21345,13 +21428,15 @@
|
||||
"ConditioningZeroOutCombine",
|
||||
"ConvertTimestepToSigma",
|
||||
"DynSamplerSelect",
|
||||
"DynamicThresholdingSimplePost",
|
||||
"EmptyLatentImageAR",
|
||||
"FreeU2PPM",
|
||||
"Guidance Limiter",
|
||||
"LatentOperationTonemapLuminance",
|
||||
"LatentToMaskBB",
|
||||
"LatentToWidthHeight",
|
||||
"PPMSamplerSelect"
|
||||
"PPMSamplerSelect",
|
||||
"RescaleCFGPost"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ppm"
|
||||
@@ -21457,6 +21542,16 @@
|
||||
"title_aux": "\u2728 Clarity AI - Creative Image Upscaler and Enhancer for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/phuvinh010701/ComfyUI-Nudenet": [
|
||||
[
|
||||
"ApplyNudenet",
|
||||
"FilterdLabel",
|
||||
"NudenetModelLoader"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Nudenet"
|
||||
}
|
||||
],
|
||||
"https://github.com/phyblas/paint-by-example_comfyui": [
|
||||
[
|
||||
"PaintbyExampleAdvanced",
|
||||
|
||||
@@ -127,8 +127,17 @@ def gitcheck(path, do_fetch=False):
|
||||
|
||||
|
||||
def switch_to_default_branch(repo):
|
||||
default_branch = repo.git.symbolic_ref('refs/remotes/origin/HEAD').replace('refs/remotes/origin/', '')
|
||||
repo.git.checkout(default_branch)
|
||||
try:
|
||||
default_branch = repo.git.symbolic_ref('refs/remotes/origin/HEAD').replace('refs/remotes/origin/', '')
|
||||
repo.git.checkout(default_branch)
|
||||
except:
|
||||
try:
|
||||
repo.git.checkout(repo.heads.master)
|
||||
except:
|
||||
try:
|
||||
repo.git.checkout(repo.heads.main)
|
||||
except:
|
||||
print("[ComfyUI Manager] Failed to switch to the default branch (master or main)")
|
||||
|
||||
|
||||
def gitpull(path):
|
||||
|
||||
3541
github-stats.json
3541
github-stats.json
File diff suppressed because it is too large
Load Diff
@@ -92,7 +92,7 @@ def install_node(node_id, version=None):
|
||||
|
||||
|
||||
def all_versions_of_node(node_id):
|
||||
url = f"https://api.comfy.org/nodes/{node_id}/versions"
|
||||
url = f"https://api.comfy.org/nodes/{node_id}/versions?statuses=NodeVersionStatusActive&statuses=NodeVersionStatusPending"
|
||||
|
||||
response = requests.get(url)
|
||||
if response.status_code == 200:
|
||||
|
||||
@@ -36,7 +36,7 @@ import manager_downloader
|
||||
from node_package import InstalledNodePackage
|
||||
|
||||
|
||||
version_code = [3, 3, 3]
|
||||
version_code = [3, 3, 9]
|
||||
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
||||
|
||||
|
||||
@@ -263,6 +263,27 @@ def is_installed(name):
|
||||
print(f"[ComfyUI-Manager] skip black listed pip installation: '{name}'")
|
||||
return True
|
||||
|
||||
pkg = manager_util.get_installed_packages().get(name.lower())
|
||||
if pkg is None:
|
||||
return False # update if not installed
|
||||
|
||||
if match is None:
|
||||
return True # don't update if version is not specified
|
||||
|
||||
if match.group(2) in ['>', '>=']:
|
||||
if manager_util.StrictVersion(pkg) < manager_util.StrictVersion(match.group(3)):
|
||||
return False
|
||||
elif manager_util.StrictVersion(pkg) > manager_util.StrictVersion(match.group(3)):
|
||||
print(f"[SKIP] Downgrading pip package isn't allowed: {name.lower()} (cur={pkg})")
|
||||
|
||||
if match.group(2) == '==':
|
||||
if manager_util.StrictVersion(pkg) < manager_util.StrictVersion(match.group(3)):
|
||||
return False
|
||||
|
||||
if match.group(2) == '~=':
|
||||
if manager_util.StrictVersion(pkg) == manager_util.StrictVersion(match.group(3)):
|
||||
return False
|
||||
|
||||
return name.lower() in manager_util.get_installed_packages()
|
||||
|
||||
|
||||
@@ -1237,6 +1258,8 @@ class UnifiedManager:
|
||||
return ManagedResult('skip').with_msg('Up to date')
|
||||
|
||||
def unified_update(self, node_id, version_spec=None, instant_execution=False, no_deps=False, return_postinstall=False):
|
||||
orig_print(f"\x1b[2K\rUpdating: {node_id}", end='')
|
||||
|
||||
if version_spec is None:
|
||||
version_spec = self.resolve_unspecified_version(node_id, guess_mode='active')
|
||||
|
||||
@@ -1403,7 +1426,6 @@ def write_config():
|
||||
config = configparser.ConfigParser()
|
||||
config['default'] = {
|
||||
'preview_method': manager_funcs.get_current_preview_method(),
|
||||
'badge_mode': get_config()['badge_mode'],
|
||||
'git_exe': get_config()['git_exe'],
|
||||
'channel_url': get_config()['channel_url'],
|
||||
'share_option': get_config()['share_option'],
|
||||
@@ -1444,7 +1466,6 @@ def read_config():
|
||||
|
||||
return {
|
||||
'preview_method': default_conf['preview_method'] if 'preview_method' in default_conf else manager_funcs.get_current_preview_method(),
|
||||
'badge_mode': default_conf['badge_mode'] if 'badge_mode' in default_conf else 'none',
|
||||
'git_exe': default_conf['git_exe'] if 'git_exe' in default_conf else '',
|
||||
'channel_url': default_conf['channel_url'] if 'channel_url' in default_conf else DEFAULT_CHANNEL,
|
||||
'share_option': default_conf['share_option'] if 'share_option' in default_conf else 'all',
|
||||
@@ -1463,7 +1484,6 @@ def read_config():
|
||||
except Exception:
|
||||
return {
|
||||
'preview_method': manager_funcs.get_current_preview_method(),
|
||||
'badge_mode': 'none',
|
||||
'git_exe': '',
|
||||
'channel_url': DEFAULT_CHANNEL,
|
||||
'share_option': 'all',
|
||||
@@ -1490,8 +1510,17 @@ def get_config():
|
||||
|
||||
|
||||
def switch_to_default_branch(repo):
|
||||
default_branch = repo.git.symbolic_ref('refs/remotes/origin/HEAD').replace('refs/remotes/origin/', '')
|
||||
repo.git.checkout(default_branch)
|
||||
try:
|
||||
default_branch = repo.git.symbolic_ref('refs/remotes/origin/HEAD').replace('refs/remotes/origin/', '')
|
||||
repo.git.checkout(default_branch)
|
||||
except:
|
||||
try:
|
||||
repo.git.checkout(repo.heads.master)
|
||||
except:
|
||||
try:
|
||||
repo.git.checkout(repo.heads.main)
|
||||
except:
|
||||
print("[ComfyUI Manager] Failed to switch to the default branch (master or main)")
|
||||
|
||||
|
||||
def try_install_script(url, repo_path, install_cmd, instant_execution=False):
|
||||
@@ -1698,7 +1727,7 @@ def git_repo_update_check_with(path, do_fetch=False, do_update=False, no_deps=Fa
|
||||
|
||||
if do_update:
|
||||
if repo.is_dirty():
|
||||
print(f"STASH: '{path}' is dirty.")
|
||||
print(f"\nSTASH: '{path}' is dirty.")
|
||||
repo.git.stash()
|
||||
|
||||
if f'{remote_name}/{branch_name}' not in repo.refs:
|
||||
@@ -2949,7 +2978,7 @@ def get_comfyui_versions():
|
||||
versions = sorted(versions + [current_tag], reverse=True)
|
||||
versions = versions[:4]
|
||||
|
||||
main_branch = repo.heads.main
|
||||
main_branch = repo.heads.master
|
||||
latest_commit = main_branch.commit
|
||||
latest_tag = repo.git.describe('--tags', latest_commit.hexsha)
|
||||
|
||||
|
||||
@@ -153,10 +153,6 @@ def set_preview_method(method):
|
||||
set_preview_method(core.get_config()['preview_method'])
|
||||
|
||||
|
||||
def set_badge_mode(mode):
|
||||
core.get_config()['badge_mode'] = mode
|
||||
|
||||
|
||||
def set_default_ui_mode(mode):
|
||||
core.get_config()['default_ui'] = mode
|
||||
|
||||
@@ -1153,17 +1149,6 @@ async def preview_method(request):
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
@routes.get("/manager/badge_mode")
|
||||
async def badge_mode(request):
|
||||
if "value" in request.rel_url.query:
|
||||
set_badge_mode(request.rel_url.query['value'])
|
||||
core.write_config()
|
||||
else:
|
||||
return web.Response(text=core.get_config()['badge_mode'], status=200)
|
||||
|
||||
return web.Response(status=200)
|
||||
|
||||
|
||||
@routes.get("/manager/default_ui")
|
||||
async def default_ui_mode(request):
|
||||
if "value" in request.rel_url.query:
|
||||
@@ -1338,24 +1323,27 @@ async def save_component(request):
|
||||
|
||||
@routes.post("/manager/component/loads")
|
||||
async def load_components(request):
|
||||
try:
|
||||
json_files = [f for f in os.listdir(core.manager_components_path) if f.endswith('.json')]
|
||||
pack_files = [f for f in os.listdir(core.manager_components_path) if f.endswith('.pack')]
|
||||
if os.path.exists(core.manager_components_path):
|
||||
try:
|
||||
json_files = [f for f in os.listdir(core.manager_components_path) if f.endswith('.json')]
|
||||
pack_files = [f for f in os.listdir(core.manager_components_path) if f.endswith('.pack')]
|
||||
|
||||
components = {}
|
||||
for json_file in json_files + pack_files:
|
||||
file_path = os.path.join(core.manager_components_path, json_file)
|
||||
with open(file_path, 'r') as file:
|
||||
try:
|
||||
# When there is a conflict between the .pack and the .json, the pack takes precedence and overrides.
|
||||
components.update(json.load(file))
|
||||
except json.JSONDecodeError as e:
|
||||
logging.error(f"[ComfyUI-Manager] Error decoding component file in file {json_file}: {e}")
|
||||
components = {}
|
||||
for json_file in json_files + pack_files:
|
||||
file_path = os.path.join(core.manager_components_path, json_file)
|
||||
with open(file_path, 'r') as file:
|
||||
try:
|
||||
# When there is a conflict between the .pack and the .json, the pack takes precedence and overrides.
|
||||
components.update(json.load(file))
|
||||
except json.JSONDecodeError as e:
|
||||
logging.error(f"[ComfyUI-Manager] Error decoding component file in file {json_file}: {e}")
|
||||
|
||||
return web.json_response(components)
|
||||
except Exception as e:
|
||||
logging.error(f"[ComfyUI-Manager] failed to load components\n{e}")
|
||||
return web.Response(status=400)
|
||||
return web.json_response(components)
|
||||
except Exception as e:
|
||||
logging.error(f"[ComfyUI-Manager] failed to load components\n{e}")
|
||||
return web.Response(status=400)
|
||||
else:
|
||||
return web.json_response({})
|
||||
|
||||
|
||||
@routes.get("/manager/version")
|
||||
|
||||
@@ -103,24 +103,6 @@ docStyle.innerHTML = `
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
#cm-channel-badge {
|
||||
color: white;
|
||||
background-color: #AA0000;
|
||||
width: 220px;
|
||||
height: 23px;
|
||||
font-size: 13px;
|
||||
border-radius: 5px;
|
||||
left: 5px;
|
||||
top: 5px;
|
||||
align-content: center;
|
||||
justify-content: center;
|
||||
text-align: center;
|
||||
font-weight: bold;
|
||||
float: left;
|
||||
vertical-align: middle;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
#custom-nodes-grid a {
|
||||
color: #5555FF;
|
||||
font-weight: bold;
|
||||
@@ -244,7 +226,6 @@ var update_comfyui_button = null;
|
||||
var switch_comfyui_button = null;
|
||||
var fetch_updates_button = null;
|
||||
var update_all_button = null;
|
||||
var badge_mode = "none";
|
||||
let share_option = 'all';
|
||||
|
||||
// copied style from https://github.com/pythongosssss/ComfyUI-Custom-Scripts
|
||||
@@ -426,14 +407,6 @@ const style = `
|
||||
}
|
||||
`;
|
||||
|
||||
|
||||
|
||||
async function init_badge_mode() {
|
||||
api.fetchApi('/manager/badge_mode')
|
||||
.then(response => response.text())
|
||||
.then(data => { badge_mode = data; })
|
||||
}
|
||||
|
||||
async function init_share_option() {
|
||||
api.fetchApi('/manager/share_option')
|
||||
.then(response => response.text())
|
||||
@@ -450,7 +423,6 @@ async function init_notice(notice) {
|
||||
})
|
||||
}
|
||||
|
||||
await init_badge_mode();
|
||||
await init_share_option();
|
||||
|
||||
async function fetchNicknames() {
|
||||
@@ -517,65 +489,6 @@ function getNickname(node, nodename) {
|
||||
}
|
||||
}
|
||||
|
||||
function drawBadge(node, orig, restArgs) {
|
||||
let ctx = restArgs[0];
|
||||
const r = orig?.apply?.(node, restArgs);
|
||||
|
||||
if (!node.flags.collapsed && badge_mode != 'none' && node.constructor.title_mode != LiteGraph.NO_TITLE) {
|
||||
let text = "";
|
||||
if (badge_mode.startsWith('id_nick'))
|
||||
text = `#${node.id} `;
|
||||
|
||||
let nick = node.getNickname();
|
||||
if (nick) {
|
||||
if (nick == 'ComfyUI') {
|
||||
if(badge_mode.endsWith('hide')) {
|
||||
nick = "";
|
||||
}
|
||||
else {
|
||||
nick = "🦊"
|
||||
}
|
||||
}
|
||||
|
||||
if (nick.length > 25) {
|
||||
text += nick.substring(0, 23) + "..";
|
||||
}
|
||||
else {
|
||||
text += nick;
|
||||
}
|
||||
}
|
||||
|
||||
if (text != "") {
|
||||
let fgColor = "white";
|
||||
let bgColor = "#0F1F0F";
|
||||
let visible = true;
|
||||
|
||||
ctx.save();
|
||||
ctx.font = "12px sans-serif";
|
||||
const sz = ctx.measureText(text);
|
||||
ctx.fillStyle = bgColor;
|
||||
ctx.beginPath();
|
||||
ctx.roundRect(node.size[0] - sz.width - 12, -LiteGraph.NODE_TITLE_HEIGHT - 20, sz.width + 12, 20, 5);
|
||||
ctx.fill();
|
||||
|
||||
ctx.fillStyle = fgColor;
|
||||
ctx.fillText(text, node.size[0] - sz.width - 6, -LiteGraph.NODE_TITLE_HEIGHT - 6);
|
||||
ctx.restore();
|
||||
|
||||
if (node.has_errors) {
|
||||
ctx.save();
|
||||
ctx.font = "bold 14px sans-serif";
|
||||
const sz2 = ctx.measureText(node.type);
|
||||
ctx.fillStyle = 'white';
|
||||
ctx.fillText(node.type, node.size[0] / 2 - sz2.width / 2, node.size[1] / 2);
|
||||
ctx.restore();
|
||||
}
|
||||
}
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
async function updateComfyUI() {
|
||||
let prev_text = update_comfyui_button.innerText;
|
||||
update_comfyui_button.innerText = "Updating ComfyUI...";
|
||||
@@ -1069,32 +982,9 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
api.fetchApi(`/manager/preview_method?value=${event.target.value}`);
|
||||
});
|
||||
|
||||
// nickname
|
||||
let badge_combo = "";
|
||||
if(is_legacy_front()) {
|
||||
badge_combo = document.createElement("select");
|
||||
badge_combo.setAttribute("title", "Configure the content to be displayed on the badge at the top right corner of the node. The ID is the identifier of the node. If 'hide built-in' is selected, both unknown nodes and built-in nodes will be omitted, making them indistinguishable");
|
||||
badge_combo.className = "cm-menu-combo";
|
||||
badge_combo.appendChild($el('option', { value: 'none', text: 'Badge: None' }, []));
|
||||
badge_combo.appendChild($el('option', { value: 'nick', text: 'Badge: Nickname' }, []));
|
||||
badge_combo.appendChild($el('option', { value: 'nick_hide', text: 'Badge: Nickname (hide built-in)' }, []));
|
||||
badge_combo.appendChild($el('option', { value: 'id_nick', text: 'Badge: #ID Nickname' }, []));
|
||||
badge_combo.appendChild($el('option', { value: 'id_nick_hide', text: 'Badge: #ID Nickname (hide built-in)' }, []));
|
||||
|
||||
api.fetchApi('/manager/badge_mode')
|
||||
.then(response => response.text())
|
||||
.then(data => { badge_combo.value = data; badge_mode = data; });
|
||||
|
||||
badge_combo.addEventListener('change', function (event) {
|
||||
api.fetchApi(`/manager/badge_mode?value=${event.target.value}`);
|
||||
badge_mode = event.target.value;
|
||||
app.graph.setDirtyCanvas(true);
|
||||
});
|
||||
}
|
||||
|
||||
// channel
|
||||
let channel_combo = document.createElement("select");
|
||||
channel_combo.setAttribute("title", "Configure the channel for retrieving data from the Custom Node list (including missing nodes) or the Model list. Note that the badge utilizes local information.");
|
||||
channel_combo.setAttribute("title", "Configure the channel for retrieving data from the Custom Node list (including missing nodes) or the Model list.");
|
||||
channel_combo.className = "cm-menu-combo";
|
||||
api.fetchApi('/manager/channel_url_list')
|
||||
.then(response => response.json())
|
||||
@@ -1218,7 +1108,6 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
this.datasrc_combo,
|
||||
channel_combo,
|
||||
preview_combo,
|
||||
badge_combo,
|
||||
default_ui_combo,
|
||||
share_combo,
|
||||
component_policy_combo,
|
||||
@@ -1663,32 +1552,6 @@ app.registerExtension({
|
||||
this._addExtraNodeContextMenu(nodeType, app);
|
||||
},
|
||||
|
||||
async nodeCreated(node, app) {
|
||||
if(is_legacy_front()) {
|
||||
if(!node.badge_enabled) {
|
||||
node.getNickname = function () { return getNickname(node, node.comfyClass.trim()) };
|
||||
let orig = node.onDrawForeground;
|
||||
if(!orig)
|
||||
orig = node.__proto__.onDrawForeground;
|
||||
|
||||
node.onDrawForeground = function (ctx) {
|
||||
drawBadge(node, orig, arguments)
|
||||
};
|
||||
node.badge_enabled = true;
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
async loadedGraphNode(node, app) {
|
||||
if(is_legacy_front()) {
|
||||
if(!node.badge_enabled) {
|
||||
const orig = node.onDrawForeground;
|
||||
node.getNickname = function () { return getNickname(node, node.type.trim()) };
|
||||
node.onDrawForeground = function (ctx) { drawBadge(node, orig, arguments) };
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
_addExtraNodeContextMenu(node, app) {
|
||||
const origGetExtraMenuOptions = node.prototype.getExtraMenuOptions;
|
||||
node.prototype.cm_menu_added = true;
|
||||
|
||||
@@ -10,7 +10,26 @@
|
||||
},
|
||||
|
||||
|
||||
|
||||
{
|
||||
"author": "sourceful-official",
|
||||
"title": "ComfyUI_InstructPixToPixConditioningLatent [WIP]",
|
||||
"reference": "https://github.com/sourceful-official/ComfyUI_InstructPixToPixConditioningLatent",
|
||||
"files": [
|
||||
"https://github.com/sourceful-official/ComfyUI_InstructPixToPixConditioningLatent"
|
||||
],
|
||||
"description": "ComfyUI-ComfyUI_InstructPixToPixConditioningLatent\nNOTE:invalid pyproject.toml",
|
||||
"install_type": "git-clone"
|
||||
},
|
||||
{
|
||||
"author": "fritzprix",
|
||||
"title": "ComfyUI-LLM-Utils [WIP]",
|
||||
"reference": "https://github.com/fritzprix/ComfyUI-LLM-Utils",
|
||||
"files": [
|
||||
"https://github.com/fritzprix/ComfyUI-LLM-Utils"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A collection of utility nodes for ComfyUI focused on text and LLM-related operations\nNOTE: The files in the repo are not organized."
|
||||
},
|
||||
{
|
||||
"author": "ciga2011",
|
||||
"title": "ComfyUI-AppGen [UNSAFE]",
|
||||
|
||||
@@ -510,6 +510,7 @@
|
||||
"https://github.com/Chargeuk/ComfyUI-vts-nodes": [
|
||||
[
|
||||
"VTS Clean Text",
|
||||
"VTS Clip Text Encode",
|
||||
"VTS Color Mask To Mask",
|
||||
"VTS Conditioning Set Batch Mask",
|
||||
"VTS Merge Delimited Text",
|
||||
@@ -562,8 +563,10 @@
|
||||
"DevToolsNodeWithOnlyOptionalInput",
|
||||
"DevToolsNodeWithOptionalInput",
|
||||
"DevToolsNodeWithOutputList",
|
||||
"DevToolsNodeWithSeedInput",
|
||||
"DevToolsNodeWithStringInput",
|
||||
"DevToolsNodeWithUnionInput",
|
||||
"DevToolsObjectPatchNode",
|
||||
"DevToolsSimpleSlider"
|
||||
],
|
||||
{
|
||||
@@ -2445,7 +2448,8 @@
|
||||
"Genera.BatchTester",
|
||||
"Genera.GCPStorageNode",
|
||||
"Genera.MaskDrawer",
|
||||
"Genera.Utils"
|
||||
"Genera.Utils",
|
||||
"PainterNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-GeneraNodes"
|
||||
@@ -2498,6 +2502,19 @@
|
||||
"title_aux": "comfyui-cem-tools"
|
||||
}
|
||||
],
|
||||
"https://github.com/fritzprix/ComfyUI-LLM-Utils": [
|
||||
[
|
||||
"WeightedDict",
|
||||
"WeightedDictConcat",
|
||||
"WeightedDictInput",
|
||||
"WeightedDictSelect",
|
||||
"WeightedDictSelectGroup",
|
||||
"WeightedDictToPrompt"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-LLM-Utils [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/galoreware/ComfyUI-GaloreNodes": [
|
||||
[
|
||||
"GNI_HEX_TO_COLOR",
|
||||
@@ -3768,13 +3785,15 @@
|
||||
"ConditioningZeroOutCombine",
|
||||
"ConvertTimestepToSigma",
|
||||
"DynSamplerSelect",
|
||||
"DynamicThresholdingSimplePost",
|
||||
"EmptyLatentImageAR",
|
||||
"FreeU2PPM",
|
||||
"Guidance Limiter",
|
||||
"LatentOperationTonemapLuminance",
|
||||
"LatentToMaskBB",
|
||||
"LatentToWidthHeight",
|
||||
"PPMSamplerSelect"
|
||||
"PPMSamplerSelect",
|
||||
"RescaleCFGPost"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ppm"
|
||||
@@ -4073,6 +4092,14 @@
|
||||
"title_aux": "dandy [UNSAFE]"
|
||||
}
|
||||
],
|
||||
"https://github.com/sourceful-official/ComfyUI_InstructPixToPixConditioningLatent": [
|
||||
[
|
||||
"InstructPixToPixConditioningLatent"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_InstructPixToPixConditioningLatent [WIP]"
|
||||
}
|
||||
],
|
||||
"https://github.com/sswink/comfyui-lingshang": [
|
||||
[
|
||||
"LS_ALY_Seg_Body_Utils",
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -9,6 +9,67 @@
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
"author": "amorano",
|
||||
"title": "Jovi_Spout",
|
||||
"id": "jovi_spout",
|
||||
"reference": "https://github.com/Amorano/Jovi_Spout",
|
||||
"files": [
|
||||
"https://github.com/Amorano/Jovi_Spout"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Nodes for using Spout streams."
|
||||
},
|
||||
{
|
||||
"author": "AconexOfficial",
|
||||
"title": "ComfyUI GOAT Nodes",
|
||||
"reference": "https://github.com/AconexOfficial/ComfyUI_GOAT_Nodes",
|
||||
"files": [
|
||||
"https://github.com/AconexOfficial/ComfyUI_GOAT_Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes to level up your workflows performance and streamline specific functions."
|
||||
},
|
||||
{
|
||||
"author": "Jaminanim",
|
||||
"title": "ComfyUI-Random-Int-Divisor-Node",
|
||||
"reference": "https://github.com/Jaminanim/ComfyUI-Random-Int-Divisor-Node",
|
||||
"files": [
|
||||
"https://github.com/Jaminanim/ComfyUI-Random-Int-Divisor-Node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A set of custom ComfyUI nodes for generating random integers within a range, adjusted to the nearest multiple of a user-defined divisor. Needlessly includes both an efficient and simple list implementation. Updates with each generation."
|
||||
},
|
||||
{
|
||||
"author": "LucipherDev",
|
||||
"title": "ComfyUI-AniDoc",
|
||||
"reference": "https://github.com/LucipherDev/ComfyUI-AniDoc",
|
||||
"files": [
|
||||
"https://github.com/LucipherDev/ComfyUI-AniDoc"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI Custom Nodes for 'AniDoc: Animation Creation Made Easier'. This approach automates line art video colorization using a novel model that aligns color information from references, ensures temporal consistency, and reduces manual effort in animation production."
|
||||
},
|
||||
{
|
||||
"author": "bear2b",
|
||||
"title": "ColorMatrixGPU Node for ComfyUI",
|
||||
"reference": "https://github.com/bear2b/comfyui-argo-nodes",
|
||||
"files": [
|
||||
"https://github.com/bear2b/comfyui-argo-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This node applies a custom 4x4 color matrix to an image using GPU acceleration via PyTorch."
|
||||
},
|
||||
{
|
||||
"author": "Vaibhavs10",
|
||||
"title": "ComfyUI-DDUF",
|
||||
"reference": "https://github.com/Vaibhavs10/ComfyUI-DDUF",
|
||||
"files": [
|
||||
"https://github.com/Vaibhavs10/ComfyUI-DDUF"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Run DDUF in ComfyUI - powered by Diffusers."
|
||||
},
|
||||
{
|
||||
"author": "tocubed",
|
||||
"title": "ComfyUI-EvTexture",
|
||||
@@ -634,57 +695,6 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A collection of specialized image processing nodes for ComfyUI, focused on dataset preparation and pixel art manipulation."
|
||||
},
|
||||
{
|
||||
"author": "BIMer-99",
|
||||
"title": "ComfyUI_FishSpeech_EX",
|
||||
"reference": "https://github.com/BIMer-99/ComfyUI_FishSpeech_EX",
|
||||
"files": [
|
||||
"https://github.com/BIMer-99/ComfyUI_FishSpeech_EX"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This plugin is optimized for Fish-Speech-1.5 version and is only applicable to version 1.5"
|
||||
},
|
||||
{
|
||||
"author": "CyanAutumn",
|
||||
"title": "ComfyUi Random Manage Cyan",
|
||||
"id": "CyanAutumn",
|
||||
"reference": "https://github.com/CyanAutumn/ComfyUi_Random_Manage_Cyan",
|
||||
"files": [
|
||||
"https://github.com/CyanAutumn/ComfyUi_Random_Manage_Cyan"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A random prompt node"
|
||||
},
|
||||
{
|
||||
"author": "kazeyori",
|
||||
"title": "Quick Image Sequence Process",
|
||||
"reference": "https://github.com/kazeyori/ComfyUI-QuickImageSequenceProcess",
|
||||
"files": [
|
||||
"https://github.com/kazeyori/ComfyUI-QuickImageSequenceProcess"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI plugin for quick image sequence processing. This plugin allows users to manipulate frame sequences with various operations including frame insertion, deletion, and duplication."
|
||||
},
|
||||
{
|
||||
"author": "ptmaster",
|
||||
"title": "Embedding Merge for ComfyUI",
|
||||
"reference": "https://github.com/ptmaster/ComfyUI-Load-Diffusion-Model-to-Muti-GPUs",
|
||||
"files": [
|
||||
"https://github.com/ptmaster/ComfyUI-Load-Diffusion-Model-to-Muti-GPUs/raw/refs/heads/main/Load%20Diffusion%20Model%20into%20Muti%20GPUs.py"
|
||||
],
|
||||
"install_type": "copy",
|
||||
"description": "NODES: OverrideLoadedDiffusionDevice.\nI happen to have two graphics cards, and I want to load models into another graphics card in Comfyui, so I designed this small node."
|
||||
},
|
||||
{
|
||||
"author": "ADDOOR",
|
||||
"title": "ComfyUI-Addoor",
|
||||
"reference": "https://github.com/Eagle-CN/ComfyUI-Addoor",
|
||||
"files": [
|
||||
"https://github.com/Eagle-CN/ComfyUI-Addoor"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A collection of batch operation toolkits suitable for ComfyUI"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
],
|
||||
"https://github.com/1038lab/ComfyUI-RMBG": [
|
||||
[
|
||||
"ClothesSegment",
|
||||
"RMBG",
|
||||
"Segment"
|
||||
],
|
||||
@@ -1225,6 +1226,27 @@
|
||||
"title_aux": "ComfyUI Nodes for External Tooling"
|
||||
}
|
||||
],
|
||||
"https://github.com/AconexOfficial/ComfyUI_GOAT_Nodes": [
|
||||
[
|
||||
"Advanced_Upscale_Image_Using_Model",
|
||||
"Capped_Float_Positive",
|
||||
"Capped_Int_Positive",
|
||||
"Embedding_Selector",
|
||||
"Fast_Color_Match",
|
||||
"Fast_Film_Grain",
|
||||
"Get_Side_Length_Of_Image",
|
||||
"Image_Dimensions",
|
||||
"Image_Tiler",
|
||||
"Image_Untiler",
|
||||
"Int_Divide_Rounded",
|
||||
"Sampler_Settings",
|
||||
"Smart_Seed",
|
||||
"Triple_Prompt"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI GOAT Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/Aerse/ComfyUI-Seed-Nodes": [
|
||||
[
|
||||
"Seed-Nodes: ImagePixelator",
|
||||
@@ -1348,6 +1370,15 @@
|
||||
"title_aux": "Jovi_GLSL"
|
||||
}
|
||||
],
|
||||
"https://github.com/Amorano/Jovi_Spout": [
|
||||
[
|
||||
"SPOUT READER (JOV_SP) \ud83d\udcfa",
|
||||
"SPOUT WRITER (JOV_SP) \ud83c\udfa5"
|
||||
],
|
||||
{
|
||||
"title_aux": "Jovi_Spout"
|
||||
}
|
||||
],
|
||||
"https://github.com/Amorano/Jovimetrix": [
|
||||
[
|
||||
"ADJUST (JOV) \ud83d\udd78\ufe0f",
|
||||
@@ -2486,6 +2517,7 @@
|
||||
"ImageMinusMask",
|
||||
"Light or Dark",
|
||||
"Load Random Images",
|
||||
"Mask Preprocess Morphology",
|
||||
"PhotoShop Transfer",
|
||||
"Yuan"
|
||||
],
|
||||
@@ -4335,6 +4367,15 @@
|
||||
"title_aux": "ComfyUI-AI-Assistant"
|
||||
}
|
||||
],
|
||||
"https://github.com/Jaminanim/ComfyUI-Random-Int-Divisor-Node": [
|
||||
[
|
||||
"RandomIntegerNodeEfficient",
|
||||
"RandomIntegerNodeList"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Random-Int-Divisor-Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/Jannchie/ComfyUI-J": [
|
||||
[
|
||||
"DiffusersCompelPromptEmbedding",
|
||||
@@ -5203,6 +5244,17 @@
|
||||
"title_aux": "ComfyUI-RawSaver"
|
||||
}
|
||||
],
|
||||
"https://github.com/LucipherDev/ComfyUI-AniDoc": [
|
||||
[
|
||||
"AniDocLoader",
|
||||
"AniDocSampler",
|
||||
"GetAniDocControlnetImages",
|
||||
"LoadCoTracker"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-AniDoc"
|
||||
}
|
||||
],
|
||||
"https://github.com/LucipherDev/ComfyUI-Golden-Noise": [
|
||||
[
|
||||
"GoldenNoise"
|
||||
@@ -5779,6 +5831,7 @@
|
||||
"ImageSizeAdjusterV3",
|
||||
"LoadVideoDirectory",
|
||||
"ProjectFilePathNode",
|
||||
"SequentialNumberGenerator",
|
||||
"StringWeights",
|
||||
"ZenkaiPrompt",
|
||||
"ZenkaiPromptV2",
|
||||
@@ -7297,7 +7350,8 @@
|
||||
],
|
||||
"https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper": [
|
||||
[
|
||||
"D_LatentSyncNode"
|
||||
"D_LatentSyncNode",
|
||||
"D_VideoLengthAdjuster"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-LatentSyncWrapper"
|
||||
@@ -7669,6 +7723,7 @@
|
||||
"SDVN Image Repeat",
|
||||
"SDVN Image Size",
|
||||
"SDVN Inpaint",
|
||||
"SDVN Join Parameter",
|
||||
"SDVN KSampler",
|
||||
"SDVN Load Checkpoint",
|
||||
"SDVN Load Image",
|
||||
@@ -7676,6 +7731,7 @@
|
||||
"SDVN Load Image From List",
|
||||
"SDVN Load Image Url",
|
||||
"SDVN Load Lora",
|
||||
"SDVN Load Model",
|
||||
"SDVN Load Text",
|
||||
"SDVN Logic",
|
||||
"SDVN Lora Download",
|
||||
@@ -8693,6 +8749,18 @@
|
||||
"title_aux": "Tripo for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/Vaibhavs10/ComfyUI-DDUF": [
|
||||
[
|
||||
"DDUFLoader",
|
||||
"DiffusersModelMakeup",
|
||||
"DiffusersPipelineLoader",
|
||||
"DiffusersSchedulerLoader",
|
||||
"DiffusersSimpleSampler"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-DDUF"
|
||||
}
|
||||
],
|
||||
"https://github.com/VangengLab/ComfyUI-LivePortrait_v2": [
|
||||
[
|
||||
"LivePortraitProcess_animal"
|
||||
@@ -9131,7 +9199,9 @@
|
||||
"InstaCText",
|
||||
"InstaCTextML",
|
||||
"InstaPromptMultipleStyleSelector",
|
||||
"InstaPromptStyleSelector"
|
||||
"InstaPromptStyleSelector",
|
||||
"LoadVideo",
|
||||
"PreViewVideo"
|
||||
],
|
||||
{
|
||||
"title_aux": "InstaSD nodes for ComfyUI"
|
||||
@@ -10798,6 +10868,14 @@
|
||||
"title_aux": "Mikey Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/bear2b/comfyui-argo-nodes": [
|
||||
[
|
||||
"ColorMatrixGPU"
|
||||
],
|
||||
{
|
||||
"title_aux": "ColorMatrixGPU Node for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/bedovyy/ComfyUI_NAIDGenerator": [
|
||||
[
|
||||
"ColorizeNAID",
|
||||
@@ -14263,7 +14341,8 @@
|
||||
"Genera.BatchTester",
|
||||
"Genera.GCPStorageNode",
|
||||
"Genera.MaskDrawer",
|
||||
"Genera.Utils"
|
||||
"Genera.Utils",
|
||||
"PainterNode"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-GeneraNodes"
|
||||
@@ -15369,6 +15448,7 @@
|
||||
"Griptape Util: Create Agent Modelfile",
|
||||
"Griptape Util: Create Model from Modelfile",
|
||||
"Griptape Util: Remove Ollama Model",
|
||||
"Griptape Util: Switch Node",
|
||||
"Griptape Vector Store Driver: Amazon OpenSearch",
|
||||
"Griptape Vector Store Driver: Azure MongoDB",
|
||||
"Griptape Vector Store Driver: Griptape Cloud",
|
||||
@@ -16538,7 +16618,9 @@
|
||||
"Ksampler Parameters JK",
|
||||
"Latent Crop Offset JK",
|
||||
"Latent Upscale Parameters Extract JK",
|
||||
"Load Image With Alpha JK",
|
||||
"Load Image With Metadata JK",
|
||||
"Make Image Grid JK",
|
||||
"Metadata Pipe Extract JK",
|
||||
"Metadata Pipe JK",
|
||||
"NodesState JK",
|
||||
@@ -16609,6 +16691,7 @@
|
||||
"Save Image with Metadata Flow JK",
|
||||
"Save Image with Metadata JK",
|
||||
"Scale To Resolution JK",
|
||||
"Split Image Grid JK",
|
||||
"Stability Conservative Upscale",
|
||||
"Stability Control Sketch",
|
||||
"Stability Control Structure",
|
||||
@@ -21345,13 +21428,15 @@
|
||||
"ConditioningZeroOutCombine",
|
||||
"ConvertTimestepToSigma",
|
||||
"DynSamplerSelect",
|
||||
"DynamicThresholdingSimplePost",
|
||||
"EmptyLatentImageAR",
|
||||
"FreeU2PPM",
|
||||
"Guidance Limiter",
|
||||
"LatentOperationTonemapLuminance",
|
||||
"LatentToMaskBB",
|
||||
"LatentToWidthHeight",
|
||||
"PPMSamplerSelect"
|
||||
"PPMSamplerSelect",
|
||||
"RescaleCFGPost"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ppm"
|
||||
@@ -21457,6 +21542,16 @@
|
||||
"title_aux": "\u2728 Clarity AI - Creative Image Upscaler and Enhancer for ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/phuvinh010701/ComfyUI-Nudenet": [
|
||||
[
|
||||
"ApplyNudenet",
|
||||
"FilterdLabel",
|
||||
"NudenetModelLoader"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Nudenet"
|
||||
}
|
||||
],
|
||||
"https://github.com/phyblas/paint-by-example_comfyui": [
|
||||
[
|
||||
"PaintbyExampleAdvanced",
|
||||
|
||||
@@ -437,6 +437,14 @@ def is_installed(name):
|
||||
elif manager_util.StrictVersion(pkg) > manager_util.StrictVersion(match.group(3)):
|
||||
print(f"[SKIP] Downgrading pip package isn't allowed: {name.lower()} (cur={pkg})")
|
||||
|
||||
if match.group(2) == '==':
|
||||
if manager_util.StrictVersion(pkg) < manager_util.StrictVersion(match.group(3)):
|
||||
return False
|
||||
|
||||
if match.group(2) == '~=':
|
||||
if manager_util.StrictVersion(pkg) == manager_util.StrictVersion(match.group(3)):
|
||||
return False
|
||||
|
||||
return True # prevent downgrade
|
||||
|
||||
|
||||
|
||||
@@ -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.3.3"
|
||||
version = "3.3.9"
|
||||
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