Browse Source

Merge branch 'main' into feat/component-manager

feat/component-manager
dr.lt.data 9 months ago
parent
commit
45db3eed1c
  1. 24
      README.md
  2. 149
      __init__.py
  3. 883
      custom-node-list.json
  4. 1181
      extension-node-map.json
  5. 49
      js/comfyui-manager.js
  6. 176
      js/node_fixer.js
  7. 428
      model-list.json
  8. 179
      node_db/dev/custom-node-list.json
  9. 246
      node_db/dev/extension-node-map.json
  10. 10
      node_db/forked/custom-node-list.json
  11. 20
      node_db/legacy/custom-node-list.json
  12. 718
      node_db/new/custom-node-list.json
  13. 1181
      node_db/new/extension-node-map.json
  14. 352
      node_db/new/model-list.json
  15. 50
      node_db/tutorial/custom-node-list.json
  16. 106
      prestartup_script.py
  17. 25
      scanner.py

24
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({
![missing-list](misc/missing-list.png)
## 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
@ -269,6 +290,7 @@ NODE_CLASS_MAPPINGS.update({
* https://github.com/MockbaTheBorg/Nodes
* https://github.com/StartHua/Comfyui_GPT_Story
* https://github.com/NielsGercama/comfyui_customsampling
* https://github.com/wrightdaniel2017/ComfyUI-VideoLipSync
## Roadmap

149
__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, 2]
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 try_install_script(url, repo_path, install_cmd):
int_comfyui_revision = 0
def set_double_click_policy(mode):
get_config()['double_click_policy'] = mode
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:
def try_install_script(url, repo_path, install_cmd):
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,26 +304,29 @@ 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
is_detached = False
try:
repo = git.Repo(os.path.dirname(folder_paths.__file__))
comfy_ui_revision = len(list(repo.iter_commits('HEAD')))
current_branch = repo.active_branch.name
comfy_ui_hash = repo.head.commit.hexsha
comfy_ui_hash = repo.head.commit.hexsha
cm_global.variables['comfyui.revision'] = comfy_ui_revision
comfy_ui_commit_datetime = repo.head.commit.committed_datetime
cm_global.variables['comfyui.commit_datetime'] = comfy_ui_commit_datetime
is_detached = repo.head.is_detached
current_branch = repo.active_branch.name
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,11 +342,14 @@ 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)")
if is_detached:
print(f"### ComfyUI Revision: {comfy_ui_revision} [{comfy_ui_hash[:8]}] *DETACHED | Released on '{comfy_ui_commit_datetime.date()}'")
else:
print("### ComfyUI Revision: UNKNOWN (The currently installed ComfyUI is not a Git repository)")
print_comfyui_version()
@ -523,8 +538,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 +609,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 +1091,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 +1802,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 +1842,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)
response = conn.getresponse()
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()
try:
if response.status == 200:
html_content = response.read().decode('utf-8')
pattern = re.compile(r'<div class="markdown-body">([\s\S]*?)</div>')
match = pattern.search(html_content)
pattern = re.compile(r'<div class="markdown-body">([\s\S]*?)</div>')
match = pattern.search(html_content)
if match:
markdown_content = match.group(1)
markdown_content += f"<HR>ComfyUI: {comfy_ui_revision}[{comfy_ui_hash[:6]}]({comfy_ui_commit_datetime.date()})"
# markdown_content += f"<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;()"
markdown_content += f"<BR>Manager: {version_str}"
if match:
markdown_content = match.group(1)
markdown_content += f"<HR>ComfyUI: {comfy_ui_revision}[{comfy_ui_hash[:6]}]({comfy_ui_commit_date})"
# markdown_content += f"<BR>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;()"
markdown_content += f"<BR>Manager: {version_str}"
try:
if comfy_ui_required_commit_datetime.date() > comfy_ui_commit_datetime.date():
markdown_content = f'<P style="text-align: center; color:red; background-color:white; font-weight:bold">Your ComfyUI is too OUTDATED!!!</P>' + markdown_content
except:
pass
try:
if comfy_ui_required_revision > int(comfy_ui_revision):
markdown_content = f'<P style="text-align: center; color:red; background-color:white; font-weight:bold">Your ComfyUI is too OUTDATED!!!</P>' + 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")
@ -2355,7 +2378,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:
@ -2369,9 +2392,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']

883
custom-node-list.json

File diff suppressed because it is too large Load Diff

1181
extension-node-map.json

File diff suppressed because it is too large Load Diff

49
js/comfyui-manager.js vendored

@ -18,12 +18,13 @@ 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 "./component-builder.js";
import { ComponentsManager } 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;
}
@ -137,7 +138,7 @@ docStyle.innerHTML = `
.cm-notice-board {
width: 290px;
height: 230px;
height: 270px;
overflow: auto;
color: var(--input-text);
border: 1px solid var(--descrip-text);
@ -911,6 +912,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 => {
@ -940,6 +962,7 @@ class ManagerMenuDialog extends ComfyDialog {
default_ui_combo,
share_combo,
component_policy_combo,
dbl_click_policy_combo,
$el("br", {}, []),
$el("br", {}, []),
@ -1044,7 +1067,7 @@ class ManagerMenuDialog extends ComfyDialog {
onclick: (e) => {
const last_visited_site = localStorage.getItem("wg_last_visited")
if (!!last_visited_site) {
window.open(last_visited_site, "comfyui-workflow-gallery");
window.open(last_visited_site, last_visited_site);
} else {
this.handleWorkflowGalleryButtonClick(e)
}
@ -1171,7 +1194,7 @@ class ManagerMenuDialog extends ComfyDialog {
callback: () => {
const url = "https://openart.ai/workflows/dev";
localStorage.setItem("wg_last_visited", url);
window.open(url, "comfyui-workflow-gallery");
window.open(url, url);
modifyButtonStyle(url);
},
},
@ -1180,7 +1203,7 @@ class ManagerMenuDialog extends ComfyDialog {
callback: () => {
const url = "https://youml.com/?from=comfyui-share";
localStorage.setItem("wg_last_visited", url);
window.open(url, "comfyui-workflow-gallery");
window.open(url, url);
modifyButtonStyle(url);
},
},
@ -1189,7 +1212,16 @@ class ManagerMenuDialog extends ComfyDialog {
callback: () => {
const url = "https://comfyworkflows.com/";
localStorage.setItem("wg_last_visited", url);
window.open(url, "comfyui-workflow-gallery");
window.open(url, url);
modifyButtonStyle(url);
},
},
{
title: "Open 'flowt.ai'",
callback: () => {
const url = "https://flowt.ai/";
localStorage.setItem("wg_last_visited", url);
window.open(url, url);
modifyButtonStyle(url);
},
},
@ -1286,7 +1318,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)
};

176
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 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);
function node_info_copy(src, dest) {
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({

428
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<BR>(used by ComfyUI-FaceSwap, comfyui-reactor-node, CharacterFaceSwap,<BR>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<BR>(used by ComfyUI-FaceSwap, comfyui-reactor-node, CharacterFaceSwap,<BR>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.<BR>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.<BR>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"
@ -499,7 +499,17 @@
"reference": "https://huggingface.co/hakurei/waifu-diffusion-v1-4",
"filename": "kl-f8-anime2.ckpt",
"url": "https://huggingface.co/hakurei/waifu-diffusion-v1-4/resolve/main/vae/kl-f8-anime2.ckpt"
},
},
{
"name": "OpenAI Consistency Decoder",
"type": "VAE",
"base": "SD1.5 VAE",
"save_path": "vae/openai_consistency_decoder",
"description": "[2.3GB] OpenAI Consistency Decoder. Improved decoding for stable diffusion vaes.",
"reference": "https://github.com/openai/consistencydecoder",
"filename": "decoder.pt",
"url": "https://openaipublic.azureedge.net/diff-vae/c9cebd3132dd9c42936d803e33424145a748843c8f716c0814838bdc8a2fe7cb/decoder.pt"
},
{
"name": "LCM LoRA SD1.5",
"type": "lora",
@ -657,8 +667,8 @@
"save_path": "default",
"description": "TemporalNet was a ControlNet model designed to enhance the temporal consistency of generated outputs",
"reference": "https://huggingface.co/CiaraRowles/TemporalNet2",
"filename": "temporalnetversion2.ckpt",
"url": "https://huggingface.co/CiaraRowles/TemporalNet2/resolve/main/temporalnetversion2.ckpt"
"filename": "temporalnetversion2.safetensors",
"url": "https://huggingface.co/CiaraRowles/TemporalNet2/resolve/main/temporalnetversion2.safetensors"
},
{
"name": "CiaraRowles/TemporalNet1XL (1.0)",
@ -673,8 +683,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 +693,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 +713,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 +988,7 @@
"type": "controlnet",
"base": "SD1.5",
"save_path": "default",
"description": "Safetensors/FP16 versions of the new ControlNet-v1-1 checkpoints (tile) / v11f1e<BR>You need to this model for <B>Tiled Resample</B>",
"description": "Safetensors/FP16 versions of the new ControlNet-v1-1 checkpoints (tile) / v11f1e\nYou need to this model for <B>Tiled Resample</B>",
"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"
@ -1256,249 +1246,251 @@
},
{
"name": "animatediff/mmd_sd_v14.ckpt (comfyui-animatediff)",
"name": "animatediff/mmd_sd_v14.ckpt (comfyui-animatediff) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/comfyui-animatediff/models",
"description": "Pressing 'install' directly downloads the model from the ArtVentureX/AnimateDiff extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "AnimateDiff",
"description": "Pressing 'install' directly downloads the model from the ArtVentureX/AnimateDiff extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "mm_sd_v14.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/mm_sd_v14.ckpt"
},
{
"name": "animatediff/mm_sd_v15.ckpt (comfyui-animatediff)",
"name": "animatediff/mm_sd_v15.ckpt (comfyui-animatediff) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/comfyui-animatediff/models",
"description": "Pressing 'install' directly downloads the model from the ArtVentureX/AnimateDiff extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "AnimateDiff",
"description": "Pressing 'install' directly downloads the model from the ArtVentureX/AnimateDiff extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "mm_sd_v15.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/mm_sd_v15.ckpt"
},
{
"name": "animatediff/mmd_sd_v14.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/mmd_sd_v14.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "mm_sd_v14.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/mm_sd_v14.ckpt"
},
{
"name": "animatediff/mm_sd_v15.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/mm_sd_v15.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "mm_sd_v15.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/mm_sd_v15.ckpt"
},
{
"name": "animatediff/mm_sd_v15_v2.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/mm_sd_v15_v2.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "mm_sd_v15_v2.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/mm_sd_v15_v2.ckpt"
},
{
"name": "animatediff/v3_sd15_sparsectrl_rgb.ckpt (ComfyUI-AnimateDiff-Evolved)",
"type": "controlnet",
"base": "SD1.x",
"save_path": "controlnet/SD1.5/animatediff",
"description": "AnimateDiff SparseCtrl RGB ControlNet model",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v3_sd15_sparsectrl_rgb.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_sparsectrl_rgb.ckpt"
},
{
"name": "animatediff/v3_sd15_sparsectrl_scribble.ckpt",
"type": "controlnet",
"base": "SD1.x",
"save_path": "controlnet/SD1.5/animatediff",
"description": "AnimateDiff SparseCtrl Scribble ControlNet model",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v3_sd15_sparsectrl_scribble.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_sparsectrl_scribble.ckpt"
},
{
"name": "animatediff/v3_sd15_mm.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v3_sd15_mm.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v3_sd15_mm.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_mm.ckpt"
},
{
"name": "animatediff/v3_sd15_adapter.ckpt",
"type": "lora",
"base": "SD1.x",
"save_path": "loras/SD1.5/animatediff",
"description": "AnimateDiff Adapter LoRA (SD1.5)",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v3_sd15_adapter.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_adapter.ckpt"
},
{
"name": "animatediff/mm_sdxl_v10_beta.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/mm_sdxl_v10_beta.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SDXL",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "mm_sdxl_v10_beta.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/mm_sdxl_v10_beta.ckpt"
},
{
"name": "AD_Stabilized_Motion/mm-Stabilized_high.pth (ComfyUI-AnimateDiff-Evolved)",
"name": "AD_Stabilized_Motion/mm-Stabilized_high.pth (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/manshoety/AD_Stabilized_Motion",
"filename": "mm-Stabilized_high.pth",
"url": "https://huggingface.co/manshoety/AD_Stabilized_Motion/resolve/main/mm-Stabilized_high.pth"
},
{
"name": "AD_Stabilized_Motion/mm-Stabilized_mid.pth (ComfyUI-AnimateDiff-Evolved)",
"name": "AD_Stabilized_Motion/mm-Stabilized_mid.pth (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/manshoety/AD_Stabilized_Motion",
"filename": "mm-Stabilized_mid.pth",
"url": "https://huggingface.co/manshoety/AD_Stabilized_Motion/resolve/main/mm-Stabilized_mid.pth"
},
{
"name": "CiaraRowles/temporaldiff-v1-animatediff.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "CiaraRowles/temporaldiff-v1-animatediff.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/CiaraRowles/TemporalDiff",
"filename": "temporaldiff-v1-animatediff.ckpt",
"url": "https://huggingface.co/CiaraRowles/TemporalDiff/resolve/main/temporaldiff-v1-animatediff.ckpt"
},
{
"name": "animatediff/v2_lora_PanLeft.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_PanLeft.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_PanLeft.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_PanLeft.ckpt"
},
{
"name": "animatediff/v2_lora_PanRight.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_PanRight.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_PanRight.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_PanRight.ckpt"
},
{
"name": "animatediff/v2_lora_RollingAnticlockwise.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_RollingAnticlockwise.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_RollingAnticlockwise.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_RollingAnticlockwise.ckpt"
},
{
"name": "animatediff/v2_lora_RollingClockwise.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_RollingClockwise.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_RollingClockwise.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_RollingClockwise.ckpt"
},
{
"name": "animatediff/v2_lora_TiltDown.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_TiltDown.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_TiltDown.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_TiltDown.ckpt"
},
{
"name": "animatediff/v2_lora_TiltUp.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_TiltUp.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_TiltUp.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_TiltUp.ckpt"
},
{
"name": "animatediff/v2_lora_ZoomIn.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_ZoomIn.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_ZoomIn.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_ZoomIn.ckpt"
},
{
"name": "animatediff/v2_lora_ZoomOut.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_ZoomOut.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_ZoomOut.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_ZoomOut.ckpt"
},
{
"name": "LongAnimatediff/lt_long_mm_32_frames.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "LongAnimatediff/lt_long_mm_32_frames.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/Lightricks/LongAnimateDiff",
"filename": "lt_long_mm_32_frames.ckpt",
"url": "https://huggingface.co/Lightricks/LongAnimateDiff/resolve/main/lt_long_mm_32_frames.ckpt"
},
{
"name": "LongAnimatediff/lt_long_mm_16_64_frames.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "LongAnimatediff/lt_long_mm_16_64_frames.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/Lightricks/LongAnimateDiff",
"filename": "lt_long_mm_16_64_frames.ckpt",
"url": "https://huggingface.co/Lightricks/LongAnimateDiff/resolve/main/lt_long_mm_16_64_frames.ckpt"
},
{
"name": "LongAnimatediff/lt_long_mm_16_64_frames_v1.1.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "LongAnimatediff/lt_long_mm_16_64_frames_v1.1.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/Lightricks/LongAnimateDiff",
"filename": "lt_long_mm_16_64_frames_v1.1.ckpt",
"url": "https://huggingface.co/Lightricks/LongAnimateDiff/resolve/main/lt_long_mm_16_64_frames_v1.1.ckpt"
},
{
"name": "animatediff/v3_sd15_sparsectrl_rgb.ckpt (ComfyUI-AnimateDiff-Evolved)",
"type": "controlnet",
"base": "SD1.x",
"save_path": "controlnet/SD1.5/animatediff",
"description": "AnimateDiff SparseCtrl RGB ControlNet model",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v3_sd15_sparsectrl_rgb.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_sparsectrl_rgb.ckpt"
},
{
"name": "animatediff/v3_sd15_sparsectrl_scribble.ckpt",
"type": "controlnet",
"base": "SD1.x",
"save_path": "controlnet/SD1.5/animatediff",
"description": "AnimateDiff SparseCtrl Scribble ControlNet model",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v3_sd15_sparsectrl_scribble.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_sparsectrl_scribble.ckpt"
},
{
"name": "animatediff/v3_sd15_adapter.ckpt",
"type": "lora",
"base": "SD1.x",
"save_path": "loras/SD1.5/animatediff",
"description": "AnimateDiff Adapter LoRA (SD1.5)",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v3_sd15_adapter.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_adapter.ckpt"
},
{
"name": "TencentARC/motionctrl.pth",
"type": "checkpoints",
@ -1575,27 +1567,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 +1647,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 +1687,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 +1697,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 +1707,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 +1802,86 @@
"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"
},
{
"name": "1k3d68.onnx",
"type": "insightface",
"base": "inswapper",
"save_path": "insightface/models/antelopev2",
"description": "Antelopev2 1k3d68.onnx model for InstantId. (InstantId needs all Antelopev2 models)",
"reference": "https://github.com/cubiq/ComfyUI_InstantID#installation",
"filename": "1k3d68.onnx",
"url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/1k3d68.onnx"
},
{
"name": "2d106det.onnx",
"type": "insightface",
"base": "inswapper",
"save_path": "insightface/models/antelopev2",
"description": "Antelopev2 2d106det.onnx model for InstantId. (InstantId needs all Antelopev2 models)",
"reference": "https://github.com/cubiq/ComfyUI_InstantID#installation",
"filename": "2d106det.onnx",
"url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/2d106det.onnx"
},
{
"name": "genderage.onnx",
"type": "insightface",
"base": "inswapper",
"save_path": "insightface/models/antelopev2",
"description": "Antelopev2 genderage.onnx model for InstantId. (InstantId needs all Antelopev2 models)",
"reference": "https://github.com/cubiq/ComfyUI_InstantID#installation",
"filename": "genderage.onnx",
"url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/genderage.onnx"
},
{
"name": "glintr100.onnx",
"type": "insightface",
"base": "inswapper",
"save_path": "insightface/models/antelopev2",
"description": "Antelopev2 glintr100.onnx model for InstantId. (InstantId needs all Antelopev2 models)",
"reference": "https://github.com/cubiq/ComfyUI_InstantID#installation",
"filename": "glintr100.onnx",
"url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/glintr100.onnx"
},
{
"name": "scrfd_10g_bnkps.onnx",
"type": "insightface",
"base": "inswapper",
"save_path": "insightface/models/antelopev2",
"description": "Antelopev2 scrfd_10g_bnkps.onnx model for InstantId. (InstantId needs all Antelopev2 models)",
"reference": "https://github.com/cubiq/ComfyUI_InstantID#installation",
"filename": "scrfd_10g_bnkps.onnx",
"url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/scrfd_10g_bnkps.onnx"
},
{
"name": "ip-adapter.bin",
"type": "instantid",
"base": "SDXL",
"save_path": "instantid",
"description": "InstantId main model based on IpAdapter",
"reference": "https://huggingface.co/InstantX/InstantID",
"filename": "ip-adapter.bin",
"url": "https://huggingface.co/InstantX/InstantID/resolve/main/ip-adapter.bin"
},
{
"name": "diffusion_pytorch_model.safetensors",
"type": "controlnet",
"base": "SDXL",
"save_path": "controlnet/instantid",
"description": "InstantId controlnet model",
"reference": "https://huggingface.co/InstantX/InstantID",
"filename": "diffusion_pytorch_model.safetensors",
"url": "https://huggingface.co/InstantX/InstantID/resolve/main/ControlNetModel/diffusion_pytorch_model.safetensors"
}
]
]
}

179
node_db/dev/custom-node-list.json

@ -9,45 +9,166 @@
"description": "If you see this message, your ComfyUI-Manager is outdated.\nDev channel provides only the list of the developing nodes. If you want to find the complete node list, please go to the Default channel."
},
{
"author": "shiimizu",
"title": "shiimizu/ComfyUI PhotoMaker",
"reference": "https://github.com/shiimizu/ComfyUI-PhotoMaker",
"author": "shadowcz007",
"title": "comfyui-musicgen",
"reference": "https://github.com/shadowcz007/comfyui-musicgen",
"files": [
"https://github.com/shiimizu/ComfyUI-PhotoMaker"
"https://github.com/shadowcz007/comfyui-musicgen"
],
"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": "Nodes:Musicgen"
},
{
"author": "prismwastaken",
"title": "prism-tools",
"reference": "https://github.com/prismwastaken/comfyui-tools",
"author": "Extraltodeus",
"title": "ComfyUI-variableCFGandAntiBurn [WIP]",
"reference": "https://github.com/Extraltodeus/ComfyUI-variableCFGandAntiBurn",
"files": [
"https://github.com/prismwastaken/comfyui-tools"
"https://github.com/Extraltodeus/ComfyUI-variableCFGandAntiBurn"
],
"install_type": "git-clone",
"description": "prism-tools"
"description": "Nodes:Continuous CFG rescaler (pre CFG), Intermediary latent merge (post CFG), Intensity/Brightness limiter (post CFG), Dynamic renoising (post CFG), Automatic CFG scale (pre/post CFG), CFG multiplier per channel (pre CFG), Self-Attention Guidance delayed activation mod (post CFG)"
},
{
"author": "DimaChaichan",
"title": "LAizypainter-Exporter-ComfyUI [WIP]",
"reference": "https://github.com/DimaChaichan/LAizypainter-Exporter-ComfyUI",
"author": "kijai",
"title": "ComfyUI-ADMotionDirector [WIP]",
"reference": "https://github.com/kijai/ComfyUI-ADMotionDirector",
"files": [
"https://github.com/DimaChaichan/LAizypainter-Exporter-ComfyUI"
"https://github.com/kijai/ComfyUI-ADMotionDirector"
],
"install_type": "git-clone",
"description": "WIP"
"description": "ComfyUI custom nodes for using [a/AnimateDiff-MotionDirector](https://github.com/ExponentialML/AnimateDiff-MotionDirector)\nAfter training, the LoRAs are intended to be used with the ComfyUI Extension [a/ComfyUI-AnimateDiff-Evolved](https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved)."
},
{
"author": "shadowcz007",
"title": "comfyui-CLIPSeg",
"reference": "https://github.com/shadowcz007/comfyui-CLIPSeg",
"files": [
"https://github.com/shadowcz007/comfyui-CLIPSeg"
],
"install_type": "git-clone",
"description": "Download [a/CLIPSeg](https://huggingface.co/CIDAS/clipseg-rd64-refined/tree/main), move to : models/clipseg"
},
{
"author": "dezi-ai",
"title": "ComfyUI Animate LCM",
"reference": "https://github.com/dezi-ai/ComfyUI-AnimateLCM",
"files": [
"https://github.com/dezi-ai/ComfyUI-AnimateLCM"
],
"install_type": "git-clone",
"description": "ComfyUI implementation for [a/AnimateLCM](https://animatelcm.github.io/) [[a/paper](https://arxiv.org/abs/2402.00769)].\b[w/This extension includes a large number of nodes imported from the existing custom nodes, increasing the likelihood of conflicts.]"
},
{
"author": "ZHO-ZHO-ZHO",
"title": "ZHO-ZHO-ZHO/ComfyUI PhotoMaker (WIP)",
"reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker",
"title": "ComfyUI-BRIA_AI-RMBG",
"reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-BRIA_AI-RMBG",
"files": [
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-BRIA_AI-RMBG"
],
"install_type": "git-clone",
"description": "Unofficial [a/BRIA Background Removal v1.4](https://huggingface.co/briaai/RMBG-1.4) of BRIA RMBG Model for ComfyUI"
},
{
"author": "stutya",
"title": "ComfyUI-Terminal [UNSAFE]",
"reference": "https://github.com/stutya/ComfyUI-Terminal",
"files": [
"https://github.com/stutya/ComfyUI-Terminal"
],
"install_type": "git-clone",
"description": "Run Terminal Commands from ComfyUI.\n[w/This extension poses a risk of executing arbitrary commands through workflow execution. Please be cautious.]"
},
{
"author": "marcueberall",
"title": "ComfyUI-BuildPath",
"reference": "https://github.com/marcueberall/ComfyUI-BuildPath",
"files": [
"https://github.com/marcueberall/ComfyUI-BuildPath"
],
"install_type": "git-clone",
"description": "Nodes: Build Path Adv."
},
{
"author": "LotzF",
"title": "ComfyUI simple ChatGPT completion [UNSAFE]",
"reference": "https://github.com/LotzF/ComfyUI-Simple-Chat-GPT-completion",
"files": [
"https://github.com/LotzF/ComfyUI-Simple-Chat-GPT-completion"
],
"install_type": "git-clone",
"description": "A simple node to request ChatGPT completions. [w/Do not share your workflows including the API key! I'll take no responsibility for your leaked keys.]"
},
{
"author": "blepping",
"title": "ComfyUI-sonar (WIP)",
"reference": "https://github.com/blepping/ComfyUI-sonar",
"files": [
"https://github.com/blepping/ComfyUI-sonar"
],
"install_type": "git-clone",
"description": "Extremely WIP and untested implementation of Sonar sampling. Currently it may not be even close to working properly. Only supports Euler and Euler Ancestral sampling. See [a/stable-diffusion-webui-sonar](https://github.com/Kahsolt/stable-diffusion-webui-sonar) for a more in-depth explanation."
},
{
"author": "kappa54m",
"title": "ComfyUI_Usability (WIP)",
"reference": "https://github.com/kappa54m/ComfyUI_Usability",
"files": [
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker"
"https://github.com/kappa54m/ComfyUI_Usability"
],
"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]"
"description": "Nodes: Load Image Dedup, Load Image By Path."
},
{
"author": "17Retoucher",
"title": "ComfyUI_Fooocus",
"reference": "https://github.com/17Retoucher/ComfyUI_Fooocus",
"files": [
"https://github.com/17Retoucher/ComfyUI_Fooocus"
],
"install_type": "git-clone",
"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": "prismwastaken",
"title": "prism-tools",
"reference": "https://github.com/prismwastaken/comfyui-tools",
"files": [
"https://github.com/prismwastaken/comfyui-tools"
],
"install_type": "git-clone",
"description": "prism-tools"
},
{
"author": "poisenbery",
@ -79,16 +200,6 @@
"install_type": "git-clone",
"description": "WIP"
},
{
"author": "kadirnar",
"title": "ComfyUI-Transformers",
"reference": "https://github.com/kadirnar/ComfyUI-Transformers",
"files": [
"https://github.com/kadirnar/ComfyUI-Transformers"
],
"install_type": "git-clone",
"description": "Nodes:DepthEstimation."
},
{
"author": "MrAdamBlack",
"title": "CheckProgress [WIP]",
@ -139,16 +250,6 @@
"install_type": "git-clone",
"description": "Nodes:PythonScript, BlendImagesWithBoundedMasks, CropImagesWithMasks, VAELoaderDataType, ModelSamplerTonemapNoiseTest, gcLatentTunnel, ReferenceOnlySimple, EmptyImageWithColor, MaskFromColor, SetLatentCustomNoise, LatentToImage, ImageToLatent, LatentScaledNoise, DisplayAnyType, SamplerCustomCallback, CustomCallback, SplitCustomSigmas, SamplerDPMPP_2M_SDE_nidefawl, LatentPerlinNoise.<BR>[w/This node is an unsafe node that includes the capability to execute arbitrary python script.]"
},
{
"author": "solarpush",
"title": "comfyui_sendimage_node",
"reference": "https://github.com/solarpush/comfyui_sendimage_node",
"files": [
"https://github.com/solarpush/comfyui_sendimage_node"
],
"install_type": "git-clone",
"description": "Send images to the pod."
},
{
"author": "kadirnar",
"title": "comfyui_helpers",

246
node_db/dev/extension-node-map.json

@ -1,4 +1,188 @@
{
"https://github.com/17Retoucher/ComfyUI_Fooocus": [
[
"BasicScheduler",
"CLIPLoader",
"CLIPMergeSimple",
"CLIPSave",
"CLIPSetLastLayer",
"CLIPTextEncode",
"CLIPTextEncodeSDXL",
"CLIPTextEncodeSDXLRefiner",
"CLIPVisionEncode",
"CLIPVisionLoader",
"Canny",
"CheckpointLoader",
"CheckpointLoaderSimple",
"CheckpointSave",
"ConditioningAverage",
"ConditioningCombine",
"ConditioningConcat",
"ConditioningSetArea",
"ConditioningSetAreaPercentage",
"ConditioningSetMask",
"ConditioningSetTimestepRange",
"ConditioningZeroOut",
"ControlNetApply",
"ControlNetApplyAdvanced",
"ControlNetLoader",
"CropMask",
"DiffControlNetLoader",
"DiffusersLoader",
"DualCLIPLoader",
"EmptyImage",
"EmptyLatentImage",
"ExponentialScheduler",
"FeatherMask",
"FlipSigmas",
"Fooocus Controlnet",
"Fooocus Hirefix",
"Fooocus KSampler",
"Fooocus Loader",
"Fooocus LoraStack",
"Fooocus PreKSampler",
"Fooocus negative",
"Fooocus positive",
"Fooocus stylesSelector",
"FreeU",
"FreeU_V2",
"GLIGENLoader",
"GLIGENTextBoxApply",
"GrowMask",
"HyperTile",
"HypernetworkLoader",
"ImageBatch",
"ImageBlend",
"ImageBlur",
"ImageColorToMask",
"ImageCompositeMasked",
"ImageCrop",
"ImageInvert",
"ImageOnlyCheckpointLoader",
"ImagePadForOutpaint",
"ImageQuantize",
"ImageScale",
"ImageScaleBy",
"ImageScaleToTotalPixels",
"ImageSharpen",
"ImageToMask",
"ImageUpscaleWithModel",
"InvertMask",
"JoinImageWithAlpha",
"KSampler",
"KSamplerAdvanced",
"KSamplerSelect",
"KarrasScheduler",
"LatentAdd",
"LatentBatch",
"LatentBlend",
"LatentComposite",
"LatentCompositeMasked",
"LatentCrop",
"LatentFlip",
"LatentFromBatch",
"LatentInterpolate",
"LatentMultiply",
"LatentRotate",
"LatentSubtract",
"LatentUpscale",
"LatentUpscaleBy",
"LoadImage",
"LoadImageMask",
"LoadLatent",
"LoraLoader",
"LoraLoaderModelOnly",
"MaskComposite",
"MaskToImage",
"ModelMergeAdd",
"ModelMergeBlocks",
"ModelMergeSimple",
"ModelMergeSubtract",
"ModelSamplingContinuousEDM",
"ModelSamplingDiscrete",
"PatchModelAddDownscale",
"PerpNeg",
"PolyexponentialScheduler",
"PorterDuffImageComposite",
"PreviewImage",
"RebatchImages",
"RebatchLatents",
"RepeatImageBatch",
"RepeatLatentBatch",
"RescaleCFG",
"SDTurboScheduler",
"SVD_img2vid_Conditioning",
"SamplerCustom",
"SamplerDPMPP_2M_SDE",
"SamplerDPMPP_SDE",
"SaveAnimatedPNG",
"SaveAnimatedWEBP",
"SaveImage",
"SaveLatent",
"SelfAttentionGuidance",
"SetLatentNoiseMask",
"SolidMask",
"SplitImageWithAlpha",
"SplitSigmas",
"StableZero123_Conditioning",
"StyleModelApply",
"StyleModelLoader",
"TomePatchModel",
"UNETLoader",
"UpscaleModelLoader",
"VAEDecode",
"VAEDecodeTiled",
"VAEEncode",
"VAEEncodeForInpaint",
"VAEEncodeTiled",
"VAELoader",
"VAESave",
"VPScheduler",
"VideoLinearCFGGuidance",
"unCLIPCheckpointLoader",
"unCLIPConditioning"
],
{
"title_aux": "ComfyUI_Fooocus"
}
],
"https://github.com/BadCafeCode/execution-inversion-demo-comfyui": [
[
"AccumulateNode",
"AccumulationGetItemNode",
"AccumulationGetLengthNode",
"AccumulationHeadNode",
"AccumulationSetItemNode",
"AccumulationTailNode",
"AccumulationToListNode",
"BoolOperationNode",
"ComponentInput",
"ComponentMetadata",
"ComponentOutput",
"DebugPrint",
"ExecutionBlocker",
"FloatConditions",
"ForLoopClose",
"ForLoopOpen",
"IntConditions",
"IntMathOperation",
"InversionDemoAdvancedPromptNode",
"InversionDemoFakeAdvancedPromptNode",
"InversionDemoLazyConditional",
"InversionDemoLazyIndexSwitch",
"InversionDemoLazyMixImages",
"InversionDemoLazySwitch",
"ListToAccumulationNode",
"MakeListNode",
"StringConditions",
"ToBoolNode",
"WhileLoopClose",
"WhileLoopOpen"
],
{
"title_aux": "execution-inversion-demo-comfyui"
}
],
"https://github.com/BlueDangerX/ComfyUI-BDXNodes": [
[
"BDXTestInt",
@ -122,22 +306,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]",
@ -202,6 +370,15 @@
"title_aux": "Gen Data Tester [WIP]"
}
],
"https://github.com/blepping/ComfyUI-sonar": [
[
"SamplerSonarEuler",
"SamplerSonarEulerA"
],
{
"title_aux": "ComfyUI-sonar (WIP)"
}
],
"https://github.com/comfyanonymous/ComfyUI": [
[
"BasicScheduler",
@ -223,6 +400,7 @@
"ConditioningConcat",
"ConditioningSetArea",
"ConditioningSetAreaPercentage",
"ConditioningSetAreaStrength",
"ConditioningSetMask",
"ConditioningSetTimestepRange",
"ConditioningZeroOut",
@ -271,6 +449,7 @@
"KarrasScheduler",
"LatentAdd",
"LatentBatch",
"LatentBatchSeedBehavior",
"LatentBlend",
"LatentComposite",
"LatentCompositeMasked",
@ -298,6 +477,8 @@
"ModelSamplingDiscrete",
"PatchModelAddDownscale",
"PerpNeg",
"PhotoMakerEncode",
"PhotoMakerLoader",
"PolyexponentialScheduler",
"PorterDuffImageComposite",
"PreviewImage",
@ -562,6 +743,15 @@
"title_aux": "comfyui_helpers"
}
],
"https://github.com/kappa54m/ComfyUI_Usability": [
[
"LoadImageByPath",
"LoadImageDedup"
],
{
"title_aux": "ComfyUI_Usability (WIP)"
}
],
"https://github.com/komojini/ComfyUI_Prompt_Template_CustomNodes/raw/main/prompt_with_template.py": [
[
"ObjectPromptWithTemplate",
@ -623,6 +813,19 @@
"title_aux": "ComfyUI-nidefawl [UNSAFE]"
}
],
"https://github.com/nkchocoai/ComfyUI-PromptUtilities": [
[
"PromptUtilitiesConstString",
"PromptUtilitiesConstStringMultiLine",
"PromptUtilitiesFormatString",
"PromptUtilitiesJoinStringList",
"PromptUtilitiesLoadPreset",
"PromptUtilitiesLoadPresetAdvanced"
],
{
"title_aux": "ComfyUI-PromptUtilities"
}
],
"https://github.com/oyvindg/ComfyUI-TrollSuite": [
[
"BinaryImageMask",
@ -665,16 +868,13 @@
"title_aux": "prism-tools"
}
],
"https://github.com/solarpush/comfyui_sendimage_node": [
"https://github.com/unanan/ComfyUI-clip-interrogator": [
[
"Send_To_Pod"
"ComfyUIClipInterrogator",
"ShowText"
],
{
"author": "Enlumis",
"description": "This one to send images to the pod.",
"nickname": "go2flat",
"title": "go2flat",
"title_aux": "comfyui_sendimage_node"
"title_aux": "ComfyUI-clip-interrogator [WIP]"
}
],
"https://github.com/wormley/comfyui-wormley-nodes": [

10
node_db/forked/custom-node-list.json

@ -1,4 +1,14 @@
{
"custom_nodes": [
{
"author": "gameltb",
"title": "comfyui-stablsr",
"reference": "https://github.com/gameltb/Comfyui-StableSR",
"files": [
"https://github.com/gameltb/Comfyui-StableSR"
],
"install_type": "git-clone",
"description": "This is a development respository for debugging migration of StableSR to ComfyUI\n\nNOTE:Forked from [https://github.com/gameltb/Comfyui-StableSR]\nPut the StableSR [a/webui_786v_139.ckpt](https://huggingface.co/Iceclear/StableSR/resolve/main/webui_768v_139.ckpt) model into Comyfui/models/stablesr/, Put the StableSR [a/stablesr_768v_000139.ckpt](https://huggingface.co/Iceclear/StableSR/resolve/main/stablesr_768v_000139.ckpt) model into Comyfui/models/checkpoints/"
}
]
}

20
node_db/legacy/custom-node-list.json

@ -10,6 +10,26 @@
},
{
"author": "solarpush",
"title": "comfyui_sendimage_node [REMOVED]",
"reference": "https://github.com/solarpush/comfyui_sendimage_node",
"files": [
"https://github.com/solarpush/comfyui_sendimage_node"
],
"install_type": "git-clone",
"description": "Send images to the pod."
},
{
"author": "azazeal04",
"title": "ComfyUI-Styles",
"reference": "https://github.com/azazeal04/ComfyUI-Styles",
"files": [
"https://github.com/azazeal04/ComfyUI-Styles"
],
"install_type": "git-clone",
"description": "Nodes:Anime_Styler, Fantasy_Styler, Gothic_Styler, Line_Art_Styler, Movie_Poster_Styler, Punk_Styler, Travel_Poster_Styler. This extension offers 8 art style nodes, each of which includes approximately 50 individual style variations.\n\nNOTE: Due to the dynamic nature of node name definitions, ComfyUI-Manager cannot recognize the node list from this extension. The Missing nodes and Badge features are not available for this extension.\nNOTE: This extension is removed. Users who were previously using this node should install ComfyUI-styles-all instead."
},
{
"author": "hnmr293",
"title": "ComfyUI-nodes-hnmr",

718
node_db/new/custom-node-list.json

File diff suppressed because it is too large Load Diff

1181
node_db/new/extension-node-map.json

File diff suppressed because it is too large Load Diff

352
node_db/new/model-list.json

@ -1,5 +1,107 @@
{
"models": [
{
"name": "1k3d68.onnx",
"type": "insightface",
"base": "inswapper",
"save_path": "insightface/models/antelopev2",
"description": "Antelopev2 1k3d68.onnx model for InstantId. (InstantId needs all Antelopev2 models)",
"reference": "https://github.com/cubiq/ComfyUI_InstantID#installation",
"filename": "1k3d68.onnx",
"url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/1k3d68.onnx"
},
{
"name": "2d106det.onnx",
"type": "insightface",
"base": "inswapper",
"save_path": "insightface/models/antelopev2",
"description": "Antelopev2 2d106det.onnx model for InstantId. (InstantId needs all Antelopev2 models)",
"reference": "https://github.com/cubiq/ComfyUI_InstantID#installation",
"filename": "2d106det.onnx",
"url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/2d106det.onnx"
},
{
"name": "genderage.onnx",
"type": "insightface",
"base": "inswapper",
"save_path": "insightface/models/antelopev2",
"description": "Antelopev2 genderage.onnx model for InstantId. (InstantId needs all Antelopev2 models)",
"reference": "https://github.com/cubiq/ComfyUI_InstantID#installation",
"filename": "genderage.onnx",
"url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/genderage.onnx"
},
{
"name": "glintr100.onnx",
"type": "insightface",
"base": "inswapper",
"save_path": "insightface/models/antelopev2",
"description": "Antelopev2 glintr100.onnx model for InstantId. (InstantId needs all Antelopev2 models)",
"reference": "https://github.com/cubiq/ComfyUI_InstantID#installation",
"filename": "glintr100.onnx",
"url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/glintr100.onnx"
},
{
"name": "scrfd_10g_bnkps.onnx",
"type": "insightface",
"base": "inswapper",
"save_path": "insightface/models/antelopev2",
"description": "Antelopev2 scrfd_10g_bnkps.onnx model for InstantId. (InstantId needs all Antelopev2 models)",
"reference": "https://github.com/cubiq/ComfyUI_InstantID#installation",
"filename": "scrfd_10g_bnkps.onnx",
"url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/scrfd_10g_bnkps.onnx"
},
{
"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 +112,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 +132,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 +184,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",
@ -95,11 +226,11 @@
},
{
"name": "LongAnimatediff/lt_long_mm_16_64_frames_v1.1.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "LongAnimatediff/lt_long_mm_16_64_frames_v1.1.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/Lightricks/LongAnimateDiff",
"filename": "lt_long_mm_16_64_frames_v1.1.ckpt",
"url": "https://huggingface.co/Lightricks/LongAnimateDiff/resolve/main/lt_long_mm_16_64_frames_v1.1.ckpt"
@ -178,21 +309,21 @@
"url": "https://huggingface.co/stabilityai/stable-zero123/resolve/main/stable_zero123.ckpt"
},
{
"name": "LongAnimatediff/lt_long_mm_32_frames.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "LongAnimatediff/lt_long_mm_32_frames.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/Lightricks/LongAnimateDiff",
"filename": "lt_long_mm_32_frames.ckpt",
"url": "https://huggingface.co/Lightricks/LongAnimateDiff/resolve/main/lt_long_mm_32_frames.ckpt"
},
{
"name": "LongAnimatediff/lt_long_mm_16_64_frames.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "LongAnimatediff/lt_long_mm_16_64_frames.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/Lightricks/LongAnimateDiff",
"filename": "lt_long_mm_16_64_frames.ckpt",
"url": "https://huggingface.co/Lightricks/LongAnimateDiff/resolve/main/lt_long_mm_16_64_frames.ckpt"
@ -323,7 +454,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.<BR>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,98 +464,98 @@
"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.<BR>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"
},
{
"name": "animatediff/mm_sdxl_v10_beta.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/mm_sdxl_v10_beta.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SDXL",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "mm_sdxl_v10_beta.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/mm_sdxl_v10_beta.ckpt"
},
{
"name": "animatediff/v2_lora_PanLeft.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_PanLeft.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_PanLeft.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_PanLeft.ckpt"
},
{
"name": "animatediff/v2_lora_PanRight.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_PanRight.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_PanRight.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_PanRight.ckpt"
},
{
"name": "animatediff/v2_lora_RollingAnticlockwise.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_RollingAnticlockwise.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_RollingAnticlockwise.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_RollingAnticlockwise.ckpt"
},
{
"name": "animatediff/v2_lora_RollingClockwise.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_RollingClockwise.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_RollingClockwise.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_RollingClockwise.ckpt"
},
{
"name": "animatediff/v2_lora_TiltDown.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_TiltDown.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_TiltDown.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_TiltDown.ckpt"
},
{
"name": "animatediff/v2_lora_TiltUp.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_TiltUp.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_TiltUp.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_TiltUp.ckpt"
},
{
"name": "animatediff/v2_lora_ZoomIn.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_ZoomIn.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_ZoomIn.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_ZoomIn.ckpt"
},
{
"name": "animatediff/v2_lora_ZoomOut.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "animatediff/v2_lora_ZoomOut.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "motion lora",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_motion_lora",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/guoyww/animatediff",
"filename": "v2_lora_ZoomOut.ckpt",
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/v2_lora_ZoomOut.ckpt"
@ -534,11 +665,11 @@
},
{
"name": "CiaraRowles/temporaldiff-v1-animatediff.ckpt (ComfyUI-AnimateDiff-Evolved)",
"name": "CiaraRowles/temporaldiff-v1-animatediff.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/CiaraRowles/TemporalDiff",
"filename": "temporaldiff-v1-animatediff.ckpt",
"url": "https://huggingface.co/CiaraRowles/TemporalDiff/resolve/main/temporaldiff-v1-animatediff.ckpt"
@ -554,149 +685,24 @@
"url": "https://huggingface.co/guoyww/animatediff/resolve/main/mm_sd_v15_v2.ckpt"
},
{
"name": "AD_Stabilized_Motion/mm-Stabilized_high.pth (ComfyUI-AnimateDiff-Evolved)",
"name": "AD_Stabilized_Motion/mm-Stabilized_high.pth (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/manshoety/AD_Stabilized_Motion",
"filename": "mm-Stabilized_high.pth",
"url": "https://huggingface.co/manshoety/AD_Stabilized_Motion/resolve/main/mm-Stabilized_high.pth"
},
{
"name": "AD_Stabilized_Motion/mm-Stabilized_mid.pth (ComfyUI-AnimateDiff-Evolved)",
"name": "AD_Stabilized_Motion/mm-Stabilized_mid.pth (ComfyUI-AnimateDiff-Evolved) (Updated path)",
"type": "animatediff",
"base": "SD1.x",
"save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)",
"save_path": "animatediff_models",
"description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.",
"reference": "https://huggingface.co/manshoety/AD_Stabilized_Motion",
"filename": "mm-Stabilized_mid.pth",
"url": "https://huggingface.co/manshoety/AD_Stabilized_Motion/resolve/main/mm-Stabilized_mid.pth"
},
{
"name": "GFPGANv1.4.pth",
"type": "GFPGAN",
"base": "GFPGAN",
"save_path": "facerestore_models",
"description": "Face Restoration Models. Download the model required for using the 'Facerestore CF (Code Former)' custom node.",
"reference": "https://github.com/TencentARC/GFPGAN/releases",
"filename": "GFPGANv1.4.pth",
"url": "https://github.com/TencentARC/GFPGAN/releases/download/v1.3.4/GFPGANv1.4.pth"
},
{
"name": "codeformer.pth",
"type": "CodeFormer",
"base": "CodeFormer",
"save_path": "facerestore_models",
"description": "Face Restoration Models. Download the model required for using the 'Facerestore CF (Code Former)' custom node.",
"reference": "https://github.com/sczhou/CodeFormer/releases",
"filename": "codeformer.pth",
"url": "https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/codeformer.pth"
},
{
"name": "detection_Resnet50_Final.pth",
"type": "facexlib",
"base": "facexlib",
"save_path": "facerestore_models",
"description": "Face Detection Models. Download the model required for using the 'Facerestore CF (Code Former)' custom node.",
"reference": "https://github.com/xinntao/facexlib",
"filename": "detection_Resnet50_Final.pth",
"url": "https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_Resnet50_Final.pth"
},
{
"name": "detection_mobilenet0.25_Final.pth",
"type": "facexlib",
"base": "facexlib",
"save_path": "facerestore_models",
"description": "Face Detection Models. Download the model required for using the 'Facerestore CF (Code Former)' custom node.",
"reference": "https://github.com/xinntao/facexlib",
"filename": "detection_mobilenet0.25_Final.pth",
"url": "https://github.com/xinntao/facexlib/releases/download/v0.1.0/detection_mobilenet0.25_Final.pth"
},
{
"name": "yolov5l-face.pth",
"type": "facexlib",
"base": "facexlib",
"save_path": "facedetection",
"description": "Face Detection Models. Download the model required for using the 'Facerestore CF (Code Former)' custom node.",
"reference": "https://github.com/xinntao/facexlib",
"filename": "yolov5l-face.pth",
"url": "https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/yolov5l-face.pth"
},
{
"name": "yolov5n-face.pth",
"type": "facexlib",
"base": "facexlib",
"save_path": "facedetection",
"description": "Face Detection Models. Download the model required for using the 'Facerestore CF (Code Former)' custom node.",
"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": "diffusers/stable-diffusion-xl-1.0-inpainting-0.1 (UNET/fp16)",
"type": "unet",
"base": "SDXL",
"save_path": "unet/xl-inpaint-0.1",
"description": "[5.14GB] Stable Diffusion XL inpainting model 0.1. You need UNETLoader instead of CheckpointLoader.",
"reference": "https://huggingface.co/diffusers/stable-diffusion-xl-1.0-inpainting-0.1",
"filename": "diffusion_pytorch_model.fp16.safetensors",
"url": "https://huggingface.co/diffusers/stable-diffusion-xl-1.0-inpainting-0.1/resolve/main/unet/diffusion_pytorch_model.fp16.safetensors"
},
{
"name": "diffusers/stable-diffusion-xl-1.0-inpainting-0.1 (UNET)",
"type": "unet",
"base": "SDXL",
"save_path": "unet/xl-inpaint-0.1",
"description": "[10.3GB] Stable Diffusion XL inpainting model 0.1. You need UNETLoader instead of CheckpointLoader.",
"reference": "https://huggingface.co/diffusers/stable-diffusion-xl-1.0-inpainting-0.1",
"filename": "diffusion_pytorch_model.safetensors",
"url": "https://huggingface.co/diffusers/stable-diffusion-xl-1.0-inpainting-0.1/resolve/main/unet/diffusion_pytorch_model.safetensors"
},
{
"name": "Inswapper (face swap)",
"type": "insightface",
"base" : "inswapper",
"save_path": "insightface",
"description": "Checkpoint of the insightface swapper model (used by Comfy-Roop and comfy_mtb)",
"reference": "https://huggingface.co/deepinsight/inswapper/",
"filename": "inswapper_128.onnx",
"url": "https://huggingface.co/deepinsight/inswapper/resolve/main/inswapper_128.onnx"
},
{
"name": "CLIPVision model (stabilityai/clip_vision_g)",
"type": "clip_vision",
"base": "SDXL",
"save_path": "clip_vision/SDXL",
"description": "[3.69GB] clip_g vision model",
"reference": "https://huggingface.co/stabilityai/control-lora",
"filename": "clip_vision_g.safetensors",
"url": "https://huggingface.co/stabilityai/control-lora/resolve/main/revision/clip_vision_g.safetensors"
},
{
"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"
}
]
}

50
node_db/tutorial/custom-node-list.json

@ -69,6 +69,56 @@
],
"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"
},
{
"author": "IvanRybakov",
"title": "comfyui-node-int-to-string-convertor",
"reference": "https://github.com/IvanRybakov/comfyui-node-int-to-string-convertor",
"files": [
"https://github.com/IvanRybakov/comfyui-node-int-to-string-convertor"
],
"install_type": "git-clone",
"description": "Nodes:Int To String Convertor"
},
{
"author": "yowipr",
"title": "ComfyUI-Manual",
"reference": "https://github.com/yowipr/ComfyUI-Manual",
"files": [
"https://github.com/yowipr/ComfyUI-Manual"
],
"install_type": "git-clone",
"description": "Nodes:M_Layer, M_Output"
}
]
}

106
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}")
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()

25
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:

Loading…
Cancel
Save