mirror of
https://github.com/Comfy-Org/ComfyUI-Manager.git
synced 2026-01-31 00:10:16 +08:00
Merge e809311509 into 54025767c7
This commit is contained in:
commit
2e03f24bda
90
__init__.py
90
__init__.py
@ -29,7 +29,7 @@ except:
|
|||||||
print(f"[WARN] ComfyUI-Manager: Your ComfyUI version is outdated. Please update to the latest version.")
|
print(f"[WARN] ComfyUI-Manager: Your ComfyUI version is outdated. Please update to the latest version.")
|
||||||
|
|
||||||
|
|
||||||
version = [2, 7, 2]
|
version = [2, 10, 1]
|
||||||
version_str = f"V{version[0]}.{version[1]}" + (f'.{version[2]}' if len(version) > 2 else '')
|
version_str = f"V{version[0]}.{version[1]}" + (f'.{version[2]}' if len(version) > 2 else '')
|
||||||
print(f"### Loading: ComfyUI-Manager ({version_str})")
|
print(f"### Loading: ComfyUI-Manager ({version_str})")
|
||||||
|
|
||||||
@ -39,6 +39,22 @@ comfy_ui_hash = "-"
|
|||||||
cache_lock = threading.Lock()
|
cache_lock = threading.Lock()
|
||||||
|
|
||||||
|
|
||||||
|
def is_blacklisted(name):
|
||||||
|
name = name.strip()
|
||||||
|
|
||||||
|
pattern = r'([^<>!=]+)([<>!=]=?)'
|
||||||
|
match = re.search(pattern, name)
|
||||||
|
|
||||||
|
if match:
|
||||||
|
name = match.group(1)
|
||||||
|
|
||||||
|
if name in cm_global.pip_downgrade_blacklist:
|
||||||
|
if match is None or match.group(2) in ['<=', '==', '<']:
|
||||||
|
return True
|
||||||
|
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
def handle_stream(stream, prefix):
|
def handle_stream(stream, prefix):
|
||||||
stream.reconfigure(encoding=locale.getpreferredencoding(), errors='replace')
|
stream.reconfigure(encoding=locale.getpreferredencoding(), errors='replace')
|
||||||
for msg in stream:
|
for msg in stream:
|
||||||
@ -178,6 +194,7 @@ def write_config():
|
|||||||
'component_policy': get_config()['component_policy'],
|
'component_policy': get_config()['component_policy'],
|
||||||
'double_click_policy': get_config()['double_click_policy'],
|
'double_click_policy': get_config()['double_click_policy'],
|
||||||
'windows_selector_event_loop_policy': get_config()['windows_selector_event_loop_policy'],
|
'windows_selector_event_loop_policy': get_config()['windows_selector_event_loop_policy'],
|
||||||
|
'model_download_by_agent': get_config()['model_download_by_agent']
|
||||||
}
|
}
|
||||||
with open(config_path, 'w') as configfile:
|
with open(config_path, 'w') as configfile:
|
||||||
config.write(configfile)
|
config.write(configfile)
|
||||||
@ -201,6 +218,7 @@ def read_config():
|
|||||||
'component_policy': default_conf['component_policy'] if 'component_policy' in default_conf else 'workflow',
|
'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',
|
'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,
|
'windows_selector_event_loop_policy': default_conf['windows_selector_event_loop_policy'] if 'windows_selector_event_loop_policy' in default_conf else False,
|
||||||
|
'model_download_by_agent': default_conf['model_download_by_agent'] if 'model_download_by_agent' in default_conf else False,
|
||||||
}
|
}
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
@ -215,7 +233,8 @@ def read_config():
|
|||||||
'default_ui': 'none',
|
'default_ui': 'none',
|
||||||
'component_policy': 'workflow',
|
'component_policy': 'workflow',
|
||||||
'double_click_policy': 'copy-all',
|
'double_click_policy': 'copy-all',
|
||||||
'windows_selector_event_loop_policy': False
|
'windows_selector_event_loop_policy': False,
|
||||||
|
'model_download_by_agent': False,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -272,7 +291,7 @@ def set_double_click_policy(mode):
|
|||||||
|
|
||||||
|
|
||||||
def try_install_script(url, repo_path, install_cmd):
|
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 (len(install_cmd) > 0 and install_cmd[0].startswith('#')) or (platform.system() == "Windows" and comfy_ui_commit_datetime.date() >= comfy_ui_required_commit_datetime.date()):
|
||||||
if not os.path.exists(startup_script_path):
|
if not os.path.exists(startup_script_path):
|
||||||
os.makedirs(startup_script_path)
|
os.makedirs(startup_script_path)
|
||||||
|
|
||||||
@ -283,6 +302,12 @@ def try_install_script(url, repo_path, install_cmd):
|
|||||||
|
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
|
if len(install_cmd) == 5 and install_cmd[2:4] == ['pip', 'install']:
|
||||||
|
if is_blacklisted(install_cmd[4]):
|
||||||
|
print(f"[ComfyUI-Manager] skip black listed pip installation: '{install_cmd[4]}'")
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
print(f"\n## ComfyUI-Manager: EXECUTE => {install_cmd}")
|
print(f"\n## ComfyUI-Manager: EXECUTE => {install_cmd}")
|
||||||
code = run_script(install_cmd, cwd=repo_path)
|
code = run_script(install_cmd, cwd=repo_path)
|
||||||
|
|
||||||
@ -447,6 +472,9 @@ def git_repo_has_updates(path, do_fetch=False, do_update=False):
|
|||||||
# Fetch the latest commits from the remote repository
|
# Fetch the latest commits from the remote repository
|
||||||
repo = git.Repo(path)
|
repo = git.Repo(path)
|
||||||
|
|
||||||
|
current_branch = repo.active_branch
|
||||||
|
branch_name = current_branch.name
|
||||||
|
|
||||||
remote_name = 'origin'
|
remote_name = 'origin'
|
||||||
remote = repo.remote(name=remote_name)
|
remote = repo.remote(name=remote_name)
|
||||||
|
|
||||||
@ -460,8 +488,6 @@ def git_repo_has_updates(path, do_fetch=False, do_update=False):
|
|||||||
if repo.head.is_detached:
|
if repo.head.is_detached:
|
||||||
switch_to_default_branch(repo)
|
switch_to_default_branch(repo)
|
||||||
|
|
||||||
current_branch = repo.active_branch
|
|
||||||
branch_name = current_branch.name
|
|
||||||
remote_commit_hash = repo.refs[f'{remote_name}/{branch_name}'].object.hexsha
|
remote_commit_hash = repo.refs[f'{remote_name}/{branch_name}'].object.hexsha
|
||||||
|
|
||||||
if commit_hash == remote_commit_hash:
|
if commit_hash == remote_commit_hash:
|
||||||
@ -521,16 +547,17 @@ def git_pull(path):
|
|||||||
else:
|
else:
|
||||||
repo = git.Repo(path)
|
repo = git.Repo(path)
|
||||||
|
|
||||||
print(f"path={path} / repo.is_dirty: {repo.is_dirty()}")
|
|
||||||
|
|
||||||
if repo.is_dirty():
|
if repo.is_dirty():
|
||||||
repo.git.stash()
|
repo.git.stash()
|
||||||
|
|
||||||
if repo.head.is_detached:
|
if repo.head.is_detached:
|
||||||
switch_to_default_branch(repo)
|
switch_to_default_branch(repo)
|
||||||
|
|
||||||
origin = repo.remote(name='origin')
|
current_branch = repo.active_branch
|
||||||
origin.pull()
|
remote_name = current_branch.tracking_branch().remote_name
|
||||||
|
remote = repo.remote(name=remote_name)
|
||||||
|
|
||||||
|
remote.pull()
|
||||||
repo.git.submodule('update', '--init', '--recursive')
|
repo.git.submodule('update', '--init', '--recursive')
|
||||||
|
|
||||||
repo.close()
|
repo.close()
|
||||||
@ -777,9 +804,47 @@ def check_custom_nodes_installed(json_obj, do_fetch=False, do_update_check=True,
|
|||||||
print(f"\x1b[2K\rUpdate check done.")
|
print(f"\x1b[2K\rUpdate check done.")
|
||||||
|
|
||||||
|
|
||||||
|
def nickname_filter(json_obj):
|
||||||
|
preemptions_map = {}
|
||||||
|
|
||||||
|
for k, x in json_obj.items():
|
||||||
|
if 'preemptions' in x[1]:
|
||||||
|
for y in x[1]['preemptions']:
|
||||||
|
preemptions_map[y] = k
|
||||||
|
elif k.endswith("/ComfyUI"):
|
||||||
|
for y in x[0]:
|
||||||
|
preemptions_map[y] = k
|
||||||
|
|
||||||
|
updates = {}
|
||||||
|
for k, x in json_obj.items():
|
||||||
|
removes = set()
|
||||||
|
for y in x[0]:
|
||||||
|
k2 = preemptions_map.get(y)
|
||||||
|
if k2 is not None and k != k2:
|
||||||
|
removes.add(y)
|
||||||
|
|
||||||
|
if len(removes) > 0:
|
||||||
|
updates[k] = [y for y in x[0] if y not in removes]
|
||||||
|
|
||||||
|
for k, v in updates.items():
|
||||||
|
json_obj[k][0] = v
|
||||||
|
|
||||||
|
return json_obj
|
||||||
|
|
||||||
|
|
||||||
@server.PromptServer.instance.routes.get("/customnode/getmappings")
|
@server.PromptServer.instance.routes.get("/customnode/getmappings")
|
||||||
async def fetch_customnode_mappings(request):
|
async def fetch_customnode_mappings(request):
|
||||||
json_obj = await get_data_by_mode(request.rel_url.query["mode"], 'extension-node-map.json')
|
mode = request.rel_url.query["mode"]
|
||||||
|
|
||||||
|
nickname_mode = False
|
||||||
|
if mode == "nickname":
|
||||||
|
mode = "local"
|
||||||
|
nickname_mode = True
|
||||||
|
|
||||||
|
json_obj = await get_data_by_mode(mode, 'extension-node-map.json')
|
||||||
|
|
||||||
|
if nickname_mode:
|
||||||
|
json_obj = nickname_filter(json_obj)
|
||||||
|
|
||||||
all_nodes = set()
|
all_nodes = set()
|
||||||
patterns = []
|
patterns = []
|
||||||
@ -1647,7 +1712,7 @@ async def update_comfyui(request):
|
|||||||
current_branch = repo.active_branch
|
current_branch = repo.active_branch
|
||||||
branch_name = current_branch.name
|
branch_name = current_branch.name
|
||||||
|
|
||||||
remote_name = 'origin'
|
remote_name = current_branch.tracking_branch().remote_name
|
||||||
remote = repo.remote(name=remote_name)
|
remote = repo.remote(name=remote_name)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
@ -1716,8 +1781,7 @@ async def install_model(request):
|
|||||||
print(f"Install model '{json_data['name']}' into '{model_path}'")
|
print(f"Install model '{json_data['name']}' into '{model_path}'")
|
||||||
|
|
||||||
model_url = json_data['url']
|
model_url = json_data['url']
|
||||||
|
if not get_config()['model_download_by_agent'] and (model_url.startswith('https://github.com') or model_url.startswith('https://huggingface.co') or model_url.startswith('https://heibox.uni-heidelberg.de')):
|
||||||
if model_url.startswith('https://github.com') or model_url.startswith('https://huggingface.co') or model_url.startswith('https://heibox.uni-heidelberg.de'):
|
|
||||||
model_dir = get_model_dir(json_data)
|
model_dir = get_model_dir(json_data)
|
||||||
download_url(model_url, model_dir, filename=json_data['filename'])
|
download_url(model_url, model_dir, filename=json_data['filename'])
|
||||||
|
|
||||||
|
|||||||
@ -199,6 +199,11 @@
|
|||||||
"id":"https://github.com/abyz22/image_control",
|
"id":"https://github.com/abyz22/image_control",
|
||||||
"tags":"BMAB",
|
"tags":"BMAB",
|
||||||
"description": "This extension provides some alternative functionalities of the [a/sd-webui-bmab](https://github.com/portu-sim/sd-webui-bmab) extension."
|
"description": "This extension provides some alternative functionalities of the [a/sd-webui-bmab](https://github.com/portu-sim/sd-webui-bmab) extension."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"https://github.com/blepping/ComfyUI-sonar",
|
||||||
|
"tags":"sonar",
|
||||||
|
"description": "This extension provides some alternative functionalities of the [a/stable-diffusion-webui-sonar](https://github.com/Kahsolt/stable-diffusion-webui-sonar) extension."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
21
check.bat
Normal file
21
check.bat
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
python json-checker.py "custom-node-list.json"
|
||||||
|
python json-checker.py "model-list.json"
|
||||||
|
python json-checker.py "alter-list.json"
|
||||||
|
python json-checker.py "extension-node-map.json"
|
||||||
|
python json-checker.py "node_db\new\custom-node-list.json"
|
||||||
|
python json-checker.py "node_db\new\model-list.json"
|
||||||
|
python json-checker.py "node_db\new\extension-node-map.json"
|
||||||
|
python json-checker.py "node_db\dev\custom-node-list.json"
|
||||||
|
python json-checker.py "node_db\dev\model-list.json"
|
||||||
|
python json-checker.py "node_db\dev\extension-node-map.json"
|
||||||
|
python json-checker.py "node_db\tutorial\custom-node-list.json"
|
||||||
|
python json-checker.py "node_db\tutorial\model-list.json"
|
||||||
|
python json-checker.py "node_db\tutorial\extension-node-map.json"
|
||||||
|
python json-checker.py "node_db\legacy\custom-node-list.json"
|
||||||
|
python json-checker.py "node_db\legacy\model-list.json"
|
||||||
|
python json-checker.py "node_db\legacy\extension-node-map.json"
|
||||||
|
python json-checker.py "node_db\forked\custom-node-list.json"
|
||||||
|
python json-checker.py "node_db\forked\model-list.json"
|
||||||
|
python json-checker.py "node_db\forked\extension-node-map.json"
|
||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -52,7 +52,7 @@ def gitcheck(path, do_fetch=False):
|
|||||||
current_branch = repo.active_branch
|
current_branch = repo.active_branch
|
||||||
branch_name = current_branch.name
|
branch_name = current_branch.name
|
||||||
|
|
||||||
remote_name = 'origin'
|
remote_name = current_branch.tracking_branch().remote_name
|
||||||
remote = repo.remote(name=remote_name)
|
remote = repo.remote(name=remote_name)
|
||||||
|
|
||||||
if do_fetch:
|
if do_fetch:
|
||||||
@ -104,7 +104,7 @@ def gitpull(path):
|
|||||||
current_branch = repo.active_branch
|
current_branch = repo.active_branch
|
||||||
branch_name = current_branch.name
|
branch_name = current_branch.name
|
||||||
|
|
||||||
remote_name = 'origin'
|
remote_name = current_branch.tracking_branch().remote_name
|
||||||
remote = repo.remote(name=remote_name)
|
remote = repo.remote(name=remote_name)
|
||||||
|
|
||||||
remote.fetch()
|
remote.fetch()
|
||||||
|
|||||||
@ -148,13 +148,13 @@ docStyle.innerHTML = `
|
|||||||
}
|
}
|
||||||
|
|
||||||
.cm-notice-board > ul {
|
.cm-notice-board > ul {
|
||||||
display: block;
|
display: block;
|
||||||
list-style-type: disc;
|
list-style-type: disc;
|
||||||
margin-block-start: 1em;
|
margin-block-start: 1em;
|
||||||
margin-block-end: 1em;
|
margin-block-end: 1em;
|
||||||
margin-inline-start: 0px;
|
margin-inline-start: 0px;
|
||||||
margin-inline-end: 0px;
|
margin-inline-end: 0px;
|
||||||
padding-inline-start: 40px;
|
padding-inline-start: 40px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.cm-conflicted-nodes-text {
|
.cm-conflicted-nodes-text {
|
||||||
@ -383,7 +383,7 @@ await init_badge_mode();
|
|||||||
await init_share_option();
|
await init_share_option();
|
||||||
|
|
||||||
async function fetchNicknames() {
|
async function fetchNicknames() {
|
||||||
const response1 = await api.fetchApi(`/customnode/getmappings?mode=local`);
|
const response1 = await api.fetchApi(`/customnode/getmappings?mode=nickname`);
|
||||||
const mappings = await response1.json();
|
const mappings = await response1.json();
|
||||||
|
|
||||||
let result = {};
|
let result = {};
|
||||||
@ -629,12 +629,12 @@ async function updateAll(update_check_checkbox, manager_dialog) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
app.ui.dialog.show(
|
app.ui.dialog.show(
|
||||||
"ComfyUI and all extensions have been updated to the latest version.<BR>To apply the updated custom node, please <button class='cm-small-button' id='cm-reboot-button'>RESTART</button> ComfyUI. And refresh browser.<BR>"
|
"ComfyUI and all extensions have been updated to the latest version.<BR>To apply the updated custom node, please <button class='cm-small-button' id='cm-reboot-button5'>RESTART</button> ComfyUI. And refresh browser.<BR>"
|
||||||
+failed_list
|
+failed_list
|
||||||
+updated_list
|
+updated_list
|
||||||
);
|
);
|
||||||
|
|
||||||
const rebootButton = document.getElementById('cm-reboot-button');
|
const rebootButton = document.getElementById('cm-reboot-button5');
|
||||||
rebootButton.addEventListener("click",
|
rebootButton.addEventListener("click",
|
||||||
function() {
|
function() {
|
||||||
if(rebootAPI()) {
|
if(rebootAPI()) {
|
||||||
|
|||||||
10
js/common.js
10
js/common.js
@ -67,7 +67,7 @@ export async function install_checked_custom_node(grid_rows, target_i, caller, m
|
|||||||
}
|
}
|
||||||
|
|
||||||
await caller.invalidateControl();
|
await caller.invalidateControl();
|
||||||
caller.updateMessage("<BR>To apply the installed/updated/disabled/enabled custom node, please <button id='cm-reboot-button' class='cm-small-button'>RESTART</button> ComfyUI. And refresh browser.", 'cm-reboot-button');
|
caller.updateMessage("<BR>To apply the installed/updated/disabled/enabled custom node, please <button id='cm-reboot-button1' class='cm-small-button'>RESTART</button> ComfyUI. And refresh browser.", 'cm-reboot-button1');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -92,9 +92,9 @@ export async function install_pip(packages) {
|
|||||||
const res = await api.fetchApi(`/customnode/install/pip?packages=${packages}`);
|
const res = await api.fetchApi(`/customnode/install/pip?packages=${packages}`);
|
||||||
|
|
||||||
if(res.status == 200) {
|
if(res.status == 200) {
|
||||||
app.ui.dialog.show(`PIP package installation is processed.<br>To apply the pip packages, please click the <button id='cm-reboot-button'><font size='3px'>RESTART</font></button> button in ComfyUI.`);
|
app.ui.dialog.show(`PIP package installation is processed.<br>To apply the pip packages, please click the <button id='cm-reboot-button3'><font size='3px'>RESTART</font></button> button in ComfyUI.`);
|
||||||
|
|
||||||
const rebootButton = document.getElementById('cm-reboot-button');
|
const rebootButton = document.getElementById('cm-reboot-button3');
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
rebootButton.addEventListener("click", rebootAPI);
|
rebootButton.addEventListener("click", rebootAPI);
|
||||||
@ -124,9 +124,9 @@ export async function install_via_git_url(url, manager_dialog) {
|
|||||||
const res = await api.fetchApi(`/customnode/install/git_url?url=${url}`);
|
const res = await api.fetchApi(`/customnode/install/git_url?url=${url}`);
|
||||||
|
|
||||||
if(res.status == 200) {
|
if(res.status == 200) {
|
||||||
app.ui.dialog.show(`'${url}' is installed<BR>To apply the installed custom node, please <button id='cm-reboot-button'><font size='3px'>RESTART</font></button> ComfyUI.`);
|
app.ui.dialog.show(`'${url}' is installed<BR>To apply the installed custom node, please <button id='cm-reboot-button4'><font size='3px'>RESTART</font></button> ComfyUI.`);
|
||||||
|
|
||||||
const rebootButton = document.getElementById('cm-reboot-button');
|
const rebootButton = document.getElementById('cm-reboot-button4');
|
||||||
const self = this;
|
const self = this;
|
||||||
|
|
||||||
rebootButton.addEventListener("click",
|
rebootButton.addEventListener("click",
|
||||||
|
|||||||
@ -154,7 +154,6 @@ export class CustomNodesInstaller extends ComfyDialog {
|
|||||||
async filter_missing_node(data) {
|
async filter_missing_node(data) {
|
||||||
const mappings = await getCustomnodeMappings();
|
const mappings = await getCustomnodeMappings();
|
||||||
|
|
||||||
|
|
||||||
// build regex->url map
|
// build regex->url map
|
||||||
const regex_to_url = [];
|
const regex_to_url = [];
|
||||||
for (let i in data) {
|
for (let i in data) {
|
||||||
@ -165,11 +164,17 @@ export class CustomNodesInstaller extends ComfyDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// build name->url map
|
// build name->url map
|
||||||
const name_to_url = {};
|
const name_to_urls = {};
|
||||||
for (const url in mappings) {
|
for (const url in mappings) {
|
||||||
const names = mappings[url];
|
const names = mappings[url];
|
||||||
|
|
||||||
for(const name in names[0]) {
|
for(const name in names[0]) {
|
||||||
name_to_url[names[0][name]] = url;
|
let v = name_to_urls[names[0][name]];
|
||||||
|
if(v == undefined) {
|
||||||
|
v = [];
|
||||||
|
name_to_urls[names[0][name]] = v;
|
||||||
|
}
|
||||||
|
v.push(url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -194,9 +199,11 @@ export class CustomNodesInstaller extends ComfyDialog {
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (!registered_nodes.has(node_type)) {
|
if (!registered_nodes.has(node_type)) {
|
||||||
const url = name_to_url[node_type.trim()];
|
const urls = name_to_urls[node_type.trim()];
|
||||||
if(url)
|
if(urls)
|
||||||
missing_nodes.add(url);
|
urls.forEach(url => {
|
||||||
|
missing_nodes.add(url);
|
||||||
|
});
|
||||||
else {
|
else {
|
||||||
for(let j in regex_to_url) {
|
for(let j in regex_to_url) {
|
||||||
if(regex_to_url[j].regex.test(node_type)) {
|
if(regex_to_url[j].regex.test(node_type)) {
|
||||||
@ -210,7 +217,7 @@ export class CustomNodesInstaller extends ComfyDialog {
|
|||||||
let unresolved_nodes = await getUnresolvedNodesInComponent();
|
let unresolved_nodes = await getUnresolvedNodesInComponent();
|
||||||
for (let i in unresolved_nodes) {
|
for (let i in unresolved_nodes) {
|
||||||
let node_type = unresolved_nodes[i];
|
let node_type = unresolved_nodes[i];
|
||||||
const url = name_to_url[node_type];
|
const url = name_to_urls[node_type];
|
||||||
if(url)
|
if(url)
|
||||||
missing_nodes.add(url);
|
missing_nodes.add(url);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -23,7 +23,7 @@ async function restore_snapshot(target) {
|
|||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
await SnapshotManager.instance.invalidateControl();
|
await SnapshotManager.instance.invalidateControl();
|
||||||
SnapshotManager.instance.updateMessage("<BR>To apply the snapshot, please <button id='cm-reboot-button' class='cm-small-button'>RESTART</button> ComfyUI. And refresh browser.", 'cm-reboot-button');
|
SnapshotManager.instance.updateMessage("<BR>To apply the snapshot, please <button id='cm-reboot-button2' class='cm-small-button'>RESTART</button> ComfyUI. And refresh browser.", 'cm-reboot-button2');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
467
model-list.json
467
model-list.json
@ -270,6 +270,138 @@
|
|||||||
"filename": "easynegative.safetensors",
|
"filename": "easynegative.safetensors",
|
||||||
"url": "https://civitai.com/api/download/models/9208"
|
"url": "https://civitai.com/api/download/models/9208"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "stabilityai/comfyui_checkpoints/stable_cascade_stage_b.safetensors",
|
||||||
|
"type": "checkpoints",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "checkpoints/Stable-Cascade",
|
||||||
|
"description": "[4.55GB] Stable Cascade stage_b checkpoints",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stable_cascade_stage_b.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/comfyui_checkpoints/stable_cascade_stage_b.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/comfyui_checkpoints/stable_cascade_stage_c.safetensors",
|
||||||
|
"type": "checkpoints",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "checkpoints/Stable-Cascade",
|
||||||
|
"description": "[9.22GB] Stable Cascade stage_c checkpoints",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stable_cascade_stage_c.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/comfyui_checkpoints/stable_cascade_stage_c.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_a.safetensors (VAE)",
|
||||||
|
"type": "VAE",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "vae/Stable-Cascade",
|
||||||
|
"description": "[73.7MB] Stable Cascade: stage_a",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_a.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_a.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: effnet_encoder.safetensors (VAE)",
|
||||||
|
"type": "VAE",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "vae/Stable-Cascade",
|
||||||
|
"description": "[81.5MB] Stable Cascade: effnet_encoder.\nVAE encoder for stage_c latent.",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "effnet_encoder.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/effnet_encoder.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_b.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[6.25GB] Stable Cascade: stage_b",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_b.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_b_bf16.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[3.13GB] Stable Cascade: stage_b/bf16",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_b_bf16.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b_bf16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_b_lite.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[2.8GB] Stable Cascade: stage_b/lite",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_b_lite.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b_lite.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_b_lite.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[1.4GB] Stable Cascade: stage_b/bf16,lite",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_b_lite_bf16.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b_lite_bf16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_c.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[14.4GB] Stable Cascade: stage_c",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_c.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_c_bf16.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[7.18GB] Stable Cascade: stage_c/bf16",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_c_bf16.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c_bf16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_c_lite.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[4.12GB] Stable Cascade: stage_c/lite",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_c_lite.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c_lite.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_c_lite.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[2.06GB] Stable Cascade: stage_c/bf16,lite",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_c_lite_bf16.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c_lite_bf16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: text_encoder (CLIP)",
|
||||||
|
"type": "clip",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "clip/Stable-Cascade",
|
||||||
|
"description": "[1.39GB] Stable Cascade: text_encoder",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "model.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/text_encoder/model.safetensors"
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "SDXL-Turbo 1.0 (fp16)",
|
"name": "SDXL-Turbo 1.0 (fp16)",
|
||||||
"type": "checkpoints",
|
"type": "checkpoints",
|
||||||
@ -360,6 +492,39 @@
|
|||||||
"filename": "sd_xl_offset_example-lora_1.0.safetensors",
|
"filename": "sd_xl_offset_example-lora_1.0.safetensors",
|
||||||
"url": "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors"
|
"url": "https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_offset_example-lora_1.0.safetensors"
|
||||||
},
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "SDXL Lightning LoRA (2step)",
|
||||||
|
"type": "lora",
|
||||||
|
"base": "SDXL",
|
||||||
|
"save_path": "loras/SDXL-Lightning",
|
||||||
|
"description": "SDXL Lightning LoRA (2step)",
|
||||||
|
"reference": "https://huggingface.co/ByteDance/SDXL-Lightning",
|
||||||
|
"filename": "sdxl_lightning_2step_lora.safetensors",
|
||||||
|
"url": "https://huggingface.co/ByteDance/SDXL-Lightning/resolve/main/sdxl_lightning_2step_lora.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SDXL Lightning LoRA (4step)",
|
||||||
|
"type": "lora",
|
||||||
|
"base": "SDXL",
|
||||||
|
"save_path": "loras/SDXL-Lightning",
|
||||||
|
"description": "SDXL Lightning LoRA (4step)",
|
||||||
|
"reference": "https://huggingface.co/ByteDance/SDXL-Lightning",
|
||||||
|
"filename": "sdxl_lightning_4step_lora.safetensors",
|
||||||
|
"url": "https://huggingface.co/ByteDance/SDXL-Lightning/resolve/main/sdxl_lightning_4step_lora.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SDXL Lightning LoRA (8step)",
|
||||||
|
"type": "lora",
|
||||||
|
"base": "SDXL",
|
||||||
|
"save_path": "loras/SDXL-Lightning",
|
||||||
|
"description": "SDXL Lightning LoRA (8tep)",
|
||||||
|
"reference": "https://huggingface.co/ByteDance/SDXL-Lightning",
|
||||||
|
"filename": "sdxl_lightning_8step_lora.safetensors",
|
||||||
|
"url": "https://huggingface.co/ByteDance/SDXL-Lightning/resolve/main/sdxl_lightning_8step_lora.safetensors"
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "v1-5-pruned-emaonly.ckpt",
|
"name": "v1-5-pruned-emaonly.ckpt",
|
||||||
"type": "checkpoints",
|
"type": "checkpoints",
|
||||||
@ -420,16 +585,6 @@
|
|||||||
"filename": "AOM3A3_orangemixs.safetensors",
|
"filename": "AOM3A3_orangemixs.safetensors",
|
||||||
"url": "https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A3_orangemixs.safetensors"
|
"url": "https://huggingface.co/WarriorMama777/OrangeMixs/resolve/main/Models/AbyssOrangeMix3/AOM3A3_orangemixs.safetensors"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "Anything v3 (fp16; pruned)",
|
|
||||||
"type": "checkpoints",
|
|
||||||
"base": "SD1.5",
|
|
||||||
"save_path": "default",
|
|
||||||
"description": "Anything v3 (anime style)",
|
|
||||||
"reference": "https://huggingface.co/Linaqruf/anything-v3.0",
|
|
||||||
"filename": "anything-v3-fp16-pruned.safetensors",
|
|
||||||
"url": "https://huggingface.co/Linaqruf/anything-v3.0/resolve/main/anything-v3-fp16-pruned.safetensors"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "Waifu Diffusion 1.5 Beta3 (fp16)",
|
"name": "Waifu Diffusion 1.5 Beta3 (fp16)",
|
||||||
"type": "checkpoints",
|
"type": "checkpoints",
|
||||||
@ -660,6 +815,116 @@
|
|||||||
"filename": "t2iadapter_style_sd14v1.pth",
|
"filename": "t2iadapter_style_sd14v1.pth",
|
||||||
"url": "https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_style_sd14v1.pth"
|
"url": "https://huggingface.co/TencentARC/T2I-Adapter/resolve/main/models/t2iadapter_style_sd14v1.pth"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (lineart) FP16",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for lineart",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-lineart-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-lineart-sdxl-1.0.fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-lineart-sdxl-1.0/resolve/main/diffusion_pytorch_model.fp16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (canny) FP16",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for canny",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-canny-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-canny-sdxl-1.0.fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-canny-sdxl-1.0/resolve/main/diffusion_pytorch_model.fp16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (depth-zoe) FP16",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for depth-zoe",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-depth-zoe-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-depth-zoe-sdxl-1.0.fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-depth-zoe-sdxl-1.0/resolve/main/diffusion_pytorch_model.fp16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (depth-midas) FP16",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for depth-midas",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-depth-midas-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-depth-midas-sdxl-1.0.fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-depth-midas-sdxl-1.0/resolve/main/diffusion_pytorch_model.fp16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (sketch) FP16",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for sketch",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-sketch-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-sketch-sdxl-1.0.fp16.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-sketch-sdxl-1.0/resolve/main/diffusion_pytorch_model.fp16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (lineart)",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for lineart",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-lineart-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-lineart-sdxl-1.0.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-lineart-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (canny)",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for canny",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-canny-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-canny-sdxl-1.0.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-canny-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (depth-zoe)",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for depth-zoe",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-depth-zoe-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-depth-zoe-sdxl-1.0.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-depth-zoe-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (depth-midas)",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for depth-midas",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-depth-midas-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-depth-midas-sdxl-1.0.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-depth-midas-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (sketch)",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for sketch",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-sketch-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-sketch-sdxl-1.0.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-sketch-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "T2I-Adapter XL (openpose)",
|
||||||
|
"type": "T2I-Adapter",
|
||||||
|
"base": "SDXL 1.0",
|
||||||
|
"save_path": "default",
|
||||||
|
"description": "ControlNet T2I-Adapter XL for openpose",
|
||||||
|
"reference": "https://huggingface.co/TencentARC/t2i-adapter-openpose-sdxl-1.0",
|
||||||
|
"filename": "t2i-adapter-openpose-sdxl-1.0.safetensors",
|
||||||
|
"url": "https://huggingface.co/TencentARC/t2i-adapter-openpose-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"name": "CiaraRowles/TemporalNet2",
|
"name": "CiaraRowles/TemporalNet2",
|
||||||
"type": "controlnet",
|
"type": "controlnet",
|
||||||
@ -1882,6 +2147,188 @@
|
|||||||
"reference": "https://huggingface.co/InstantX/InstantID",
|
"reference": "https://huggingface.co/InstantX/InstantID",
|
||||||
"filename": "diffusion_pytorch_model.safetensors",
|
"filename": "diffusion_pytorch_model.safetensors",
|
||||||
"url": "https://huggingface.co/InstantX/InstantID/resolve/main/ControlNetModel/diffusion_pytorch_model.safetensors"
|
"url": "https://huggingface.co/InstantX/InstantID/resolve/main/ControlNetModel/diffusion_pytorch_model.safetensors"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "efficient_sam_s_cpu.jit [ComfyUI-YoloWorld-EfficientSAM]",
|
||||||
|
"type": "efficient_sam",
|
||||||
|
"base": "efficient_sam",
|
||||||
|
"save_path": "custom_nodes/ComfyUI-YoloWorld-EfficientSAM",
|
||||||
|
"description": "Install efficient_sam_s_cpu.jit into ComfyUI-YoloWorld-EfficientSAM",
|
||||||
|
"reference": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/tree/main",
|
||||||
|
"filename": "efficient_sam_s_cpu.jit",
|
||||||
|
"url": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/resolve/main/efficient_sam_s_cpu.jit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "efficient_sam_s_gpu.jit [ComfyUI-YoloWorld-EfficientSAM]",
|
||||||
|
"type": "efficient_sam",
|
||||||
|
"base": "efficient_sam",
|
||||||
|
"save_path": "custom_nodes/ComfyUI-YoloWorld-EfficientSAM",
|
||||||
|
"description": "Install efficient_sam_s_gpu.jit into ComfyUI-YoloWorld-EfficientSAM",
|
||||||
|
"reference": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/tree/main",
|
||||||
|
"filename": "efficient_sam_s_gpu.jit",
|
||||||
|
"url": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/resolve/main/efficient_sam_s_gpu.jit"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "shape_predictor_68_face_landmarks.dat [Face Analysis]",
|
||||||
|
"type": "Shape Predictor",
|
||||||
|
"base": "DLIB",
|
||||||
|
"save_path": "custom_nodes/ComfyUI_FaceAnalysis/dlib",
|
||||||
|
"description": "To use the Face Analysis for ComfyUI custom node, installation of this model is needed.",
|
||||||
|
"reference": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/tree/main",
|
||||||
|
"filename": "shape_predictor_68_face_landmarks.dat",
|
||||||
|
"url": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/resolve/main/shape_predictor_68_face_landmarks.dat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dlib_face_recognition_resnet_model_v1.dat [Face Analysis]",
|
||||||
|
"type": "Face Recognition",
|
||||||
|
"base": "DLIB",
|
||||||
|
"save_path": "custom_nodes/ComfyUI_FaceAnalysis/dlib",
|
||||||
|
"description": "To use the Face Analysis for ComfyUI custom node, installation of this model is needed.",
|
||||||
|
"reference": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/tree/main",
|
||||||
|
"filename": "dlib_face_recognition_resnet_model_v1.dat",
|
||||||
|
"url": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/resolve/main/dlib_face_recognition_resnet_model_v1.dat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "InstanceDiffusion/fusers",
|
||||||
|
"type": "InstanceDiffusion",
|
||||||
|
"base": "SD1.5",
|
||||||
|
"save_path": "instance_models/fuser_models",
|
||||||
|
"description": "Fusers checkpoints for multi-object prompting with InstanceDiffusion.",
|
||||||
|
"reference": "https://huggingface.co/logtd/instance_diffusion",
|
||||||
|
"filename": "fusers.ckpt",
|
||||||
|
"url": "https://huggingface.co/logtd/instance_diffusion/resolve/main/fusers.ckpt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "InstanceDiffusion/position_net",
|
||||||
|
"type": "InstanceDiffusion",
|
||||||
|
"base": "SD1.5",
|
||||||
|
"save_path": "instance_models/positionnet_models",
|
||||||
|
"description": "PositionNet checkpoints for multi-object prompting with InstanceDiffusion.",
|
||||||
|
"reference": "https://huggingface.co/logtd/instance_diffusion",
|
||||||
|
"filename": "position_net.ckpt",
|
||||||
|
"url": "https://huggingface.co/logtd/instance_diffusion/resolve/main/position_net.ckpt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "InstanceDiffusion/scaleu",
|
||||||
|
"type": "InstanceDiffusion",
|
||||||
|
"base": "SD1.5",
|
||||||
|
"save_path": "instance_models/scaleu_models",
|
||||||
|
"description": "ScaleU checkpoints for multi-object prompting with InstanceDiffusion.",
|
||||||
|
"reference": "https://huggingface.co/logtd/instance_diffusion",
|
||||||
|
"filename": "scaleu.ckpt",
|
||||||
|
"url": "https://huggingface.co/logtd/instance_diffusion/resolve/main/scaleu.ckpt"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "1k3d68.onnx",
|
||||||
|
"type": "insightface",
|
||||||
|
"base": "inswapper",
|
||||||
|
"save_path": "insightface/models/buffalo_l",
|
||||||
|
"description": "Buffalo_l 1k3d68.onnx model for IpAdapterPlus",
|
||||||
|
"reference": "https://github.com/cubiq/ComfyUI_IPAdapter_plus?tab=readme-ov-file#faceid",
|
||||||
|
"filename": "1k3d68.onnx",
|
||||||
|
"url": "https://huggingface.co/public-data/insightface/resolve/main/models/buffalo_l/1k3d68.onnx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "2d106det.onnx",
|
||||||
|
"type": "insightface",
|
||||||
|
"base": "inswapper",
|
||||||
|
"save_path": "insightface/models/buffalo_l",
|
||||||
|
"description": "Buffalo_l 2d106det.onnx model for IpAdapterPlus",
|
||||||
|
"reference": "https://github.com/cubiq/ComfyUI_IPAdapter_plus?tab=readme-ov-file#faceid",
|
||||||
|
"filename": "2d106det.onnx",
|
||||||
|
"url": "https://huggingface.co/public-data/insightface/resolve/main/models/buffalo_l/2d106det.onnx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "det_10g.onnx",
|
||||||
|
"type": "insightface",
|
||||||
|
"base": "inswapper",
|
||||||
|
"save_path": "insightface/models/buffalo_l",
|
||||||
|
"description": "Buffalo_l det_10g.onnx model for IpAdapterPlus",
|
||||||
|
"reference": "https://github.com/cubiq/ComfyUI_IPAdapter_plus?tab=readme-ov-file#faceid",
|
||||||
|
"filename": "det_10g.onnx",
|
||||||
|
"url": "https://huggingface.co/public-data/insightface/resolve/main/models/buffalo_l/det_10g.onnx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "genderage.onnx",
|
||||||
|
"type": "insightface",
|
||||||
|
"base": "inswapper",
|
||||||
|
"save_path": "insightface/models/buffalo_l",
|
||||||
|
"description": "Buffalo_l genderage.onnx model for IpAdapterPlus",
|
||||||
|
"reference": "https://github.com/cubiq/ComfyUI_IPAdapter_plus?tab=readme-ov-file#faceid",
|
||||||
|
"filename": "genderage.onnx",
|
||||||
|
"url": "https://huggingface.co/public-data/insightface/resolve/main/models/buffalo_l/genderage.onnx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "w600k_r50.onnx",
|
||||||
|
"type": "insightface",
|
||||||
|
"base": "inswapper",
|
||||||
|
"save_path": "insightface/models/buffalo_l",
|
||||||
|
"description": "Buffalo_l w600k_r50.onnx model for IpAdapterPlus",
|
||||||
|
"reference": "https://github.com/cubiq/ComfyUI_IPAdapter_plus?tab=readme-ov-file#faceid",
|
||||||
|
"filename": "w600k_r50.onnx",
|
||||||
|
"url": "https://huggingface.co/public-data/insightface/resolve/main/models/buffalo_l/w600k_r50.onnx"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "BLIP ImageCaption (COCO) w/ ViT-B and CapFilt-L",
|
||||||
|
"type": "BLIP_MODEL",
|
||||||
|
"base": "blip_model",
|
||||||
|
"save_path": "blip",
|
||||||
|
"description": "BLIP ImageCaption (COCO) w/ ViT-B and CapFilt-L",
|
||||||
|
"reference": "https://github.com/salesforce/BLIP",
|
||||||
|
"filename": "model_base_capfilt_large.pth",
|
||||||
|
"url": "https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model_base_capfilt_large.pth"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GroundingDINO SwinT OGC - Model",
|
||||||
|
"type": "GroundingDINO",
|
||||||
|
"base": "DINO",
|
||||||
|
"save_path": "groundingdino",
|
||||||
|
"description": "GroundingDINO SwinT OGC Model",
|
||||||
|
"reference": "https://huggingface.co/ShilongLiu/GroundingDINO",
|
||||||
|
"filename": "groundingdino_swint_ogc.pth",
|
||||||
|
"url": "https://huggingface.co/ShilongLiu/GroundingDINO/resolve/main/groundingdino_swint_ogc.pth"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GroundingDINO SwinT OGC - CFG File",
|
||||||
|
"type": "GroundingDINO",
|
||||||
|
"base": "DINO",
|
||||||
|
"save_path": "groundingdino",
|
||||||
|
"description": "GroundingDINO SwinT OGC CFG File",
|
||||||
|
"reference": "https://huggingface.co/ShilongLiu/GroundingDINO/resolve/main/GroundingDINO_SwinT_OGC.cfg.py",
|
||||||
|
"filename": "GroundingDINO_SwinT_OGC.cfg.py",
|
||||||
|
"url": "https://huggingface.co/ShilongLiu/GroundingDINO/raw/main/GroundingDINO_SwinT_OGC.cfg.py"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ViT-H SAM model",
|
||||||
|
"type": "sam",
|
||||||
|
"base": "SAM",
|
||||||
|
"save_path": "sams",
|
||||||
|
"description": "Segmenty Anything SAM model (ViT-H)",
|
||||||
|
"reference": "https://github.com/facebookresearch/segment-anything#model-checkpoints",
|
||||||
|
"filename": "sam_vit_h_4b8939.pth",
|
||||||
|
"url": "https://dl.fbaipublicfiles.com/segment_anything/sam_vit_h_4b8939.pth"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ViT-L SAM model",
|
||||||
|
"type": "sam",
|
||||||
|
"base": "SAM",
|
||||||
|
"save_path": "sams",
|
||||||
|
"description": "Segmenty Anything SAM model (ViT-L)",
|
||||||
|
"reference": "https://github.com/facebookresearch/segment-anything#model-checkpoints",
|
||||||
|
"filename": "sam_vit_l_0b3195.pth",
|
||||||
|
"url": "https://dl.fbaipublicfiles.com/segment_anything/sam_vit_l_0b3195.pth"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "MobileSAM",
|
||||||
|
"type": "sam",
|
||||||
|
"base": "SAM",
|
||||||
|
"save_path": "sams",
|
||||||
|
"description": "MobileSAM",
|
||||||
|
"reference": "https://github.com/ChaoningZhang/MobileSAM/",
|
||||||
|
"filename": "mobile_sam.pt",
|
||||||
|
"url": "https://github.com/ChaoningZhang/MobileSAM/blob/master/weights/mobile_sam.pt"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,236 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "ExponentialML",
|
||||||
|
"title": "comfyui-ComfyUI_VisualStylePrompting [WIP]",
|
||||||
|
"reference": "https://github.com/ExponentialML/ComfyUI_VisualStylePrompting",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ExponentialML/ComfyUI_VisualStylePrompting"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "ComfyUI Version of '[a/Visual Style Prompting with Swapping Self-Attention](https://github.com/naver-ai/Visual-Style-Prompting)'"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "cubiq",
|
||||||
|
"title": "Comfy Dungeon [WIP]",
|
||||||
|
"reference": "https://github.com/cubiq/Comfy_Dungeon",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/cubiq/Comfy_Dungeon"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Build D&D Character Portraits with ComfyUI.\nIMPORTANT: At the moment this is mostly a tech demo to show how to build a web app on top of ComfyUI. The code is very messy and the application doesn't guaratee consistent results."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "dfl",
|
||||||
|
"title": "comfyui-stylegan",
|
||||||
|
"reference": "https://github.com/dfl/comfyui-stylegan",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/dfl/comfyui-stylegan"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Generator for StyleGAN 3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "christian-byrne",
|
||||||
|
"title": "elimination-nodes",
|
||||||
|
"reference": "https://github.com/christian-byrne/elimination-nodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/christian-byrne/elimination-nodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:Paste Cutout on Base Image"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "A719689614",
|
||||||
|
"title": "ComfyUI_AC_FUNV8Beta1",
|
||||||
|
"reference": "https://github.com/A719689614/ComfyUI_AC_FUNV8Beta1",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/A719689614/ComfyUI_AC_FUNV8Beta1"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:AC_Super_Controlnet/Checkpoint/Loras/Lora&LCM/KSampler/UpKSampler/SaveImage/PreviewImage/CKPT&LCM/CLIPEN/EmptLatent, AC_FUN_SUPER_LARGE, AC_Super_Come_Ckpt, AC_Super_Come_Lora"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "houdinii",
|
||||||
|
"title": "comfy-magick [WIP]",
|
||||||
|
"reference": "https://github.com/houdinii/comfy-magick",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/houdinii/comfy-magick"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This is a way to implement ImageMagick functionality in ComfyUI, which is generally PIL (pillow) based. I'm not sure the best way to handle this, as batch images make it a lot more complex, but the general idea will be two nodes to translate the IMAGE type, a torch.tensor of shape [batch, height, width, channels], or [1, 600, 800, 3] for a single 800x600 image, into/from a wand Image object."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "tjorbogarden",
|
||||||
|
"title": "my-useful-comfyui-custom-nodes",
|
||||||
|
"reference": "https://github.com/tjorbogarden/my-useful-comfyui-custom-nodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/tjorbogarden/my-useful-comfyui-custom-nodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:My-Image Sizer, KSamplerSDXLAdvanced."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "DeTK",
|
||||||
|
"title": "ComfyUI Node Switcher",
|
||||||
|
"reference": "https://github.com/DeTK/ComfyUI-Switch",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/DeTK/ComfyUI-Switch"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:NodeSwitch."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "GrindHouse66",
|
||||||
|
"title": "GH Tools for ComfyUI",
|
||||||
|
"reference": "https://github.com/GrindHouse66/ComfyUI-GH_Tools",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/GrindHouse66/ComfyUI-GH_Tools"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:GH Tools Image Sizer, GH Tools Simple Scale. Simple quality of life Tools for ComfyUI. Basically, If it makes my life easier, it will be here. The list will grow over time."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "sdfxai",
|
||||||
|
"title": "SDFXBridgeForComfyUI - ComfyUI Custom Node for SDFX Integration",
|
||||||
|
"reference": "https://github.com/sdfxai/SDFXBridgeForComfyUI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/sdfxai/SDFXBridgeForComfyUI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "SDFXBridgeForComfyUI is a custom node designed for seamless integration between ComfyUI and the SDFX solution. This custom node allows users to make ComfyUI compatible with SDFX when running the ComfyUI instance on their local machines."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Beinsezii",
|
||||||
|
"title": "comfyui-amd-go-fast",
|
||||||
|
"reference": "https://github.com/Beinsezii/comfyui-amd-go-fast",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Beinsezii/comfyui-amd-go-fast"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "See details: [a/link](https://github.com/Beinsezii/comfyui-amd-go-fast?tab=readme-ov-file)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "SeedV",
|
||||||
|
"title": "ComfyUI-SeedV-Nodes [UNSAFE]",
|
||||||
|
"reference": "https://github.com/SeedV/ComfyUI-SeedV-Nodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/SeedV/ComfyUI-SeedV-Nodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:Script.\n[w/This extension poses a risk of executing arbitrary commands through workflow execution. Please be cautious.]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "mut-ex",
|
||||||
|
"title": "ComfyUI GLIGEN GUI Node",
|
||||||
|
"reference": "https://github.com/mut-ex/comfyui-gligengui-node",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/mut-ex/comfyui-gligengui-node"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This is a simple, straightforward ComfyUI node to be used along with the [a/GLIGEN GUI](https://github.com/mut-ex/gligen-gui) I developed.\nNOTE:[a/Make sure you have the GLIGEN GUI up and running](https://github.com/mut-ex/gligen-gui/tree/main)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "unanan",
|
||||||
|
"title": "ComfyUI-Dist [WIP]",
|
||||||
|
"reference": "https://github.com/unanan/ComfyUI-Dist",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/unanan/ComfyUI-Dist"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "For distributed processing ComfyUI workflows within a local area network.\nNot Finished Yet."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "NicholasKao1029",
|
||||||
|
"title": "comfyui-hook",
|
||||||
|
"reference": "https://github.com/NicholasKao1029/comfyui-hook",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/NicholasKao1029/comfyui-hook"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This extension provides additional API"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "ForeignGods",
|
||||||
|
"title": "ComfyUI-Mana-Nodes",
|
||||||
|
"reference": "https://github.com/ForeignGods/ComfyUI-Mana-Nodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ForeignGods/ComfyUI-Mana-Nodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:font2img"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Extraltodeus",
|
||||||
|
"title": "Conditioning-token-experiments-for-ComfyUI",
|
||||||
|
"reference": "https://github.com/Extraltodeus/Conditioning-token-experiments-for-ComfyUI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Extraltodeus/Conditioning-token-experiments-for-ComfyUI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "I made these nodes for experimenting so it's far from perfect but at least it is entertaining!\nIt uses cosine similarities or smallest euclidean distances to find the closest tokens."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "kijai",
|
||||||
|
"title": "ComfyUI SUPIR upscaler wrapper node [WIP]",
|
||||||
|
"reference": "https://github.com/kijai/ComfyUI-SUPIR",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/kijai/ComfyUI-SUPIR"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "ComfyUI [a/SUPIR](https://github.com/Fanghua-Yu/SUPIR) upscaler wrapper node"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "logtd",
|
||||||
|
"title": "ComfyUI-FLATTEN",
|
||||||
|
"reference": "https://github.com/logtd/ComfyUI-FLATTEN",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/logtd/ComfyUI-FLATTEN"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Load Checkpoint with FLATTEN model, KSampler (Flatten), Unsampler (Flatten), Sample Trajectories"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "shadowcz007",
|
||||||
|
"title": "comfyui-llamafile [WIP]",
|
||||||
|
"reference": "https://github.com/shadowcz007/comfyui-llamafile",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/shadowcz007/comfyui-llamafile"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This node is an experimental node aimed at exploring the collaborative way of human-machine creation."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "gameltb",
|
||||||
|
"title": "ComfyUI paper playground",
|
||||||
|
"reference": "https://github.com/gameltb/ComfyUI_paper_playground",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/gameltb/ComfyUI_paper_playground"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Evaluate some papers in ComfyUI, just playground.\nNOTE: Various models need to be installed, so please visit the repository to check."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "huizhang0110",
|
||||||
|
"title": "ComfyUI_Easy_Nodes_hui",
|
||||||
|
"reference": "https://github.com/huizhang0110/ComfyUI_Easy_Nodes_hui",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/huizhang0110/ComfyUI_Easy_Nodes_hui"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:EasyEmptyLatentImage"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "tuckerdarby",
|
||||||
|
"title": "ComfyUI-TDNodes [WIP]",
|
||||||
|
"reference": "https://github.com/tuckerdarby/ComfyUI-TDNodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/tuckerdarby/ComfyUI-TDNodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Nodes:KSampler (RAVE), KSampler (TF), Object Tracker, KSampler Batched, Video Tracker Prompt, TemporalNet Preprocessor, Instance Tracker Prompt, Instance Diffusion Loader, Hand Tracker Node"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "shadowcz007",
|
"author": "shadowcz007",
|
||||||
"title": "comfyui-musicgen",
|
"title": "comfyui-musicgen",
|
||||||
@ -30,16 +260,6 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"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)"
|
"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": "kijai",
|
|
||||||
"title": "ComfyUI-ADMotionDirector [WIP]",
|
|
||||||
"reference": "https://github.com/kijai/ComfyUI-ADMotionDirector",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/kijai/ComfyUI-ADMotionDirector"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"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",
|
"author": "shadowcz007",
|
||||||
"title": "comfyui-CLIPSeg",
|
"title": "comfyui-CLIPSeg",
|
||||||
@ -100,16 +320,6 @@
|
|||||||
"install_type": "git-clone",
|
"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.]"
|
"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",
|
"author": "kappa54m",
|
||||||
"title": "ComfyUI_Usability (WIP)",
|
"title": "ComfyUI_Usability (WIP)",
|
||||||
|
|||||||
@ -1,5 +1,15 @@
|
|||||||
{
|
{
|
||||||
"custom_nodes": [
|
"custom_nodes": [
|
||||||
|
{
|
||||||
|
"author": "BlenderNeko",
|
||||||
|
"title": "Dr.Lt.Data/Advanced CLIP Text Encode (PR21)",
|
||||||
|
"reference": "https://github.com/ltdrdata/ComfyUI_ADV_CLIP_emb",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ltdrdata/ComfyUI_ADV_CLIP_emb"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "[a/PR21](https://github.com/BlenderNeko/ComfyUI_ADV_CLIP_emb/pull/21) is applied.\nmissing 'clip_layer' method fix."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "gameltb",
|
"author": "gameltb",
|
||||||
"title": "comfyui-stablsr",
|
"title": "comfyui-stablsr",
|
||||||
|
|||||||
@ -10,6 +10,36 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "ssitu",
|
||||||
|
"title": "NestedNodeBuilder [DEPRECATED]",
|
||||||
|
"reference": "https://github.com/ssitu/ComfyUI_NestedNodeBuilder",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ssitu/ComfyUI_NestedNodeBuilder"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This extension provides the ability to combine multiple nodes into a single node.\nNOTE:An identical feature now exists in ComfyUI. Additionally, this extension is largely broken with the recent versions of the codebase, so please use the built-in feature for group nodes."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "ccvv804",
|
||||||
|
"title": "ComfyUI StableCascade using diffusers for Low VRAM [DEPRECATED]",
|
||||||
|
"reference": "https://github.com/ccvv804/ComfyUI-DiffusersStableCascade-LowVRAM",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ccvv804/ComfyUI-DiffusersStableCascade-LowVRAM"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Works with RTX 4070ti 12GB.\nSimple quick wrapper for [a/https://huggingface.co/stabilityai/stable-cascade](https://huggingface.co/stabilityai/stable-cascade)\nComfy is going to implement this properly soon, this repo is just for quick testing for the impatient!"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "kijai",
|
||||||
|
"title": "ComfyUI StableCascade using diffusers [DEPRECATED]",
|
||||||
|
"reference": "https://github.com/kijai/ComfyUI-DiffusersStableCascade",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/kijai/ComfyUI-DiffusersStableCascade"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Simple quick wrapper for [a/https://huggingface.co/stabilityai/stable-cascade](https://huggingface.co/stabilityai/stable-cascade)\nComfy is going to implement this properly soon, this repo is just for quick testing for the impatient!"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "solarpush",
|
"author": "solarpush",
|
||||||
"title": "comfyui_sendimage_node [REMOVED]",
|
"title": "comfyui_sendimage_node [REMOVED]",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,239 @@
|
|||||||
{
|
{
|
||||||
"models": [
|
"models": [
|
||||||
|
{
|
||||||
|
"name": "BLIP ImageCaption (COCO) w/ ViT-B and CapFilt-L",
|
||||||
|
"type": "BLIP_MODEL",
|
||||||
|
"base": "blip_model",
|
||||||
|
"save_path": "blip",
|
||||||
|
"description": "BLIP ImageCaption (COCO) w/ ViT-B and CapFilt-L",
|
||||||
|
"reference": "https://github.com/salesforce/BLIP",
|
||||||
|
"filename": "model_base_capfilt_large.pth",
|
||||||
|
"url": "https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model_base_capfilt_large.pth"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GroundingDINO SwinT OGC - Model",
|
||||||
|
"type": "GroundingDINO",
|
||||||
|
"base": "DINO",
|
||||||
|
"save_path": "groundingdino",
|
||||||
|
"description": "GroundingDINO SwinT OGC Model",
|
||||||
|
"reference": "https://huggingface.co/ShilongLiu/GroundingDINO",
|
||||||
|
"filename": "groundingdino_swint_ogc.pth",
|
||||||
|
"url": "https://huggingface.co/ShilongLiu/GroundingDINO/resolve/main/groundingdino_swint_ogc.pth"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "GroundingDINO SwinT OGC - CFG File",
|
||||||
|
"type": "GroundingDINO",
|
||||||
|
"base": "DINO",
|
||||||
|
"save_path": "groundingdino",
|
||||||
|
"description": "GroundingDINO SwinT OGC CFG File",
|
||||||
|
"reference": "https://huggingface.co/ShilongLiu/GroundingDINO/resolve/main/GroundingDINO_SwinT_OGC.cfg.py",
|
||||||
|
"filename": "GroundingDINO_SwinT_OGC.cfg.py",
|
||||||
|
"url": "https://huggingface.co/ShilongLiu/GroundingDINO/raw/main/GroundingDINO_SwinT_OGC.cfg.py"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SDXL Lightning LoRA (2step)",
|
||||||
|
"type": "lora",
|
||||||
|
"base": "SDXL",
|
||||||
|
"save_path": "loras/SDXL-Lightning",
|
||||||
|
"description": "SDXL Lightning LoRA (2step)",
|
||||||
|
"reference": "https://huggingface.co/ByteDance/SDXL-Lightning",
|
||||||
|
"filename": "sdxl_lightning_2step_lora.safetensors",
|
||||||
|
"url": "https://huggingface.co/ByteDance/SDXL-Lightning/resolve/main/sdxl_lightning_2step_lora.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SDXL Lightning LoRA (4step)",
|
||||||
|
"type": "lora",
|
||||||
|
"base": "SDXL",
|
||||||
|
"save_path": "loras/SDXL-Lightning",
|
||||||
|
"description": "SDXL Lightning LoRA (4step)",
|
||||||
|
"reference": "https://huggingface.co/ByteDance/SDXL-Lightning",
|
||||||
|
"filename": "sdxl_lightning_4step_lora.safetensors",
|
||||||
|
"url": "https://huggingface.co/ByteDance/SDXL-Lightning/resolve/main/sdxl_lightning_4step_lora.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "SDXL Lightning LoRA (8step)",
|
||||||
|
"type": "lora",
|
||||||
|
"base": "SDXL",
|
||||||
|
"save_path": "loras/SDXL-Lightning",
|
||||||
|
"description": "SDXL Lightning LoRA (8tep)",
|
||||||
|
"reference": "https://huggingface.co/ByteDance/SDXL-Lightning",
|
||||||
|
"filename": "sdxl_lightning_8step_lora.safetensors",
|
||||||
|
"url": "https://huggingface.co/ByteDance/SDXL-Lightning/resolve/main/sdxl_lightning_8step_lora.safetensors"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "shape_predictor_68_face_landmarks.dat [Face Analysis]",
|
||||||
|
"type": "Shape Predictor",
|
||||||
|
"base": "DLIB",
|
||||||
|
"save_path": "custom_nodes/ComfyUI_FaceAnalysis/dlib",
|
||||||
|
"description": "To use the Face Analysis for ComfyUI custom node, installation of this model is needed.",
|
||||||
|
"reference": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/tree/main",
|
||||||
|
"filename": "shape_predictor_68_face_landmarks.dat",
|
||||||
|
"url": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/resolve/main/shape_predictor_68_face_landmarks.dat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "dlib_face_recognition_resnet_model_v1.dat [Face Analysis]",
|
||||||
|
"type": "Face Recognition",
|
||||||
|
"base": "DLIB",
|
||||||
|
"save_path": "custom_nodes/ComfyUI_FaceAnalysis/dlib",
|
||||||
|
"description": "To use the Face Analysis for ComfyUI custom node, installation of this model is needed.",
|
||||||
|
"reference": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/tree/main",
|
||||||
|
"filename": "dlib_face_recognition_resnet_model_v1.dat",
|
||||||
|
"url": "https://huggingface.co/matt3ounstable/dlib_predictor_recognition/resolve/main/dlib_face_recognition_resnet_model_v1.dat"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "efficient_sam_s_cpu.jit [ComfyUI-YoloWorld-EfficientSAM]",
|
||||||
|
"type": "efficient_sam",
|
||||||
|
"base": "efficient_sam",
|
||||||
|
"save_path": "custom_nodes/ComfyUI-YoloWorld-EfficientSAM",
|
||||||
|
"description": "Install efficient_sam_s_cpu.jit into ComfyUI-YoloWorld-EfficientSAM",
|
||||||
|
"reference": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/tree/main",
|
||||||
|
"filename": "efficient_sam_s_cpu.jit",
|
||||||
|
"url": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/resolve/main/efficient_sam_s_cpu.jit"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "efficient_sam_s_gpu.jit [ComfyUI-YoloWorld-EfficientSAM]",
|
||||||
|
"type": "efficient_sam",
|
||||||
|
"base": "efficient_sam",
|
||||||
|
"save_path": "custom_nodes/ComfyUI-YoloWorld-EfficientSAM",
|
||||||
|
"description": "Install efficient_sam_s_gpu.jit into ComfyUI-YoloWorld-EfficientSAM",
|
||||||
|
"reference": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/tree/main",
|
||||||
|
"filename": "efficient_sam_s_gpu.jit",
|
||||||
|
"url": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/resolve/main/efficient_sam_s_gpu.jit"
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "stabilityai/comfyui_checkpoints/stable_cascade_stage_b.safetensors",
|
||||||
|
"type": "checkpoints",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "checkpoints/Stable-Cascade",
|
||||||
|
"description": "[4.55GB] Stable Cascade stage_b checkpoints",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stable_cascade_stage_b.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/comfyui_checkpoints/stable_cascade_stage_b.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/comfyui_checkpoints/stable_cascade_stage_c.safetensors",
|
||||||
|
"type": "checkpoints",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "checkpoints/Stable-Cascade",
|
||||||
|
"description": "[9.22GB] Stable Cascade stage_c checkpoints",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stable_cascade_stage_c.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/comfyui_checkpoints/stable_cascade_stage_c.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: effnet_encoder.safetensors (VAE)",
|
||||||
|
"type": "VAE",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "vae/Stable-Cascade",
|
||||||
|
"description": "[81.5MB] Stable Cascade: effnet_encoder.\nVAE encoder for stage_c latent.",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "effnet_encoder.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/effnet_encoder.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_a.safetensors (VAE)",
|
||||||
|
"type": "VAE",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "vae/Stable-Cascade",
|
||||||
|
"description": "[73.7MB] Stable Cascade: stage_a",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_a.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_a.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_b.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[6.25GB] Stable Cascade: stage_b",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_b.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_b_bf16.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[3.13GB] Stable Cascade: stage_b/bf16",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_b_bf16.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b_bf16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_b_lite.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[2.8GB] Stable Cascade: stage_b/lite",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_b_lite.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b_lite.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_b_lite.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[1.4GB] Stable Cascade: stage_b/bf16,lite",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_b_lite_bf16.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b_lite_bf16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_c.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[14.4GB] Stable Cascade: stage_c",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_c.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_c_bf16.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[7.18GB] Stable Cascade: stage_c/bf16",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_c_bf16.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c_bf16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_c_lite.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[4.12GB] Stable Cascade: stage_c/lite",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_c_lite.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c_lite.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: stage_c_lite.safetensors (UNET)",
|
||||||
|
"type": "unet",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "unet/Stable-Cascade",
|
||||||
|
"description": "[2.06GB] Stable Cascade: stage_c/bf16,lite",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "stage_c_lite_bf16.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c_lite_bf16.safetensors"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "stabilityai/Stable Cascade: text_encoder (CLIP)",
|
||||||
|
"type": "clip",
|
||||||
|
"base": "Stable Cascade",
|
||||||
|
"save_path": "clip/Stable-Cascade",
|
||||||
|
"description": "[1.39GB] Stable Cascade: text_encoder",
|
||||||
|
"reference": "https://huggingface.co/stabilityai/stable-cascade",
|
||||||
|
"filename": "model.safetensors",
|
||||||
|
"url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/text_encoder/model.safetensors"
|
||||||
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "1k3d68.onnx",
|
"name": "1k3d68.onnx",
|
||||||
"type": "insightface",
|
"type": "insightface",
|
||||||
@ -458,251 +692,6 @@
|
|||||||
"reference": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid",
|
"reference": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid",
|
||||||
"filename": "svd.safetensors",
|
"filename": "svd.safetensors",
|
||||||
"url": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid/resolve/main/svd.safetensors"
|
"url": "https://huggingface.co/stabilityai/stable-video-diffusion-img2vid/resolve/main/svd.safetensors"
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Stable Video Diffusion Image-to-Video (XT)",
|
|
||||||
"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.\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) (Updated path)",
|
|
||||||
"type": "animatediff",
|
|
||||||
"base": "SDXL",
|
|
||||||
"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) (Updated path)",
|
|
||||||
"type": "motion lora",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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) (Updated path)",
|
|
||||||
"type": "motion lora",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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) (Updated path)",
|
|
||||||
"type": "motion lora",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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) (Updated path)",
|
|
||||||
"type": "motion lora",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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) (Updated path)",
|
|
||||||
"type": "motion lora",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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) (Updated path)",
|
|
||||||
"type": "motion lora",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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) (Updated path)",
|
|
||||||
"type": "motion lora",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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) (Updated path)",
|
|
||||||
"type": "motion lora",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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": "CiaraRowles/TemporalNet1XL (1.0)",
|
|
||||||
"type": "controlnet",
|
|
||||||
"base": "SD1.5",
|
|
||||||
"save_path": "controlnet/TemporalNet1XL",
|
|
||||||
"description": "This is TemporalNet1XL, it is a re-train of the controlnet TemporalNet1 with Stable Diffusion XL.",
|
|
||||||
"reference": "https://huggingface.co/CiaraRowles/controlnet-temporalnet-sdxl-1.0",
|
|
||||||
"filename": "diffusion_pytorch_model.safetensors",
|
|
||||||
"url": "https://huggingface.co/CiaraRowles/controlnet-temporalnet-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "LCM LoRA SD1.5",
|
|
||||||
"type": "lora",
|
|
||||||
"base": "SD1.5",
|
|
||||||
"save_path": "loras/lcm/SD1.5",
|
|
||||||
"description": "Latent Consistency LoRA for SD1.5",
|
|
||||||
"reference": "https://huggingface.co/latent-consistency/lcm-lora-sdv1-5",
|
|
||||||
"filename": "pytorch_lora_weights.safetensors",
|
|
||||||
"url": "https://huggingface.co/latent-consistency/lcm-lora-sdv1-5/resolve/main/pytorch_lora_weights.safetensors"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "LCM LoRA SSD-1B",
|
|
||||||
"type": "lora",
|
|
||||||
"base": "SSD-1B",
|
|
||||||
"save_path": "loras/lcm/SSD-1B",
|
|
||||||
"description": "Latent Consistency LoRA for SSD-1B",
|
|
||||||
"reference": "https://huggingface.co/latent-consistency/lcm-lora-ssd-1b",
|
|
||||||
"filename": "pytorch_lora_weights.safetensors",
|
|
||||||
"url": "https://huggingface.co/latent-consistency/lcm-lora-ssd-1b/resolve/main/pytorch_lora_weights.safetensors"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "LCM LoRA SDXL",
|
|
||||||
"type": "lora",
|
|
||||||
"base": "SSD-1B",
|
|
||||||
"save_path": "loras/lcm/SDXL",
|
|
||||||
"description": "Latent Consistency LoRA for SDXL",
|
|
||||||
"reference": "https://huggingface.co/latent-consistency/lcm-lora-sdxl",
|
|
||||||
"filename": "pytorch_lora_weights.safetensors",
|
|
||||||
"url": "https://huggingface.co/latent-consistency/lcm-lora-sdxl/resolve/main/pytorch_lora_weights.safetensors"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "face_yolov8m-seg_60.pt (segm)",
|
|
||||||
"type": "Ultralytics",
|
|
||||||
"base": "Ultralytics",
|
|
||||||
"save_path": "ultralytics/segm",
|
|
||||||
"description": "These are the available models in the UltralyticsDetectorProvider of Impact Pack.",
|
|
||||||
"reference": "https://github.com/hben35096/assets/releases/tag/yolo8",
|
|
||||||
"filename": "face_yolov8m-seg_60.pt",
|
|
||||||
"url": "https://github.com/hben35096/assets/releases/download/yolo8/face_yolov8m-seg_60.pt"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "face_yolov8n-seg2_60.pt (segm)",
|
|
||||||
"type": "Ultralytics",
|
|
||||||
"base": "Ultralytics",
|
|
||||||
"save_path": "ultralytics/segm",
|
|
||||||
"description": "These are the available models in the UltralyticsDetectorProvider of Impact Pack.",
|
|
||||||
"reference": "https://github.com/hben35096/assets/releases/tag/yolo8",
|
|
||||||
"filename": "face_yolov8n-seg2_60.pt",
|
|
||||||
"url": "https://github.com/hben35096/assets/releases/download/yolo8/face_yolov8n-seg2_60.pt"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "hair_yolov8n-seg_60.pt (segm)",
|
|
||||||
"type": "Ultralytics",
|
|
||||||
"base": "Ultralytics",
|
|
||||||
"save_path": "ultralytics/segm",
|
|
||||||
"description": "These are the available models in the UltralyticsDetectorProvider of Impact Pack.",
|
|
||||||
"reference": "https://github.com/hben35096/assets/releases/tag/yolo8",
|
|
||||||
"filename": "hair_yolov8n-seg_60.pt",
|
|
||||||
"url": "https://github.com/hben35096/assets/releases/download/yolo8/hair_yolov8n-seg_60.pt"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "skin_yolov8m-seg_400.pt (segm)",
|
|
||||||
"type": "Ultralytics",
|
|
||||||
"base": "Ultralytics",
|
|
||||||
"save_path": "ultralytics/segm",
|
|
||||||
"description": "These are the available models in the UltralyticsDetectorProvider of Impact Pack.",
|
|
||||||
"reference": "https://github.com/hben35096/assets/releases/tag/yolo8",
|
|
||||||
"filename": "skin_yolov8m-seg_400.pt",
|
|
||||||
"url": "https://github.com/hben35096/assets/releases/download/yolo8/skin_yolov8m-seg_400.pt"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "skin_yolov8n-seg_400.pt (segm)",
|
|
||||||
"type": "Ultralytics",
|
|
||||||
"base": "Ultralytics",
|
|
||||||
"save_path": "ultralytics/segm",
|
|
||||||
"description": "These are the available models in the UltralyticsDetectorProvider of Impact Pack.",
|
|
||||||
"reference": "https://github.com/hben35096/assets/releases/tag/yolo8",
|
|
||||||
"filename": "skin_yolov8n-seg_400.pt",
|
|
||||||
"url": "https://github.com/hben35096/assets/releases/download/yolo8/skin_yolov8n-seg_400.pt"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "skin_yolov8n-seg_800.pt (segm)",
|
|
||||||
"type": "Ultralytics",
|
|
||||||
"base": "Ultralytics",
|
|
||||||
"save_path": "ultralytics/segm",
|
|
||||||
"description": "These are the available models in the UltralyticsDetectorProvider of Impact Pack.",
|
|
||||||
"reference": "https://github.com/hben35096/assets/releases/tag/yolo8",
|
|
||||||
"filename": "skin_yolov8n-seg_800.pt",
|
|
||||||
"url": "https://github.com/hben35096/assets/releases/download/yolo8/skin_yolov8n-seg_800.pt"
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"name": "CiaraRowles/temporaldiff-v1-animatediff.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)",
|
|
||||||
"type": "animatediff",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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/mm_sd_v15_v2.ckpt (ComfyUI-AnimateDiff-Evolved)",
|
|
||||||
"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)",
|
|
||||||
"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": "AD_Stabilized_Motion/mm-Stabilized_high.pth (ComfyUI-AnimateDiff-Evolved) (Updated path)",
|
|
||||||
"type": "animatediff",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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) (Updated path)",
|
|
||||||
"type": "animatediff",
|
|
||||||
"base": "SD1.x",
|
|
||||||
"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"
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -10,6 +10,26 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "There is a small node pack attached to this guide. This includes the init file and 3 nodes associated with the tutorials."
|
"description": "There is a small node pack attached to this guide. This includes the init file and 3 nodes associated with the tutorials."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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": "These are demo nodes for [a/PR2666](https://github.com/comfyanonymous/ComfyUI/pull/2666)"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "ecjojo",
|
||||||
|
"title": "ecjojo_example_nodes",
|
||||||
|
"reference": "https://github.com/ecjojo/ecjojo-example-nodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ecjojo/ecjojo-example-nodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Welcome to ecjojo_example_nodes! This example is specifically designed for beginners who want to learn how to write a simple custom node.\nFeel free to modify this example and make it your own. Experiment with different features and functionalities to enhance your understanding of ComfyUI custom nodes. Don't be afraid to explore and customize the code to suit your needs.\nBy diving into this example and making it your own, you'll gain valuable hands-on experience in creating custom nodes in ComfyUI. Enjoy the process of learning and have fun with your custom node development journey!"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "dynamixar",
|
"author": "dynamixar",
|
||||||
"title": "Atluris",
|
"title": "Atluris",
|
||||||
@ -119,6 +139,16 @@
|
|||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Nodes:M_Layer, M_Output"
|
"description": "Nodes:M_Layer, M_Output"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "andrewharp",
|
||||||
|
"title": "ComfyUI Function Annotator",
|
||||||
|
"reference": "https://github.com/andrewharp/ComfyUI-Annotations",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/andrewharp/ComfyUI-Annotations"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This module provides an annotation @ComfyFunc to streamline adding custom node types in ComfyUI. It processes your function's signature to create a wrapped function and custom node definition required for ComfyUI, eliminating all the boilerplate code. In most cases you can just add a @ComfyFunc(\"category\") annotation to your existing function."
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -15,7 +15,14 @@ sys.path.append(glob_path)
|
|||||||
import cm_global
|
import cm_global
|
||||||
|
|
||||||
|
|
||||||
message_collapses = []
|
cm_global.pip_downgrade_blacklist = ['torch', 'torchsde', 'torchvision', 'transformers', 'safetensors', 'kornia']
|
||||||
|
|
||||||
|
|
||||||
|
def skip_pip_spam(x):
|
||||||
|
return 'Requirement already satisfied:' in x
|
||||||
|
|
||||||
|
|
||||||
|
message_collapses = [skip_pip_spam]
|
||||||
import_failed_extensions = set()
|
import_failed_extensions = set()
|
||||||
cm_global.variables['cm.on_revision_detected_handler'] = []
|
cm_global.variables['cm.on_revision_detected_handler'] = []
|
||||||
enable_file_logging = True
|
enable_file_logging = True
|
||||||
@ -166,11 +173,9 @@ try:
|
|||||||
write_stderr = wrapper_stderr
|
write_stderr = wrapper_stderr
|
||||||
|
|
||||||
pat_tqdm = r'\d+%.*\[(.*?)\]'
|
pat_tqdm = r'\d+%.*\[(.*?)\]'
|
||||||
pat_import_fail = r'seconds \(IMPORT FAILED\):'
|
pat_import_fail = r'seconds \(IMPORT FAILED\):.*[/\\]custom_nodes[/\\](.*)$'
|
||||||
pat_custom_node = r'[/\\]custom_nodes[/\\](.*)$'
|
|
||||||
|
|
||||||
is_start_mode = True
|
is_start_mode = True
|
||||||
is_import_fail_mode = False
|
|
||||||
|
|
||||||
class ComfyUIManagerLogger:
|
class ComfyUIManagerLogger:
|
||||||
def __init__(self, is_stdout):
|
def __init__(self, is_stdout):
|
||||||
@ -190,26 +195,17 @@ try:
|
|||||||
|
|
||||||
def write(self, message):
|
def write(self, message):
|
||||||
global is_start_mode
|
global is_start_mode
|
||||||
global is_import_fail_mode
|
|
||||||
|
|
||||||
if any(f(message) for f in message_collapses):
|
if any(f(message) for f in message_collapses):
|
||||||
return
|
return
|
||||||
|
|
||||||
if is_start_mode:
|
if is_start_mode:
|
||||||
if is_import_fail_mode:
|
match = re.search(pat_import_fail, message)
|
||||||
match = re.search(pat_custom_node, message)
|
if match:
|
||||||
if match:
|
import_failed_extensions.add(match.group(1))
|
||||||
import_failed_extensions.add(match.group(1))
|
|
||||||
is_import_fail_mode = False
|
|
||||||
else:
|
|
||||||
match = re.search(pat_import_fail, message)
|
|
||||||
if match:
|
|
||||||
is_import_fail_mode = True
|
|
||||||
else:
|
|
||||||
is_import_fail_mode = False
|
|
||||||
|
|
||||||
if 'Starting server' in message:
|
if 'Starting server' in message:
|
||||||
is_start_mode = False
|
is_start_mode = False
|
||||||
|
|
||||||
if not self.is_stdout:
|
if not self.is_stdout:
|
||||||
match = re.search(pat_tqdm, message)
|
match = re.search(pat_tqdm, message)
|
||||||
@ -347,6 +343,11 @@ def is_installed(name):
|
|||||||
if match:
|
if match:
|
||||||
name = match.group(1)
|
name = match.group(1)
|
||||||
|
|
||||||
|
if name in cm_global.pip_downgrade_blacklist:
|
||||||
|
if match is None or match.group(2) in ['<=', '==', '<']:
|
||||||
|
print(f"[ComfyUI-Manager] skip black listed pip installation: '{name}'")
|
||||||
|
return True
|
||||||
|
|
||||||
return name.lower() in get_installed_packages()
|
return name.lower() in get_installed_packages()
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
2
scan.sh
2
scan.sh
@ -1,6 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
rm ~/.tmp/default/*.py > /dev/null 2>&1
|
rm ~/.tmp/default/*.py > /dev/null 2>&1
|
||||||
python scanner.py ~/.tmp/default
|
python scanner.py ~/.tmp/default $@
|
||||||
cp extension-node-map.json node_db/new/.
|
cp extension-node-map.json node_db/new/.
|
||||||
|
|
||||||
echo Integrity check
|
echo Integrity check
|
||||||
|
|||||||
59
scanner.py
59
scanner.py
@ -20,6 +20,8 @@ else:
|
|||||||
if not os.path.exists(temp_dir):
|
if not os.path.exists(temp_dir):
|
||||||
os.makedirs(temp_dir)
|
os.makedirs(temp_dir)
|
||||||
|
|
||||||
|
skip_update = '--skip-update' in sys.argv
|
||||||
|
|
||||||
print(f"TEMP DIR: {temp_dir}")
|
print(f"TEMP DIR: {temp_dir}")
|
||||||
|
|
||||||
|
|
||||||
@ -159,9 +161,9 @@ def get_git_urls_from_json(json_file):
|
|||||||
if node.get('install_type') == 'git-clone':
|
if node.get('install_type') == 'git-clone':
|
||||||
files = node.get('files', [])
|
files = node.get('files', [])
|
||||||
if files:
|
if files:
|
||||||
git_clone_files.append((files[0], node.get('title'), node.get('nodename_pattern')))
|
git_clone_files.append((files[0], node.get('title'), node.get('preemptions'), node.get('nodename_pattern')))
|
||||||
|
|
||||||
git_clone_files.append(("https://github.com/comfyanonymous/ComfyUI", "ComfyUI", None))
|
git_clone_files.append(("https://github.com/comfyanonymous/ComfyUI", "ComfyUI", None, None))
|
||||||
|
|
||||||
return git_clone_files
|
return git_clone_files
|
||||||
|
|
||||||
@ -176,7 +178,7 @@ def get_py_urls_from_json(json_file):
|
|||||||
if node.get('install_type') == 'copy':
|
if node.get('install_type') == 'copy':
|
||||||
files = node.get('files', [])
|
files = node.get('files', [])
|
||||||
if files:
|
if files:
|
||||||
py_files.append((files[0], node.get('title'), node.get('nodename_pattern')))
|
py_files.append((files[0], node.get('title'), node.get('preemptions'), node.get('nodename_pattern')))
|
||||||
|
|
||||||
return py_files
|
return py_files
|
||||||
|
|
||||||
@ -208,27 +210,31 @@ def update_custom_nodes():
|
|||||||
|
|
||||||
node_info = {}
|
node_info = {}
|
||||||
|
|
||||||
git_url_titles = get_git_urls_from_json('custom-node-list.json')
|
git_url_titles_preemptions = get_git_urls_from_json('custom-node-list.json')
|
||||||
|
|
||||||
|
def process_git_url_title(url, title, preemptions, node_pattern):
|
||||||
|
if 'Jovimetrix' in title:
|
||||||
|
pass
|
||||||
|
|
||||||
def process_git_url_title(url, title, node_pattern):
|
|
||||||
name = os.path.basename(url)
|
name = os.path.basename(url)
|
||||||
if name.endswith(".git"):
|
if name.endswith(".git"):
|
||||||
name = name[:-4]
|
name = name[:-4]
|
||||||
|
|
||||||
node_info[name] = (url, title, node_pattern)
|
node_info[name] = (url, title, preemptions, node_pattern)
|
||||||
clone_or_pull_git_repository(url)
|
if not skip_update:
|
||||||
|
clone_or_pull_git_repository(url)
|
||||||
|
|
||||||
with concurrent.futures.ThreadPoolExecutor(10) as executor:
|
with concurrent.futures.ThreadPoolExecutor(10) as executor:
|
||||||
for url, title, node_pattern in git_url_titles:
|
for url, title, preemptions, node_pattern in git_url_titles_preemptions:
|
||||||
executor.submit(process_git_url_title, url, title, node_pattern)
|
executor.submit(process_git_url_title, url, title, preemptions, node_pattern)
|
||||||
|
|
||||||
py_url_titles_and_pattern = get_py_urls_from_json('custom-node-list.json')
|
py_url_titles_and_pattern = get_py_urls_from_json('custom-node-list.json')
|
||||||
|
|
||||||
def download_and_store_info(url_title_and_pattern):
|
def download_and_store_info(url_title_preemptions_and_pattern):
|
||||||
url, title, node_pattern = url_title_and_pattern
|
url, title, preemptions, node_pattern = url_title_preemptions_and_pattern
|
||||||
name = os.path.basename(url)
|
name = os.path.basename(url)
|
||||||
if name.endswith(".py"):
|
if name.endswith(".py"):
|
||||||
node_info[name] = (url, title, node_pattern)
|
node_info[name] = (url, title, preemptions, node_pattern)
|
||||||
|
|
||||||
try:
|
try:
|
||||||
download_url(url, temp_dir)
|
download_url(url, temp_dir)
|
||||||
@ -262,15 +268,24 @@ def gen_json(node_info):
|
|||||||
|
|
||||||
dirname = os.path.basename(dirname)
|
dirname = os.path.basename(dirname)
|
||||||
|
|
||||||
if len(nodes) > 0 or (dirname in node_info and node_info[dirname][2] is not None):
|
if 'Jovimetrix' in dirname:
|
||||||
|
pass
|
||||||
|
|
||||||
|
if len(nodes) > 0 or (dirname in node_info and node_info[dirname][3] is not None):
|
||||||
nodes = list(nodes)
|
nodes = list(nodes)
|
||||||
nodes.sort()
|
nodes.sort()
|
||||||
|
|
||||||
if dirname in node_info:
|
if dirname in node_info:
|
||||||
git_url, title, node_pattern = node_info[dirname]
|
git_url, title, preemptions, node_pattern = node_info[dirname]
|
||||||
|
|
||||||
metadata['title_aux'] = title
|
metadata['title_aux'] = title
|
||||||
|
|
||||||
|
if preemptions is not None:
|
||||||
|
metadata['preemptions'] = preemptions
|
||||||
|
|
||||||
if node_pattern is not None:
|
if node_pattern is not None:
|
||||||
metadata['nodename_pattern'] = node_pattern
|
metadata['nodename_pattern'] = node_pattern
|
||||||
|
|
||||||
data[git_url] = (nodes, metadata)
|
data[git_url] = (nodes, metadata)
|
||||||
else:
|
else:
|
||||||
print(f"WARN: {dirname} is removed from custom-node-list.json")
|
print(f"WARN: {dirname} is removed from custom-node-list.json")
|
||||||
@ -278,17 +293,22 @@ def gen_json(node_info):
|
|||||||
for file in node_files:
|
for file in node_files:
|
||||||
nodes, metadata = scan_in_file(file)
|
nodes, metadata = scan_in_file(file)
|
||||||
|
|
||||||
if len(nodes) > 0 or (dirname in node_info and node_info[dirname][2] is not None):
|
if len(nodes) > 0 or (dirname in node_info and node_info[dirname][3] is not None):
|
||||||
nodes = list(nodes)
|
nodes = list(nodes)
|
||||||
nodes.sort()
|
nodes.sort()
|
||||||
|
|
||||||
file = os.path.basename(file)
|
file = os.path.basename(file)
|
||||||
|
|
||||||
if file in node_info:
|
if file in node_info:
|
||||||
url, title, node_pattern = node_info[file]
|
url, title, preemptions, node_pattern = node_info[file]
|
||||||
metadata['title_aux'] = title
|
metadata['title_aux'] = title
|
||||||
|
|
||||||
|
if preemptions is not None:
|
||||||
|
metadata['preemptions'] = preemptions
|
||||||
|
|
||||||
if node_pattern is not None:
|
if node_pattern is not None:
|
||||||
metadata['nodename_pattern'] = node_pattern
|
metadata['nodename_pattern'] = node_pattern
|
||||||
|
|
||||||
data[url] = (nodes, metadata)
|
data[url] = (nodes, metadata)
|
||||||
else:
|
else:
|
||||||
print(f"Missing info: {file}")
|
print(f"Missing info: {file}")
|
||||||
@ -299,7 +319,7 @@ def gen_json(node_info):
|
|||||||
for extension in extensions:
|
for extension in extensions:
|
||||||
node_list_json_path = os.path.join(temp_dir, extension, 'node_list.json')
|
node_list_json_path = os.path.join(temp_dir, extension, 'node_list.json')
|
||||||
if os.path.exists(node_list_json_path):
|
if os.path.exists(node_list_json_path):
|
||||||
git_url, title, node_pattern = node_info[extension]
|
git_url, title, preemptions, node_pattern = node_info[extension]
|
||||||
|
|
||||||
with open(node_list_json_path, 'r', encoding='utf-8') as f:
|
with open(node_list_json_path, 'r', encoding='utf-8') as f:
|
||||||
node_list_json = json.load(f)
|
node_list_json = json.load(f)
|
||||||
@ -315,8 +335,13 @@ def gen_json(node_info):
|
|||||||
nodes.add(x.strip())
|
nodes.add(x.strip())
|
||||||
|
|
||||||
metadata_in_url['title_aux'] = title
|
metadata_in_url['title_aux'] = title
|
||||||
|
|
||||||
|
if preemptions is not None:
|
||||||
|
metadata['preemptions'] = preemptions
|
||||||
|
|
||||||
if node_pattern is not None:
|
if node_pattern is not None:
|
||||||
metadata_in_url['nodename_pattern'] = node_pattern
|
metadata_in_url['nodename_pattern'] = node_pattern
|
||||||
|
|
||||||
nodes = list(nodes)
|
nodes = list(nodes)
|
||||||
nodes.sort()
|
nodes.sort()
|
||||||
data[git_url] = (nodes, metadata_in_url)
|
data[git_url] = (nodes, metadata_in_url)
|
||||||
|
|||||||
@ -4,9 +4,9 @@ git clone https://github.com/ltdrdata/ComfyUI-Manager
|
|||||||
cd ..
|
cd ..
|
||||||
python -m venv venv
|
python -m venv venv
|
||||||
source venv/bin/activate
|
source venv/bin/activate
|
||||||
|
pythoh -m pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121
|
||||||
python -m pip install -r requirements.txt
|
python -m pip install -r requirements.txt
|
||||||
python -m pip install -r custom_nodes/ComfyUI-Manager/requirements.txt
|
python -m pip install -r custom_nodes/ComfyUI-Manager/requirements.txt
|
||||||
python -m pip install torchvision
|
|
||||||
cd ..
|
cd ..
|
||||||
echo "#!/bin/bash" > run_gpu.sh
|
echo "#!/bin/bash" > run_gpu.sh
|
||||||
echo "cd ComfyUI" >> run_gpu.sh
|
echo "cd ComfyUI" >> run_gpu.sh
|
||||||
|
|||||||
@ -4,17 +4,14 @@ git clone https://github.com/ltdrdata/ComfyUI-Manager
|
|||||||
cd ..
|
cd ..
|
||||||
python -m venv venv
|
python -m venv venv
|
||||||
call venv/Scripts/activate
|
call venv/Scripts/activate
|
||||||
|
pythoh -m pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121
|
||||||
python -m pip install -r requirements.txt
|
python -m pip install -r requirements.txt
|
||||||
python -m pip install -r custom_nodes/ComfyUI-Manager/requirements.txt
|
python -m pip install -r custom_nodes/ComfyUI-Manager/requirements.txt
|
||||||
python -m pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 xformers
|
|
||||||
cd ..
|
cd ..
|
||||||
echo "cd ComfyUI" >> run_gpu.sh
|
echo "cd ComfyUI" >> run_gpu.bat
|
||||||
echo "call venv/Scripts/activate" >> run_gpu.sh
|
echo "call venv/Scripts/activate" >> run_gpu.bat
|
||||||
echo "python main.py" >> run_gpu.sh
|
echo "python main.py" >> run_gpu.bat
|
||||||
chmod +x run_gpu.sh
|
|
||||||
|
|
||||||
echo "#!/bin/bash" > run_cpu.sh
|
echo "cd ComfyUI" >> run_cpu.bat
|
||||||
echo "cd ComfyUI" >> run_cpu.sh
|
echo "call venv/Scripts/activate" >> run_cpu.bat
|
||||||
echo "call venv/Scripts/activate" >> run_cpu.sh
|
echo "python main.py --cpu" >> run_cpu.bat
|
||||||
echo "python main.py --cpu" >> run_cpu.sh
|
|
||||||
chmod +x run_cpu.sh
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user