diff --git a/README.md b/README.md
index 6e439dc2..6dd3b693 100644
--- a/README.md
+++ b/README.md
@@ -16,7 +16,7 @@
To install ComfyUI-Manager in addition to an existing installation of ComfyUI, you can follow the following steps:
-1. cd custom_nodes
+1. goto `ComfyUI/custom_nodes` dir in terminal(cmd)
2. `git clone https://github.com/ltdrdata/ComfyUI-Manager.git`
3. Restart ComfyUI
@@ -63,6 +63,7 @@ This repository provides Colab notebooks that allow you to install and use Comfy
* Support for automatically installing dependencies of custom nodes upon restarting Colab notebooks.
## Changes
+* **2.4** Copy the connections of the nearest node by double-clicking.
* **2.2.3** Support Components System
* **0.29** Add `Update all` feature
* **0.25** support db channel
@@ -253,6 +254,24 @@ NODE_CLASS_MAPPINGS.update({

+## Additional Feature
+* Logging to file feature
+ * This feature is enabled by default and can be disabled by setting `file_logging = False` in the `config.ini`.
+
+* Fix node(recreate): When right-clicking on a node and selecting `Fix node (recreate)`, you can recreate the node. The widget's values are reset, while the connections maintain those with the same names.
+ * It is used to correct errors in nodes of old workflows created before, which are incompatible with the version changes of custom nodes.
+
+* Double-Click Node Title: You can set the double click behavior of nodes in the ComfyUI-Manager menu.
+ * `Copy All Connections`, `Copy Input Connections`: Double-clicking a node copies the connections of the nearest node.
+ * This action targets the nearest node within a straight-line distance of 1000 pixels from the center of the node.
+ * In the case of `Copy All Connections`, it duplicates existing outputs, but since it does not allow duplicate connections, the existing output connections of the original node are disconnected.
+ * This feature copies only the input and output that match the names.
+
+ * `Possible Input Connections`: It connects all outputs that match the closest type within the specified range.
+ * This connection links to the closest outputs among the nodes located on the left side of the target node.
+
+ * `Possible(left) + Copy(right)`: When you Double-Click on the left half of the title, it operates as `Possible Input Connections`, and when you Double-Click on the right half, it operates as `Copy All Connections`.
+
## Troubleshooting
* If your `git.exe` is installed in a specific location other than system git, please install ComfyUI-Manager and run ComfyUI. Then, specify the path including the file name in `git_exe = ` in the ComfyUI-Manager/config.ini file that is generated.
* If updating ComfyUI-Manager itself fails, please go to the **ComfyUI-Manager** directory and execute the command `git update-ref refs/remotes/origin/main a361cc1 && git fetch --all && git pull`.
@@ -260,6 +279,8 @@ NODE_CLASS_MAPPINGS.update({
For the portable version, use `..\..\..\python_embeded\python.exe update-fix.py`.
* For cases where nodes like `PreviewTextNode` from `ComfyUI_Custom_Nodes_AlekPet` are only supported as front-end nodes, we currently do not provide missing nodes for them.
* Currently, `vid2vid` is not being updated, causing compatibility issues.
+* If you encounter the error message `Overlapped Object has pending operation at deallocation on Comfyui Manager load` under Windows
+ * Edit `config.ini` file: add `windows_selector_event_loop_policy = True`
## TODO: Unconventional form of custom node list
diff --git a/__init__.py b/__init__.py
index 56a731ab..0fa384ff 100644
--- a/__init__.py
+++ b/__init__.py
@@ -7,7 +7,6 @@ import folder_paths
import os
import sys
import threading
-import datetime
import locale
import subprocess # don't remove this
from tqdm.auto import tqdm
@@ -17,6 +16,8 @@ import http.client
import re
import nodes
import hashlib
+from datetime import datetime
+
try:
import cm_global
@@ -28,7 +29,7 @@ except:
print(f"[WARN] ComfyUI-Manager: Your ComfyUI version is outdated. Please update to the latest version.")
-version = [2, 2, 5]
+version = [2, 7]
version_str = f"V{version[0]}.{version[1]}" + (f'.{version[2]}' if len(version) > 2 else '')
print(f"### Loading: ComfyUI-Manager ({version_str})")
@@ -102,9 +103,11 @@ sys.path.append('../..')
from torchvision.datasets.utils import download_url
-comfy_ui_required_revision = 1917
+comfy_ui_required_revision = 1930
+comfy_ui_required_commit_datetime = datetime(2024, 1, 24, 0, 0, 0)
+
comfy_ui_revision = "Unknown"
-comfy_ui_commit_date = ""
+comfy_ui_commit_datetime = datetime(1900, 1, 1, 0, 0, 0)
comfy_path = os.path.dirname(folder_paths.__file__)
custom_nodes_path = os.path.join(comfy_path, 'custom_nodes')
@@ -170,8 +173,11 @@ def write_config():
'channel_url': get_config()['channel_url'],
'share_option': get_config()['share_option'],
'bypass_ssl': get_config()['bypass_ssl'],
+ "file_logging": get_config()['file_logging'],
'default_ui': get_config()['default_ui'],
'component_policy': get_config()['component_policy'],
+ 'double_click_policy': get_config()['double_click_policy'],
+ 'windows_selector_event_loop_policy': get_config()['windows_selector_event_loop_policy'],
}
with open(config_path, 'w') as configfile:
config.write(configfile)
@@ -190,8 +196,11 @@ def read_config():
'channel_url': default_conf['channel_url'] if 'channel_url' in default_conf else 'https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main',
'share_option': default_conf['share_option'] if 'share_option' in default_conf else 'all',
'bypass_ssl': default_conf['bypass_ssl'] if 'bypass_ssl' in default_conf else False,
+ 'file_logging': default_conf['file_logging'] if 'file_logging' in default_conf else True,
'default_ui': default_conf['default_ui'] if 'default_ui' in default_conf else 'none',
'component_policy': default_conf['component_policy'] if 'component_policy' in default_conf else 'workflow',
+ 'double_click_policy': default_conf['double_click_policy'] if 'double_click_policy' in default_conf else 'copy-all',
+ 'windows_selector_event_loop_policy': default_conf['windows_selector_event_loop_policy'] if 'windows_selector_event_loop_policy' in default_conf else False,
}
except Exception:
@@ -202,8 +211,11 @@ def read_config():
'channel_url': 'https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main',
'share_option': 'all',
'bypass_ssl': False,
+ 'file_logging': True,
'default_ui': 'none',
- 'component_policy': 'workflow'
+ 'component_policy': 'workflow',
+ 'double_click_policy': 'copy-all',
+ 'windows_selector_event_loop_policy': False
}
@@ -255,15 +267,12 @@ def set_component_policy(mode):
get_config()['component_policy'] = mode
+def set_double_click_policy(mode):
+ get_config()['double_click_policy'] = mode
+
+
def try_install_script(url, repo_path, install_cmd):
- int_comfyui_revision = 0
-
- if type(comfy_ui_revision) == int:
- int_comfyui_revision = comfy_ui_revision
- elif comfy_ui_revision.isdigit():
- int_comfyui_revision = int(comfy_ui_revision)
-
- if platform.system() == "Windows" and int_comfyui_revision >= comfy_ui_required_revision:
+ if platform.system() == "Windows" and comfy_ui_commit_datetime.date() >= comfy_ui_required_commit_datetime.date():
if not os.path.exists(startup_script_path):
os.makedirs(startup_script_path)
@@ -279,9 +288,9 @@ def try_install_script(url, repo_path, install_cmd):
if platform.system() == "Windows":
try:
- if int(comfy_ui_revision) < comfy_ui_required_revision:
+ if comfy_ui_commit_datetime.date() < comfy_ui_required_commit_datetime.date():
print("\n\n###################################################################")
- print(f"[WARN] ComfyUI-Manager: Your ComfyUI version ({comfy_ui_revision}) is too old. Please update to the latest version.")
+ print(f"[WARN] ComfyUI-Manager: Your ComfyUI version ({comfy_ui_revision})[{comfy_ui_commit_datetime.date()}] is too old. Please update to the latest version.")
print(f"[WARN] The extension installation feature may not work properly in the current installed ComfyUI version on Windows environment.")
print("###################################################################\n\n")
except:
@@ -295,7 +304,7 @@ def try_install_script(url, repo_path, install_cmd):
def print_comfyui_version():
global comfy_ui_revision
- global comfy_ui_commit_date
+ global comfy_ui_commit_datetime
global comfy_ui_hash
try:
@@ -307,14 +316,14 @@ def print_comfyui_version():
cm_global.variables['comfyui.revision'] = comfy_ui_revision
+ comfy_ui_commit_datetime = repo.head.commit.committed_datetime
+
try:
- if int(comfy_ui_revision) < comfy_ui_required_revision:
- print(f"\n\n## [WARN] ComfyUI-Manager: Your ComfyUI version ({comfy_ui_revision}) is too old. Please update to the latest version. ##\n\n")
+ if comfy_ui_commit_datetime.date() < comfy_ui_required_commit_datetime.date():
+ print(f"\n\n## [WARN] ComfyUI-Manager: Your ComfyUI version ({comfy_ui_revision})[{comfy_ui_commit_datetime.date()}] is too old. Please update to the latest version. ##\n\n")
except:
pass
- comfy_ui_commit_date = repo.head.commit.committed_datetime.date()
-
# process on_revision_detected -->
if 'cm.on_revision_detected_handler' in cm_global.variables:
for k, f in cm_global.variables['cm.on_revision_detected_handler']:
@@ -330,9 +339,9 @@ def print_comfyui_version():
# <--
if current_branch == "master":
- print(f"### ComfyUI Revision: {comfy_ui_revision} [{comfy_ui_hash[:8]}] | Released on '{comfy_ui_commit_date}'")
+ print(f"### ComfyUI Revision: {comfy_ui_revision} [{comfy_ui_hash[:8]}] | Released on '{comfy_ui_commit_datetime.date()}'")
else:
- print(f"### ComfyUI Revision: {comfy_ui_revision} on '{current_branch}' [{comfy_ui_hash[:8]}] | Released on '{comfy_ui_commit_date}'")
+ print(f"### ComfyUI Revision: {comfy_ui_revision} on '{current_branch}' [{comfy_ui_hash[:8]}] | Released on '{comfy_ui_commit_datetime.date()}'")
except:
print("### ComfyUI Revision: UNKNOWN (The currently installed ComfyUI is not a Git repository)")
@@ -523,8 +532,10 @@ def git_pull(path):
return True
-async def get_data(uri):
- print(f"FETCH DATA from: {uri}")
+async def get_data(uri, silent=False):
+ if not silent:
+ print(f"FETCH DATA from: {uri}")
+
if uri.startswith("http"):
async with aiohttp.ClientSession(trust_env=True, connector=aiohttp.TCPConnector(verify_ssl=False)) as session:
async with session.get(uri) as resp:
@@ -592,7 +603,7 @@ def is_file_created_within_one_day(file_path):
return False
file_creation_time = os.path.getctime(file_path)
- current_time = datetime.datetime.now().timestamp()
+ current_time = datetime.now().timestamp()
time_difference = current_time - file_creation_time
return time_difference <= 86400
@@ -1074,14 +1085,14 @@ def get_current_snapshot():
def save_snapshot_with_postfix(postfix):
- now = datetime.datetime.now()
+ now = datetime.now()
- date_time_format = now.strftime("%Y-%m-%d_%H-%M-%S")
- file_name = f"{date_time_format}_{postfix}"
+ date_time_format = now.strftime("%Y-%m-%d_%H-%M-%S")
+ file_name = f"{date_time_format}_{postfix}"
- path = os.path.join(os.path.dirname(__file__), 'snapshots', f"{file_name}.json")
- with open(path, "w") as json_file:
- json.dump(get_current_snapshot(), json_file, indent=4)
+ path = os.path.join(os.path.dirname(__file__), 'snapshots', f"{file_name}.json")
+ with open(path, "w") as json_file:
+ json.dump(get_current_snapshot(), json_file, indent=4)
@server.PromptServer.instance.routes.get("/snapshot/get_current")
@@ -1785,6 +1796,17 @@ async def component_policy(request):
return web.Response(status=200)
+@server.PromptServer.instance.routes.get("/manager/dbl_click/policy")
+async def dbl_click_policy(request):
+ if "value" in request.rel_url.query:
+ set_double_click_policy(request.rel_url.query['value'])
+ write_config()
+ else:
+ return web.Response(text=get_config()['double_click_policy'], status=200)
+
+ return web.Response(status=200)
+
+
@server.PromptServer.instance.routes.get("/manager/channel_url_list")
async def channel_url_list(request):
channels = get_channel_dict()
@@ -1814,37 +1836,32 @@ async def get_notice(request):
url = "github.com"
path = "/ltdrdata/ltdrdata.github.io/wiki/News"
- conn = http.client.HTTPSConnection(url)
- conn.request("GET", path)
+ async with aiohttp.ClientSession(trust_env=True, connector=aiohttp.TCPConnector(verify_ssl=False)) as session:
+ async with session.get(f"https://{url}{path}") as response:
+ if response.status == 200:
+ # html_content = response.read().decode('utf-8')
+ html_content = await response.text()
- response = conn.getresponse()
+ pattern = re.compile(r'
([\s\S]*?)
')
+ match = pattern.search(html_content)
- try:
- if response.status == 200:
- html_content = response.read().decode('utf-8')
+ if match:
+ markdown_content = match.group(1)
+ markdown_content += f"
ComfyUI: {comfy_ui_revision}[{comfy_ui_hash[:6]}]({comfy_ui_commit_datetime.date()})"
+ # markdown_content += f"
()"
+ markdown_content += f"
Manager: {version_str}"
- pattern = re.compile(r'([\s\S]*?)
')
- match = pattern.search(html_content)
+ try:
+ if comfy_ui_required_commit_datetime.date() > comfy_ui_commit_datetime.date():
+ markdown_content = f'Your ComfyUI is too OUTDATED!!!
' + markdown_content
+ except:
+ pass
- if match:
- markdown_content = match.group(1)
- markdown_content += f"
ComfyUI: {comfy_ui_revision}[{comfy_ui_hash[:6]}]({comfy_ui_commit_date})"
- # markdown_content += f"
()"
- markdown_content += f"
Manager: {version_str}"
-
- try:
- if comfy_ui_required_revision > int(comfy_ui_revision):
- markdown_content = f'Your ComfyUI is too OUTDATED!!!
' + markdown_content
- except:
- pass
-
- return web.Response(text=markdown_content, status=200)
+ return web.Response(text=markdown_content, status=200)
+ else:
+ return web.Response(text="Unable to retrieve Notice", status=200)
else:
return web.Response(text="Unable to retrieve Notice", status=200)
- else:
- return web.Response(text="Unable to retrieve Notice", status=200)
- finally:
- conn.close()
@server.PromptServer.instance.routes.get("/manager/reboot")
@@ -2318,7 +2335,7 @@ async def default_cache_update():
cache_uri = str(simple_hash(uri)) + '_' + filename
cache_uri = os.path.join(cache_dir, cache_uri)
- json_obj = await get_data(uri)
+ json_obj = await get_data(uri, True)
with cache_lock:
with open(cache_uri, "w", encoding='utf-8') as file:
@@ -2332,9 +2349,15 @@ async def default_cache_update():
await asyncio.gather(a, b, c, d)
+
threading.Thread(target=lambda: asyncio.run(default_cache_update())).start()
+if not os.path.exists(config_path):
+ get_config()
+ write_config()
+
+
WEB_DIRECTORY = "js"
NODE_CLASS_MAPPINGS = {}
__all__ = ['NODE_CLASS_MAPPINGS']
diff --git a/custom-node-list.json b/custom-node-list.json
index 38702755..91bb6905 100644
--- a/custom-node-list.json
+++ b/custom-node-list.json
@@ -1898,6 +1898,16 @@
"install_type": "git-clone",
"description": "Nodes: Load Image (Base64), Load Mask (Base64), Send Image (WebSocket), Crop Image, Apply Mask to Image. Provides nodes geared towards using ComfyUI as a backend for external tools.\nNOTE: This extension is necessary when using an external tool like [comfyui-capture-inference](https://github.com/minux302/comfyui-capture-inference)."
},
+ {
+ "author": "Acly",
+ "title": "ComfyUI Inpaint Nodes",
+ "reference": "https://github.com/Acly/comfyui-inpaint-nodes",
+ "files": [
+ "https://github.com/Acly/comfyui-inpaint-nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Experimental nodes for better inpainting with ComfyUI. Adds two nodes which allow using [a/Fooocus](https://github.com/Acly/comfyui-inpaint-nodes) inpaint model. It's a small and flexible patch which can be applied to any SDXL checkpoint and will transform it into an inpaint model. This model can then be used like other inpaint models, and provides the same benefits. [a/Read more](https://github.com/lllyasviel/Fooocus/discussions/414)"
+ },
{
"author": "picturesonpictures",
"title": "comfy_PoP",
@@ -2247,6 +2257,16 @@
"install_type": "git-clone",
"description": "Various quality of life -nodes for ComfyUI, mostly just visual stuff to improve usability."
},
+ {
+ "author": "kijai",
+ "title": "ComfyUI-CCSR",
+ "reference": "https://github.com/kijai/ComfyUI-CCSR",
+ "files": [
+ "https://github.com/kijai/ComfyUI-CCSR"
+ ],
+ "install_type": "git-clone",
+ "description": "ComfyUI- CCSR upscaler node"
+ },
{
"author": "hhhzzyang",
"title": "Comfyui-Lama",
@@ -3040,6 +3060,26 @@
"install_type": "git-clone",
"description": "Nodes:Q-Align Scoring. Implementation of [a/Q-Align](https://arxiv.org/abs/2312.17090) for ComfyUI"
},
+ {
+ "author": "ZHO-ZHO-ZHO",
+ "title": "ComfyUI-InstantID",
+ "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID",
+ "files": [
+ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID"
+ ],
+ "install_type": "git-clone",
+ "description": "Unofficial implementation of [a/InstantID](https://github.com/InstantID/InstantID) for ComfyUI"
+ },
+ {
+ "author": "ZHO-ZHO-ZHO",
+ "title": "ComfyUI PhotoMaker (ZHO)",
+ "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO",
+ "files": [
+ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO"
+ ],
+ "install_type": "git-clone",
+ "description": "Unofficial implementation of [a/PhotoMaker](https://github.com/TencentARC/PhotoMaker) for ComfyUI"
+ },
{
"author": "kenjiqq",
"title": "qq-nodes-comfyui",
@@ -3310,16 +3350,6 @@
"install_type": "git-clone",
"description": "A ComfyUI custom node for project management to centralize the management of all your workflows in one place. Seamlessly switch between workflows, create and update them within a single workspace, like Google Docs."
},
- {
- "author": "thecooltechguy",
- "title": "ComfyUI-MagicAnimate",
- "reference": "https://github.com/thecooltechguy/ComfyUI-MagicAnimate",
- "files": [
- "https://github.com/thecooltechguy/ComfyUI-MagicAnimate"
- ],
- "install_type": "git-clone",
- "description": "Easily use Magic Animate within ComfyUI!\n[w/WARN: This extension requires 15GB disk space.]"
- },
{
"author": "knuknX",
"title": "ComfyUI-Image-Tools",
@@ -3802,6 +3832,26 @@
"install_type": "git-clone",
"description": "The easiest way to run & share any ComfyUI workflow [a/https://comfyrun.com](https://comfyrun.com)"
},
+ {
+ "author": "thecooltechguy",
+ "title": "ComfyUI-MagicAnimate",
+ "reference": "https://github.com/thecooltechguy/ComfyUI-MagicAnimate",
+ "files": [
+ "https://github.com/thecooltechguy/ComfyUI-MagicAnimate"
+ ],
+ "install_type": "git-clone",
+ "description": "Easily use Magic Animate within ComfyUI!\n[w/WARN: This extension requires 15GB disk space.]"
+ },
+ {
+ "author": "thecooltechguy",
+ "title": "ComfyUI-ComfyWorkflows",
+ "reference": "https://github.com/thecooltechguy/ComfyUI-ComfyWorkflows",
+ "files": [
+ "https://github.com/thecooltechguy/ComfyUI-ComfyWorkflows"
+ ],
+ "install_type": "git-clone",
+ "description": "The best way to run, share, & discover thousands of ComfyUI workflows."
+ },
{
"author": "styler00dollar",
"title": "ComfyUI-sudo-latent-upscale",
@@ -4214,6 +4264,16 @@
"install_type": "git-clone",
"description": "This is a set of nodes to interact with llama-cpp-python"
},
+ {
+ "author": "Daniel Lewis",
+ "title": "ComfyUI-TTS",
+ "reference": "https://github.com/daniel-lewis-ab/ComfyUI-TTS",
+ "files": [
+ "https://github.com/daniel-lewis-ab/ComfyUI-TTS"
+ ],
+ "install_type": "git-clone",
+ "description": "Text To Speech (TTS) for ComfyUI"
+ },
{
"author": "djbielejeski",
"title": "a-person-mask-generator",
@@ -4352,7 +4412,7 @@
"https://github.com/abyz22/image_control"
],
"install_type": "git-clone",
- "description": "Nodes:abyz22_Padding Image, abyz22_ImpactWildcardEncode, abyz22_setimageinfo, abyz22_SaveImage, abyz22_ImpactWildcardEncode_GetPrompt, abyz22_SetQueue, abyz22_drawmask, abyz22_FirstNonNull, abyz22_blendimages, abyz22_blend_onecolor"
+ "description": "Nodes:abyz22_Padding Image, abyz22_ImpactWildcardEncode, abyz22_setimageinfo, abyz22_SaveImage, abyz22_ImpactWildcardEncode_GetPrompt, abyz22_SetQueue, abyz22_drawmask, abyz22_FirstNonNull, abyz22_blendimages, abyz22_blend_onecolor. Please check workflow in [a/https://github.com/abyz22/image_control](https://github.com/abyz22/image_control)"
},
{
"author": "HAL41",
@@ -4374,6 +4434,16 @@
"install_type": "git-clone",
"description": "Add a node that outputs width and height of the size selected from the preset (.csv)."
},
+ {
+ "author": "nkchocoai",
+ "title": "ComfyUI-PromptUtilities",
+ "reference": "https://github.com/nkchocoai/ComfyUI-PromptUtilities",
+ "files": [
+ "https://github.com/nkchocoai/ComfyUI-PromptUtilities"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes: Format String, Join String List, Load Preset, Load Preset (Advanced), Const String, Const String (multi line). Add useful nodes related to prompt."
+ },
{
"author": "JaredTherriault",
"title": "ComfyUI-JNodes",
@@ -4476,13 +4546,13 @@
},
{
"author": "shiimizu",
- "title": "ComfyUI PhotoMaker",
- "reference": "https://github.com/shiimizu/ComfyUI-PhotoMaker",
+ "title": "ComfyUI PhotoMaker Plus",
+ "reference": "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus",
"files": [
- "https://github.com/shiimizu/ComfyUI-PhotoMaker"
+ "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus"
],
"install_type": "git-clone",
- "description": "ComfyUI reference implementation for [a/PhotoMaker](https://github.com/TencentARC/PhotoMaker) models. [w/WARN:Currently, it is not distinguishable because it shares the same repository name as https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker]"
+ "description": "ComfyUI reference implementation for [a/PhotoMaker](https://github.com/TencentARC/PhotoMaker) models. [w/WARN:The repository name has been changed. For those who have previously installed it, please delete custom_nodes/ComfyUI-PhotoMaker from disk and reinstall this.]"
},
{
"author": "Qais Malkawi",
@@ -4534,9 +4604,160 @@
"install_type": "git-clone",
"description": "Custom node for ComfyUI that makes parts of the image transparent (face, background...)"
},
-
-
-
+ {
+ "author": "pkpkTech",
+ "title": "ComfyUI-ngrok",
+ "reference": "https://github.com/pkpkTech/ComfyUI-ngrok",
+ "files": [
+ "https://github.com/pkpkTech/ComfyUI-ngrok"
+ ],
+ "install_type": "git-clone",
+ "description": "Use ngrok to allow external access to ComfyUI.\nNOTE: Need to manually modify a token inside the __init__.py file."
+ },
+ {
+ "author": "Abdullah Ozmantar",
+ "title": "InstaSwap Face Swap Node for ComfyUI",
+ "reference": "https://github.com/abdozmantar/ComfyUI-InstaSwap",
+ "files": [
+ "https://github.com/abdozmantar/ComfyUI-InstaSwap"
+ ],
+ "install_type": "git-clone",
+ "description": "A quick and easy ComfyUI custom nodes for ultra-quality, lightning-speed face swapping of humans."
+ },
+ {
+ "author": "FlyingFireCo",
+ "title": "tiled_ksampler",
+ "reference": "https://github.com/FlyingFireCo/tiled_ksampler",
+ "files": [
+ "https://github.com/FlyingFireCo/tiled_ksampler"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:Tiled KSampler, Asymmetric Tiled KSampler, Circular VAEDecode."
+ },
+ {
+ "author": "Nlar",
+ "title": "ComfyUI_CartoonSegmentation",
+ "reference": "https://github.com/Nlar/ComfyUI_CartoonSegmentation",
+ "files": [
+ "https://github.com/Nlar/ComfyUI_CartoonSegmentation"
+ ],
+ "install_type": "git-clone",
+ "description": "Front end ComfyUI nodes for CartoonSegmentation Based upon the work of the CartoonSegmentation repository this project will provide a front end to some of the features."
+ },
+ {
+ "author": "godspede",
+ "title": "ComfyUI Substring",
+ "reference": "https://github.com/godspede/ComfyUI_Substring",
+ "files": [
+ "https://github.com/godspede/ComfyUI_Substring"
+ ],
+ "install_type": "git-clone",
+ "description": "Just a simple substring node that takes text and length as input, and outputs the first length characters."
+ },
+ {
+ "author": "gokayfem",
+ "title": "VLM_nodes",
+ "reference": "https://github.com/gokayfem/ComfyUI_VLM_nodes",
+ "files": [
+ "https://github.com/gokayfem/ComfyUI_VLM_nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:VisionQuestionAnswering Node, PromptGenerate Node"
+ },
+ {
+ "author": "Hiero207",
+ "title": "ComfyUI-Hiero-Nodes",
+ "reference": "https://github.com/Hiero207/ComfyUI-Hiero-Nodes",
+ "files": [
+ "https://github.com/Hiero207/ComfyUI-Hiero-Nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:Post to Discord w/ Webhook"
+ },
+ {
+ "author": "azure-dragon-ai",
+ "title": "ComfyUI-ClipScore-Nodes",
+ "reference": "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes",
+ "files": [
+ "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:ImageScore, Loader, Image Processor, Real Image Processor, Fake Image Processor, Text Processor. ComfyUI Nodes for ClipScore"
+ },
+ {
+ "author": "yuvraj108c",
+ "title": "ComfyUI Whisper",
+ "reference": "https://github.com/yuvraj108c/ComfyUI-Whisper",
+ "files": [
+ "https://github.com/yuvraj108c/ComfyUI-Whisper"
+ ],
+ "install_type": "git-clone",
+ "description": "Transcribe audio and add subtitles to videos using Whisper in ComfyUI"
+ },
+ {
+ "author": "blepping",
+ "title": "ComfyUI-bleh",
+ "reference": "https://github.com/blepping/ComfyUI-bleh",
+ "files": [
+ "https://github.com/blepping/ComfyUI-bleh"
+ ],
+ "install_type": "git-clone",
+ "description": "Better TAESD previews, BlehHyperTile."
+ },
+ {
+ "author": "JerryOrbachJr",
+ "title": "ComfyUI-RandomSize",
+ "reference": "https://github.com/JerryOrbachJr/ComfyUI-RandomSize",
+ "files": [
+ "https://github.com/JerryOrbachJr/ComfyUI-RandomSize"
+ ],
+ "install_type": "git-clone",
+ "description": "A ComfyUI custom node that randomly selects a height and width pair from a list in a config file"
+ },
+ {
+ "author": "jamal-alkharrat",
+ "title": "ComfyUI_rotate_image",
+ "reference": "https://github.com/jamal-alkharrat/ComfyUI_rotate_image",
+ "files": [
+ "https://github.com/jamal-alkharrat/ComfyUI_rotate_image"
+ ],
+ "install_type": "git-clone",
+ "description": "ComfyUI Custom Node to Rotate Images, Img2Img node."
+ },
+ {
+ "author": "mape",
+ "title": "mape's ComfyUI Helpers",
+ "reference": "https://github.com/mape/ComfyUI-mape-Helpers",
+ "files": [
+ "https://github.com/mape/ComfyUI-mape-Helpers"
+ ],
+ "install_type": "git-clone",
+ "description": "Multi-monitor image preview, Variable Assigment/Wireless Nodes, Prompt Tweaking, Command Palette, Pinned favourite nodes, Node navigation, Fuzzy search, Node time tracking, Organizing and Error management. For more info visit: [a/https://comfyui.ma.pe/](https://comfyui.ma.pe/)"
+ },
+ {
+ "author": "zhongpei",
+ "title": "Comfyui_image2prompt",
+ "reference": "https://github.com/zhongpei/Comfyui_image2prompt",
+ "files": [
+ "https://github.com/zhongpei/Comfyui_image2prompt"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:Image to Text, Loader Image to Text Model."
+ },
+ {
+ "author": "Loewen-Hob",
+ "title": "Rembg Background Removal Node for ComfyUI",
+ "reference": "https://github.com/Loewen-Hob/rembg-comfyui-node-better",
+ "files": [
+ "https://github.com/Loewen-Hob/rembg-comfyui-node-better"
+ ],
+ "install_type": "git-clone",
+ "description": "This custom node is based on the [a/rembg-comfyui-node](https://github.com/Jcd1230/rembg-comfyui-node) but provides additional functionality to select ONNX models."
+ },
+
+
+
+
{
"author": "Ser-Hilary",
"title": "SDXL_sizing",
diff --git a/extension-node-map.json b/extension-node-map.json
index 4469ecbb..298377be 100644
--- a/extension-node-map.json
+++ b/extension-node-map.json
@@ -51,12 +51,31 @@
],
"https://github.com/54rt1n/ComfyUI-DareMerge": [
[
+ "DM_AdvancedDareModelMerger",
+ "DM_AdvancedModelMerger",
+ "DM_AttentionGradient",
+ "DM_BlockGradient",
+ "DM_BlockModelMerger",
"DM_DareClipMerger",
- "DM_DareModelMerger",
+ "DM_DareModelMergerBlock",
+ "DM_DareModelMergerElement",
"DM_DareModelMergerMBW",
+ "DM_GradientEdit",
+ "DM_GradientOperations",
+ "DM_GradientReporting",
+ "DM_InjectNoise",
+ "DM_LoRALoaderTags",
+ "DM_LoRAReporting",
+ "DM_MBWGradient",
"DM_MagnitudeMasker",
- "DM_MaskedModelMerger",
- "DM_NormalizeModel"
+ "DM_MaskEdit",
+ "DM_MaskOperations",
+ "DM_MaskReporting",
+ "DM_ModelReporting",
+ "DM_NormalizeModel",
+ "DM_QuadMasker",
+ "DM_ShellGradient",
+ "DM_SimpleMasker"
],
{
"title_aux": "ComfyUI-DareMerge"
@@ -150,6 +169,20 @@
"title_aux": "ComfyUI_BadgerTools"
}
],
+ "https://github.com/Acly/comfyui-inpaint-nodes": [
+ [
+ "INPAINT_ApplyFooocusInpaint",
+ "INPAINT_InpaintWithModel",
+ "INPAINT_LoadFooocusInpaint",
+ "INPAINT_LoadInpaintModel",
+ "INPAINT_MaskedBlur",
+ "INPAINT_MaskedFill",
+ "INPAINT_VAEEncodeInpaintConditioning"
+ ],
+ {
+ "title_aux": "ComfyUI Inpaint Nodes"
+ }
+ ],
"https://github.com/Acly/comfyui-tooling-nodes": [
[
"ETN_ApplyMaskToImage",
@@ -706,6 +739,7 @@
"DWPreprocessor",
"DensePosePreprocessor",
"DepthAnythingPreprocessor",
+ "DiffusionEdge_Preprocessor",
"FacialPartColoringFromPoseKps",
"FakeScribblePreprocessor",
"HEDPreprocessor",
@@ -734,6 +768,7 @@
"Scribble_XDoG_Preprocessor",
"SemSegPreprocessor",
"ShufflePreprocessor",
+ "TEEDPreprocessor",
"TilePreprocessor",
"UniFormer-SemSegPreprocessor",
"Unimatch_OptFlowPreprocessor",
@@ -813,6 +848,16 @@
"title_aux": "FizzNodes"
}
],
+ "https://github.com/FlyingFireCo/tiled_ksampler": [
+ [
+ "Asymmetric Tiled KSampler",
+ "Circular VAEDecode",
+ "Tiled KSampler"
+ ],
+ {
+ "title_aux": "tiled_ksampler"
+ }
+ ],
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
[
"ConcatenateString",
@@ -852,6 +897,7 @@
[
"ReActorFaceSwap",
"ReActorLoadFaceModel",
+ "ReActorRestoreFace",
"ReActorSaveFaceModel"
],
{
@@ -870,6 +916,7 @@
[
"Image Scale Bounding Box",
"MS kosmos-2 Interrogator",
+ "Make Inpaint Model",
"Save Image w/o Metadata"
],
{
@@ -905,6 +952,14 @@
"title_aux": "comfyui-enhanced-save-node"
}
],
+ "https://github.com/Hiero207/ComfyUI-Hiero-Nodes": [
+ [
+ "Post to Discord w/ Webhook"
+ ],
+ {
+ "title_aux": "ComfyUI-Hiero-Nodes"
+ }
+ ],
"https://github.com/IDGallagher/ComfyUI-IG-Nodes": [
[
"IG Analyze SSIM",
@@ -927,7 +982,13 @@
],
"https://github.com/Inzaniak/comfyui-ranbooru": [
[
+ "PromptBackground",
+ "PromptLimit",
+ "PromptMix",
+ "PromptRandomWeight",
+ "PromptRemove",
"Ranbooru",
+ "RanbooruURL",
"RandomPicturePath"
],
{
@@ -1041,6 +1102,18 @@
"title_aux": "Rembg Background Removal Node for ComfyUI"
}
],
+ "https://github.com/JerryOrbachJr/ComfyUI-RandomSize": [
+ [
+ "JOJR_RandomSize"
+ ],
+ {
+ "author": "JerryOrbachJr",
+ "description": "A ComfyUI custom node that randomly selects a height and width pair from a list in a config file",
+ "nickname": "Random Size",
+ "title": "Random Size",
+ "title_aux": "ComfyUI-RandomSize"
+ }
+ ],
"https://github.com/Jordach/comfy-plasma": [
[
"JDC_AutoContrast",
@@ -1112,8 +1185,13 @@
],
"https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved": [
[
+ "ADE_AdjustPEFullStretch",
+ "ADE_AdjustPEManual",
+ "ADE_AdjustPESweetspotStretch",
"ADE_AnimateDiffCombine",
+ "ADE_AnimateDiffKeyframe",
"ADE_AnimateDiffLoRALoader",
+ "ADE_AnimateDiffLoaderGen1",
"ADE_AnimateDiffLoaderV1Advanced",
"ADE_AnimateDiffLoaderWithContext",
"ADE_AnimateDiffModelSettings",
@@ -1121,14 +1199,29 @@
"ADE_AnimateDiffModelSettingsSimple",
"ADE_AnimateDiffModelSettings_Release",
"ADE_AnimateDiffSamplingSettings",
+ "ADE_AnimateDiffSettings",
"ADE_AnimateDiffUniformContextOptions",
"ADE_AnimateDiffUnload",
+ "ADE_ApplyAnimateDiffModel",
+ "ADE_ApplyAnimateDiffModelSimple",
+ "ADE_BatchedContextOptions",
"ADE_EmptyLatentImageLarge",
"ADE_IterationOptsDefault",
"ADE_IterationOptsFreeInit",
+ "ADE_LoadAnimateDiffModel",
+ "ADE_LoopedUniformContextOptions",
+ "ADE_LoopedUniformViewOptions",
+ "ADE_MultivalDynamic",
+ "ADE_MultivalScaledMask",
"ADE_NoiseLayerAdd",
"ADE_NoiseLayerAddWeighted",
"ADE_NoiseLayerReplace",
+ "ADE_StandardStaticContextOptions",
+ "ADE_StandardStaticViewOptions",
+ "ADE_StandardUniformContextOptions",
+ "ADE_StandardUniformViewOptions",
+ "ADE_UseEvolvedSampling",
+ "ADE_ViewsOnlyContextOptions",
"AnimateDiffLoaderV1",
"CheckpointLoaderSimpleWithNoiseSelect"
],
@@ -1248,6 +1341,14 @@
"title_aux": "ComfyUI-Diffusers"
}
],
+ "https://github.com/Loewen-Hob/rembg-comfyui-node-better": [
+ [
+ "Image Remove Background (rembg)"
+ ],
+ {
+ "title_aux": "Rembg Background Removal Node for ComfyUI"
+ }
+ ],
"https://github.com/LonicaMewinsky/ComfyUI-MakeFrame": [
[
"BreakFrames",
@@ -1428,6 +1529,21 @@
"title_aux": "ComfyUi-NoodleWebcam"
}
],
+ "https://github.com/Nlar/ComfyUI_CartoonSegmentation": [
+ [
+ "AnimeSegmentation",
+ "KenBurnsConfigLoader",
+ "KenBurns_Processor",
+ "LoadImageFilename"
+ ],
+ {
+ "author": "Nels Larsen",
+ "description": "This extension offers a front end to the Cartoon Segmentation Project (https://github.com/CartoonSegmentation/CartoonSegmentation)",
+ "nickname": "CfyCS",
+ "title": "ComfyUI_CartoonSegmentation",
+ "title_aux": "ComfyUI_CartoonSegmentation"
+ }
+ ],
"https://github.com/NotHarroweD/Harronode": [
[
"Harronode"
@@ -1952,6 +2068,7 @@
"CR Color Gradient",
"CR Color Panel",
"CR Color Tint",
+ "CR Combine Prompt",
"CR Combine Schedules",
"CR Comic Panel Templates",
"CR Composite Text",
@@ -1968,6 +2085,7 @@
"CR Data Bus In",
"CR Data Bus Out",
"CR Debatch Frames",
+ "CR Diamond Panel",
"CR Draw Perspective Text",
"CR Draw Pie",
"CR Draw Shape",
@@ -1981,6 +2099,7 @@
"CR Get Parameter From Prompt",
"CR Gradient Float",
"CR Gradient Integer",
+ "CR Half Drop Panel",
"CR Halftone Filter",
"CR Halftone Grid",
"CR Hires Fix Process Switch",
@@ -1996,7 +2115,6 @@
"CR Image Pipe In",
"CR Image Pipe Out",
"CR Image Size",
- "CR Image XY Panel",
"CR Img2Img Process Switch",
"CR Increment Float",
"CR Increment Integer",
@@ -2010,7 +2128,6 @@
"CR Integer To String",
"CR Interpolate Latents",
"CR Intertwine Lists",
- "CR KSampler",
"CR Keyframe List",
"CR Latent Batch Size",
"CR Latent Input Switch",
@@ -2120,6 +2237,7 @@
"CR Thumbnail Preview",
"CR Trigger",
"CR Upscale Image",
+ "CR VAE Decode",
"CR VAE Input Switch",
"CR Value",
"CR Value Cycler",
@@ -2228,13 +2346,17 @@
"tri3d-face-recognise",
"tri3d-float-to-image",
"tri3d-fuzzification",
+ "tri3d-image-mask-2-box",
+ "tri3d-image-mask-box-2-image",
"tri3d-interaction-canny",
"tri3d-load-pose-json",
"tri3d-pose-adaption",
"tri3d-pose-to-image",
"tri3d-position-hands",
"tri3d-position-parts-batch",
- "tri3d-recolor",
+ "tri3d-recolor-mask",
+ "tri3d-recolor-mask-LAB_space",
+ "tri3d-recolor-mask-RGB_space",
"tri3d-skin-feathered-padded-mask",
"tri3d-swap-pixels"
],
@@ -2792,6 +2914,36 @@
"title_aux": "ComfyUI-Gemini"
}
],
+ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID": [
+ [
+ "IDBaseModelLoader_fromhub",
+ "IDBaseModelLoader_local",
+ "IDControlNetLoader",
+ "IDGenerationNode",
+ "ID_Prompt_Styler",
+ "InsightFaceLoader_Zho",
+ "Ipadapter_instantidLoader"
+ ],
+ {
+ "title_aux": "ComfyUI-InstantID"
+ }
+ ],
+ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO": [
+ [
+ "BaseModel_Loader_fromhub",
+ "BaseModel_Loader_local",
+ "LoRALoader",
+ "NEW_PhotoMaker_Generation",
+ "PhotoMakerAdapter_Loader_fromhub",
+ "PhotoMakerAdapter_Loader_local",
+ "PhotoMaker_Generation",
+ "Prompt_Styler",
+ "Ref_Image_Preprocessing"
+ ],
+ {
+ "title_aux": "ComfyUI PhotoMaker (ZHO)"
+ }
+ ],
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-Q-Align": [
[
"QAlign_Zho"
@@ -2875,6 +3027,16 @@
"title_aux": "ComfyUI-AudioScheduler"
}
],
+ "https://github.com/abdozmantar/ComfyUI-InstaSwap": [
+ [
+ "InstaSwapFaceSwap",
+ "InstaSwapLoadFaceModel",
+ "InstaSwapSaveFaceModel"
+ ],
+ {
+ "title_aux": "InstaSwap Face Swap Node for ComfyUI"
+ }
+ ],
"https://github.com/abyz22/image_control": [
[
"abyz22_FirstNonNull",
@@ -2937,7 +3099,11 @@
"Image Flip_ally",
"Placeholder Tuple",
"aegisflow Multi_Pass",
- "aegisflow Multi_Pass XL"
+ "aegisflow Multi_Pass XL",
+ "af_pipe_in_15",
+ "af_pipe_in_xl",
+ "af_pipe_out_15",
+ "af_pipe_out_xl"
],
{
"title_aux": "AegisFlow Utility Nodes"
@@ -3199,6 +3365,19 @@
"title_aux": "avatar-graph-comfyui"
}
],
+ "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes": [
+ [
+ "HaojihuiClipScoreFakeImageProcessor",
+ "HaojihuiClipScoreImageProcessor",
+ "HaojihuiClipScoreImageScore",
+ "HaojihuiClipScoreLoader",
+ "HaojihuiClipScoreRealImageProcessor",
+ "HaojihuiClipScoreTextProcessor"
+ ],
+ {
+ "title_aux": "ComfyUI-ClipScore-Nodes"
+ }
+ ],
"https://github.com/badjeff/comfyui_lora_tag_loader": [
[
"LoraTagLoader"
@@ -3302,6 +3481,14 @@
"title_aux": "CLIPSeg"
}
],
+ "https://github.com/blepping/ComfyUI-bleh": [
+ [
+ "BlehHyperTile"
+ ],
+ {
+ "title_aux": "ComfyUI-bleh"
+ }
+ ],
"https://github.com/bmad4ever/comfyui_ab_samplercustom": [
[
"AB SamplerCustom (experimental)"
@@ -3404,6 +3591,7 @@
"RGB to HSV",
"Rect Grab Cut",
"Remap",
+ "RemapBarrelDistortion",
"RemapFromInsideParabolas",
"RemapFromQuadrilateral (homography)",
"RemapInsideParabolas",
@@ -3576,14 +3764,21 @@
],
"https://github.com/chaojie/ComfyUI-DragNUWA": [
[
+ "BrushMotion",
+ "CompositeMotionBrush",
+ "CompositeMotionBrushWithoutModel",
"DragNUWA Run",
"DragNUWA Run MotionBrush",
"Get First Image",
"Get Last Image",
+ "InstantCameraMotionBrush",
+ "InstantObjectMotionBrush",
"Load CheckPoint DragNUWA",
"Load MotionBrush From Optical Flow",
"Load MotionBrush From Optical Flow Directory",
+ "Load MotionBrush From Optical Flow Without Model",
"Load MotionBrush From Tracking Points",
+ "Load MotionBrush From Tracking Points Without Model",
"Load Pose KeyPoints",
"Loop",
"LoopEnd_IMAGE",
@@ -3662,7 +3857,10 @@
],
"https://github.com/chaojie/ComfyUI-RAFT": [
[
- "RAFT Run"
+ "Load MotionBrush",
+ "RAFT Run",
+ "Save MotionBrush",
+ "VizMotionBrush"
],
{
"title_aux": "ComfyUI-RAFT"
@@ -3670,10 +3868,16 @@
],
"https://github.com/chflame163/ComfyUI_LayerStyle": [
[
+ "LayerFilter: ChannelShake",
"LayerFilter: GaussianBlur",
"LayerFilter: MotionBlur",
+ "LayerFilter: SoftLight",
"LayerMask: MaskBoxDetect",
+ "LayerMask: MaskEdgeShrink",
+ "LayerMask: MaskGradient",
+ "LayerMask: MaskGrow",
"LayerMask: MaskInvert",
+ "LayerMask: MaskMotionBlur",
"LayerMask: MaskPreview",
"LayerStyle: ColorOverlay",
"LayerStyle: DropShadow",
@@ -3682,10 +3886,12 @@
"LayerStyle: InnerShadow",
"LayerStyle: OuterGlow",
"LayerStyle: Stroke",
- "LayerStyle_Illumine",
+ "LayerUtility: ColorImage",
"LayerUtility: ColorPicker",
"LayerUtility: ExtendCanvas",
+ "LayerUtility: GetColorTone",
"LayerUtility: GetImageSize",
+ "LayerUtility: GradientImage",
"LayerUtility: ImageBlend",
"LayerUtility: ImageBlendAdvance",
"LayerUtility: ImageOpacity",
@@ -3893,6 +4099,7 @@
"ConditioningConcat",
"ConditioningSetArea",
"ConditioningSetAreaPercentage",
+ "ConditioningSetAreaStrength",
"ConditioningSetMask",
"ConditioningSetTimestepRange",
"ConditioningZeroOut",
@@ -3941,6 +4148,7 @@
"KarrasScheduler",
"LatentAdd",
"LatentBatch",
+ "LatentBatchSeedBehavior",
"LatentBlend",
"LatentComposite",
"LatentCompositeMasked",
@@ -3968,6 +4176,8 @@
"ModelSamplingDiscrete",
"PatchModelAddDownscale",
"PerpNeg",
+ "PhotoMakerEncode",
+ "PhotoMakerLoader",
"PolyexponentialScheduler",
"PorterDuffImageComposite",
"PreviewImage",
@@ -4093,6 +4303,7 @@
"DebugTensorShape+",
"ExtractKeyframes+",
"GetImageSize+",
+ "ImageApplyLUT+",
"ImageCASharpening+",
"ImageCompositeFromMaskBatch+",
"ImageCrop+",
@@ -4112,6 +4323,7 @@
"MaskFromColor+",
"MaskPreview+",
"ModelCompile+",
+ "NoiseFromImage+",
"SDXLResolutionPicker+",
"SimpleMath+",
"TransitionMask+"
@@ -4152,9 +4364,19 @@
"title_aux": "ComfyUI-Llama"
}
],
+ "https://github.com/daniel-lewis-ab/ComfyUI-TTS": [
+ [
+ "Load_Piper_Model",
+ "Piper_Speak_Text"
+ ],
+ {
+ "title_aux": "ComfyUI-TTS"
+ }
+ ],
"https://github.com/darkpixel/darkprompts": [
[
"DarkCombine",
+ "DarkLoRALoader",
"DarkPrompt"
],
{
@@ -4591,15 +4813,18 @@
"LogString",
"LogVec2",
"LogVec3",
+ "RF_AtIndexString",
"RF_BoolToString",
"RF_FloatToString",
"RF_IntToString",
"RF_JsonStyleLoader",
"RF_MergeLines",
"RF_NumberToString",
+ "RF_OptionsString",
"RF_RangeFloat",
"RF_RangeInt",
"RF_RangeNumber",
+ "RF_SavePromptInfo",
"RF_SplitLines",
"RF_TextConcatenate",
"RF_TextInput",
@@ -4652,7 +4877,8 @@
"https://github.com/glifxyz/ComfyUI-GlifNodes": [
[
"GlifConsistencyDecoder",
- "GlifPatchConsistencyDecoderTiled"
+ "GlifPatchConsistencyDecoderTiled",
+ "SDXLAspectRatio"
],
{
"title_aux": "ComfyUI-GlifNodes"
@@ -4666,6 +4892,23 @@
"title_aux": "Load Image From Base64 URI"
}
],
+ "https://github.com/godspede/ComfyUI_Substring": [
+ [
+ "SubstringTheory"
+ ],
+ {
+ "title_aux": "ComfyUI Substring"
+ }
+ ],
+ "https://github.com/gokayfem/ComfyUI_VLM_nodes": [
+ [
+ "PromptGenerate",
+ "VisionTextQuestion"
+ ],
+ {
+ "title_aux": "VLM_nodes"
+ }
+ ],
"https://github.com/guoyk93/yk-node-suite-comfyui": [
[
"YKImagePadForOutpaint",
@@ -4881,6 +5124,14 @@
"title_aux": "Efficiency Nodes for ComfyUI Version 2.0+"
}
],
+ "https://github.com/jamal-alkharrat/ComfyUI_rotate_image": [
+ [
+ "RotateImage"
+ ],
+ {
+ "title_aux": "ComfyUI_rotate_image"
+ }
+ ],
"https://github.com/jamesWalker55/comfyui-various": [
[],
{
@@ -4899,6 +5150,7 @@
],
"https://github.com/jitcoder/lora-info": [
[
+ "ImageFromURL",
"LoraInfo"
],
{
@@ -4978,6 +5230,15 @@
"title_aux": "Knodes"
}
],
+ "https://github.com/kijai/ComfyUI-CCSR": [
+ [
+ "CCSR_Model_Select",
+ "CCSR_Upscale"
+ ],
+ {
+ "title_aux": "ComfyUI-CCSR"
+ }
+ ],
"https://github.com/kijai/ComfyUI-DDColor": [
[
"DDColor_Colorize"
@@ -5020,6 +5281,7 @@
"GenerateNoise",
"GetImageRangeFromBatch",
"GetImagesFromBatchIndexed",
+ "GetLatentsFromBatchIndexed",
"GrowMaskWithBlur",
"INTConstant",
"ImageBatchRepeatInterleaving",
@@ -5028,10 +5290,13 @@
"ImageGrabPIL",
"ImageGridComposite2x2",
"ImageGridComposite3x3",
+ "ImageTransformByNormalizedAmplitude",
"InjectNoiseToLatent",
"InsertImageBatchByIndexes",
"NormalizeLatent",
+ "NormalizedAmplitudeToMask",
"OffsetMask",
+ "OffsetMaskByNormalizedAmplitude",
"ReferenceOnlySimple3",
"ReplaceImagesInBatch",
"ResizeMask",
@@ -5042,6 +5307,7 @@
"SoundReactive",
"SplitBboxes",
"StableZero123_BatchSchedule",
+ "StringConstant",
"VRAM_Debug",
"WidgetToString"
],
@@ -5141,13 +5407,21 @@
],
"https://github.com/komojini/komojini-comfyui-nodes": [
[
+ "BatchCreativeInterpolationNodeDynamicSettings",
"CachedGetter",
"DragNUWAImageCanvas",
"FlowBuilder",
+ "FlowBuilder (adv)",
+ "FlowBuilder (advanced)",
+ "FlowBuilder (advanced) Setter",
"FlowBuilderSetter",
+ "FlowBuilderSetter (adv)",
"Getter",
+ "ImageCropByRatio",
+ "ImageCropByRatioAndResize",
"ImageGetter",
"ImageMerger",
+ "ImagesCropByRatioAndResizeBatch",
"KSamplerAdvancedCacheable",
"KSamplerCacheable",
"Setter",
@@ -5245,6 +5519,8 @@
],
"https://github.com/longgui0318/comfyui-mask-util": [
[
+ "Mask Region Info",
+ "Mask Selection Of Masks",
"Split Masks"
],
{
@@ -5288,6 +5564,7 @@
"DetailerForEachDebug",
"DetailerForEachDebugPipe",
"DetailerForEachPipe",
+ "DetailerForEachPipeForAnimateDiff",
"DetailerHookCombine",
"DetailerPipeToBasicPipe",
"EditBasicPipe",
@@ -5310,8 +5587,10 @@
"ImpactCompare",
"ImpactConcatConditionings",
"ImpactConditionalBranch",
+ "ImpactConditionalBranchSelMode",
"ImpactConditionalStopIteration",
"ImpactControlBridge",
+ "ImpactControlNetApplyAdvancedSEGS",
"ImpactControlNetApplySEGS",
"ImpactControlNetClearSEGS",
"ImpactDecomposeSEGS",
@@ -5469,6 +5748,7 @@
"GlobalSeed //Inspire",
"HEDPreprocessor_Provider_for_SEGS //Inspire",
"HyperTile //Inspire",
+ "IPAdapterModelHelper //Inspire",
"ImageBatchSplitter //Inspire",
"InpaintPreprocessor_Provider_for_SEGS //Inspire",
"KSampler //Inspire",
@@ -5553,6 +5833,18 @@
"title_aux": "m957ymj75urz/ComfyUI-Custom-Nodes"
}
],
+ "https://github.com/mape/ComfyUI-mape-Helpers": [
+ [
+ "mape Variable"
+ ],
+ {
+ "author": "mape",
+ "description": "Various QoL improvements like prompt tweaking, variable assignment, image preview, fuzzy search, error reporting, organizing and node navigation.",
+ "nickname": "\ud83d\udfe1 mape's helpers",
+ "title": "mape's helpers",
+ "title_aux": "mape's ComfyUI Helpers"
+ }
+ ],
"https://github.com/marhensa/sdxl-recommended-res-calc": [
[
"RecommendedResCalc"
@@ -5800,8 +6092,23 @@
"title_aux": "comfyui-NDI"
}
],
+ "https://github.com/nkchocoai/ComfyUI-PromptUtilities": [
+ [
+ "PromptUtilitiesConstString",
+ "PromptUtilitiesConstStringMultiLine",
+ "PromptUtilitiesFormatString",
+ "PromptUtilitiesJoinStringList",
+ "PromptUtilitiesLoadPreset",
+ "PromptUtilitiesLoadPresetAdvanced"
+ ],
+ {
+ "title_aux": "ComfyUI-PromptUtilities"
+ }
+ ],
"https://github.com/nkchocoai/ComfyUI-SizeFromPresets": [
[
+ "EmptyLatentImageFromPresetsSD15",
+ "EmptyLatentImageFromPresetsSDXL",
"SizeFromPresetsSD15",
"SizeFromPresetsSDXL"
],
@@ -5989,6 +6296,7 @@
"AnyAspectRatio",
"ConditioningMultiplier_PoP",
"ConditioningNormalizer_PoP",
+ "DallE3_PoP",
"LoadImageResizer_PoP",
"LoraStackLoader10_PoP",
"LoraStackLoader_PoP",
@@ -6191,6 +6499,7 @@
"AreaToMask",
"CLIPSeg",
"CLIPSeg_",
+ "CenterImage",
"CharacterInText",
"ChatGPTOpenAI",
"CkptNames_",
@@ -6217,6 +6526,7 @@
"LimitNumber",
"LoadImagesFromPath",
"LoadImagesFromURL",
+ "LoraNames_",
"MergeLayers",
"MirroredImage",
"MultiplicationNode",
@@ -6229,6 +6539,7 @@
"RandomPrompt",
"ResizeImageMixlab",
"SamplerNames_",
+ "SaveImageToLocal",
"ScreenShare",
"Seed_",
"ShowLayer",
@@ -6252,15 +6563,14 @@
"title_aux": "comfyui-mixlab-nodes"
}
],
- "https://github.com/shiimizu/ComfyUI-PhotoMaker": [
+ "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus": [
[
- "PhotoMakerEncode",
- "PhotoMakerLoader",
+ "PhotoMakerEncodePlus",
"PhotoMakerStyles",
"PrepImagesForClipVisionFromPath"
],
{
- "title_aux": "ComfyUI PhotoMaker"
+ "title_aux": "ComfyUI PhotoMaker Plus"
}
],
"https://github.com/shiimizu/ComfyUI-TiledDiffusion": [
@@ -6293,6 +6603,7 @@
],
"https://github.com/shingo1228/ComfyUI-send-eagle-slim": [
[
+ "Send Eagle with text",
"Send Webp Image to Eagle"
],
{
@@ -7013,6 +7324,7 @@
"EZLoadImgBatchFromUrlsNode",
"EZLoadImgFromUrlNode",
"EZRemoveImgBackground",
+ "EZS3Uploader",
"EZVideoCombiner"
],
{
@@ -7148,7 +7460,9 @@
"easy XYInputs: Denoise",
"easy XYInputs: ModelMergeBlocks",
"easy XYInputs: NegativeCond",
+ "easy XYInputs: NegativeCondList",
"easy XYInputs: PositiveCond",
+ "easy XYInputs: PositiveCondList",
"easy XYInputs: PromptSR",
"easy XYInputs: Sampler/Scheduler",
"easy XYInputs: Seeds++ Batch",
@@ -7156,21 +7470,34 @@
"easy XYPlot",
"easy XYPlotAdvanced",
"easy a1111Loader",
+ "easy boolean",
"easy comfyLoader",
+ "easy compare",
"easy controlnetLoader",
"easy controlnetLoaderADV",
+ "easy convertAnything",
"easy detailerFix",
+ "easy float",
+ "easy fooocusInpaintLoader",
"easy fullLoader",
"easy fullkSampler",
"easy globalSeed",
"easy hiresFix",
+ "easy if",
"easy imageInsetCrop",
"easy imagePixelPerfect",
"easy imageRemoveBG",
+ "easy imageSave",
+ "easy imageScaleDown",
+ "easy imageScaleDownBy",
+ "easy imageScaleDownToSize",
"easy imageSize",
"easy imageSizeByLongerSide",
"easy imageSizeBySide",
+ "easy imageSwitch",
"easy imageToMask",
+ "easy int",
+ "easy joinImageBatch",
"easy kSampler",
"easy kSamplerDownscaleUnet",
"easy kSamplerInpainting",
@@ -7191,14 +7518,20 @@
"easy preSamplingAdvanced",
"easy preSamplingDynamicCFG",
"easy preSamplingSdTurbo",
+ "easy promptList",
+ "easy rangeFloat",
+ "easy rangeInt",
"easy samLoaderPipe",
"easy seed",
+ "easy showAnything",
"easy showSpentTime",
+ "easy string",
"easy stylesSelector",
"easy svdLoader",
"easy ultralyticsDetectorPipe",
"easy unSampler",
"easy wildcards",
+ "easy xyAny",
"easy zero123Loader"
],
{
@@ -7300,6 +7633,16 @@
"title_aux": "tdxh_node_comfyui"
}
],
+ "https://github.com/yuvraj108c/ComfyUI-Whisper": [
+ [
+ "Add Subtitles To Background",
+ "Add Subtitles To Frames",
+ "Apply Whisper"
+ ],
+ {
+ "title_aux": "ComfyUI Whisper"
+ }
+ ],
"https://github.com/zcfrank1st/Comfyui-Toolbox": [
[
"PreviewJson",
@@ -7349,6 +7692,15 @@
"title_aux": "ComfyUI_zfkun"
}
],
+ "https://github.com/zhongpei/Comfyui_image2prompt": [
+ [
+ "Image2Text",
+ "LoadImage2TextModel"
+ ],
+ {
+ "title_aux": "Comfyui_image2prompt"
+ }
+ ],
"https://github.com/zhuanqianfish/ComfyUI-EasyNode": [
[
"EasyCaptureNode",
diff --git a/js/comfyui-manager.js b/js/comfyui-manager.js
index 2452dbea..00d5456d 100644
--- a/js/comfyui-manager.js
+++ b/js/comfyui-manager.js
@@ -17,12 +17,13 @@ import { SnapshotManager } from "./snapshot.js";
import { ModelInstaller } from "./model-downloader.js";
import { manager_instance, setManagerInstance, install_via_git_url, install_pip, rebootAPI, free_models } from "./common.js";
import { ComponentBuilderDialog, load_components, set_component_policy, getPureName } from "./components-manager.js";
+import { set_double_click_policy } from "./node_fixer.js";
var docStyle = document.createElement('style');
docStyle.innerHTML = `
#cm-manager-dialog {
width: 1000px;
- height: 495px;
+ height: 520px;
box-sizing: content-box;
z-index: 10000;
}
@@ -136,7 +137,7 @@ docStyle.innerHTML = `
.cm-notice-board {
width: 290px;
- height: 230px;
+ height: 270px;
overflow: auto;
color: var(--input-text);
border: 1px solid var(--descrip-text);
@@ -906,6 +907,27 @@ class ManagerMenuDialog extends ComfyDialog {
set_component_policy(event.target.value);
});
+ let dbl_click_policy_combo = document.createElement("select");
+ dbl_click_policy_combo.setAttribute("title", "When loading the workflow, configure which version of the component to use.");
+ dbl_click_policy_combo.className = "cm-menu-combo";
+ dbl_click_policy_combo.appendChild($el('option', { value: 'none', text: 'Double-Click: None' }, []));
+ dbl_click_policy_combo.appendChild($el('option', { value: 'copy-all', text: 'Double-Click: Copy All Connections' }, []));
+ dbl_click_policy_combo.appendChild($el('option', { value: 'copy-input', text: 'Double-Click: Copy Input Connections' }, []));
+ dbl_click_policy_combo.appendChild($el('option', { value: 'possible-input', text: 'Double-Click: Possible Input Connections' }, []));
+ dbl_click_policy_combo.appendChild($el('option', { value: 'dual', text: 'Double-Click: Possible(left) + Copy(right)' }, []));
+
+ api.fetchApi('/manager/dbl_click/policy')
+ .then(response => response.text())
+ .then(data => {
+ dbl_click_policy_combo.value = data;
+ set_double_click_policy(data);
+ });
+
+ dbl_click_policy_combo.addEventListener('change', function (event) {
+ api.fetchApi(`/manager/dbl_click/policy?value=${event.target.value}`);
+ set_double_click_policy(event.target.value);
+ });
+
api.fetchApi('/manager/share_option')
.then(response => response.text())
.then(data => {
@@ -935,6 +957,7 @@ class ManagerMenuDialog extends ComfyDialog {
default_ui_combo,
share_combo,
component_policy_combo,
+ dbl_click_policy_combo,
$el("br", {}, []),
$el("br", {}, []),
@@ -1271,7 +1294,10 @@ app.registerExtension({
async nodeCreated(node, app) {
if(!node.badge_enabled) {
node.getNickname = function () { return getNickname(node, node.comfyClass.trim()) };
- const orig = node.__proto__.onDrawForeground;
+ let orig = node.onDrawForeground;
+ if(!orig)
+ orig = node.__proto__.onDrawForeground;
+
node.onDrawForeground = function (ctx) {
drawBadge(node, orig, arguments)
};
diff --git a/js/node_fixer.js b/js/node_fixer.js
index 30af6402..94b4c747 100644
--- a/js/node_fixer.js
+++ b/js/node_fixer.js
@@ -1,6 +1,16 @@
import { app } from "../../scripts/app.js";
import { api } from "../../scripts/api.js";
+let double_click_policy = "copy-all";
+
+api.fetchApi('/manager/dbl_click/policy')
+ .then(response => response.text())
+ .then(data => set_double_click_policy(data));
+
+export function set_double_click_policy(mode) {
+ double_click_policy = mode;
+}
+
function addMenuHandler(nodeType, cb) {
const getOpts = nodeType.prototype.getExtraMenuOptions;
nodeType.prototype.getExtraMenuOptions = function () {
@@ -10,8 +20,88 @@ function addMenuHandler(nodeType, cb) {
};
}
+function distance(node1, node2) {
+ let dx = (node1.pos[0] + node1.size[0]/2) - (node2.pos[0] + node2.size[0]/2);
+ let dy = (node1.pos[1] + node1.size[1]/2) - (node2.pos[1] + node2.size[1]/2);
+ return Math.sqrt(dx * dx + dy * dy);
+}
-function node_info_copy(src, dest) {
+function lookup_nearest_nodes(node) {
+ let nearest_distance = Infinity;
+ let nearest_node = null;
+ for(let other of app.graph._nodes) {
+ if(other === node)
+ continue;
+
+ let dist = distance(node, other);
+ if (dist < nearest_distance && dist < 1000) {
+ nearest_distance = dist;
+ nearest_node = other;
+ }
+ }
+
+ return nearest_node;
+}
+
+function lookup_nearest_inputs(node) {
+ let input_map = {};
+
+ for(let i in node.inputs) {
+ let input = node.inputs[i];
+
+ if(input.link || input_map[input.type])
+ continue;
+
+ input_map[input.type] = {distance: Infinity, input_name: input.name, node: null, slot: null};
+ }
+
+ let x = node.pos[0];
+ let y = node.pos[1] + node.size[1]/2;
+
+ for(let other of app.graph._nodes) {
+ if(other === node || !other.outputs)
+ continue;
+
+ let dx = x - (other.pos[0] + other.size[0]);
+ let dy = y - (other.pos[1] + other.size[1]/2);
+
+ if(dx < 0)
+ continue;
+
+ let dist = Math.sqrt(dx * dx + dy * dy);
+
+ for(let input_type in input_map) {
+ for(let j in other.outputs) {
+ let output = other.outputs[j];
+ if(output.type == input_type) {
+ if(input_map[input_type].distance > dist) {
+ input_map[input_type].distance = dist;
+ input_map[input_type].node = other;
+ input_map[input_type].slot = parseInt(j);
+ }
+ }
+ }
+ }
+ }
+
+ let res = {};
+ for (let i in input_map) {
+ if (input_map[i].node) {
+ res[i] = input_map[i];
+ }
+ }
+
+ return res;
+}
+
+function connect_inputs(nearest_inputs, node) {
+ for(let i in nearest_inputs) {
+ let info = nearest_inputs[i];
+ info.node.connect(info.slot, node.id, info.input_name);
+ }
+}
+
+function node_info_copy(src, dest, connect_both) {
// copy input connections
for(let i in src.inputs) {
let input = src.inputs[i];
@@ -23,25 +113,27 @@ function node_info_copy(src, dest) {
}
// copy output connections
- let output_links = {};
- for(let i in src.outputs) {
- let output = src.outputs[i];
- if(output.links) {
- let links = [];
- for(let j in output.links) {
- links.push(app.graph.links[output.links[j]]);
+ if(connect_both) {
+ let output_links = {};
+ for(let i in src.outputs) {
+ let output = src.outputs[i];
+ if(output.links) {
+ let links = [];
+ for(let j in output.links) {
+ links.push(app.graph.links[output.links[j]]);
+ }
+ output_links[output.name] = links;
}
- output_links[output.name] = links;
}
- }
- for(let i in dest.outputs) {
- let links = output_links[dest.outputs[i].name];
- if(links) {
- for(let j in links) {
- let link = links[j];
- let target_node = app.graph.getNodeById(link.target_id);
- dest.connect(parseInt(i), target_node, link.target_slot);
+ for(let i in dest.outputs) {
+ let links = output_links[dest.outputs[i].name];
+ if(links) {
+ for(let j in links) {
+ let link = links[j];
+ let target_node = app.graph.getNodeById(link.target_id);
+ dest.connect(parseInt(i), target_node, link.target_slot);
+ }
}
}
}
@@ -52,6 +144,56 @@ function node_info_copy(src, dest) {
app.registerExtension({
name: "Comfy.Manager.NodeFixer",
+ async nodeCreated(node, app) {
+ let orig_dblClick = node.onDblClick;
+ node.onDblClick = function (e, pos, self) {
+ orig_dblClick?.apply?.(this, arguments);
+
+ if((!node.inputs && !node.outputs) || pos[1] > 0)
+ return;
+
+ switch(double_click_policy) {
+ case "copy-all":
+ case "copy-input":
+ {
+ if(node.inputs?.some(x => x.link != null) || node.outputs?.some(x => x.links != null && x.links.length > 0) )
+ return;
+
+ let src_node = lookup_nearest_nodes(node);
+ if(src_node)
+ node_info_copy(src_node, node, double_click_policy == "copy-all");
+ }
+ break;
+ case "possible-input":
+ {
+ let nearest_inputs = lookup_nearest_inputs(node);
+ if(nearest_inputs)
+ connect_inputs(nearest_inputs, node);
+ }
+ break;
+ case "dual":
+ {
+ if(pos[0] < node.size[0]/2) {
+ // left: possible-input
+ let nearest_inputs = lookup_nearest_inputs(node);
+ if(nearest_inputs)
+ connect_inputs(nearest_inputs, node);
+ }
+ else {
+ // right: copy-all
+ if(node.inputs?.some(x => x.link != null) || node.outputs?.some(x => x.links != null && x.links.length > 0) )
+ return;
+
+ let src_node = lookup_nearest_nodes(node);
+ if(src_node)
+ node_info_copy(src_node, node, true);
+ }
+ }
+ break;
+ }
+ }
+ },
+
beforeRegisterNodeDef(nodeType, nodeData, app) {
addMenuHandler(nodeType, function (_, options) {
options.push({
diff --git a/model-list.json b/model-list.json
index 5260b3a8..9464fd92 100644
--- a/model-list.json
+++ b/model-list.json
@@ -86,9 +86,9 @@
"base": "upscale",
"save_path": "default",
"description": "4x-AnimeSharp upscaler model",
- "reference": "https://huggingface.co/konohashinobi4/4xAnimesharp",
+ "reference": "https://huggingface.co/Kim2091/AnimeSharp/",
"filename": "4x-AnimeSharp.pth",
- "url": "https://huggingface.co/konohashinobi4/4xAnimesharp/resolve/main/4x-AnimeSharp.pth"
+ "url": "https://huggingface.co/Kim2091/AnimeSharp/resolve/main/4x-AnimeSharp.pth"
},
{
"name": "4x-UltraSharp",
@@ -96,9 +96,9 @@
"base": "upscale",
"save_path": "default",
"description": "4x-UltraSharp upscaler model",
- "reference": "https://upscale.wiki/wiki/Model_Database",
+ "reference": "https://huggingface.co/Kim2091/UltraSharp/",
"filename": "4x-UltraSharp.pth",
- "url": "https://huggingface.co/datasets/Kizi-Art/Upscale/resolve/fa98e357882a23b8e7928957a39462fbfaee1af5/4x-UltraSharp.pth"
+ "url": "https://huggingface.co/Kim2091/UltraSharp/resolve/main/4x-UltraSharp.pth"
},
{
"name": "4x_NMKD-Siax_200k",
@@ -145,7 +145,7 @@
"type": "insightface",
"base" : "inswapper",
"save_path": "insightface",
- "description": "[264MB] Checkpoint of the insightface swapper model
(used by ComfyUI-FaceSwap, comfyui-reactor-node, CharacterFaceSwap,
ComfyUI roop and comfy_mtb)",
+ "description": "[264MB] Checkpoint of the insightface swapper model\n(used by ComfyUI-FaceSwap, comfyui-reactor-node, CharacterFaceSwap,\nComfyUI roop and comfy_mtb)",
"reference": "https://github.com/facefusion/facefusion-assets",
"filename": "inswapper_128_fp16.onnx",
"url": "https://github.com/facefusion/facefusion-assets/releases/download/models/inswapper_128_fp16.onnx"
@@ -155,7 +155,7 @@
"type": "insightface",
"base" : "inswapper",
"save_path": "insightface",
- "description": "[529MB] Checkpoint of the insightface swapper model
(used by ComfyUI-FaceSwap, comfyui-reactor-node, CharacterFaceSwap,
ComfyUI roop and comfy_mtb)",
+ "description": "[529MB] Checkpoint of the insightface swapper model\n(used by ComfyUI-FaceSwap, comfyui-reactor-node, CharacterFaceSwap,\nComfyUI roop and comfy_mtb)",
"reference": "https://github.com/facefusion/facefusion-assets",
"filename": "inswapper_128.onnx",
"url": "https://github.com/facefusion/facefusion-assets/releases/download/models/inswapper_128.onnx"
@@ -205,7 +205,7 @@
"type": "checkpoints",
"base": "SVD",
"save_path": "checkpoints/SVD",
- "description": "Stable Video Diffusion (SVD) Image-to-Video is a diffusion model that takes in a still image as a conditioning frame, and generates a video from it.
NOTE: 14 frames @ 576x1024",
+ "description": "Stable Video Diffusion (SVD) Image-to-Video is a diffusion model that takes in a still image as a conditioning frame, and generates a video from it.\nNOTE: 14 frames @ 576x1024",
"reference": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid",
"filename": "svd.safetensors",
"url": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid/resolve/main/svd.safetensors"
@@ -225,7 +225,7 @@
"type": "checkpoints",
"base": "SVD",
"save_path": "checkpoints/SVD",
- "description": "Stable Video Diffusion (SVD) Image-to-Video is a diffusion model that takes in a still image as a conditioning frame, and generates a video from it.
NOTE: 25 frames @ 576x1024 ",
+ "description": "Stable Video Diffusion (SVD) Image-to-Video is a diffusion model that takes in a still image as a conditioning frame, and generates a video from it.\nNOTE: 25 frames @ 576x1024 ",
"reference": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt",
"filename": "svd_xt.safetensors",
"url": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt/resolve/main/svd_xt.safetensors"
@@ -673,8 +673,8 @@
{
"name": "CLIPVision model (stabilityai/clip_vision_g)",
"type": "clip_vision",
- "base": "SDXL",
- "save_path": "clip_vision/SDXL",
+ "base": "vit-g",
+ "save_path": "clip_vision",
"description": "[3.69GB] clip_g vision model",
"reference": "https://huggingface.co/stabilityai/control-lora",
"filename": "clip_vision_g.safetensors",
@@ -683,38 +683,18 @@
{
"name": "CLIPVision model (openai/clip-vit-large)",
"type": "clip_vision",
- "base": "SD1.5",
- "save_path": "clip_vision/SD1.5",
+ "base": "ViT-L",
+ "save_path": "clip_vision",
"description": "[1.7GB] CLIPVision model (needed for styles model)",
"reference": "https://huggingface.co/openai/clip-vit-large-patch14",
- "filename": "pytorch_model.bin",
- "url": "https://huggingface.co/openai/clip-vit-large-patch14/resolve/main/pytorch_model.bin"
- },
- {
- "name": "CLIPVision model (IP-Adapter) 1.5",
- "type": "clip_vision",
- "base": "SD1.5",
- "save_path": "clip_vision/SD1.5",
- "description": "[2.5GB] CLIPVision model (needed for IP-Adapter)",
- "reference": "https://huggingface.co/h94/IP-Adapter",
- "filename": "pytorch_model.bin",
- "url": "https://huggingface.co/h94/IP-Adapter/resolve/main/models/image_encoder/pytorch_model.bin"
- },
- {
- "name": "CLIPVision model (IP-Adapter) XL",
- "type": "clip_vision",
- "base": "SDXL",
- "save_path": "clip_vision/SDXL",
- "description": "[3.69GB] CLIPVision model (needed for IP-Adapter)",
- "reference": "https://huggingface.co/h94/IP-Adapter",
- "filename": "pytorch_model.bin",
- "url": "https://huggingface.co/h94/IP-Adapter/resolve/main/sdxl_models/image_encoder/pytorch_model.bin"
+ "filename": "clip-vit-large-patch14.bin",
+ "url": "https://huggingface.co/openai/clip-vit-large-patch14/resolve/main/model.safetensors"
},
{
"name": "CLIPVision model (IP-Adapter) CLIP-ViT-H-14-laion2B-s32B-b79K",
"type": "clip_vision",
- "base": "SD1.5",
- "save_path": "clip_vision/SD1.5",
+ "base": "ViT-H",
+ "save_path": "clip_vision",
"description": "[2.5GB] CLIPVision model (needed for IP-Adapter)",
"reference": "https://huggingface.co/h94/IP-Adapter",
"filename": "CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors",
@@ -723,8 +703,8 @@
{
"name": "CLIPVision model (IP-Adapter) CLIP-ViT-bigG-14-laion2B-39B-b160k",
"type": "clip_vision",
- "base": "SDXL",
- "save_path": "clip_vision/SDXL",
+ "base": "ViT-G",
+ "save_path": "clip_vision",
"description": "[3.69GB] CLIPVision model (needed for IP-Adapter)",
"reference": "https://huggingface.co/h94/IP-Adapter",
"filename": "CLIP-ViT-bigG-14-laion2B-39B-b160k.safetensors",
@@ -998,7 +978,7 @@
"type": "controlnet",
"base": "SD1.5",
"save_path": "default",
- "description": "Safetensors/FP16 versions of the new ControlNet-v1-1 checkpoints (tile) / v11f1e
You need to this model for Tiled Resample",
+ "description": "Safetensors/FP16 versions of the new ControlNet-v1-1 checkpoints (tile) / v11f1e\nYou need to this model for Tiled Resample",
"reference": "https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors",
"filename": "control_v11f1e_sd15_tile_fp16.safetensors",
"url": "https://huggingface.co/comfyanonymous/ControlNet-v1-1_fp16_safetensors/resolve/main/control_v11f1e_sd15_tile_fp16.safetensors"
@@ -1575,27 +1555,77 @@
"type": "IP-Adapter",
"base": "SD1.5",
"save_path": "ipadapter",
- "description": "IP-Adapter-FaceID Model (SD1.5)",
+ "description": "IP-Adapter-FaceID Model (SD1.5) [ipadapter]",
"reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
"filename": "ip-adapter-faceid_sd15.bin",
"url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid_sd15.bin"
},
+ {
+ "name": "ip-adapter-faceid-plus_sd15.bin",
+ "type": "IP-Adapter",
+ "base": "SD1.5",
+ "save_path": "ipadapter",
+ "description": "IP-Adapter-FaceID Plus Model (SD1.5) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid-plus_sd15.bin",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plus_sd15.bin"
+ },
+ {
+ "name": "ip-adapter-faceid-portrait_sd15.bin",
+ "type": "IP-Adapter",
+ "base": "SD1.5",
+ "save_path": "ipadapter",
+ "description": "IP-Adapter-FaceID Portrait Model (SD1.5) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid-portrait_sd15.bin",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-portrait_sd15.bin"
+ },
+ {
+ "name": "ip-adapter-faceid_sdxl.bin",
+ "type": "IP-Adapter",
+ "base": "SD1.5",
+ "save_path": "ipadapter",
+ "description": "IP-Adapter-FaceID Model (SDXL) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid_sdxl.bin",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid_sdxl.bin"
+ },
+ {
+ "name": "ip-adapter-faceid-plusv2_sdxl.bin",
+ "type": "IP-Adapter",
+ "base": "SD1.5",
+ "save_path": "ipadapter",
+ "description": "IP-Adapter-FaceID Plus Model (SDXL) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid-plusv2_sdxl.bin",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sdxl.bin"
+ },
{
"name": "ip-adapter-faceid_sd15_lora.safetensors",
"type": "lora",
"base": "SD1.5",
"save_path": "loras/ipadapter",
- "description": "IP-Adapter-FaceID LoRA Model (SD1.5)",
+ "description": "IP-Adapter-FaceID LoRA Model (SD1.5) [ipadapter]",
"reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
"filename": "ip-adapter-faceid_sd15_lora.safetensors",
"url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid_sd15_lora.safetensors"
},
+ {
+ "name": "ip-adapter-faceid-plus_sd15_lora.safetensors",
+ "type": "lora",
+ "base": "SD1.5",
+ "save_path": "loras/ipadapter",
+ "description": "IP-Adapter-FaceID Plus LoRA Model (SD1.5) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid-plus_sd15_lora.safetensors",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plus_sd15_lora.safetensors"
+ },
{
"name": "ip-adapter-faceid-plusv2_sd15.bin",
"type": "IP-Adapter",
"base": "SD1.5",
"save_path": "ipadapter",
- "description": "IP-Adapter-FaceID-Plus V2 Model (SD1.5)",
+ "description": "IP-Adapter-FaceID-Plus V2 Model (SD1.5) [ipadapter]",
"reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
"filename": "ip-adapter-faceid-plusv2_sd15.bin",
"url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sd15.bin"
@@ -1605,11 +1635,31 @@
"type": "lora",
"base": "SD1.5",
"save_path": "loras/ipadapter",
- "description": "IP-Adapter-FaceID-Plus V2 LoRA Model (SD1.5)",
+ "description": "IP-Adapter-FaceID-Plus V2 LoRA Model (SD1.5) [ipadapter]",
"reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
"filename": "ip-adapter-faceid-plusv2_sd15_lora.safetensors",
"url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sd15_lora.safetensors"
},
+ {
+ "name": "ip-adapter-faceid_sdxl_lora.safetensors",
+ "type": "lora",
+ "base": "SDXL",
+ "save_path": "loras/ipadapter",
+ "description": "IP-Adapter-FaceID LoRA Model (SDXL) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid_sdxl_lora.safetensors",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid_sdxl_lora.safetensors"
+ },
+ {
+ "name": "ip-adapter-faceid-plusv2_sdxl_lora.safetensors",
+ "type": "lora",
+ "base": "SDXL",
+ "save_path": "loras/ipadapter",
+ "description": "IP-Adapter-FaceID-Plus V2 LoRA Model (SDXL) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid-plusv2_sdxl_lora.safetensors",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sdxl_lora.safetensors"
+ },
{
"name": "ip-adapter_sdxl.safetensors",
"type": "IP-Adapter",
@@ -1625,7 +1675,7 @@
"type": "IP-Adapter",
"base": "SDXL",
"save_path": "ipadapter",
- "description": "This model requires the use of the SD1.5 encoder despite being for SDXL checkpoints",
+ "description": "This model requires the use of the SD1.5 encoder despite being for SDXL checkpoints [ipadapter]",
"reference": "https://huggingface.co/h94/IP-Adapter",
"filename": "ip-adapter_sdxl_vit-h.safetensors",
"url": "https://huggingface.co/h94/IP-Adapter/resolve/main/sdxl_models/ip-adapter_sdxl_vit-h.safetensors"
@@ -1635,7 +1685,7 @@
"type": "IP-Adapter",
"base": "SDXL",
"save_path": "ipadapter",
- "description": "This model requires the use of the SD1.5 encoder despite being for SDXL checkpoints",
+ "description": "This model requires the use of the SD1.5 encoder despite being for SDXL checkpoints [ipadapter]",
"reference": "https://huggingface.co/h94/IP-Adapter",
"filename": "ip-adapter-plus_sdxl_vit-h.safetensors",
"url": "https://huggingface.co/h94/IP-Adapter/resolve/main/sdxl_models/ip-adapter-plus_sdxl_vit-h.safetensors"
@@ -1645,7 +1695,7 @@
"type": "IP-Adapter",
"base": "SDXL",
"save_path": "ipadapter",
- "description": "This model requires the use of the SD1.5 encoder despite being for SDXL checkpoints",
+ "description": "This model requires the use of the SD1.5 encoder despite being for SDXL checkpoints [ipadapter]",
"reference": "https://huggingface.co/h94/IP-Adapter",
"filename": "ip-adapter-plus-face_sdxl_vit-h.safetensors",
"url": "https://huggingface.co/h94/IP-Adapter/resolve/main/sdxl_models/ip-adapter-plus-face_sdxl_vit-h.safetensors"
@@ -1740,6 +1790,16 @@
"reference": "https://github.com/xinntao/facexlib",
"filename": "yolov5n-face.pth",
"url": "https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/yolov5n-face.pth"
+ },
+ {
+ "name": "photomaker-v1.bin",
+ "type": "photomaker",
+ "base": "SDXL",
+ "save_path": "photomaker",
+ "description": "PhotoMaker model. This model is compatible with SDXL.",
+ "reference": "https://huggingface.co/TencentARC/PhotoMaker",
+ "filename": "photomaker-v1.bin",
+ "url": "https://huggingface.co/TencentARC/PhotoMaker/resolve/main/photomaker-v1.bin"
}
]
}
diff --git a/node_db/dev/custom-node-list.json b/node_db/dev/custom-node-list.json
index 9500ebe6..3083fa29 100644
--- a/node_db/dev/custom-node-list.json
+++ b/node_db/dev/custom-node-list.json
@@ -10,16 +10,45 @@
},
-
{
- "author": "ZHO-ZHO-ZHO",
- "title": "ComfyUI-InstantID (WIP)",
- "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID",
+ "author": "17Retoucher",
+ "title": "ComfyUI_Fooocus",
+ "reference": "https://github.com/17Retoucher/ComfyUI_Fooocus",
"files": [
- "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID"
+ "https://github.com/17Retoucher/ComfyUI_Fooocus"
],
"install_type": "git-clone",
- "description": "Unofficial implementation of [a/InstantID](https://github.com/InstantID/InstantID) for ComfyUI"
+ "description": "Custom nodes that help reproduce image generation in Fooocus."
+ },
+ {
+ "author": "nkchocoai",
+ "title": "ComfyUI-PromptUtilities",
+ "reference": "https://github.com/nkchocoai/ComfyUI-PromptUtilities",
+ "files": [
+ "https://github.com/nkchocoai/ComfyUI-PromptUtilities"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes: Format String, Join String List, Load Preset, Load Preset (Advanced), Const String, Const String (multi line). Add useful nodes related to prompt."
+ },
+ {
+ "author": "BadCafeCode",
+ "title": "execution-inversion-demo-comfyui",
+ "reference": "https://github.com/BadCafeCode/execution-inversion-demo-comfyui",
+ "files": [
+ "https://github.com/BadCafeCode/execution-inversion-demo-comfyui"
+ ],
+ "install_type": "git-clone",
+ "description": "execution-inversion-demo-comfyui"
+ },
+ {
+ "author": "unanan",
+ "title": "ComfyUI-clip-interrogator [WIP]",
+ "reference": "https://github.com/unanan/ComfyUI-clip-interrogator",
+ "files": [
+ "https://github.com/unanan/ComfyUI-clip-interrogator"
+ ],
+ "install_type": "git-clone",
+ "description": "Unofficial ComfyUI extension of clip-interrogator"
},
{
"author": "solarpush",
@@ -41,16 +70,6 @@
"install_type": "git-clone",
"description": "prism-tools"
},
- {
- "author": "ZHO-ZHO-ZHO",
- "title": "ZHO-ZHO-ZHO/ComfyUI PhotoMaker (WIP)",
- "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker",
- "files": [
- "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker"
- ],
- "install_type": "git-clone",
- "description": "Unofficial implementation of [a/PhotoMaker](https://github.com/TencentARC/PhotoMaker) for ComfyUI(WIP) Testing……\n[w/WARN:Currently, it is not distinguishable because it shares the same repository name as https://github.com/shiimizu/ComfyUI-PhotoMaker]"
- },
{
"author": "poisenbery",
"title": "NudeNet-Detector-Provider [WIP]",
diff --git a/node_db/dev/extension-node-map.json b/node_db/dev/extension-node-map.json
index f710d52e..91d0d9bb 100644
--- a/node_db/dev/extension-node-map.json
+++ b/node_db/dev/extension-node-map.json
@@ -122,22 +122,6 @@
"title_aux": "ComfyUI-AnyText\uff08WIP\uff09"
}
],
- "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker": [
- [
- "BaseModel_Loader_fromhub",
- "BaseModel_Loader_local",
- "LoRALoader",
- "NEW_PhotoMaker_Generation",
- "PhotoMakerAdapter_Loader_fromhub",
- "PhotoMakerAdapter_Loader_local",
- "PhotoMaker_Generation",
- "Prompt_Styler",
- "Ref_Image_Preprocessing"
- ],
- {
- "title_aux": "ZHO-ZHO-ZHO/ComfyUI PhotoMaker (WIP)"
- }
- ],
"https://github.com/alt-key-project/comfyui-dream-video-batches": [
[
"Blended Transition [DVB]",
@@ -298,6 +282,8 @@
"ModelSamplingDiscrete",
"PatchModelAddDownscale",
"PerpNeg",
+ "PhotoMakerEncode",
+ "PhotoMakerLoader",
"PolyexponentialScheduler",
"PorterDuffImageComposite",
"PreviewImage",
@@ -677,6 +663,15 @@
"title_aux": "comfyui_sendimage_node"
}
],
+ "https://github.com/unanan/ComfyUI-clip-interrogator": [
+ [
+ "ComfyUIClipInterrogator",
+ "ShowText"
+ ],
+ {
+ "title_aux": "ComfyUI-clip-interrogator [WIP]"
+ }
+ ],
"https://github.com/wormley/comfyui-wormley-nodes": [
[
"CheckpointVAELoaderSimpleText",
diff --git a/node_db/new/custom-node-list.json b/node_db/new/custom-node-list.json
index 174e50ed..92a66397 100644
--- a/node_db/new/custom-node-list.json
+++ b/node_db/new/custom-node-list.json
@@ -10,6 +10,246 @@
},
+ {
+ "author": "Loewen-Hob",
+ "title": "Rembg Background Removal Node for ComfyUI",
+ "reference": "https://github.com/Loewen-Hob/rembg-comfyui-node-better",
+ "files": [
+ "https://github.com/Loewen-Hob/rembg-comfyui-node-better"
+ ],
+ "install_type": "git-clone",
+ "description": "This custom node is based on the [a/rembg-comfyui-node](https://github.com/Jcd1230/rembg-comfyui-node) but provides additional functionality to select ONNX models."
+ },
+ {
+ "author": "mape",
+ "title": "mape's ComfyUI Helpers",
+ "reference": "https://github.com/mape/ComfyUI-mape-Helpers",
+ "files": [
+ "https://github.com/mape/ComfyUI-mape-Helpers"
+ ],
+ "install_type": "git-clone",
+ "description": "A project that combines all my qualify of life improvements for ComyUI. For more info visit: [a/https://comfyui.ma.pe/](https://comfyui.ma.pe/)"
+ },
+ {
+ "author": "zhongpei",
+ "title": "Comfyui_image2prompt",
+ "reference": "https://github.com/zhongpei/Comfyui_image2prompt",
+ "files": [
+ "https://github.com/zhongpei/Comfyui_image2prompt"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:Image to Text, Loader Image to Text Model."
+ },
+ {
+ "author": "jamal-alkharrat",
+ "title": "ComfyUI_rotate_image",
+ "reference": "https://github.com/jamal-alkharrat/ComfyUI_rotate_image",
+ "files": [
+ "https://github.com/jamal-alkharrat/ComfyUI_rotate_image"
+ ],
+ "install_type": "git-clone",
+ "description": "ComfyUI Custom Node to Rotate Images, Img2Img node."
+ },
+ {
+ "author": "JerryOrbachJr",
+ "title": "ComfyUI-RandomSize",
+ "reference": "https://github.com/JerryOrbachJr/ComfyUI-RandomSize",
+ "files": [
+ "https://github.com/JerryOrbachJr/ComfyUI-RandomSize"
+ ],
+ "install_type": "git-clone",
+ "description": "A ComfyUI custom node that randomly selects a height and width pair from a list in a config file"
+ },
+ {
+ "author": "blepping",
+ "title": "ComfyUI-bleh",
+ "reference": "https://github.com/blepping/ComfyUI-bleh",
+ "files": [
+ "https://github.com/blepping/ComfyUI-bleh"
+ ],
+ "install_type": "git-clone",
+ "description": "Better TAESD previews, BlehHyperTile."
+ },
+ {
+ "author": "yuvraj108c",
+ "title": "ComfyUI Whisper",
+ "reference": "https://github.com/yuvraj108c/ComfyUI-Whisper",
+ "files": [
+ "https://github.com/yuvraj108c/ComfyUI-Whisper"
+ ],
+ "install_type": "git-clone",
+ "description": "Transcribe audio and add subtitles to videos using Whisper in ComfyUI"
+ },
+ {
+ "author": "kijai",
+ "title": "ComfyUI-CCSR",
+ "reference": "https://github.com/kijai/ComfyUI-CCSR",
+ "files": [
+ "https://github.com/kijai/ComfyUI-CCSR"
+ ],
+ "install_type": "git-clone",
+ "description": "ComfyUI- CCSR upscaler node"
+ },
+ {
+ "author": "azure-dragon-ai",
+ "title": "ComfyUI-ClipScore-Nodes",
+ "reference": "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes",
+ "files": [
+ "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:ImageScore, Loader, Image Processor, Real Image Processor, Fake Image Processor, Text Processor. ComfyUI Nodes for ClipScore"
+ },
+ {
+ "author": "Hiero207",
+ "title": "ComfyUI-Hiero-Nodes",
+ "reference": "https://github.com/Hiero207/ComfyUI-Hiero-Nodes",
+ "files": [
+ "https://github.com/Hiero207/ComfyUI-Hiero-Nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:Post to Discord w/ Webhook"
+ },
+ {
+ "author": "azure-dragon-ai",
+ "title": "ComfyUI-ClipScore-Nodes",
+ "reference": "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes",
+ "files": [
+ "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "ComfyUI Nodes for ClipScore"
+ },
+ {
+ "author": "godspede",
+ "title": "ComfyUI Substring",
+ "reference": "https://github.com/godspede/ComfyUI_Substring",
+ "files": [
+ "https://github.com/godspede/ComfyUI_Substring"
+ ],
+ "install_type": "git-clone",
+ "description": "Just a simple substring node that takes text and length as input, and outputs the first length characters."
+ },
+ {
+ "author": "gokayfem",
+ "title": "VLM_nodes",
+ "reference": "https://github.com/gokayfem/ComfyUI_VLM_nodes",
+ "files": [
+ "https://github.com/gokayfem/ComfyUI_VLM_nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:VisionQuestionAnswering Node, PromptGenerate Node"
+ },
+ {
+ "author": "godspede",
+ "title": "ComfyUI Substring",
+ "reference": "https://github.com/godspede/ComfyUI_Substring",
+ "files": [
+ "https://github.com/godspede/ComfyUI_Substring"
+ ],
+ "install_type": "git-clone",
+ "description": "Just a simple substring node that takes text and length as input, and outputs the first length characters."
+ },
+ {
+ "author": "Nlar",
+ "title": "ComfyUI_CartoonSegmentation",
+ "reference": "https://github.com/Nlar/ComfyUI_CartoonSegmentation",
+ "files": [
+ "https://github.com/Nlar/ComfyUI_CartoonSegmentation"
+ ],
+ "install_type": "git-clone",
+ "description": "Front end ComfyUI nodes for CartoonSegmentation Based upon the work of the CartoonSegmentation repository this project will provide a front end to some of the features."
+ },
+ {
+ "author": "Acly",
+ "title": "ComfyUI Inpaint Nodes",
+ "reference": "https://github.com/Acly/comfyui-inpaint-nodes",
+ "files": [
+ "https://github.com/Acly/comfyui-inpaint-nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Experimental nodes for better inpainting with ComfyUI. Adds two nodes which allow using [a/Fooocus](https://github.com/Acly/comfyui-inpaint-nodes) inpaint model. It's a small and flexible patch which can be applied to any SDXL checkpoint and will transform it into an inpaint model. This model can then be used like other inpaint models, and provides the same benefits. [a/Read more](https://github.com/lllyasviel/Fooocus/discussions/414)"
+ },
+ {
+ "author": "Abdullah Ozmantar",
+ "title": "InstaSwap Face Swap Node for ComfyUI",
+ "reference": "https://github.com/abdozmantar/ComfyUI-InstaSwap",
+ "files": [
+ "https://github.com/abdozmantar/ComfyUI-InstaSwap"
+ ],
+ "install_type": "git-clone",
+ "description": "A quick and easy ComfyUI custom nodes for ultra-quality, lightning-speed face swapping of humans."
+ },
+ {
+ "author": "ZHO-ZHO-ZHO",
+ "title": "ComfyUI PhotoMaker (ZHO)",
+ "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO",
+ "files": [
+ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO"
+ ],
+ "install_type": "git-clone",
+ "description": "Unofficial implementation of [a/PhotoMaker](https://github.com/TencentARC/PhotoMaker) for ComfyUI"
+ },
+ {
+ "author": "ZHO-ZHO-ZHO",
+ "title": "ComfyUI-InstantID",
+ "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID",
+ "files": [
+ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID"
+ ],
+ "install_type": "git-clone",
+ "description": "Unofficial implementation of [a/InstantID](https://github.com/InstantID/InstantID) for ComfyUI"
+ },
+ {
+ "author": "FlyingFireCo",
+ "title": "tiled_ksampler",
+ "reference": "https://github.com/FlyingFireCo/tiled_ksampler",
+ "files": [
+ "https://github.com/FlyingFireCo/tiled_ksampler"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:Tiled KSampler, Asymmetric Tiled KSampler, Circular VAEDecode."
+ },
+ {
+ "author": "abdozmantar",
+ "title": "InstaSwap Face Swap Node for ComfyUI",
+ "reference": "https://github.com/abdozmantar/ComfyUI-InstaSwap",
+ "files": [
+ "https://github.com/abdozmantar/ComfyUI-InstaSwap"
+ ],
+ "install_type": "git-clone",
+ "description": "Fastest Face Swap Extension Node for ComfyUI, Single node and FastTrack: Lightning-Speed Facial Transformation for your projects."
+ },
+ {
+ "author": "pkpkTech",
+ "title": "ComfyUI-ngrok",
+ "reference": "https://github.com/pkpkTech/ComfyUI-ngrok",
+ "files": [
+ "https://github.com/pkpkTech/ComfyUI-ngrok"
+ ],
+ "install_type": "git-clone",
+ "description": "Use ngrok to allow external access to ComfyUI.\nNOTE: Need to manually modify a token inside the __init__.py file."
+ },
+ {
+ "author": "Daniel Lewis",
+ "title": "ComfyUI-TTS",
+ "reference": "https://github.com/daniel-lewis-ab/ComfyUI-TTS",
+ "files": [
+ "https://github.com/daniel-lewis-ab/ComfyUI-TTS"
+ ],
+ "install_type": "git-clone",
+ "description": "Text To Speech (TTS) for ComfyUI"
+ },
+ {
+ "author": "thecooltechguy",
+ "title": "ComfyUI-ComfyWorkflows",
+ "reference": "https://github.com/thecooltechguy/ComfyUI-ComfyWorkflows",
+ "files": [
+ "https://github.com/thecooltechguy/ComfyUI-ComfyWorkflows"
+ ],
+ "install_type": "git-clone",
+ "description": "The best way to run, share, & discover thousands of ComfyUI workflows."
+ },
{
"author": "Shraknard",
"title": "ComfyUI-Remover",
@@ -72,13 +312,13 @@
},
{
"author": "shiimizu",
- "title": "ComfyUI PhotoMaker",
- "reference": "https://github.com/shiimizu/ComfyUI-PhotoMaker",
+ "title": "ComfyUI PhotoMaker Plus",
+ "reference": "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus",
"files": [
- "https://github.com/shiimizu/ComfyUI-PhotoMaker"
+ "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus"
],
"install_type": "git-clone",
- "description": "ComfyUI reference implementation for [a/PhotoMaker](https://github.com/TencentARC/PhotoMaker) models. [w/WARN:Currently, it is not distinguishable because it shares the same repository name as https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker]"
+ "description": "ComfyUI reference implementation for [a/PhotoMaker](https://github.com/TencentARC/PhotoMaker) models. [w/WARN:The repository name has been changed. For those who have previously installed it, please delete custom_nodes/ComfyUI-PhotoMaker from disk and reinstall this.]"
},
{
"author": "darkpixel",
@@ -278,7 +518,7 @@
"https://github.com/abyz22/image_control"
],
"install_type": "git-clone",
- "description": "Nodes:abyz22_Padding Image, abyz22_ImpactWildcardEncode, abyz22_setimageinfo, abyz22_SaveImage, abyz22_ImpactWildcardEncode_GetPrompt, abyz22_SetQueue, abyz22_drawmask, abyz22_FirstNonNull, abyz22_blendimages, abyz22_blend_onecolor"
+ "description": "Nodes:abyz22_Padding Image, abyz22_ImpactWildcardEncode, abyz22_setimageinfo, abyz22_SaveImage, abyz22_ImpactWildcardEncode_GetPrompt, abyz22_SetQueue, abyz22_drawmask, abyz22_FirstNonNull, abyz22_blendimages, abyz22_blend_onecolor. Please check workflow in [a/https://github.com/abyz22/image_control](https://github.com/abyz22/image_control)"
},
{
"author": "foxtrot-roger",
@@ -439,268 +679,6 @@
],
"install_type": "git-clone",
"description": "This is a set of nodes to interact with llama-cpp-python"
- },
- {
- "author": "djbielejeski",
- "title": "a-person-mask-generator",
- "reference": "https://github.com/djbielejeski/a-person-mask-generator",
- "files": [
- "https://github.com/djbielejeski/a-person-mask-generator"
- ],
- "install_type": "git-clone",
- "description": "Extension for Automatic1111 and ComfyUI to automatically create masks for Background/Hair/Body/Face/Clothes in Img2Img"
- },
- {
- "author": "smagnetize",
- "title": "kb-comfyui-nodes",
- "reference": "https://github.com/smagnetize/kb-comfyui-nodes",
- "files": [
- "https://github.com/smagnetize/kb-comfyui-nodes"
- ],
- "install_type": "git-clone",
- "description": "Loades:SingleImageDataUrlLoader"
- },
- {
- "author": "tzwm",
- "title": "ComfyUI Profiler",
- "reference": "https://github.com/tzwm/comfyui-profiler",
- "files": [
- "https://github.com/tzwm/comfyui-profiler"
- ],
- "install_type": "git-clone",
- "description": "Calculate the execution time of all nodes."
- },
- {
- "author": "Hangover3832",
- "title": "ComfyUI-Hangover-Nodes",
- "reference": "https://github.com/Hangover3832/ComfyUI-Hangover-Nodes",
- "files": [
- "https://github.com/Hangover3832/ComfyUI-Hangover-Nodes"
- ],
- "install_type": "git-clone",
- "description": "Nodes: MS kosmos-2 Interrogator, Save Image w/o Metadata, Image Scale Bounding Box. An implementation of Microsoft [a/kosmos-2](https://huggingface.co/microsoft/kosmos-2-patch14-224) image to text transformer."
- },
- {
- "author": "celsojr2013",
- "title": "ComfyUI SimpleTools Suit",
- "reference": "https://github.com/celsojr2013/comfyui_simpletools",
- "files": [
- "https://github.com/celsojr2013/comfyui_simpletools/raw/main/google_translator.py",
- "https://github.com/celsojr2013/comfyui_simpletools/raw/main/parameters.py",
- "https://github.com/celsojr2013/comfyui_simpletools/raw/main/resolution_solver.py"
- ],
- "install_type": "copy",
- "description": "Nodes:Simple Gooogle Translator Client, Simple Mustache Parameter Switcher, Simple Latent Resolution Solver."
- },
- {
- "author": "MrForExample",
- "title": "ComfyUI-3D-Pack",
- "reference": "https://github.com/MrForExample/ComfyUI-3D-Pack",
- "files": [
- "https://github.com/MrForExample/ComfyUI-3D-Pack"
- ],
- "install_type": "git-clone",
- "description": "An extensive node suite that enables ComfyUI to process 3D inputs (Mesh & UV Texture, etc) using cutting edge algorithms (3DGS, NeRF, etc.)"
- },
- {
- "author": "kft334",
- "title": "Knodes",
- "reference": "https://github.com/kft334/Knodes",
- "files": [
- "https://github.com/kft334/Knodes"
- ],
- "install_type": "git-clone",
- "description": "Nodes: Image(s) To Websocket (Base64), Load Image (Base64),Load Images (Base64)"
- },
- {
- "author": "alexopus",
- "title": "ComfyUI Image Saver",
- "reference": "https://github.com/alexopus/ComfyUI-Image-Saver",
- "files": [
- "https://github.com/alexopus/ComfyUI-Image-Saver"
- ],
- "install_type": "git-clone",
- "description": "Allows you to save images with their generation metadata compatible with Civitai. Works with png, jpeg and webp. Stores LoRAs, models and embeddings hashes for resource recognition."
- },
- {
- "author": "chaojie",
- "title": "ComfyUI-MotionCtrl",
- "reference": "https://github.com/chaojie/ComfyUI-MotionCtrl",
- "files": [
- "https://github.com/chaojie/ComfyUI-MotionCtrl"
- ],
- "install_type": "git-clone",
- "description": "Nodes: Download the weights of MotionCtrl [a/motionctrl.pth](https://huggingface.co/TencentARC/MotionCtrl/blob/main/motionctrl.pth) and put it to ComfyUI/models/checkpoints"
- },
- {
- "author": "hinablue",
- "title": "ComfyUI 3D Pose Editor",
- "reference": "https://github.com/hinablue/ComfyUI_3dPoseEditor",
- "files": [
- "https://github.com/hinablue/ComfyUI_3dPoseEditor"
- ],
- "install_type": "git-clone",
- "description": "Nodes:3D Pose Editor"
- },
- {
- "author": "ZHO-ZHO-ZHO",
- "title": "ComfyUI-ArtGallery",
- "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-ArtGallery",
- "files": [
- "https://github.com/ZHO-ZHO-ZHO/ComfyUI-ArtGallery"
- ],
- "install_type": "git-clone",
- "description": "Prompt Visualization | Art Gallery\n[w/WARN: Installation requires 2GB of space, and it will involve a long download time.]"
- },
- {
- "author": "SiliconFlow",
- "title": "OneDiff Nodes",
- "reference": "https://github.com/siliconflow/onediff_comfy_nodes",
- "files": [
- "https://github.com/siliconflow/onediff_comfy_nodes"
- ],
- "install_type": "git-clone",
- "description": "[a/Onediff](https://github.com/siliconflow/onediff) ComfyUI Nodes."
- },
- {
- "author": "flowtyone",
- "title": "ComfyUI-Flowty-LDSR",
- "reference": "https://github.com/flowtyone/ComfyUI-Flowty-LDSR",
- "files": [
- "https://github.com/flowtyone/ComfyUI-Flowty-LDSR"
- ],
- "install_type": "git-clone",
- "description": "This is a custom node that lets you take advantage of Latent Diffusion Super Resolution (LDSR) models inside ComfyUI."
- },
- {
- "author": "massao000",
- "title": "ComfyUI_aspect_ratios",
- "reference": "https://github.com/massao000/ComfyUI_aspect_ratios",
- "files": [
- "https://github.com/massao000/ComfyUI_aspect_ratios"
- ],
- "install_type": "git-clone",
- "description": "Aspect ratio selector for ComfyUI based on [a/sd-webui-ar](https://github.com/alemelis/sd-webui-ar?tab=readme-ov-file)."
- },
- {
- "author": "Crystian",
- "title": "Crystools-save",
- "reference": "https://github.com/crystian/ComfyUI-Crystools-save",
- "files": [
- "https://github.com/crystian/ComfyUI-Crystools-save"
- ],
- "install_type": "git-clone",
- "description": "With this quality of life extension, you can save your workflow with a specific name and include additional details such as the author, a description, and the version (in metadata/json). Important: When you share your workflow (via png/json), others will be able to see your information!"
- },
- {
- "author": "ZHO-ZHO-ZHO",
- "title": "ComfyUI-Q-Align",
- "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Q-Align",
- "files": [
- "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Q-Align"
- ],
- "install_type": "git-clone",
- "description": "Nodes:Q-Align Scoring. Implementation of [a/Q-Align](https://arxiv.org/abs/2312.17090) for ComfyUI"
- },
- {
- "author": "Ryuukeisyou",
- "title": "comfyui_image_io_helpers",
- "reference": "https://github.com/Ryuukeisyou/comfyui_image_io_helpers",
- "files": [
- "https://github.com/Ryuukeisyou/comfyui_image_io_helpers"
- ],
- "install_type": "git-clone",
- "description": "Nodes:ImageLoadFromBase64, ImageLoadByPath, ImageLoadAsMaskByPath, ImageSaveToPath, ImageSaveAsBase64."
- },
- {
- "author": "Millyarde",
- "title": "Pomfy - Photoshop and ComfyUI 2-way sync",
- "reference": "https://github.com/Millyarde/Pomfy",
- "files": [
- "https://github.com/Millyarde/Pomfy"
- ],
- "install_type": "git-clone",
- "description": "Photoshop custom nodes inside of ComfyUi, send and get data via Photoshop UXP plugin for cross platform support"
- },
- {
- "author": "ntc-ai",
- "title": "ComfyUI - Apply LoRA Stacker with DARE",
- "reference": "https://github.com/ntc-ai/ComfyUI-DARE-LoRA-Merge",
- "files": [
- "https://github.com/ntc-ai/ComfyUI-DARE-LoRA-Merge"
- ],
- "install_type": "git-clone",
- "description": "An experiment about combining multiple LoRAs with [a/DARE](https://arxiv.org/pdf/2311.03099.pdf)"
- },
- {
- "author": "tocubed",
- "title": "ComfyUI-AudioReactor",
- "reference": "https://github.com/tocubed/ComfyUI-AudioReactor",
- "files": [
- "https://github.com/tocubed/ComfyUI-AudioReactor"
- ],
- "install_type": "git-clone",
- "description": "Nodes: Shadertoy, Load Audio (from Path), Audio Frame Transform (Shadertoy), Audio Frame Transform (Beats)"
- },
- {
- "author": "spacepxl",
- "title": "ComfyUI-RAVE",
- "reference": "https://github.com/spacepxl/ComfyUI-RAVE",
- "files": [
- "https://github.com/spacepxl/ComfyUI-RAVE"
- ],
- "install_type": "git-clone",
- "description": "Unofficial ComfyUI implementation of [a/RAVE](https://rave-video.github.io/)"
- },
- {
- "author": "ownimage",
- "title": "ComfyUI-ownimage",
- "reference": "https://github.com/ownimage/ComfyUI-ownimage",
- "files": [
- "https://github.com/ownimage/ComfyUI-ownimage"
- ],
- "install_type": "git-clone",
- "description": "Nodes:Caching Image Loader."
- },
- {
- "author": "wwwins",
- "title": "ComfyUI-Simple-Aspect-Ratio",
- "reference": "https://github.com/wwwins/ComfyUI-Simple-Aspect-Ratio",
- "files": [
- "https://github.com/wwwins/ComfyUI-Simple-Aspect-Ratio"
- ],
- "install_type": "git-clone",
- "description": "Nodes:SimpleAspectRatio"
- },
- {
- "author": "dmarx",
- "title": "ComfyUI-AudioReactive",
- "reference": "https://github.com/dmarx/ComfyUI-AudioReactive",
- "files": [
- "https://github.com/dmarx/ComfyUI-AudioReactive"
- ],
- "install_type": "git-clone",
- "description": "porting audioreactivity pipeline from vktrs to comfyui."
- },
- {
- "author": "Ryuukeisyou",
- "title": "comfyui_face_parsing",
- "reference": "https://github.com/Ryuukeisyou/comfyui_face_parsing",
- "files": [
- "https://github.com/Ryuukeisyou/comfyui_face_parsing"
- ],
- "install_type": "git-clone",
- "description": "This is a set of custom nodes for ComfyUI. The nodes utilize the [a/face parsing model](https://huggingface.co/jonathandinu/face-parsing) to provide detailed segmantation of face. To improve face segmantation accuracy, [a/yolov8 face model](https://huggingface.co/Bingsu/adetailer/) is used to first extract face from an image. There are also auxiliary nodes for image and mask processing. A guided filter is also provided for skin smoothing."
- },
- {
- "author": "florestefano1975",
- "title": "comfyui-prompt-composer",
- "reference": "https://github.com/florestefano1975/comfyui-prompt-composer",
- "files": [
- "https://github.com/florestefano1975/comfyui-prompt-composer"
- ],
- "install_type": "git-clone",
- "description": "A suite of tools for prompt management. Combining nodes helps the user sequence strings for prompts, also creating logical groupings if necessary. Individual nodes can be chained together in any order."
}
]
}
diff --git a/node_db/new/extension-node-map.json b/node_db/new/extension-node-map.json
index 4469ecbb..298377be 100644
--- a/node_db/new/extension-node-map.json
+++ b/node_db/new/extension-node-map.json
@@ -51,12 +51,31 @@
],
"https://github.com/54rt1n/ComfyUI-DareMerge": [
[
+ "DM_AdvancedDareModelMerger",
+ "DM_AdvancedModelMerger",
+ "DM_AttentionGradient",
+ "DM_BlockGradient",
+ "DM_BlockModelMerger",
"DM_DareClipMerger",
- "DM_DareModelMerger",
+ "DM_DareModelMergerBlock",
+ "DM_DareModelMergerElement",
"DM_DareModelMergerMBW",
+ "DM_GradientEdit",
+ "DM_GradientOperations",
+ "DM_GradientReporting",
+ "DM_InjectNoise",
+ "DM_LoRALoaderTags",
+ "DM_LoRAReporting",
+ "DM_MBWGradient",
"DM_MagnitudeMasker",
- "DM_MaskedModelMerger",
- "DM_NormalizeModel"
+ "DM_MaskEdit",
+ "DM_MaskOperations",
+ "DM_MaskReporting",
+ "DM_ModelReporting",
+ "DM_NormalizeModel",
+ "DM_QuadMasker",
+ "DM_ShellGradient",
+ "DM_SimpleMasker"
],
{
"title_aux": "ComfyUI-DareMerge"
@@ -150,6 +169,20 @@
"title_aux": "ComfyUI_BadgerTools"
}
],
+ "https://github.com/Acly/comfyui-inpaint-nodes": [
+ [
+ "INPAINT_ApplyFooocusInpaint",
+ "INPAINT_InpaintWithModel",
+ "INPAINT_LoadFooocusInpaint",
+ "INPAINT_LoadInpaintModel",
+ "INPAINT_MaskedBlur",
+ "INPAINT_MaskedFill",
+ "INPAINT_VAEEncodeInpaintConditioning"
+ ],
+ {
+ "title_aux": "ComfyUI Inpaint Nodes"
+ }
+ ],
"https://github.com/Acly/comfyui-tooling-nodes": [
[
"ETN_ApplyMaskToImage",
@@ -706,6 +739,7 @@
"DWPreprocessor",
"DensePosePreprocessor",
"DepthAnythingPreprocessor",
+ "DiffusionEdge_Preprocessor",
"FacialPartColoringFromPoseKps",
"FakeScribblePreprocessor",
"HEDPreprocessor",
@@ -734,6 +768,7 @@
"Scribble_XDoG_Preprocessor",
"SemSegPreprocessor",
"ShufflePreprocessor",
+ "TEEDPreprocessor",
"TilePreprocessor",
"UniFormer-SemSegPreprocessor",
"Unimatch_OptFlowPreprocessor",
@@ -813,6 +848,16 @@
"title_aux": "FizzNodes"
}
],
+ "https://github.com/FlyingFireCo/tiled_ksampler": [
+ [
+ "Asymmetric Tiled KSampler",
+ "Circular VAEDecode",
+ "Tiled KSampler"
+ ],
+ {
+ "title_aux": "tiled_ksampler"
+ }
+ ],
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
[
"ConcatenateString",
@@ -852,6 +897,7 @@
[
"ReActorFaceSwap",
"ReActorLoadFaceModel",
+ "ReActorRestoreFace",
"ReActorSaveFaceModel"
],
{
@@ -870,6 +916,7 @@
[
"Image Scale Bounding Box",
"MS kosmos-2 Interrogator",
+ "Make Inpaint Model",
"Save Image w/o Metadata"
],
{
@@ -905,6 +952,14 @@
"title_aux": "comfyui-enhanced-save-node"
}
],
+ "https://github.com/Hiero207/ComfyUI-Hiero-Nodes": [
+ [
+ "Post to Discord w/ Webhook"
+ ],
+ {
+ "title_aux": "ComfyUI-Hiero-Nodes"
+ }
+ ],
"https://github.com/IDGallagher/ComfyUI-IG-Nodes": [
[
"IG Analyze SSIM",
@@ -927,7 +982,13 @@
],
"https://github.com/Inzaniak/comfyui-ranbooru": [
[
+ "PromptBackground",
+ "PromptLimit",
+ "PromptMix",
+ "PromptRandomWeight",
+ "PromptRemove",
"Ranbooru",
+ "RanbooruURL",
"RandomPicturePath"
],
{
@@ -1041,6 +1102,18 @@
"title_aux": "Rembg Background Removal Node for ComfyUI"
}
],
+ "https://github.com/JerryOrbachJr/ComfyUI-RandomSize": [
+ [
+ "JOJR_RandomSize"
+ ],
+ {
+ "author": "JerryOrbachJr",
+ "description": "A ComfyUI custom node that randomly selects a height and width pair from a list in a config file",
+ "nickname": "Random Size",
+ "title": "Random Size",
+ "title_aux": "ComfyUI-RandomSize"
+ }
+ ],
"https://github.com/Jordach/comfy-plasma": [
[
"JDC_AutoContrast",
@@ -1112,8 +1185,13 @@
],
"https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved": [
[
+ "ADE_AdjustPEFullStretch",
+ "ADE_AdjustPEManual",
+ "ADE_AdjustPESweetspotStretch",
"ADE_AnimateDiffCombine",
+ "ADE_AnimateDiffKeyframe",
"ADE_AnimateDiffLoRALoader",
+ "ADE_AnimateDiffLoaderGen1",
"ADE_AnimateDiffLoaderV1Advanced",
"ADE_AnimateDiffLoaderWithContext",
"ADE_AnimateDiffModelSettings",
@@ -1121,14 +1199,29 @@
"ADE_AnimateDiffModelSettingsSimple",
"ADE_AnimateDiffModelSettings_Release",
"ADE_AnimateDiffSamplingSettings",
+ "ADE_AnimateDiffSettings",
"ADE_AnimateDiffUniformContextOptions",
"ADE_AnimateDiffUnload",
+ "ADE_ApplyAnimateDiffModel",
+ "ADE_ApplyAnimateDiffModelSimple",
+ "ADE_BatchedContextOptions",
"ADE_EmptyLatentImageLarge",
"ADE_IterationOptsDefault",
"ADE_IterationOptsFreeInit",
+ "ADE_LoadAnimateDiffModel",
+ "ADE_LoopedUniformContextOptions",
+ "ADE_LoopedUniformViewOptions",
+ "ADE_MultivalDynamic",
+ "ADE_MultivalScaledMask",
"ADE_NoiseLayerAdd",
"ADE_NoiseLayerAddWeighted",
"ADE_NoiseLayerReplace",
+ "ADE_StandardStaticContextOptions",
+ "ADE_StandardStaticViewOptions",
+ "ADE_StandardUniformContextOptions",
+ "ADE_StandardUniformViewOptions",
+ "ADE_UseEvolvedSampling",
+ "ADE_ViewsOnlyContextOptions",
"AnimateDiffLoaderV1",
"CheckpointLoaderSimpleWithNoiseSelect"
],
@@ -1248,6 +1341,14 @@
"title_aux": "ComfyUI-Diffusers"
}
],
+ "https://github.com/Loewen-Hob/rembg-comfyui-node-better": [
+ [
+ "Image Remove Background (rembg)"
+ ],
+ {
+ "title_aux": "Rembg Background Removal Node for ComfyUI"
+ }
+ ],
"https://github.com/LonicaMewinsky/ComfyUI-MakeFrame": [
[
"BreakFrames",
@@ -1428,6 +1529,21 @@
"title_aux": "ComfyUi-NoodleWebcam"
}
],
+ "https://github.com/Nlar/ComfyUI_CartoonSegmentation": [
+ [
+ "AnimeSegmentation",
+ "KenBurnsConfigLoader",
+ "KenBurns_Processor",
+ "LoadImageFilename"
+ ],
+ {
+ "author": "Nels Larsen",
+ "description": "This extension offers a front end to the Cartoon Segmentation Project (https://github.com/CartoonSegmentation/CartoonSegmentation)",
+ "nickname": "CfyCS",
+ "title": "ComfyUI_CartoonSegmentation",
+ "title_aux": "ComfyUI_CartoonSegmentation"
+ }
+ ],
"https://github.com/NotHarroweD/Harronode": [
[
"Harronode"
@@ -1952,6 +2068,7 @@
"CR Color Gradient",
"CR Color Panel",
"CR Color Tint",
+ "CR Combine Prompt",
"CR Combine Schedules",
"CR Comic Panel Templates",
"CR Composite Text",
@@ -1968,6 +2085,7 @@
"CR Data Bus In",
"CR Data Bus Out",
"CR Debatch Frames",
+ "CR Diamond Panel",
"CR Draw Perspective Text",
"CR Draw Pie",
"CR Draw Shape",
@@ -1981,6 +2099,7 @@
"CR Get Parameter From Prompt",
"CR Gradient Float",
"CR Gradient Integer",
+ "CR Half Drop Panel",
"CR Halftone Filter",
"CR Halftone Grid",
"CR Hires Fix Process Switch",
@@ -1996,7 +2115,6 @@
"CR Image Pipe In",
"CR Image Pipe Out",
"CR Image Size",
- "CR Image XY Panel",
"CR Img2Img Process Switch",
"CR Increment Float",
"CR Increment Integer",
@@ -2010,7 +2128,6 @@
"CR Integer To String",
"CR Interpolate Latents",
"CR Intertwine Lists",
- "CR KSampler",
"CR Keyframe List",
"CR Latent Batch Size",
"CR Latent Input Switch",
@@ -2120,6 +2237,7 @@
"CR Thumbnail Preview",
"CR Trigger",
"CR Upscale Image",
+ "CR VAE Decode",
"CR VAE Input Switch",
"CR Value",
"CR Value Cycler",
@@ -2228,13 +2346,17 @@
"tri3d-face-recognise",
"tri3d-float-to-image",
"tri3d-fuzzification",
+ "tri3d-image-mask-2-box",
+ "tri3d-image-mask-box-2-image",
"tri3d-interaction-canny",
"tri3d-load-pose-json",
"tri3d-pose-adaption",
"tri3d-pose-to-image",
"tri3d-position-hands",
"tri3d-position-parts-batch",
- "tri3d-recolor",
+ "tri3d-recolor-mask",
+ "tri3d-recolor-mask-LAB_space",
+ "tri3d-recolor-mask-RGB_space",
"tri3d-skin-feathered-padded-mask",
"tri3d-swap-pixels"
],
@@ -2792,6 +2914,36 @@
"title_aux": "ComfyUI-Gemini"
}
],
+ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID": [
+ [
+ "IDBaseModelLoader_fromhub",
+ "IDBaseModelLoader_local",
+ "IDControlNetLoader",
+ "IDGenerationNode",
+ "ID_Prompt_Styler",
+ "InsightFaceLoader_Zho",
+ "Ipadapter_instantidLoader"
+ ],
+ {
+ "title_aux": "ComfyUI-InstantID"
+ }
+ ],
+ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO": [
+ [
+ "BaseModel_Loader_fromhub",
+ "BaseModel_Loader_local",
+ "LoRALoader",
+ "NEW_PhotoMaker_Generation",
+ "PhotoMakerAdapter_Loader_fromhub",
+ "PhotoMakerAdapter_Loader_local",
+ "PhotoMaker_Generation",
+ "Prompt_Styler",
+ "Ref_Image_Preprocessing"
+ ],
+ {
+ "title_aux": "ComfyUI PhotoMaker (ZHO)"
+ }
+ ],
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-Q-Align": [
[
"QAlign_Zho"
@@ -2875,6 +3027,16 @@
"title_aux": "ComfyUI-AudioScheduler"
}
],
+ "https://github.com/abdozmantar/ComfyUI-InstaSwap": [
+ [
+ "InstaSwapFaceSwap",
+ "InstaSwapLoadFaceModel",
+ "InstaSwapSaveFaceModel"
+ ],
+ {
+ "title_aux": "InstaSwap Face Swap Node for ComfyUI"
+ }
+ ],
"https://github.com/abyz22/image_control": [
[
"abyz22_FirstNonNull",
@@ -2937,7 +3099,11 @@
"Image Flip_ally",
"Placeholder Tuple",
"aegisflow Multi_Pass",
- "aegisflow Multi_Pass XL"
+ "aegisflow Multi_Pass XL",
+ "af_pipe_in_15",
+ "af_pipe_in_xl",
+ "af_pipe_out_15",
+ "af_pipe_out_xl"
],
{
"title_aux": "AegisFlow Utility Nodes"
@@ -3199,6 +3365,19 @@
"title_aux": "avatar-graph-comfyui"
}
],
+ "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes": [
+ [
+ "HaojihuiClipScoreFakeImageProcessor",
+ "HaojihuiClipScoreImageProcessor",
+ "HaojihuiClipScoreImageScore",
+ "HaojihuiClipScoreLoader",
+ "HaojihuiClipScoreRealImageProcessor",
+ "HaojihuiClipScoreTextProcessor"
+ ],
+ {
+ "title_aux": "ComfyUI-ClipScore-Nodes"
+ }
+ ],
"https://github.com/badjeff/comfyui_lora_tag_loader": [
[
"LoraTagLoader"
@@ -3302,6 +3481,14 @@
"title_aux": "CLIPSeg"
}
],
+ "https://github.com/blepping/ComfyUI-bleh": [
+ [
+ "BlehHyperTile"
+ ],
+ {
+ "title_aux": "ComfyUI-bleh"
+ }
+ ],
"https://github.com/bmad4ever/comfyui_ab_samplercustom": [
[
"AB SamplerCustom (experimental)"
@@ -3404,6 +3591,7 @@
"RGB to HSV",
"Rect Grab Cut",
"Remap",
+ "RemapBarrelDistortion",
"RemapFromInsideParabolas",
"RemapFromQuadrilateral (homography)",
"RemapInsideParabolas",
@@ -3576,14 +3764,21 @@
],
"https://github.com/chaojie/ComfyUI-DragNUWA": [
[
+ "BrushMotion",
+ "CompositeMotionBrush",
+ "CompositeMotionBrushWithoutModel",
"DragNUWA Run",
"DragNUWA Run MotionBrush",
"Get First Image",
"Get Last Image",
+ "InstantCameraMotionBrush",
+ "InstantObjectMotionBrush",
"Load CheckPoint DragNUWA",
"Load MotionBrush From Optical Flow",
"Load MotionBrush From Optical Flow Directory",
+ "Load MotionBrush From Optical Flow Without Model",
"Load MotionBrush From Tracking Points",
+ "Load MotionBrush From Tracking Points Without Model",
"Load Pose KeyPoints",
"Loop",
"LoopEnd_IMAGE",
@@ -3662,7 +3857,10 @@
],
"https://github.com/chaojie/ComfyUI-RAFT": [
[
- "RAFT Run"
+ "Load MotionBrush",
+ "RAFT Run",
+ "Save MotionBrush",
+ "VizMotionBrush"
],
{
"title_aux": "ComfyUI-RAFT"
@@ -3670,10 +3868,16 @@
],
"https://github.com/chflame163/ComfyUI_LayerStyle": [
[
+ "LayerFilter: ChannelShake",
"LayerFilter: GaussianBlur",
"LayerFilter: MotionBlur",
+ "LayerFilter: SoftLight",
"LayerMask: MaskBoxDetect",
+ "LayerMask: MaskEdgeShrink",
+ "LayerMask: MaskGradient",
+ "LayerMask: MaskGrow",
"LayerMask: MaskInvert",
+ "LayerMask: MaskMotionBlur",
"LayerMask: MaskPreview",
"LayerStyle: ColorOverlay",
"LayerStyle: DropShadow",
@@ -3682,10 +3886,12 @@
"LayerStyle: InnerShadow",
"LayerStyle: OuterGlow",
"LayerStyle: Stroke",
- "LayerStyle_Illumine",
+ "LayerUtility: ColorImage",
"LayerUtility: ColorPicker",
"LayerUtility: ExtendCanvas",
+ "LayerUtility: GetColorTone",
"LayerUtility: GetImageSize",
+ "LayerUtility: GradientImage",
"LayerUtility: ImageBlend",
"LayerUtility: ImageBlendAdvance",
"LayerUtility: ImageOpacity",
@@ -3893,6 +4099,7 @@
"ConditioningConcat",
"ConditioningSetArea",
"ConditioningSetAreaPercentage",
+ "ConditioningSetAreaStrength",
"ConditioningSetMask",
"ConditioningSetTimestepRange",
"ConditioningZeroOut",
@@ -3941,6 +4148,7 @@
"KarrasScheduler",
"LatentAdd",
"LatentBatch",
+ "LatentBatchSeedBehavior",
"LatentBlend",
"LatentComposite",
"LatentCompositeMasked",
@@ -3968,6 +4176,8 @@
"ModelSamplingDiscrete",
"PatchModelAddDownscale",
"PerpNeg",
+ "PhotoMakerEncode",
+ "PhotoMakerLoader",
"PolyexponentialScheduler",
"PorterDuffImageComposite",
"PreviewImage",
@@ -4093,6 +4303,7 @@
"DebugTensorShape+",
"ExtractKeyframes+",
"GetImageSize+",
+ "ImageApplyLUT+",
"ImageCASharpening+",
"ImageCompositeFromMaskBatch+",
"ImageCrop+",
@@ -4112,6 +4323,7 @@
"MaskFromColor+",
"MaskPreview+",
"ModelCompile+",
+ "NoiseFromImage+",
"SDXLResolutionPicker+",
"SimpleMath+",
"TransitionMask+"
@@ -4152,9 +4364,19 @@
"title_aux": "ComfyUI-Llama"
}
],
+ "https://github.com/daniel-lewis-ab/ComfyUI-TTS": [
+ [
+ "Load_Piper_Model",
+ "Piper_Speak_Text"
+ ],
+ {
+ "title_aux": "ComfyUI-TTS"
+ }
+ ],
"https://github.com/darkpixel/darkprompts": [
[
"DarkCombine",
+ "DarkLoRALoader",
"DarkPrompt"
],
{
@@ -4591,15 +4813,18 @@
"LogString",
"LogVec2",
"LogVec3",
+ "RF_AtIndexString",
"RF_BoolToString",
"RF_FloatToString",
"RF_IntToString",
"RF_JsonStyleLoader",
"RF_MergeLines",
"RF_NumberToString",
+ "RF_OptionsString",
"RF_RangeFloat",
"RF_RangeInt",
"RF_RangeNumber",
+ "RF_SavePromptInfo",
"RF_SplitLines",
"RF_TextConcatenate",
"RF_TextInput",
@@ -4652,7 +4877,8 @@
"https://github.com/glifxyz/ComfyUI-GlifNodes": [
[
"GlifConsistencyDecoder",
- "GlifPatchConsistencyDecoderTiled"
+ "GlifPatchConsistencyDecoderTiled",
+ "SDXLAspectRatio"
],
{
"title_aux": "ComfyUI-GlifNodes"
@@ -4666,6 +4892,23 @@
"title_aux": "Load Image From Base64 URI"
}
],
+ "https://github.com/godspede/ComfyUI_Substring": [
+ [
+ "SubstringTheory"
+ ],
+ {
+ "title_aux": "ComfyUI Substring"
+ }
+ ],
+ "https://github.com/gokayfem/ComfyUI_VLM_nodes": [
+ [
+ "PromptGenerate",
+ "VisionTextQuestion"
+ ],
+ {
+ "title_aux": "VLM_nodes"
+ }
+ ],
"https://github.com/guoyk93/yk-node-suite-comfyui": [
[
"YKImagePadForOutpaint",
@@ -4881,6 +5124,14 @@
"title_aux": "Efficiency Nodes for ComfyUI Version 2.0+"
}
],
+ "https://github.com/jamal-alkharrat/ComfyUI_rotate_image": [
+ [
+ "RotateImage"
+ ],
+ {
+ "title_aux": "ComfyUI_rotate_image"
+ }
+ ],
"https://github.com/jamesWalker55/comfyui-various": [
[],
{
@@ -4899,6 +5150,7 @@
],
"https://github.com/jitcoder/lora-info": [
[
+ "ImageFromURL",
"LoraInfo"
],
{
@@ -4978,6 +5230,15 @@
"title_aux": "Knodes"
}
],
+ "https://github.com/kijai/ComfyUI-CCSR": [
+ [
+ "CCSR_Model_Select",
+ "CCSR_Upscale"
+ ],
+ {
+ "title_aux": "ComfyUI-CCSR"
+ }
+ ],
"https://github.com/kijai/ComfyUI-DDColor": [
[
"DDColor_Colorize"
@@ -5020,6 +5281,7 @@
"GenerateNoise",
"GetImageRangeFromBatch",
"GetImagesFromBatchIndexed",
+ "GetLatentsFromBatchIndexed",
"GrowMaskWithBlur",
"INTConstant",
"ImageBatchRepeatInterleaving",
@@ -5028,10 +5290,13 @@
"ImageGrabPIL",
"ImageGridComposite2x2",
"ImageGridComposite3x3",
+ "ImageTransformByNormalizedAmplitude",
"InjectNoiseToLatent",
"InsertImageBatchByIndexes",
"NormalizeLatent",
+ "NormalizedAmplitudeToMask",
"OffsetMask",
+ "OffsetMaskByNormalizedAmplitude",
"ReferenceOnlySimple3",
"ReplaceImagesInBatch",
"ResizeMask",
@@ -5042,6 +5307,7 @@
"SoundReactive",
"SplitBboxes",
"StableZero123_BatchSchedule",
+ "StringConstant",
"VRAM_Debug",
"WidgetToString"
],
@@ -5141,13 +5407,21 @@
],
"https://github.com/komojini/komojini-comfyui-nodes": [
[
+ "BatchCreativeInterpolationNodeDynamicSettings",
"CachedGetter",
"DragNUWAImageCanvas",
"FlowBuilder",
+ "FlowBuilder (adv)",
+ "FlowBuilder (advanced)",
+ "FlowBuilder (advanced) Setter",
"FlowBuilderSetter",
+ "FlowBuilderSetter (adv)",
"Getter",
+ "ImageCropByRatio",
+ "ImageCropByRatioAndResize",
"ImageGetter",
"ImageMerger",
+ "ImagesCropByRatioAndResizeBatch",
"KSamplerAdvancedCacheable",
"KSamplerCacheable",
"Setter",
@@ -5245,6 +5519,8 @@
],
"https://github.com/longgui0318/comfyui-mask-util": [
[
+ "Mask Region Info",
+ "Mask Selection Of Masks",
"Split Masks"
],
{
@@ -5288,6 +5564,7 @@
"DetailerForEachDebug",
"DetailerForEachDebugPipe",
"DetailerForEachPipe",
+ "DetailerForEachPipeForAnimateDiff",
"DetailerHookCombine",
"DetailerPipeToBasicPipe",
"EditBasicPipe",
@@ -5310,8 +5587,10 @@
"ImpactCompare",
"ImpactConcatConditionings",
"ImpactConditionalBranch",
+ "ImpactConditionalBranchSelMode",
"ImpactConditionalStopIteration",
"ImpactControlBridge",
+ "ImpactControlNetApplyAdvancedSEGS",
"ImpactControlNetApplySEGS",
"ImpactControlNetClearSEGS",
"ImpactDecomposeSEGS",
@@ -5469,6 +5748,7 @@
"GlobalSeed //Inspire",
"HEDPreprocessor_Provider_for_SEGS //Inspire",
"HyperTile //Inspire",
+ "IPAdapterModelHelper //Inspire",
"ImageBatchSplitter //Inspire",
"InpaintPreprocessor_Provider_for_SEGS //Inspire",
"KSampler //Inspire",
@@ -5553,6 +5833,18 @@
"title_aux": "m957ymj75urz/ComfyUI-Custom-Nodes"
}
],
+ "https://github.com/mape/ComfyUI-mape-Helpers": [
+ [
+ "mape Variable"
+ ],
+ {
+ "author": "mape",
+ "description": "Various QoL improvements like prompt tweaking, variable assignment, image preview, fuzzy search, error reporting, organizing and node navigation.",
+ "nickname": "\ud83d\udfe1 mape's helpers",
+ "title": "mape's helpers",
+ "title_aux": "mape's ComfyUI Helpers"
+ }
+ ],
"https://github.com/marhensa/sdxl-recommended-res-calc": [
[
"RecommendedResCalc"
@@ -5800,8 +6092,23 @@
"title_aux": "comfyui-NDI"
}
],
+ "https://github.com/nkchocoai/ComfyUI-PromptUtilities": [
+ [
+ "PromptUtilitiesConstString",
+ "PromptUtilitiesConstStringMultiLine",
+ "PromptUtilitiesFormatString",
+ "PromptUtilitiesJoinStringList",
+ "PromptUtilitiesLoadPreset",
+ "PromptUtilitiesLoadPresetAdvanced"
+ ],
+ {
+ "title_aux": "ComfyUI-PromptUtilities"
+ }
+ ],
"https://github.com/nkchocoai/ComfyUI-SizeFromPresets": [
[
+ "EmptyLatentImageFromPresetsSD15",
+ "EmptyLatentImageFromPresetsSDXL",
"SizeFromPresetsSD15",
"SizeFromPresetsSDXL"
],
@@ -5989,6 +6296,7 @@
"AnyAspectRatio",
"ConditioningMultiplier_PoP",
"ConditioningNormalizer_PoP",
+ "DallE3_PoP",
"LoadImageResizer_PoP",
"LoraStackLoader10_PoP",
"LoraStackLoader_PoP",
@@ -6191,6 +6499,7 @@
"AreaToMask",
"CLIPSeg",
"CLIPSeg_",
+ "CenterImage",
"CharacterInText",
"ChatGPTOpenAI",
"CkptNames_",
@@ -6217,6 +6526,7 @@
"LimitNumber",
"LoadImagesFromPath",
"LoadImagesFromURL",
+ "LoraNames_",
"MergeLayers",
"MirroredImage",
"MultiplicationNode",
@@ -6229,6 +6539,7 @@
"RandomPrompt",
"ResizeImageMixlab",
"SamplerNames_",
+ "SaveImageToLocal",
"ScreenShare",
"Seed_",
"ShowLayer",
@@ -6252,15 +6563,14 @@
"title_aux": "comfyui-mixlab-nodes"
}
],
- "https://github.com/shiimizu/ComfyUI-PhotoMaker": [
+ "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus": [
[
- "PhotoMakerEncode",
- "PhotoMakerLoader",
+ "PhotoMakerEncodePlus",
"PhotoMakerStyles",
"PrepImagesForClipVisionFromPath"
],
{
- "title_aux": "ComfyUI PhotoMaker"
+ "title_aux": "ComfyUI PhotoMaker Plus"
}
],
"https://github.com/shiimizu/ComfyUI-TiledDiffusion": [
@@ -6293,6 +6603,7 @@
],
"https://github.com/shingo1228/ComfyUI-send-eagle-slim": [
[
+ "Send Eagle with text",
"Send Webp Image to Eagle"
],
{
@@ -7013,6 +7324,7 @@
"EZLoadImgBatchFromUrlsNode",
"EZLoadImgFromUrlNode",
"EZRemoveImgBackground",
+ "EZS3Uploader",
"EZVideoCombiner"
],
{
@@ -7148,7 +7460,9 @@
"easy XYInputs: Denoise",
"easy XYInputs: ModelMergeBlocks",
"easy XYInputs: NegativeCond",
+ "easy XYInputs: NegativeCondList",
"easy XYInputs: PositiveCond",
+ "easy XYInputs: PositiveCondList",
"easy XYInputs: PromptSR",
"easy XYInputs: Sampler/Scheduler",
"easy XYInputs: Seeds++ Batch",
@@ -7156,21 +7470,34 @@
"easy XYPlot",
"easy XYPlotAdvanced",
"easy a1111Loader",
+ "easy boolean",
"easy comfyLoader",
+ "easy compare",
"easy controlnetLoader",
"easy controlnetLoaderADV",
+ "easy convertAnything",
"easy detailerFix",
+ "easy float",
+ "easy fooocusInpaintLoader",
"easy fullLoader",
"easy fullkSampler",
"easy globalSeed",
"easy hiresFix",
+ "easy if",
"easy imageInsetCrop",
"easy imagePixelPerfect",
"easy imageRemoveBG",
+ "easy imageSave",
+ "easy imageScaleDown",
+ "easy imageScaleDownBy",
+ "easy imageScaleDownToSize",
"easy imageSize",
"easy imageSizeByLongerSide",
"easy imageSizeBySide",
+ "easy imageSwitch",
"easy imageToMask",
+ "easy int",
+ "easy joinImageBatch",
"easy kSampler",
"easy kSamplerDownscaleUnet",
"easy kSamplerInpainting",
@@ -7191,14 +7518,20 @@
"easy preSamplingAdvanced",
"easy preSamplingDynamicCFG",
"easy preSamplingSdTurbo",
+ "easy promptList",
+ "easy rangeFloat",
+ "easy rangeInt",
"easy samLoaderPipe",
"easy seed",
+ "easy showAnything",
"easy showSpentTime",
+ "easy string",
"easy stylesSelector",
"easy svdLoader",
"easy ultralyticsDetectorPipe",
"easy unSampler",
"easy wildcards",
+ "easy xyAny",
"easy zero123Loader"
],
{
@@ -7300,6 +7633,16 @@
"title_aux": "tdxh_node_comfyui"
}
],
+ "https://github.com/yuvraj108c/ComfyUI-Whisper": [
+ [
+ "Add Subtitles To Background",
+ "Add Subtitles To Frames",
+ "Apply Whisper"
+ ],
+ {
+ "title_aux": "ComfyUI Whisper"
+ }
+ ],
"https://github.com/zcfrank1st/Comfyui-Toolbox": [
[
"PreviewJson",
@@ -7349,6 +7692,15 @@
"title_aux": "ComfyUI_zfkun"
}
],
+ "https://github.com/zhongpei/Comfyui_image2prompt": [
+ [
+ "Image2Text",
+ "LoadImage2TextModel"
+ ],
+ {
+ "title_aux": "Comfyui_image2prompt"
+ }
+ ],
"https://github.com/zhuanqianfish/ComfyUI-EasyNode": [
[
"EasyCaptureNode",
diff --git a/node_db/new/model-list.json b/node_db/new/model-list.json
index eaf193d6..a640b191 100644
--- a/node_db/new/model-list.json
+++ b/node_db/new/model-list.json
@@ -1,5 +1,56 @@
{
"models": [
+ {
+ "name": "photomaker-v1.bin",
+ "type": "photomaker",
+ "base": "SDXL",
+ "save_path": "photomaker",
+ "description": "PhotoMaker model. This model is compatible with SDXL.",
+ "reference": "https://huggingface.co/TencentARC/PhotoMaker",
+ "filename": "photomaker-v1.bin",
+ "url": "https://huggingface.co/TencentARC/PhotoMaker/resolve/main/photomaker-v1.bin"
+ },
+ {
+ "name": "ip-adapter-faceid_sdxl.bin",
+ "type": "IP-Adapter",
+ "base": "SD1.5",
+ "save_path": "ipadapter",
+ "description": "IP-Adapter-FaceID Model (SDXL) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid_sdxl.bin",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid_sdxl.bin"
+ },
+ {
+ "name": "ip-adapter-faceid-plusv2_sdxl.bin",
+ "type": "IP-Adapter",
+ "base": "SD1.5",
+ "save_path": "ipadapter",
+ "description": "IP-Adapter-FaceID Plus Model (SDXL) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid-plusv2_sdxl.bin",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sdxl.bin"
+ },
+ {
+ "name": "ip-adapter-faceid_sdxl_lora.safetensors",
+ "type": "lora",
+ "base": "SDXL",
+ "save_path": "loras/ipadapter",
+ "description": "IP-Adapter-FaceID LoRA Model (SDXL) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid_sdxl_lora.safetensors",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid_sdxl_lora.safetensors"
+ },
+ {
+ "name": "ip-adapter-faceid-plusv2_sdxl_lora.safetensors",
+ "type": "lora",
+ "base": "SDXL",
+ "save_path": "loras/ipadapter",
+ "description": "IP-Adapter-FaceID-Plus V2 LoRA Model (SDXL) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid-plusv2_sdxl_lora.safetensors",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sdxl_lora.safetensors"
+ },
+
{
"name": "TencentARC/motionctrl.pth",
"type": "checkpoints",
@@ -10,7 +61,6 @@
"filename": "motionctrl.pth",
"url": "https://huggingface.co/TencentARC/MotionCtrl/resolve/main/motionctrl.pth"
},
-
{
"name": "ip-adapter-faceid-plusv2_sd15.bin",
"type": "IP-Adapter",
@@ -31,6 +81,16 @@
"filename": "ip-adapter-faceid-plusv2_sd15_lora.safetensors",
"url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sd15_lora.safetensors"
},
+ {
+ "name": "ip-adapter-faceid-plus_sd15_lora.safetensors",
+ "type": "lora",
+ "base": "SD1.5",
+ "save_path": "loras/ipadapter",
+ "description": "IP-Adapter-FaceID Plus LoRA Model (SD1.5) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid-plus_sd15_lora.safetensors",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plus_sd15_lora.safetensors"
+ },
{
"name": "ControlNet-HandRefiner-pruned (inpaint-depth-hand; fp16)",
@@ -73,6 +133,26 @@
"url": "https://huggingface.co/ioclab/LooseControl_WebUICombine/resolve/main/control_boxdepth_LooseControlfp16.safetensors"
},
+ {
+ "name": "ip-adapter-faceid-portrait_sd15.bin",
+ "type": "IP-Adapter",
+ "base": "SD1.5",
+ "save_path": "ipadapter",
+ "description": "IP-Adapter-FaceID Portrait Model (SD1.5) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid-portrait_sd15.bin",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-portrait_sd15.bin"
+ },
+ {
+ "name": "ip-adapter-faceid-plus_sd15.bin",
+ "type": "IP-Adapter",
+ "base": "SD1.5",
+ "save_path": "ipadapter",
+ "description": "IP-Adapter-FaceID Plus Model (SD1.5) [ipadapter]",
+ "reference": "https://huggingface.co/h94/IP-Adapter-FaceID",
+ "filename": "ip-adapter-faceid-plus_sd15.bin",
+ "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plus_sd15.bin"
+ },
{
"name": "ip-adapter-faceid_sd15.bin",
"type": "IP-Adapter",
@@ -323,7 +403,7 @@
"type": "checkpoints",
"base": "SVD",
"save_path": "checkpoints/SVD",
- "description": "Stable Video Diffusion (SVD) Image-to-Video is a diffusion model that takes in a still image as a conditioning frame, and generates a video from it.
NOTE: 14 frames @ 576x1024",
+ "description": "Stable Video Diffusion (SVD) Image-to-Video is a diffusion model that takes in a still image as a conditioning frame, and generates a video from it.\nNOTE: 14 frames @ 576x1024",
"reference": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid",
"filename": "svd.safetensors",
"url": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid/resolve/main/svd.safetensors"
@@ -333,7 +413,7 @@
"type": "checkpoints",
"base": "SVD",
"save_path": "checkpoints/SVD",
- "description": "Stable Video Diffusion (SVD) Image-to-Video is a diffusion model that takes in a still image as a conditioning frame, and generates a video from it.
NOTE: 25 frames @ 576x1024 ",
+ "description": "Stable Video Diffusion (SVD) Image-to-Video is a diffusion model that takes in a still image as a conditioning frame, and generates a video from it.\nNOTE: 25 frames @ 576x1024 ",
"reference": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt",
"filename": "svd_xt.safetensors",
"url": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid-xt/resolve/main/svd_xt.safetensors"
@@ -670,8 +750,8 @@
{
"name": "CLIPVision model (stabilityai/clip_vision_g)",
"type": "clip_vision",
- "base": "SDXL",
- "save_path": "clip_vision/SDXL",
+ "base": "vit-g",
+ "save_path": "clip_vision",
"description": "[3.69GB] clip_g vision model",
"reference": "https://huggingface.co/stabilityai/control-lora",
"filename": "clip_vision_g.safetensors",
@@ -679,24 +759,24 @@
},
{
- "name": "CLIPVision model (IP-Adapter) 1.5",
+ "name": "CLIPVision model (IP-Adapter) CLIP-ViT-H-14-laion2B-s32B-b79K",
"type": "clip_vision",
- "base": "SD1.5",
- "save_path": "clip_vision/SD1.5",
+ "base": "ViT-H",
+ "save_path": "clip_vision",
"description": "[2.5GB] CLIPVision model (needed for IP-Adapter)",
"reference": "https://huggingface.co/h94/IP-Adapter",
- "filename": "pytorch_model.bin",
- "url": "https://huggingface.co/h94/IP-Adapter/resolve/main/models/image_encoder/pytorch_model.bin"
+ "filename": "CLIP-ViT-H-14-laion2B-s32B-b79K.safetensors",
+ "url": "https://huggingface.co/h94/IP-Adapter/resolve/main/models/image_encoder/model.safetensors"
},
{
- "name": "CLIPVision model (IP-Adapter) XL",
+ "name": "CLIPVision model (IP-Adapter) CLIP-ViT-bigG-14-laion2B-39B-b160k",
"type": "clip_vision",
- "base": "SDXL",
- "save_path": "clip_vision/SDXL",
+ "base": "ViT-G",
+ "save_path": "clip_vision",
"description": "[3.69GB] CLIPVision model (needed for IP-Adapter)",
"reference": "https://huggingface.co/h94/IP-Adapter",
- "filename": "pytorch_model.bin",
- "url": "https://huggingface.co/h94/IP-Adapter/resolve/main/sdxl_models/image_encoder/pytorch_model.bin"
+ "filename": "CLIP-ViT-bigG-14-laion2B-39B-b160k.safetensors",
+ "url": "https://huggingface.co/h94/IP-Adapter/resolve/main/sdxl_models/image_encoder/model.safetensors"
}
]
}
diff --git a/node_db/tutorial/custom-node-list.json b/node_db/tutorial/custom-node-list.json
index dd6b3650..0930d392 100644
--- a/node_db/tutorial/custom-node-list.json
+++ b/node_db/tutorial/custom-node-list.json
@@ -69,6 +69,36 @@
],
"install_type": "git-clone",
"description": "Nodes:WW_ImageResize"
+ },
+ {
+ "author": "bmz55",
+ "title": "bmz nodes",
+ "reference": "https://github.com/bmz55/comfyui-bmz-nodes",
+ "files": [
+ "https://github.com/bmz55/comfyui-bmz-nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:Load Images From Dir With Name (Inspire - BMZ), Count Images In Dir (BMZ), Get Level Text (BMZ), Get Level Float (BMZ)"
+ },
+ {
+ "author": "azure-dragon-ai",
+ "title": "ComfyUI-HPSv2-Nodes",
+ "reference": "https://github.com/azure-dragon-ai/ComfyUI-HPSv2-Nodes",
+ "files": [
+ "https://github.com/azure-dragon-ai/ComfyUI-HPSv2-Nodes"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:Loader, Image Processor, Text Processor, ImageScore"
+ },
+ {
+ "author": "kappa54m",
+ "title": "ComfyUI-HPSv2-Nodes",
+ "reference": "https://github.com/kappa54m/ComfyUI_Usability",
+ "files": [
+ "https://github.com/kappa54m/ComfyUI_Usability"
+ ],
+ "install_type": "git-clone",
+ "description": "Nodes:Load Image Dedup"
}
]
}
\ No newline at end of file
diff --git a/prestartup_script.py b/prestartup_script.py
index 35157d58..31c445e8 100644
--- a/prestartup_script.py
+++ b/prestartup_script.py
@@ -18,6 +18,7 @@ import cm_global
message_collapses = []
import_failed_extensions = set()
cm_global.variables['cm.on_revision_detected_handler'] = []
+enable_file_logging = True
def register_message_collapse(f):
@@ -30,6 +31,24 @@ def is_import_failed_extension(name):
return name in import_failed_extensions
+def check_file_logging():
+ global enable_file_logging
+ try:
+ import configparser
+ config_path = os.path.join(os.path.dirname(__file__), "config.ini")
+ config = configparser.ConfigParser()
+ config.read(config_path)
+ default_conf = config['default']
+
+ if 'file_logging' in default_conf and default_conf['file_logging'].lower() == 'false':
+ enable_file_logging = False
+ except Exception:
+ pass
+
+
+check_file_logging()
+
+
sys.__comfyui_manager_register_message_collapse = register_message_collapse
sys.__comfyui_manager_is_import_failed_extension = is_import_failed_extension
cm_global.register_api('cm.register_message_collapse', register_message_collapse)
@@ -118,16 +137,34 @@ try:
postfix = ""
# Logger setup
- if os.path.exists(f"comfyui{postfix}.log"):
- if os.path.exists(f"comfyui{postfix}.prev.log"):
- if os.path.exists(f"comfyui{postfix}.prev2.log"):
- os.remove(f"comfyui{postfix}.prev2.log")
- os.rename(f"comfyui{postfix}.prev.log", f"comfyui{postfix}.prev2.log")
- os.rename(f"comfyui{postfix}.log", f"comfyui{postfix}.prev.log")
+ if enable_file_logging:
+ if os.path.exists(f"comfyui{postfix}.log"):
+ if os.path.exists(f"comfyui{postfix}.prev.log"):
+ if os.path.exists(f"comfyui{postfix}.prev2.log"):
+ os.remove(f"comfyui{postfix}.prev2.log")
+ os.rename(f"comfyui{postfix}.prev.log", f"comfyui{postfix}.prev2.log")
+ os.rename(f"comfyui{postfix}.log", f"comfyui{postfix}.prev.log")
+
+ log_file = open(f"comfyui{postfix}.log", "w", encoding="utf-8", errors="ignore")
+
+ log_lock = threading.Lock()
original_stdout = sys.stdout
original_stderr = sys.stderr
+ if original_stdout.encoding.lower() == 'utf-8':
+ write_stdout = original_stdout.write
+ write_stderr = original_stderr.write
+ else:
+ def wrapper_stdout(msg):
+ original_stdout.write(msg.encode('utf-8').decode(original_stdout.encoding, errors="ignore"))
+
+ def wrapper_stderr(msg):
+ original_stderr.write(msg.encode('utf-8').decode(original_stderr.encoding, errors="ignore"))
+
+ write_stdout = wrapper_stdout
+ write_stderr = wrapper_stderr
+
pat_tqdm = r'\d+%.*\[(.*?)\]'
pat_import_fail = r'seconds \(IMPORT FAILED\):'
pat_custom_node = r'[/\\]custom_nodes[/\\](.*)$'
@@ -135,9 +172,6 @@ try:
is_start_mode = True
is_import_fail_mode = False
- log_file = open(f"comfyui{postfix}.log", "w", encoding="utf-8", errors="ignore")
- log_lock = threading.Lock()
-
class ComfyUIManagerLogger:
def __init__(self, is_stdout):
self.is_stdout = is_stdout
@@ -185,7 +219,7 @@ try:
if '100%' in message:
self.sync_write(message)
else:
- original_stderr.write(message)
+ write_stderr(message)
original_stderr.flush()
else:
self.sync_write(message)
@@ -204,11 +238,11 @@ try:
with std_log_lock:
if self.is_stdout:
- original_stdout.write(message)
+ write_stdout(message)
original_stdout.flush()
terminal_hook.write_stderr(message)
else:
- original_stderr.write(message)
+ write_stderr(message)
original_stderr.flush()
terminal_hook.write_stdout(message)
@@ -237,11 +271,16 @@ try:
sys.stderr = original_stderr
sys.stdout = original_stdout
log_file.close()
-
- sys.stdout = ComfyUIManagerLogger(True)
- sys.stderr = ComfyUIManagerLogger(False)
- atexit.register(close_log)
+
+ if enable_file_logging:
+ sys.stdout = ComfyUIManagerLogger(True)
+ sys.stderr = ComfyUIManagerLogger(False)
+
+ atexit.register(close_log)
+ else:
+ sys.stdout.close_log = lambda: None
+
except Exception as e:
print(f"[ComfyUI-Manager] Logging failed: {e}")
@@ -250,7 +289,11 @@ print("** ComfyUI startup time:", datetime.datetime.now())
print("** Platform:", platform.system())
print("** Python version:", sys.version)
print("** Python executable:", sys.executable)
-print("** Log path:", os.path.abspath('comfyui.log'))
+
+if enable_file_logging:
+ print("** Log path:", os.path.abspath('comfyui.log'))
+else:
+ print("** Log path: file logging is disabled")
def check_bypass_ssl():
@@ -457,11 +500,26 @@ if os.path.exists(script_list_path):
del processed_install
del pip_list
-if platform.system() == 'Windows':
+
+def check_windows_event_loop_policy():
try:
- import asyncio
- import asyncio.windows_events
- asyncio.set_event_loop_policy(asyncio.windows_events.WindowsSelectorEventLoopPolicy())
- print(f"[ComfyUI-Manager] Windows event loop policy mode enabled")
- except Exception as e:
- print(f"[ComfyUI-Manager] WARN: Windows initialization fail: {e}")
\ No newline at end of file
+ import configparser
+ config_path = os.path.join(os.path.dirname(__file__), "config.ini")
+ config = configparser.ConfigParser()
+ config.read(config_path)
+ default_conf = config['default']
+
+ if 'windows_selector_event_loop_policy' in default_conf and default_conf['windows_selector_event_loop_policy'].lower() == 'true':
+ try:
+ import asyncio
+ import asyncio.windows_events
+ asyncio.set_event_loop_policy(asyncio.windows_events.WindowsSelectorEventLoopPolicy())
+ print(f"[ComfyUI-Manager] Windows event loop policy mode enabled")
+ except Exception as e:
+ print(f"[ComfyUI-Manager] WARN: Windows initialization fail: {e}")
+ except Exception:
+ pass
+
+
+if platform.system() == 'Windows':
+ check_windows_event_loop_policy()
diff --git a/scanner.py b/scanner.py
index 07809aef..8b8d4de2 100644
--- a/scanner.py
+++ b/scanner.py
@@ -1,3 +1,4 @@
+import ast
import re
import os
import json
@@ -22,6 +23,28 @@ if not os.path.exists(temp_dir):
print(f"TEMP DIR: {temp_dir}")
+def extract_nodes(code_text):
+ try:
+ parsed_code = ast.parse(code_text)
+
+ assignments = (node for node in parsed_code.body if isinstance(node, ast.Assign))
+
+ for assignment in assignments:
+ if isinstance(assignment.targets[0], ast.Name) and assignment.targets[0].id == 'NODE_CLASS_MAPPINGS':
+ node_class_mappings = assignment.value
+ break
+ else:
+ node_class_mappings = None
+
+ if node_class_mappings:
+ s = set([key.s.strip() for key in node_class_mappings.keys if key is not None])
+ return s
+ else:
+ return set()
+ except:
+ return set()
+
+
# scan
def scan_in_file(filename, is_builtin=False):
global builtin_nodes
@@ -39,6 +62,8 @@ def scan_in_file(filename, is_builtin=False):
nodes = set()
class_dict = {}
+ nodes |= extract_nodes(code)
+
pattern2 = r'^[^=]*_CLASS_MAPPINGS\["(.*?)"\]'
keys = re.findall(pattern2, code)
for key in keys: