mirror of
https://git.datalinker.icu/ltdrdata/ComfyUI-Manager
synced 2025-12-09 22:24:23 +08:00
Merge remote-tracking branch 'upstream/main' into image-chooser
This commit is contained in:
commit
b5451c9200
12
README.md
12
README.md
@ -45,6 +45,7 @@ This repository provides Colab notebooks that allow you to install and use Comfy
|
||||
* Support for automatically installing dependencies of custom nodes upon restarting Colab notebooks.
|
||||
|
||||
## Changes
|
||||
* **0.29** Add `Update all` feature
|
||||
* **0.25** support db channel
|
||||
* You can directly modify the db channel settings in the `config.ini` file.
|
||||
* If you want to maintain a new DB channel, please modify the `channels.list` and submit a PR.
|
||||
@ -95,6 +96,11 @@ This repository provides Colab notebooks that allow you to install and use Comfy
|
||||
|
||||

|
||||
|
||||
## How to register your custom node into ComfyUI-Manager
|
||||
|
||||
* Add an entry to `custom-node-list.json` located in the root of ComfyUI-Manager and submit a Pull Request.
|
||||
* NOTE: Before submitting the PR after making changes, please check `Use local DB` and ensure that the extension list loads without any issues in the `Install custom nodes` dialog. Occasionally, missing or extra commas can lead to JSON syntax errors.
|
||||
* The remaining JSON will be updated through scripts in the future, so you don't need to worry about it.
|
||||
|
||||
## Custom node support guide
|
||||
|
||||
@ -131,6 +137,7 @@ NODE_CLASS_MAPPINGS.update({
|
||||
"""
|
||||
```
|
||||
|
||||
|
||||
* **Special purpose files** (optional)
|
||||
* `node_list.js` - When your custom nodes pattern of NODE_CLASS_MAPPINGS is not conventional, it is used to manually provide a list of nodes for reference. ([example](https://github.com/melMass/comfy_mtb/raw/main/node_list.json))
|
||||
* `requirements.txt` - When installing, this pip requirements will be installed automatically
|
||||
@ -155,17 +162,16 @@ NODE_CLASS_MAPPINGS.update({
|
||||
|
||||
|
||||
## Troubleshooting
|
||||
* If your `git.exe` is installed in a specific location other than system git, please install ComfyUI-Manager and run ComfyUI. Then, specify the path including the file name in `git_exe = ` in the ComfyUI-Manager/config.ini file that is generated.
|
||||
* If updating ComfyUI-Manager itself fails, please go to the **ComfyUI-Manager** directory and execute the command `git update-ref refs/remotes/origin/main a361cc1 && git fetch --all && git pull`.
|
||||
* Alternatively, download the update-fix.py script from [update-fix.py](https://github.com/ltdrdata/ComfyUI-Manager/raw/main/scripts/update-fix.py) and place it in the ComfyUI-Manager directory. Then, run it using your Python command.
|
||||
For the portable version, use `..\..\..\python_embeded\python.exe update-fix.py`.
|
||||
* If Controlnet is set to skip_v1 true, nodes like `CannyEdgePreprocessor` will appear as extensions of missing nodes, but simply installing them is not enough, and direct modification of the user's config.yaml is required.
|
||||
* For cases where nodes like `PreviewTextNode` from `ComfyUI_Custom_Nodes_AlekPet` are only supported as front-end nodes, we currently do not provide missing nodes for them.
|
||||
* Currently, `vid2vid` is not being updated, causing compatibility issues.
|
||||
|
||||
|
||||
## TODO: Unconventional form of custom node list
|
||||
|
||||
* https://github.com/bmad4ever/ComfyUI-Bmad-Custom-Nodes
|
||||
* https://github.com/diontimmer/Sample-Diffusion-ComfyUI-Extension
|
||||
* https://github.com/senshilabs/NINJA-plugin
|
||||
|
||||
@ -175,8 +181,8 @@ NODE_CLASS_MAPPINGS.update({
|
||||
- [x] category/keyword filter
|
||||
- [x] Automatic recognition of missing custom nodes
|
||||
- [x] Automatic installation suggestion of missing custom nodes
|
||||
- [x] 3rd party repository
|
||||
- [ ] installation from git url
|
||||
- [ ] 3rd party repository
|
||||
- [ ] Specification of custom nodes
|
||||
- [ ] Specification scanner
|
||||
- [ ] Search extension by node name
|
||||
|
||||
153
__init__.py
153
__init__.py
@ -1,9 +1,10 @@
|
||||
import configparser
|
||||
import shutil
|
||||
import folder_paths
|
||||
import os, sys
|
||||
import subprocess
|
||||
import os
|
||||
import sys
|
||||
import threading
|
||||
import subprocess
|
||||
|
||||
|
||||
def handle_stream(stream, prefix):
|
||||
@ -55,7 +56,7 @@ sys.path.append('../..')
|
||||
from torchvision.datasets.utils import download_url
|
||||
|
||||
# ensure .js
|
||||
print("### Loading: ComfyUI-Manager (V0.26.2)")
|
||||
print("### Loading: ComfyUI-Manager (V0.30.4)")
|
||||
|
||||
comfy_ui_required_revision = 1240
|
||||
comfy_ui_revision = "Unknown"
|
||||
@ -91,6 +92,7 @@ def write_config():
|
||||
config['default'] = {
|
||||
'preview_method': get_current_preview_method(),
|
||||
'badge_mode': get_config()['badge_mode'],
|
||||
'git_exe': get_config()['git_exe'],
|
||||
'channel_url': get_config()['channel_url'],
|
||||
'channel_url_list': get_config()['channel_url_list']
|
||||
}
|
||||
@ -120,6 +122,7 @@ def read_config():
|
||||
return {
|
||||
'preview_method': default_conf['preview_method'] if 'preview_method' in default_conf else get_current_preview_method(),
|
||||
'badge_mode': default_conf['badge_mode'] if 'badge_mode' in default_conf else 'none',
|
||||
'git_exe': default_conf['git_exe'] if 'git_exe' in default_conf else '',
|
||||
'channel_url': default_conf['channel_url'] if 'channel_url' in default_conf else 'https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main',
|
||||
'channel_url_list': ch_url_list
|
||||
}
|
||||
@ -128,6 +131,7 @@ def read_config():
|
||||
return {
|
||||
'preview_method': get_current_preview_method(),
|
||||
'badge_mode': 'none',
|
||||
'git_exe': '',
|
||||
'channel_url': 'https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main',
|
||||
'channel_url_list': ''
|
||||
}
|
||||
@ -236,9 +240,11 @@ print_comfyui_version()
|
||||
|
||||
|
||||
# use subprocess to avoid file system lock by git (Windows)
|
||||
def __win_check_git_update(path, do_fetch=False):
|
||||
def __win_check_git_update(path, do_fetch=False, do_update=False):
|
||||
if do_fetch:
|
||||
command = [sys.executable, git_script_path, "--fetch", path]
|
||||
elif do_update:
|
||||
command = [sys.executable, git_script_path, "--pull", path]
|
||||
else:
|
||||
command = [sys.executable, git_script_path, "--check", path]
|
||||
|
||||
@ -246,12 +252,29 @@ def __win_check_git_update(path, do_fetch=False):
|
||||
output, _ = process.communicate()
|
||||
output = output.decode('utf-8').strip()
|
||||
|
||||
if "CUSTOM NODE CHECK: True" in output:
|
||||
process.wait()
|
||||
return True
|
||||
if do_update:
|
||||
if "CUSTOM NODE PULL: True" in output:
|
||||
process.wait()
|
||||
print(f"\rUpdated: {path}")
|
||||
return True
|
||||
elif "CUSTOM NODE PULL: None" in output:
|
||||
process.wait()
|
||||
return True
|
||||
else:
|
||||
print(f"\rUpdate error: {path}")
|
||||
process.wait()
|
||||
return False
|
||||
else:
|
||||
process.wait()
|
||||
return False
|
||||
if "CUSTOM NODE CHECK: True" in output:
|
||||
process.wait()
|
||||
return True
|
||||
elif "CUSTOM NODE CHECK: False" in output:
|
||||
process.wait()
|
||||
return False
|
||||
else:
|
||||
print(f"\rFetch error: {path}")
|
||||
process.wait()
|
||||
return False
|
||||
|
||||
|
||||
def __win_check_git_pull(path):
|
||||
@ -260,13 +283,18 @@ def __win_check_git_pull(path):
|
||||
process.wait()
|
||||
|
||||
|
||||
def git_repo_has_updates(path, do_fetch=False):
|
||||
def git_repo_has_updates(path, do_fetch=False, do_update=False):
|
||||
if do_fetch:
|
||||
print(f"\x1b[2K\rFetching: {path}", end='')
|
||||
elif do_update:
|
||||
print(f"\x1b[2K\rUpdating: {path}", end='')
|
||||
|
||||
# Check if the path is a git repository
|
||||
if not os.path.exists(os.path.join(path, '.git')):
|
||||
raise ValueError('Not a git repository')
|
||||
|
||||
if platform.system() == "Windows":
|
||||
return __win_check_git_update(path, do_fetch)
|
||||
return __win_check_git_update(path, do_fetch, do_update)
|
||||
else:
|
||||
# Fetch the latest commits from the remote repository
|
||||
repo = git.Repo(path)
|
||||
@ -277,11 +305,28 @@ def git_repo_has_updates(path, do_fetch=False):
|
||||
remote_name = 'origin'
|
||||
remote = repo.remote(name=remote_name)
|
||||
|
||||
if do_fetch:
|
||||
# Get the current commit hash
|
||||
commit_hash = repo.head.commit.hexsha
|
||||
|
||||
if do_fetch or do_update:
|
||||
remote.fetch()
|
||||
|
||||
# Get the current commit hash and the commit hash of the remote branch
|
||||
commit_hash = repo.head.commit.hexsha
|
||||
if do_update:
|
||||
try:
|
||||
remote.pull(rebase=True)
|
||||
repo.git.submodule('update', '--init', '--recursive')
|
||||
new_commit_hash = repo.head.commit.hexsha
|
||||
|
||||
if commit_hash != new_commit_hash:
|
||||
print(f"\x1b[2K\rUpdated: {path}")
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"\nUpdating failed: {path}\n{e}", file=sys.stderr)
|
||||
|
||||
# Get commit hash of the remote branch
|
||||
remote_commit_hash = repo.refs[f'{remote_name}/{branch_name}'].object.hexsha
|
||||
|
||||
# Compare the commit hashes to determine if the local repository is behind the remote repository
|
||||
@ -350,9 +395,20 @@ def setup_js():
|
||||
print(f"### ComfyUI-Manager: Copy .js from '{js_src_path}' to '{js_dest_path}'")
|
||||
shutil.copy(js_src_path, js_dest_path)
|
||||
|
||||
|
||||
setup_js()
|
||||
|
||||
|
||||
def setup_environment():
|
||||
git_exe = get_config()['git_exe']
|
||||
|
||||
if git_exe != '':
|
||||
git.Git().update_environment(GIT_PYTHON_GIT_EXECUTABLE=git_exe)
|
||||
|
||||
|
||||
setup_environment()
|
||||
|
||||
|
||||
# Expand Server api
|
||||
|
||||
import server
|
||||
@ -408,7 +464,7 @@ def get_model_path(data):
|
||||
return os.path.join(base_model, data['filename'])
|
||||
|
||||
|
||||
def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True):
|
||||
def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True, do_update=False):
|
||||
item['installed'] = 'None'
|
||||
|
||||
if item['install_type'] == 'git-clone' and len(item['files']) == 1:
|
||||
@ -416,7 +472,7 @@ def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True):
|
||||
dir_path = os.path.join(custom_nodes_path, dir_name)
|
||||
if os.path.exists(dir_path):
|
||||
try:
|
||||
if do_update_check and git_repo_has_updates(dir_path, do_fetch):
|
||||
if do_update_check and git_repo_has_updates(dir_path, do_fetch, do_update):
|
||||
item['installed'] = 'Update'
|
||||
else:
|
||||
item['installed'] = 'True'
|
||||
@ -448,9 +504,27 @@ def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True):
|
||||
item['installed'] = 'False'
|
||||
|
||||
|
||||
def check_custom_nodes_installed(json_obj, do_fetch=False, do_update_check=True):
|
||||
def check_custom_nodes_installed(json_obj, do_fetch=False, do_update_check=True, do_update=False):
|
||||
if do_fetch:
|
||||
print("Start fetching...", end="")
|
||||
elif do_update:
|
||||
print("Start updating...", end="")
|
||||
elif do_update_check:
|
||||
print("Start update check...", end="")
|
||||
|
||||
for item in json_obj['custom_nodes']:
|
||||
check_a_custom_node_installed(item, do_fetch, do_update_check)
|
||||
check_a_custom_node_installed(item, do_fetch, do_update_check, do_update)
|
||||
|
||||
if do_fetch:
|
||||
print(f"\x1b[2K\rFetching done.")
|
||||
elif do_update:
|
||||
update_exists = any(item['installed'] == 'Update' for item in json_obj['custom_nodes'])
|
||||
if update_exists:
|
||||
print(f"\x1b[2K\rUpdate done.")
|
||||
else:
|
||||
print(f"\x1b[2K\rAll extensions are already up-to-date.")
|
||||
elif do_update_check:
|
||||
print(f"\x1b[2K\rUpdate check done.")
|
||||
|
||||
|
||||
@server.PromptServer.instance.routes.get("/customnode/getmappings")
|
||||
@ -487,6 +561,27 @@ async def fetch_updates(request):
|
||||
return web.Response(status=400)
|
||||
|
||||
|
||||
@server.PromptServer.instance.routes.get("/customnode/update_all")
|
||||
async def update_all(request):
|
||||
try:
|
||||
if request.rel_url.query["mode"] == "local":
|
||||
uri = local_db_custom_node_list
|
||||
else:
|
||||
uri = get_config()['channel_url'] + '/custom-node-list.json'
|
||||
|
||||
json_obj = await get_data(uri)
|
||||
check_custom_nodes_installed(json_obj, do_update=True)
|
||||
|
||||
update_exists = any(item['installed'] == 'Update' for item in json_obj['custom_nodes'])
|
||||
|
||||
if update_exists:
|
||||
return web.Response(status=201)
|
||||
|
||||
return web.Response(status=200)
|
||||
except:
|
||||
return web.Response(status=400)
|
||||
|
||||
|
||||
@server.PromptServer.instance.routes.get("/customnode/getlist")
|
||||
async def fetch_customnode_list(request):
|
||||
if "skip_update" in request.rel_url.query and request.rel_url.query["skip_update"] == "true":
|
||||
@ -582,7 +677,7 @@ def unzip_install(files):
|
||||
|
||||
os.remove(temp_filename)
|
||||
except Exception as e:
|
||||
print(f"Install(unzip) error: {url} / {e}")
|
||||
print(f"Install(unzip) error: {url} / {e}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
print("Installation was successful.")
|
||||
@ -605,7 +700,7 @@ def download_url_with_agent(url, save_path):
|
||||
f.write(data)
|
||||
|
||||
except Exception as e:
|
||||
print(f"Download error: {url} / {e}")
|
||||
print(f"Download error: {url} / {e}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
print("Installation was successful.")
|
||||
@ -624,7 +719,7 @@ def copy_install(files, js_path_name=None):
|
||||
download_url(url, path)
|
||||
|
||||
except Exception as e:
|
||||
print(f"Install(copy) error: {url} / {e}")
|
||||
print(f"Install(copy) error: {url} / {e}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
print("Installation was successful.")
|
||||
@ -643,7 +738,7 @@ def copy_uninstall(files, js_path_name='.'):
|
||||
elif os.path.exists(file_path + ".disabled"):
|
||||
os.remove(file_path + ".disabled")
|
||||
except Exception as e:
|
||||
print(f"Uninstall(copy) error: {url} / {e}")
|
||||
print(f"Uninstall(copy) error: {url} / {e}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
print("Uninstallation was successful.")
|
||||
@ -672,7 +767,7 @@ def copy_set_active(files, is_disable, js_path_name='.'):
|
||||
os.rename(current_name, new_name)
|
||||
|
||||
except Exception as e:
|
||||
print(f"{action_name}(copy) error: {url} / {e}")
|
||||
print(f"{action_name}(copy) error: {url} / {e}", file=sys.stderr)
|
||||
|
||||
return False
|
||||
|
||||
@ -722,7 +817,7 @@ def gitclone_install(files):
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"Install(git-clone) error: {url} / {e}")
|
||||
print(f"Install(git-clone) error: {url} / {e}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
print("Installation was successful.")
|
||||
@ -791,7 +886,7 @@ def gitclone_uninstall(files):
|
||||
elif os.path.exists(dir_path + ".disabled"):
|
||||
rmtree(dir_path + ".disabled")
|
||||
except Exception as e:
|
||||
print(f"Uninstall(git-clone) error: {url} / {e}")
|
||||
print(f"Uninstall(git-clone) error: {url} / {e}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
print("Uninstallation was successful.")
|
||||
@ -836,7 +931,7 @@ def gitclone_set_active(files, is_disable):
|
||||
try_install_script(url, new_path, enable_script)
|
||||
|
||||
except Exception as e:
|
||||
print(f"{action_name}(git-clone) error: {url} / {e}")
|
||||
print(f"{action_name}(git-clone) error: {url} / {e}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
print(f"{action_name} was successful.")
|
||||
@ -857,7 +952,7 @@ def gitclone_update(files):
|
||||
return False
|
||||
|
||||
except Exception as e:
|
||||
print(f"Update(git-clone) error: {url} / {e}")
|
||||
print(f"Update(git-clone) error: {url} / {e}", file=sys.stderr)
|
||||
return False
|
||||
|
||||
print("Update was successful.")
|
||||
@ -974,7 +1069,7 @@ async def install_custom_node(request):
|
||||
else:
|
||||
return web.Response(status=200)
|
||||
except Exception as e:
|
||||
print(f"ComfyUI update fail: {e}")
|
||||
print(f"ComfyUI update fail: {e}", file=sys.stderr)
|
||||
pass
|
||||
|
||||
return web.Response(status=400)
|
||||
@ -1026,7 +1121,7 @@ async def install_model(request):
|
||||
if res:
|
||||
return web.json_response({}, content_type='application/json')
|
||||
except Exception as e:
|
||||
print(f"[ERROR] {e}")
|
||||
print(f"[ERROR] {e}", file=sys.stderr)
|
||||
pass
|
||||
|
||||
return web.Response(status=400)
|
||||
|
||||
@ -159,6 +159,16 @@
|
||||
"id":"https://github.com/spinagon/ComfyUI-seamless-tiling",
|
||||
"tags":"tiling",
|
||||
"description": "ComfyUI node for generating seamless textures Replicates 'Tiling' option from A1111"
|
||||
},
|
||||
{
|
||||
"id":"https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI",
|
||||
"tags":"cd-tuner, negpip",
|
||||
"description": "This extension is a port of the <a href='https://github.com/hako-mikan/sd-webui-cd-tuner' target='blank'>sd-webui-cd-tuner</a>(a.k.a. CD(color/Detail) Tuner )and <a href='https://github.com/hako-mikan/sd-webui-negpip' target='blank'>sd-webui-negpip</a>(a.k.a. NegPiP) extensions of A1111 to ComfyUI."
|
||||
},
|
||||
{
|
||||
"id":"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding",
|
||||
"tags":"DT, dynamic thresholding",
|
||||
"description": "This custom node is a port of the Dynamic Thresholding extension from A1111 to make it available for use in ComfyUI."
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,4 +1,5 @@
|
||||
default::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main
|
||||
recent::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/node_db/new
|
||||
legacy::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/node_db/legacy
|
||||
forked::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/node_db/forked
|
||||
forked::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/node_db/forked
|
||||
dev::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/node_db/dev
|
||||
@ -225,6 +225,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Power Noise Suite contains nodes centered around latent noise input, and diffusion, as well as latent adjustments."
|
||||
},
|
||||
{
|
||||
"author": "WASasquatch",
|
||||
"title": "FreeU_Advanced",
|
||||
"reference": "https://github.com/WASasquatch/FreeU_Advanced",
|
||||
"files": [
|
||||
"https://github.com/WASasquatch/FreeU_Advanced"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This custom node provides advanced settings for FreeU."
|
||||
},
|
||||
{
|
||||
"author": "omar92",
|
||||
"title": "Quality of life Suit:V2",
|
||||
@ -1384,6 +1394,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Attention couple. This is a custom node that manipulates region-specific prompts. While vanilla ComfyUI employs an area specification method based on latent couples, this node divides regions using attention layers within UNet."
|
||||
},
|
||||
{
|
||||
"author": "laksjdjf",
|
||||
"title": "cd-tuner_negpip-ComfyUI",
|
||||
"reference": "https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Apply CDTuner, Apply Negapip. This extension provides the <a href='https://github.com/hako-mikan/sd-webui-cd-tuner' target='blank'>CD(Color/Detail) Tuner</a> and the <a href='https://github.com/hako-mikan/sd-webui-negpip' target='blank'>Negative Prompt in the Prompt</a>features."
|
||||
},
|
||||
{
|
||||
"author": "alsritter",
|
||||
"title": "asymmetric-tiling-comfyui",
|
||||
@ -1404,6 +1424,16 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Pause image generation when GPU temperature exceeds threshold."
|
||||
},
|
||||
{
|
||||
"author": "meap158",
|
||||
"title": "ComfyUI-Prompt-Expansion",
|
||||
"reference": "https://github.com/meap158/ComfyUI-Prompt-Expansion",
|
||||
"files": [
|
||||
"https://github.com/meap158/ComfyUI-Prompt-Expansion"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Dynamic prompt expansion, powered by GPT-2 locally on your device."
|
||||
},
|
||||
{
|
||||
"author": "TeaCrab",
|
||||
"title": "ComfyUI-TeaNodes",
|
||||
@ -1594,16 +1624,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: Latent Mirror. Node to mirror a latent along the Y (vertical / left to right) or X (horizontal / top to bottom) axis."
|
||||
},
|
||||
{
|
||||
"author": "Vrahn",
|
||||
"title": "ComfyUI-MasaCtrl-Node",
|
||||
"reference": "https://github.com/Vrahn/ComfyUI-MasaCtrl-Node",
|
||||
"files": [
|
||||
"https://github.com/Vrahn/ComfyUI-MasaCtrl-Node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: MasaCtrl."
|
||||
},
|
||||
{
|
||||
"author": "Tropfchen",
|
||||
"title": "Embedding Picker",
|
||||
@ -1612,7 +1632,7 @@
|
||||
"https://github.com/Tropfchen/ComfyUI-Embedding_Picker"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: Embedding Picker. Tired of forgetting and misspelling often weird names of embeddings you use? Or perhaps you use only one, cause you forgot you have tens of them installed? Try this."
|
||||
"description": "Tired of forgetting and misspelling often weird names of embeddings you use? Or perhaps you use only one, cause you forgot you have tens of them installed?"
|
||||
},
|
||||
{
|
||||
"author": "Acly",
|
||||
@ -1712,16 +1732,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Manage models: browsing, donwload and delete."
|
||||
},
|
||||
{
|
||||
"author": "Tropfchen",
|
||||
"title": "Embedding Picker",
|
||||
"reference": "https://github.com/Tropfchen/ComfyUI-Embedding_Picker",
|
||||
"files": [
|
||||
"https://github.com/Tropfchen/ComfyUI-Embedding_Picker"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Tired of forgetting and misspelling often weird names of embeddings you use? Or perhaps you use only one, cause you forgot you have tens of them installed?"
|
||||
},
|
||||
{
|
||||
"author": "ali1234",
|
||||
"title": "comfyui-job-iterator",
|
||||
@ -1772,6 +1782,106 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Node for generating almost seamless textures, based on similar setting from A1111."
|
||||
},
|
||||
{
|
||||
"author": "chrisgoringe",
|
||||
"title": "Variation seeds",
|
||||
"reference": "https://github.com/chrisgoringe/cg-noise",
|
||||
"files": [
|
||||
"https://github.com/chrisgoringe/cg-noise"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Adds KSampler custom nodes with variation seed and variation strength."
|
||||
},
|
||||
{
|
||||
"author": "Endless Sea of Stars",
|
||||
"title": "Endless Nodes",
|
||||
"reference": "https://github.com/tusharbhutt/Endless-Nodes",
|
||||
"files": [
|
||||
"https://github.com/tusharbhutt/Endless-Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A small set of nodes I created for various numerical and text inputs."
|
||||
},
|
||||
{
|
||||
"author": "spacepxl",
|
||||
"title": "ComfyUI-HQ-Image-Save",
|
||||
"reference": "https://github.com/spacepxl/ComfyUI-HQ-Image-Save",
|
||||
"files": [
|
||||
"https://github.com/spacepxl/ComfyUI-HQ-Image-Save"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Add Image Save nodes for TIFF 16 bit and EXR 32 bit formats. Probably only useful if you're applying a LUT or other color corrections, and care about preserving as much color accuracy as possible."
|
||||
},
|
||||
{
|
||||
"author": "PTA",
|
||||
"title": "auto nodes layout",
|
||||
"reference": "https://github.com/phineas-pta/comfyui-auto-nodes-layout",
|
||||
"files": [
|
||||
"https://github.com/phineas-pta/comfyui-auto-nodes-layout"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI extension to apply better nodes layout algorithm to ComfyUI workflow (mostly for visualization purpose)"
|
||||
},
|
||||
{
|
||||
"author": "receyuki",
|
||||
"title": "comfyui-prompt-reader-node",
|
||||
"reference": "https://github.com/receyuki/comfyui-prompt-reader-node",
|
||||
"files": [
|
||||
"https://github.com/receyuki/comfyui-prompt-reader-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: SDPromptReader"
|
||||
},
|
||||
{
|
||||
"author": "rklaffehn",
|
||||
"title": "rk-comfy-nodes",
|
||||
"reference": "https://github.com/rklaffehn/rk-comfy-nodes",
|
||||
"files": [
|
||||
"https://github.com/rklaffehn/rk-comfy-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: RK_CivitAIMetaChecker, RK_CivitAIAddHashes."
|
||||
},
|
||||
{
|
||||
"author": "cubiq",
|
||||
"title": "ComfyUI Essentials",
|
||||
"reference": "https://github.com/cubiq/ComfyUI_essentials",
|
||||
"files": [
|
||||
"https://github.com/cubiq/ComfyUI_essentials"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Essential nodes that are weirdly missing from ComfyUI core. With few exceptions they are new features and not commodities. I hope this will be just a temporary repository until the nodes get included into ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "Clybius",
|
||||
"title": "ComfyUI-Latent-Modifiers",
|
||||
"reference": "https://github.com/Clybius/ComfyUI-Latent-Modifiers",
|
||||
"files": [
|
||||
"https://github.com/Clybius/ComfyUI-Latent-Modifiers"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: Latent Diffusion Mega Modifier. ComfyUI nodes which modify the latent during the diffusion process. (Sharpness, Tonemap, Rescale, Extra Noise)"
|
||||
},
|
||||
{
|
||||
"author": "mcmonkeyprojects",
|
||||
"title": "Stable Diffusion Dynamic Thresholding (CFG Scale Fix)",
|
||||
"reference": "https://github.com/mcmonkeyprojects/sd-dynamic-thresholding",
|
||||
"files": [
|
||||
"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Extension for StableSwarmUI, ComfyUI, and AUTOMATIC1111 Stable Diffusion WebUI that enables a way to use higher CFG Scales without color issues. This works by clamping latents between steps."
|
||||
},
|
||||
{
|
||||
"author": "Tropfchen",
|
||||
"title": "YARS: Yet Another Resolution Selector",
|
||||
"reference": "https://github.com/Tropfchen/ComfyUI-yaResolutionSelector",
|
||||
"files": [
|
||||
"https://github.com/Tropfchen/ComfyUI-yaResolutionSelector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A slightly different Resolution Selector node, allowing to freely change base resolution and aspect ratio, with options to maintain the pixel count or use the base resolution as the highest or lowest dimension."
|
||||
},
|
||||
{
|
||||
"author": "taabata",
|
||||
"title": "Syrian Falcon Nodes",
|
||||
@ -1980,16 +2090,6 @@
|
||||
"install_type": "copy",
|
||||
"description": "Nodes:LatentGarbageCollector. This ComfyUI custom node flushes the GPU cache and empty cuda interprocess memory. It's helpfull for low memory environment such as the free Google Colab, especially when the workflow VAE decode latents of the size above 1500x1500."
|
||||
},
|
||||
{
|
||||
"author": "Clybius",
|
||||
"title": "ComfyUI-Latent-Modifiers",
|
||||
"reference": "https://github.com/Clybius/ComfyUI-Latent-Modifiers",
|
||||
"files": [
|
||||
"https://github.com/Clybius/ComfyUI-Latent-Modifiers/raw/main/sampler_mega_modifier.py"
|
||||
],
|
||||
"install_type": "copy",
|
||||
"description": "Nodes: Latent Diffusion Mega Modifier. ComfyUI nodes which modify the latent during the diffusion process. (Sharpness, Tonemap, Rescale, Extra Noise)"
|
||||
},
|
||||
{
|
||||
"author": "theally",
|
||||
"title": "TheAlly's Custom Nodes",
|
||||
|
||||
@ -42,9 +42,11 @@
|
||||
"https://github.com/ArtVentureX/comfyui-animatediff": [
|
||||
[
|
||||
"AnimateDiffCombine",
|
||||
"AnimateDiffLoader",
|
||||
"AnimateDiffLoader_v2",
|
||||
"AnimateDiffUnload"
|
||||
"AnimateDiffModuleLoader",
|
||||
"AnimateDiffSampler",
|
||||
"AnimateDiffSlidingWindowOptions",
|
||||
"ImageSizeAndBatchSize",
|
||||
"LoadVideo"
|
||||
],
|
||||
{
|
||||
"title_aux": "AnimateDiff"
|
||||
@ -167,7 +169,7 @@
|
||||
"title_aux": "ComfyUI_Ib_CustomNodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/Clybius/ComfyUI-Latent-Modifiers/raw/main/sampler_mega_modifier.py": [
|
||||
"https://github.com/Clybius/ComfyUI-Latent-Modifiers": [
|
||||
[
|
||||
"Latent Diffusion Mega Modifier"
|
||||
],
|
||||
@ -354,6 +356,9 @@
|
||||
"DWPreprocessor",
|
||||
"FakeScribblePreprocessor",
|
||||
"HEDPreprocessor",
|
||||
"HintImageEnchance",
|
||||
"ImageGenResolutionFromImage",
|
||||
"ImageGenResolutionFromLatent",
|
||||
"InpaintPreprocessor",
|
||||
"LeReS-DepthMapPreprocessor",
|
||||
"LineArtPreprocessor",
|
||||
@ -366,6 +371,8 @@
|
||||
"OneFormer-COCO-SemSegPreprocessor",
|
||||
"OpenposePreprocessor",
|
||||
"PiDiNetPreprocessor",
|
||||
"PixelPerfectResolution",
|
||||
"RaftOpticalFlowPreprocessor",
|
||||
"SAMPreprocessor",
|
||||
"ScribblePreprocessor",
|
||||
"Scribble_XDoG_Preprocessor",
|
||||
@ -515,12 +522,13 @@
|
||||
],
|
||||
"https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet": [
|
||||
[
|
||||
"ControlNetApplyPartialBatch",
|
||||
"ControlNetLoaderAdvanced",
|
||||
"CustomControlNetWeights",
|
||||
"CustomT2IAdapterWeights",
|
||||
"DiffControlNetLoaderAdvanced",
|
||||
"LatentKeyframe",
|
||||
"LatentKeyframeGroup",
|
||||
"LatentKeyframeTiming",
|
||||
"LoadImagesFromDirectory",
|
||||
"ScaledSoftControlNetWeights",
|
||||
"SoftControlNetWeights",
|
||||
@ -534,8 +542,11 @@
|
||||
"https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved": [
|
||||
[
|
||||
"ADE_AnimateDiffCombine",
|
||||
"ADE_AnimateDiffLoaderLegacy",
|
||||
"ADE_AnimateDiffLoaderV1Advanced",
|
||||
"ADE_AnimateDiffLoaderWithContext",
|
||||
"ADE_AnimateDiffUniformContextOptions",
|
||||
"ADE_AnimateDiffUnload",
|
||||
"ADE_EmptyLatentImageLarge",
|
||||
"AnimateDiffLoaderV1",
|
||||
"CheckpointLoaderSimpleWithNoiseSelect"
|
||||
],
|
||||
@ -800,6 +811,7 @@
|
||||
"https://github.com/RockOfFire/CR_Animation_Nodes": [
|
||||
[
|
||||
"CR Central Schedule",
|
||||
"CR Combine Schedules",
|
||||
"CR Current Frame",
|
||||
"CR Cycle Images",
|
||||
"CR Cycle Images Simple",
|
||||
@ -822,15 +834,17 @@
|
||||
"CR Keyframe List",
|
||||
"CR LoRA List",
|
||||
"CR Load Animation Frames",
|
||||
"CR Load Schedule From File",
|
||||
"CR Load Scheduled ControlNets",
|
||||
"CR Load Scheduled LoRAs",
|
||||
"CR Load Scheduled Models",
|
||||
"CR Model List",
|
||||
"CR Output Schedule List",
|
||||
"CR Output Schedule To File",
|
||||
"CR Prompt List",
|
||||
"CR Prompt List Keyframes",
|
||||
"CR Prompt Text",
|
||||
"CR Schedule Input Switch",
|
||||
"CR Schedule To ScheduleList",
|
||||
"CR Simple Prompt List",
|
||||
"CR Simple Prompt List Keyframes",
|
||||
"CR Simple Schedule",
|
||||
@ -852,6 +866,7 @@
|
||||
"CR Apply ControlNet",
|
||||
"CR Apply LoRA Stack",
|
||||
"CR Apply Model Merge",
|
||||
"CR Apply Multi Upscale",
|
||||
"CR Apply Multi-ControlNet",
|
||||
"CR Aspect Ratio",
|
||||
"CR Aspect Ratio SDXL",
|
||||
@ -883,6 +898,7 @@
|
||||
"CR Module Input",
|
||||
"CR Module Output",
|
||||
"CR Module Pipe Loader",
|
||||
"CR Multi Upscale Stack",
|
||||
"CR Multi-ControlNet Stack",
|
||||
"CR Pipe Switch",
|
||||
"CR Process Switch",
|
||||
@ -896,7 +912,8 @@
|
||||
"CR Seed to Int",
|
||||
"CR Switch Model and CLIP",
|
||||
"CR Text Input Switch",
|
||||
"CR Text Input Switch (4 way)"
|
||||
"CR Text Input Switch (4 way)",
|
||||
"CR Upscale Image"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_Comfyroll_CustomNodes"
|
||||
@ -1043,7 +1060,10 @@
|
||||
],
|
||||
"https://github.com/TRI3D-LC/tri3d-comfyui-nodes": [
|
||||
[
|
||||
"tri3d-extract-hand"
|
||||
"tri3d-atr-parse",
|
||||
"tri3d-extract-hand",
|
||||
"tri3d-fuzzification",
|
||||
"tri3d-position-hands"
|
||||
],
|
||||
{
|
||||
"title_aux": "tri3d-comfyui-nodes"
|
||||
@ -1104,6 +1124,15 @@
|
||||
"title_aux": "Embedding Picker"
|
||||
}
|
||||
],
|
||||
"https://github.com/Tropfchen/ComfyUI-yaResolutionSelector": [
|
||||
[
|
||||
"YARS",
|
||||
"YARSAdv"
|
||||
],
|
||||
{
|
||||
"title_aux": "YARS: Yet Another Resolution Selector"
|
||||
}
|
||||
],
|
||||
"https://github.com/Ttl/ComfyUi_NNLatentUpscale": [
|
||||
[
|
||||
"NNLatentUpscale"
|
||||
@ -1112,14 +1141,6 @@
|
||||
"title_aux": "ComfyUI Neural network latent upscale custom node"
|
||||
}
|
||||
],
|
||||
"https://github.com/Vrahn/ComfyUI-MasaCtrl-Node": [
|
||||
[
|
||||
"MasaCtrl"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-MasaCtrl-Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/WASasquatch/ComfyUI_Preset_Merger": [
|
||||
[
|
||||
"Preset_Model_Merge"
|
||||
@ -1128,6 +1149,14 @@
|
||||
"title_aux": "ComfyUI Preset Merger"
|
||||
}
|
||||
],
|
||||
"https://github.com/WASasquatch/FreeU_Advanced": [
|
||||
[
|
||||
"FreeU (Advanced)"
|
||||
],
|
||||
{
|
||||
"title_aux": "FreeU_Advanced"
|
||||
}
|
||||
],
|
||||
"https://github.com/WASasquatch/PPF_Noise_ComfyUI": [
|
||||
[
|
||||
"Blend Latents (PPF Noise)",
|
||||
@ -1393,7 +1422,9 @@
|
||||
"https://github.com/Zuellni/ComfyUI-ExLlama": [
|
||||
[
|
||||
"ZuellniExLlamaGenerator",
|
||||
"ZuellniExLlamaLoader"
|
||||
"ZuellniExLlamaLoader",
|
||||
"ZuellniExLlamaLora",
|
||||
"ZuellniExLlamaPreviewer"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ExLlama"
|
||||
@ -1437,22 +1468,32 @@
|
||||
"CSV Generator [Dream]",
|
||||
"Calculation [Dream]",
|
||||
"Common Frame Dimensions [Dream]",
|
||||
"Compare Palettes [Dream]",
|
||||
"FFMPEG Video Encoder [Dream]",
|
||||
"File Count [Dream]",
|
||||
"Finalize Prompt [Dream]",
|
||||
"Float Input [Dream]",
|
||||
"Float to Log Entry [Dream]",
|
||||
"Frame Count Calculator [Dream]",
|
||||
"Frame Counter (Directory) [Dream]",
|
||||
"Frame Counter (Simple) [Dream]",
|
||||
"Frame Counter Info [Dream]",
|
||||
"Frame Counter Offset [Dream]",
|
||||
"Frame Counter Time Offset [Dream]",
|
||||
"Image Brightness Adjustment [Dream]",
|
||||
"Image Color Shift [Dream]",
|
||||
"Image Contrast Adjustment [Dream]",
|
||||
"Image Motion [Dream]",
|
||||
"Image Sequence Blend [Dream]",
|
||||
"Image Sequence Loader [Dream]",
|
||||
"Image Sequence Saver [Dream]",
|
||||
"Image Sequence Tweening [Dream]",
|
||||
"Int Input [Dream]",
|
||||
"Int to Log Entry [Dream]",
|
||||
"Laboratory [Dream]",
|
||||
"Linear Curve [Dream]",
|
||||
"Log Entry Joiner [Dream]",
|
||||
"Log File [Dream]",
|
||||
"Noise from Area Palettes [Dream]",
|
||||
"Noise from Palette [Dream]",
|
||||
"Palette Color Align [Dream]",
|
||||
@ -1463,10 +1504,13 @@
|
||||
"Sine Curve [Dream]",
|
||||
"Smooth Event Curve [Dream]",
|
||||
"String Input [Dream]",
|
||||
"String Tokenizer [Dream]",
|
||||
"String to Log Entry [Dream]",
|
||||
"Text Input [Dream]",
|
||||
"Triangle Curve [Dream]",
|
||||
"Triangle Event Curve [Dream]",
|
||||
"Video Encoder (mpegCoder) [Dream]"
|
||||
"Video Encoder (mpegCoder) [Dream]",
|
||||
"WAV Curve [Dream]"
|
||||
],
|
||||
{
|
||||
"title_aux": "Dream Project Animation Nodes"
|
||||
@ -1535,6 +1579,8 @@
|
||||
"Prompt With Style",
|
||||
"Prompt With Style V2",
|
||||
"Prompt With Style V3",
|
||||
"Range Float",
|
||||
"Range Integer",
|
||||
"Ratio Advanced",
|
||||
"Resize Image for SDXL",
|
||||
"Save Image If True",
|
||||
@ -1579,8 +1625,12 @@
|
||||
"ChameleonMask",
|
||||
"CheckpointLoader (dirty)",
|
||||
"CheckpointLoaderSimple (dirty)",
|
||||
"Color (RGB)",
|
||||
"Color (hexadecimal)",
|
||||
"Color Clip",
|
||||
"Color Clip (advanced)",
|
||||
"Color Clip ADE20k",
|
||||
"ColorDictionary",
|
||||
"CondList",
|
||||
"Conditioning (combine multiple)",
|
||||
"Conditioning (combine selective)",
|
||||
@ -1591,10 +1641,15 @@
|
||||
"Contours",
|
||||
"ControlNetHadamard",
|
||||
"ControlNetHadamard (manual)",
|
||||
"ConvertImg",
|
||||
"CopyMakeBorder",
|
||||
"CreateRequestMetadata",
|
||||
"Draw Contour(s)",
|
||||
"EqualizeHistogram",
|
||||
"EstimateColorInterval (hsv)",
|
||||
"Filter Contour",
|
||||
"FindComplementaryColor",
|
||||
"FindThreshold",
|
||||
"FlatLatentsIntoSingleGrid",
|
||||
"Framed Mask Grab Cut",
|
||||
"Framed Mask Grab Cut 2",
|
||||
@ -1602,14 +1657,19 @@
|
||||
"Get Models",
|
||||
"Get Prompt",
|
||||
"HypernetworkLoader (dirty)",
|
||||
"InRange (hsv)",
|
||||
"Inpaint",
|
||||
"Input/String to Int Array",
|
||||
"KMeansColor",
|
||||
"Load 64 Encoded Image",
|
||||
"LoraLoader (dirty)",
|
||||
"MaskGrid N KSamplers Advanced",
|
||||
"Merge Latent Batch Gridwise",
|
||||
"MonoMerge",
|
||||
"MorphologicOperation",
|
||||
"MorphologicSkeletoning",
|
||||
"OtsuThreshold",
|
||||
"RGB to HSV",
|
||||
"Rect Grab Cut",
|
||||
"Repeat Into Grid (image)",
|
||||
"Repeat Into Grid (latent)",
|
||||
@ -1728,6 +1788,17 @@
|
||||
"title_aux": "sc-node-comfyui"
|
||||
}
|
||||
],
|
||||
"https://github.com/chrisgoringe/cg-noise": [
|
||||
[
|
||||
"Hijack",
|
||||
"KSampler Advanced with Variations",
|
||||
"KSampler with Variations",
|
||||
"UnHijack"
|
||||
],
|
||||
{
|
||||
"title_aux": "Variation seeds"
|
||||
}
|
||||
],
|
||||
"https://github.com/city96/ComfyUI_DiT": [
|
||||
[
|
||||
"DiTCheckpointLoader",
|
||||
@ -1821,7 +1892,6 @@
|
||||
"https://github.com/cubiq/ComfyUI_IPAdapter_plus": [
|
||||
[
|
||||
"IPAdapterApply",
|
||||
"IPAdapterCLIPVisionEncode",
|
||||
"IPAdapterModelLoader"
|
||||
],
|
||||
{
|
||||
@ -1837,6 +1907,26 @@
|
||||
"title_aux": "Simple Math"
|
||||
}
|
||||
],
|
||||
"https://github.com/cubiq/ComfyUI_essentials": [
|
||||
[
|
||||
"ConsoleDebug+",
|
||||
"GetImageSize+",
|
||||
"GrowShrinkMask+",
|
||||
"ImageCASharpening+",
|
||||
"ImageCrop+",
|
||||
"ImageDesaturate+",
|
||||
"ImageFlip+",
|
||||
"ImagePosterize+",
|
||||
"ImageResize+",
|
||||
"MaskBlur+",
|
||||
"MaskFlip+",
|
||||
"MaskPreview+",
|
||||
"SimpleMath+"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Essentials"
|
||||
}
|
||||
],
|
||||
"https://github.com/dagthomas/comfyui_dagthomas": [
|
||||
[
|
||||
"CSL",
|
||||
@ -2136,6 +2226,16 @@
|
||||
"title_aux": "attention-couple-ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI": [
|
||||
[
|
||||
"CDTuner",
|
||||
"Negapip",
|
||||
"Negpip"
|
||||
],
|
||||
{
|
||||
"title_aux": "cd-tuner_negpip-ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/laksjdjf/pfg-ComfyUI": [
|
||||
[
|
||||
"PFG"
|
||||
@ -2273,6 +2373,7 @@
|
||||
"ReencodeLatentPipe",
|
||||
"RegionalPrompt",
|
||||
"RegionalSampler",
|
||||
"RegionalSamplerAdvanced",
|
||||
"RemoveNoiseMask",
|
||||
"SAMDetectorCombined",
|
||||
"SAMDetectorSegmented",
|
||||
@ -2316,9 +2417,14 @@
|
||||
[
|
||||
"Canny_Preprocessor_Provider_for_SEGS //Inspire",
|
||||
"DWPreprocessor_Provider_for_SEGS //Inspire",
|
||||
"FakeScribblePreprocessor_Provider_for_SEGS //Inspire",
|
||||
"GlobalSeed //Inspire",
|
||||
"HEDPreprocessor_Provider_for_SEGS //Inspire",
|
||||
"KSampler //Inspire",
|
||||
"KSamplerAdvanced //Inspire",
|
||||
"LeRes_DepthMap_Preprocessor_Provider_for_SEGS //Inspire",
|
||||
"LoadPromptsFromDir //Inspire",
|
||||
"LoadPromptsFromFile //Inspire",
|
||||
"LoraBlockInfo //Inspire",
|
||||
"LoraLoaderBlockWeight //Inspire",
|
||||
"MediaPipeFaceMeshDetectorProvider //Inspire",
|
||||
@ -2377,6 +2483,15 @@
|
||||
"title_aux": "Facerestore CF (Code Former)"
|
||||
}
|
||||
],
|
||||
"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding": [
|
||||
[
|
||||
"DynamicThresholdingFull",
|
||||
"DynamicThresholdingSimple"
|
||||
],
|
||||
{
|
||||
"title_aux": "Stable Diffusion Dynamic Thresholding (CFG Scale Fix)"
|
||||
}
|
||||
],
|
||||
"https://github.com/meap158/ComfyUI-GPU-temperature-protection": [
|
||||
[
|
||||
"GPUTemperatureProtection"
|
||||
@ -2385,6 +2500,14 @@
|
||||
"title_aux": "GPU temperature protection"
|
||||
}
|
||||
],
|
||||
"https://github.com/meap158/ComfyUI-Prompt-Expansion": [
|
||||
[
|
||||
"PromptExpansion"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Prompt-Expansion"
|
||||
}
|
||||
],
|
||||
"https://github.com/melMass/comfy_mtb": [
|
||||
[
|
||||
"Animation Builder (mtb)",
|
||||
@ -2558,9 +2681,7 @@
|
||||
[
|
||||
"AdaptiveCannyDetector_PoP",
|
||||
"AnyAspectRatio",
|
||||
"ConditioningMultiplierPoP",
|
||||
"ConditioningMultiplier_PoP",
|
||||
"ConditioningNormalizerPoP",
|
||||
"ConditioningNormalizer_PoP",
|
||||
"LoadImageResizer_PoP",
|
||||
"LoraStackLoader10_PoP",
|
||||
@ -2608,6 +2729,21 @@
|
||||
"title_aux": "A8R8 ComfyUI Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/receyuki/comfyui-prompt-reader-node": [
|
||||
[
|
||||
"SDParameterGenerator",
|
||||
"SDPromptMerger",
|
||||
"SDPromptReader",
|
||||
"SDPromptSaver"
|
||||
],
|
||||
{
|
||||
"author": "receyuki",
|
||||
"description": "ComfyUI node version of SD Prompt Reader",
|
||||
"nickname": "SD Prompt Reader",
|
||||
"title": "SD Prompt Reader",
|
||||
"title_aux": "comfyui-prompt-reader-node"
|
||||
}
|
||||
],
|
||||
"https://github.com/richinsley/Comfy-LFO": [
|
||||
[
|
||||
"LFO_Pulse",
|
||||
@ -2620,6 +2756,15 @@
|
||||
"title_aux": "Comfy-LFO"
|
||||
}
|
||||
],
|
||||
"https://github.com/rklaffehn/rk-comfy-nodes": [
|
||||
[
|
||||
"RK_CivitAIAddHashes",
|
||||
"RK_CivitAIMetaChecker"
|
||||
],
|
||||
{
|
||||
"title_aux": "rk-comfy-nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/s1dlx/comfy_meh/raw/main/meh.py": [
|
||||
[
|
||||
"MergingExecutionHelper"
|
||||
@ -2675,6 +2820,7 @@
|
||||
[
|
||||
"AV_CheckpointModelsToParametersPipe",
|
||||
"AV_ControlNetEfficientLoader",
|
||||
"AV_ControlNetEfficientLoaderAdvanced",
|
||||
"AV_ControlNetEfficientStacker",
|
||||
"AV_ControlNetLoader",
|
||||
"AV_ControlNetPreprocessor",
|
||||
@ -2688,6 +2834,7 @@
|
||||
"BLIPCaption",
|
||||
"ColorBlend",
|
||||
"ColorCorrect",
|
||||
"DeepDanbooruCaption",
|
||||
"DependenciesEdit",
|
||||
"Fooocus_KSampler",
|
||||
"Fooocus_KSamplerAdvanced",
|
||||
@ -2742,8 +2889,22 @@
|
||||
"title_aux": "nui suite"
|
||||
}
|
||||
],
|
||||
"https://github.com/spacepxl/ComfyUI-HQ-Image-Save": [
|
||||
[
|
||||
"LoadLatentEXR",
|
||||
"SaveEXR",
|
||||
"SaveLatentEXR",
|
||||
"SaveTiff"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-HQ-Image-Save"
|
||||
}
|
||||
],
|
||||
"https://github.com/spinagon/ComfyUI-seamless-tiling": [
|
||||
[
|
||||
"CircularVAEDecode",
|
||||
"MakeCircularVAE",
|
||||
"OffsetImage",
|
||||
"SeamlessTile"
|
||||
],
|
||||
{
|
||||
@ -2836,7 +2997,10 @@
|
||||
],
|
||||
"https://github.com/szhublox/ambw_comfyui": [
|
||||
[
|
||||
"Auto Merge Block Weighted"
|
||||
"Auto Merge Block Weighted",
|
||||
"CLIPMergeSimple",
|
||||
"ModelMergeBlocks",
|
||||
"ModelMergeSimple"
|
||||
],
|
||||
{
|
||||
"title_aux": "Auto-MBW"
|
||||
@ -2910,6 +3074,25 @@
|
||||
"title_aux": "Hakkun-ComfyUI-nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/tusharbhutt/Endless-Nodes": [
|
||||
[
|
||||
"Endless Nodes Combo Parameterizer",
|
||||
"Endless Nodes Combo Parameterizer & Prompts",
|
||||
"Endless Nodes Eight Input Text Switch",
|
||||
"Endless Nodes Parameterizer",
|
||||
"Endless Nodes Parameterizer & Prompts",
|
||||
"Endless Nodes Six Input Text Switch",
|
||||
"Endless Nodes Six Integer IO Switch",
|
||||
"Endless Nodes Six Integer IO Widget"
|
||||
],
|
||||
{
|
||||
"author": "Endless Sea of Stars",
|
||||
"description": "A small set of nodes I created for various numerical and text inputs.",
|
||||
"nickname": "Endless Nodes",
|
||||
"title": "Endless Nodes",
|
||||
"title_aux": "Endless Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/twri/sdxl_prompt_styler": [
|
||||
[
|
||||
"SDXLPromptStyler",
|
||||
@ -2939,6 +3122,7 @@
|
||||
"CLIP Positive-Negative XL w/Text (WLSH)",
|
||||
"CLIP Positive-Negative w/Text (WLSH)",
|
||||
"Checkpoint Loader w/Name (WLSH)",
|
||||
"Empty Latent by Pixels (WLSH)",
|
||||
"Empty Latent by Ratio (WLSH)",
|
||||
"Generate Edge Mask (WLSH)",
|
||||
"Generate Face Mask (WLSH)",
|
||||
@ -2952,6 +3136,7 @@
|
||||
"Resolutions by Ratio (WLSH)",
|
||||
"SDXL Quick Empty Latent (WLSH)",
|
||||
"SDXL Quick Image Scale (WLSH)",
|
||||
"SDXL Resolution Multiplier (WLSH)",
|
||||
"SDXL Resolutions (WLSH)",
|
||||
"SDXL Steps (WLSH)",
|
||||
"Save Positive Prompt File (WLSH)",
|
||||
@ -2969,6 +3154,7 @@
|
||||
],
|
||||
"https://github.com/wolfden/ComfyUi_PromptStylers": [
|
||||
[
|
||||
"SDXLPromptStylerAll",
|
||||
"SDXLPromptStylerHorror",
|
||||
"SDXLPromptStylerMisc",
|
||||
"SDXLPromptStylerbyArtist",
|
||||
@ -2994,11 +3180,14 @@
|
||||
"SDXLPromptStylerbyTimeofDay",
|
||||
"SDXLPromptStylerbyWyvern",
|
||||
"SDXLPromptbyCelticArt",
|
||||
"SDXLPromptbyContemporaryNordicArt",
|
||||
"SDXLPromptbyFashionArt",
|
||||
"SDXLPromptbyGothicRevival",
|
||||
"SDXLPromptbyIrishFolkArt",
|
||||
"SDXLPromptbyRomanticNationalismArt",
|
||||
"SDXLPromptbySportsArt",
|
||||
"SDXLPromptbyStreetArt",
|
||||
"SDXLPromptbyVikingArt",
|
||||
"SDXLPromptbyWildlifeArt"
|
||||
],
|
||||
{
|
||||
@ -3050,12 +3239,20 @@
|
||||
],
|
||||
"https://github.com/youyegit/tdxh_node_comfyui": [
|
||||
[
|
||||
"TdxhBoolNumber",
|
||||
"TdxhClipVison",
|
||||
"TdxhControlNetApply",
|
||||
"TdxhControlNetProcessor",
|
||||
"TdxhFloatInput",
|
||||
"TdxhImageToSize",
|
||||
"TdxhImageToSizeAdvanced",
|
||||
"TdxhImg2ImgLatent",
|
||||
"TdxhIntInput",
|
||||
"TdxhLoraLoader",
|
||||
"TdxhStringInput"
|
||||
"TdxhOnOrOff",
|
||||
"TdxhReference",
|
||||
"TdxhStringInput",
|
||||
"TdxhStringInputTranslator"
|
||||
],
|
||||
{
|
||||
"title_aux": "tdxh_node_comfyui"
|
||||
|
||||
@ -1,6 +1,9 @@
|
||||
import sys
|
||||
import os
|
||||
import git
|
||||
import configparser
|
||||
|
||||
config_path = os.path.join(os.path.dirname(__file__), "config.ini")
|
||||
|
||||
def gitclone(custom_nodes_path, url):
|
||||
repo_name = os.path.splitext(os.path.basename(url))[0]
|
||||
@ -12,33 +15,38 @@ def gitclone(custom_nodes_path, url):
|
||||
repo.close()
|
||||
|
||||
def gitcheck(path, do_fetch=False):
|
||||
# Fetch the latest commits from the remote repository
|
||||
repo = git.Repo(path)
|
||||
try:
|
||||
# Fetch the latest commits from the remote repository
|
||||
repo = git.Repo(path)
|
||||
|
||||
current_branch = repo.active_branch
|
||||
branch_name = current_branch.name
|
||||
current_branch = repo.active_branch
|
||||
branch_name = current_branch.name
|
||||
|
||||
remote_name = 'origin'
|
||||
remote = repo.remote(name=remote_name)
|
||||
remote_name = 'origin'
|
||||
remote = repo.remote(name=remote_name)
|
||||
|
||||
if do_fetch:
|
||||
remote.fetch()
|
||||
if do_fetch:
|
||||
remote.fetch()
|
||||
|
||||
# Get the current commit hash and the commit hash of the remote branch
|
||||
commit_hash = repo.head.commit.hexsha
|
||||
remote_commit_hash = repo.refs[f'{remote_name}/{branch_name}'].object.hexsha
|
||||
# Get the current commit hash and the commit hash of the remote branch
|
||||
commit_hash = repo.head.commit.hexsha
|
||||
remote_commit_hash = repo.refs[f'{remote_name}/{branch_name}'].object.hexsha
|
||||
|
||||
# Compare the commit hashes to determine if the local repository is behind the remote repository
|
||||
if commit_hash != remote_commit_hash:
|
||||
# Get the commit dates
|
||||
commit_date = repo.head.commit.committed_datetime
|
||||
remote_commit_date = repo.refs[f'{remote_name}/{branch_name}'].object.committed_datetime
|
||||
# Compare the commit hashes to determine if the local repository is behind the remote repository
|
||||
if commit_hash != remote_commit_hash:
|
||||
# Get the commit dates
|
||||
commit_date = repo.head.commit.committed_datetime
|
||||
remote_commit_date = repo.refs[f'{remote_name}/{branch_name}'].object.committed_datetime
|
||||
|
||||
# Compare the commit dates to determine if the local repository is behind the remote repository
|
||||
if commit_date < remote_commit_date:
|
||||
print("CUSTOM NODE CHECK: True")
|
||||
else:
|
||||
print("CUSTOM NODE CHECK: False")
|
||||
except Exception as e:
|
||||
print(e)
|
||||
print("CUSTOM NODE CHECK: Error")
|
||||
|
||||
# Compare the commit dates to determine if the local repository is behind the remote repository
|
||||
if commit_date < remote_commit_date:
|
||||
print("CUSTOM NODE CHECK: True")
|
||||
else:
|
||||
print("CUSTOM NODE CHECK: False")
|
||||
|
||||
def gitpull(path):
|
||||
# Check if the path is a git repository
|
||||
@ -50,12 +58,34 @@ def gitpull(path):
|
||||
if repo.is_dirty():
|
||||
repo.git.stash()
|
||||
|
||||
origin = repo.remote(name='origin')
|
||||
origin.pull(rebase=True)
|
||||
repo.git.submodule('update', '--init', '--recursive')
|
||||
commit_hash = repo.head.commit.hexsha
|
||||
try:
|
||||
origin = repo.remote(name='origin')
|
||||
origin.pull(rebase=True)
|
||||
repo.git.submodule('update', '--init', '--recursive')
|
||||
new_commit_hash = repo.head.commit.hexsha
|
||||
|
||||
if commit_hash != new_commit_hash:
|
||||
print("CUSTOM NODE PULL: True")
|
||||
else:
|
||||
print("CUSTOM NODE PULL: None")
|
||||
except Exception as e:
|
||||
print(e)
|
||||
print("CUSTOM NODE PULL: False")
|
||||
|
||||
repo.close()
|
||||
|
||||
|
||||
def setup_environment():
|
||||
config = configparser.ConfigParser()
|
||||
config.read(config_path)
|
||||
if 'default' in config and 'git_exe' in config['default'] and config['default']['git_exe'] != '':
|
||||
git.Git().update_environment(GIT_PYTHON_GIT_EXECUTABLE=config['default']['git_exe'])
|
||||
|
||||
|
||||
setup_environment()
|
||||
|
||||
|
||||
try:
|
||||
if sys.argv[1] == "--clone":
|
||||
gitclone(sys.argv[2], sys.argv[3])
|
||||
|
||||
@ -5,6 +5,7 @@ import {ComfyWidgets} from "../../scripts/widgets.js";
|
||||
|
||||
var update_comfyui_button = null;
|
||||
var fetch_updates_button = null;
|
||||
var update_all_button = null;
|
||||
var badge_mode = "none";
|
||||
|
||||
async function init_badge_mode() {
|
||||
@ -214,7 +215,7 @@ async function fetchUpdates(update_check_checkbox) {
|
||||
|
||||
const response = await api.fetchApi(`/customnode/fetch_updates?mode=${mode}`);
|
||||
|
||||
if(response.status == 400) {
|
||||
if(response.status != 200 && response.status != 201) {
|
||||
app.ui.dialog.show('Failed to fetch updates.');
|
||||
app.ui.dialog.element.style.zIndex = 9999;
|
||||
return false;
|
||||
@ -244,6 +245,49 @@ async function fetchUpdates(update_check_checkbox) {
|
||||
}
|
||||
}
|
||||
|
||||
async function updateAll(update_check_checkbox) {
|
||||
let prev_text = update_all_button.innerText;
|
||||
update_all_button.innerText = "Updating all...(ComfyUI)";
|
||||
update_all_button.disabled = true;
|
||||
update_all_button.style.backgroundColor = "gray";
|
||||
|
||||
try {
|
||||
var mode = "url";
|
||||
if(ManagerMenuDialog.instance.local_mode_checkbox.checked)
|
||||
mode = "local";
|
||||
|
||||
update_all_button.innerText = "Updating all...";
|
||||
const response1 = await api.fetchApi('/comfyui_manager/update_comfyui');
|
||||
const response2 = await api.fetchApi(`/customnode/update_all?mode=${mode}`);
|
||||
|
||||
if(response1.status != 200 && response2.status != 201) {
|
||||
app.ui.dialog.show('Failed to update ComfyUI or several extensions.<BR><BR>See terminal log.<BR>');
|
||||
app.ui.dialog.element.style.zIndex = 9999;
|
||||
return false;
|
||||
}
|
||||
if(response1.status == 201 || response2.status == 201) {
|
||||
app.ui.dialog.show('ComfyUI and all extensions have been updated to the latest version.');
|
||||
app.ui.dialog.element.style.zIndex = 9999;
|
||||
}
|
||||
else {
|
||||
app.ui.dialog.show('ComfyUI and all extensions are already up-to-date with the latest versions.');
|
||||
app.ui.dialog.element.style.zIndex = 9999;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
catch(exception) {
|
||||
app.ui.dialog.show(`Failed to update ComfyUI or several extensions / ${exception}`);
|
||||
app.ui.dialog.element.style.zIndex = 9999;
|
||||
return false;
|
||||
}
|
||||
finally {
|
||||
update_all_button.disabled = false;
|
||||
update_all_button.innerText = prev_text;
|
||||
update_all_button.style.backgroundColor = "";
|
||||
}
|
||||
}
|
||||
|
||||
async function install_model(target) {
|
||||
if(ModelInstaller.instance) {
|
||||
ModelInstaller.instance.startInstall(target);
|
||||
@ -1768,6 +1812,14 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
() => fetchUpdates(this.update_check_checkbox)
|
||||
});
|
||||
|
||||
update_all_button =
|
||||
$el("button", {
|
||||
type: "button",
|
||||
textContent: "Update All",
|
||||
onclick:
|
||||
() => updateAll(this.update_check_checkbox)
|
||||
});
|
||||
|
||||
// preview method
|
||||
let preview_combo = document.createElement("select");
|
||||
preview_combo.appendChild($el('option', {value:'auto', text:'Preview method: Auto'}, []));
|
||||
@ -1864,6 +1916,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
||||
}),
|
||||
|
||||
$el("br", {}, []),
|
||||
update_all_button,
|
||||
update_comfyui_button,
|
||||
fetch_updates_button,
|
||||
|
||||
@ -1948,7 +2001,7 @@ app.registerExtension({
|
||||
nodeType.prototype.onDrawForeground = function (ctx) {
|
||||
const r = onDrawForeground?.apply?.(this, arguments);
|
||||
|
||||
if(!this.flags.collapsed && badge_mode != 'none' && this.size[1] > LiteGraph.NODE_TITLE_HEIGHT) {
|
||||
if(!this.flags.collapsed && badge_mode != 'none' && nodeType.title_mode != LiteGraph.NO_TITLE) {
|
||||
let text = "";
|
||||
if(badge_mode == 'id_nick')
|
||||
text = `#${this.id} `;
|
||||
|
||||
@ -10,6 +10,16 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A LaMa prerocessor for ComfyUi. You can find the processor in image/processors. <p style='background-color: black; color: red;'>NOTE: BEWARE THIS EXTENSION IS NOT FINISHED YET. At the moment it returns a preprocessed image that still needs to be injected with a custom controlnet implementation(missing)</p>"
|
||||
},
|
||||
{
|
||||
"author": "Dr.Lt.Data",
|
||||
"title": "ComfyUI-Workflow-Component [WIP]",
|
||||
"reference": "https://github.com/ltdrdata/ComfyUI-Workflow-Component",
|
||||
"files": [
|
||||
"https://github.com/ltdrdata/ComfyUI-Workflow-Component"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This extension provides the capability to use ComfyUI Workflow as a component and the ability to use the Image Refiner functionality based on components. NOTE: This is an experimental extension feature with no consideration for backward compatibility and can be highly unstable."
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -1,5 +1,125 @@
|
||||
{
|
||||
"custom_nodes": [
|
||||
{
|
||||
"author": "WASasquatch",
|
||||
"title": "FreeU_Advanced",
|
||||
"reference": "https://github.com/WASasquatch/FreeU_Advanced",
|
||||
"files": [
|
||||
"https://github.com/WASasquatch/FreeU_Advanced"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This custom node provides advanced settings for FreeU."
|
||||
},
|
||||
{
|
||||
"author": "Tropfchen",
|
||||
"title": "YARS: Yet Another Resolution Selector",
|
||||
"reference": "https://github.com/Tropfchen/ComfyUI-yaResolutionSelector",
|
||||
"files": [
|
||||
"https://github.com/Tropfchen/ComfyUI-yaResolutionSelector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A slightly different Resolution Selector node, allowing to freely change base resolution and aspect ratio, with options to maintain the pixel count or use the base resolution as the highest or lowest dimension."
|
||||
},
|
||||
{
|
||||
"author": "mcmonkeyprojects",
|
||||
"title": "Stable Diffusion Dynamic Thresholding (CFG Scale Fix)",
|
||||
"reference": "https://github.com/mcmonkeyprojects/sd-dynamic-thresholding",
|
||||
"files": [
|
||||
"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Extension for StableSwarmUI, ComfyUI, and AUTOMATIC1111 Stable Diffusion WebUI that enables a way to use higher CFG Scales without color issues. This works by clamping latents between steps."
|
||||
},
|
||||
{
|
||||
"author": "cubiq",
|
||||
"title": "ComfyUI Essentials",
|
||||
"reference": "https://github.com/cubiq/ComfyUI_essentials",
|
||||
"files": [
|
||||
"https://github.com/cubiq/ComfyUI_essentials"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Essential nodes that are weirdly missing from ComfyUI core. With few exceptions they are new features and not commodities. I hope this will be just a temporary repository until the nodes get included into ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "laksjdjf",
|
||||
"title": "cd-tuner_negpip-ComfyUI",
|
||||
"reference": "https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI",
|
||||
"files": [
|
||||
"https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Apply CDTuner, Apply Negapip. This extension provides the <a href='https://github.com/hako-mikan/sd-webui-cd-tuner' target='blank'>CD(Color/Detail) Tuner</a> and the <a href='https://github.com/hako-mikan/sd-webui-negpip' target='blank'>Negative Prompt in the Prompt</a>features."
|
||||
},
|
||||
{
|
||||
"author": "PTA",
|
||||
"title": "auto nodes layout",
|
||||
"reference": "https://github.com/phineas-pta/comfyui-auto-nodes-layout",
|
||||
"files": [
|
||||
"https://github.com/phineas-pta/comfyui-auto-nodes-layout"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A ComfyUI extension to apply better nodes layout algorithm to ComfyUI workflow (mostly for visualization purpose)"
|
||||
},
|
||||
{
|
||||
"author": "rklaffehn",
|
||||
"title": "rk-comfy-nodes",
|
||||
"reference": "https://github.com/rklaffehn/rk-comfy-nodes",
|
||||
"files": [
|
||||
"https://github.com/rklaffehn/rk-comfy-nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: RK_CivitAIMetaChecker, RK_CivitAIAddHashes."
|
||||
},
|
||||
{
|
||||
"author": "receyuki",
|
||||
"title": "comfyui-prompt-reader-node",
|
||||
"reference": "https://github.com/receyuki/comfyui-prompt-reader-node",
|
||||
"files": [
|
||||
"https://github.com/receyuki/comfyui-prompt-reader-node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: SDPromptReader"
|
||||
},
|
||||
{
|
||||
"author": "spacepxl",
|
||||
"title": "ComfyUI-HQ-Image-Save",
|
||||
"reference": "https://github.com/spacepxl/ComfyUI-HQ-Image-Save",
|
||||
"files": [
|
||||
"https://github.com/spacepxl/ComfyUI-HQ-Image-Save"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Add Image Save nodes for TIFF 16 bit and EXR 32 bit formats. Probably only useful if you're applying a LUT or other color corrections, and care about preserving as much color accuracy as possible."
|
||||
},
|
||||
{
|
||||
"author": "meap158",
|
||||
"title": "ComfyUI-Prompt-Expansion",
|
||||
"reference": "https://github.com/meap158/ComfyUI-Prompt-Expansion",
|
||||
"files": [
|
||||
"https://github.com/meap158/ComfyUI-Prompt-Expansion"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Dynamic prompt expansion, powered by GPT-2 locally on your device."
|
||||
},
|
||||
{
|
||||
"author": "tusharbhutt",
|
||||
"title": "Endless Nodes",
|
||||
"reference": "https://github.com/tusharbhutt/Endless-Nodes",
|
||||
"files": [
|
||||
"https://github.com/tusharbhutt/Endless-Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A small set of nodes I created for various numerical and text inputs and outputs."
|
||||
},
|
||||
{
|
||||
"author": "chrisgoringe",
|
||||
"title": "Variation seeds",
|
||||
"reference": "https://github.com/chrisgoringe/cg-noise",
|
||||
"files": [
|
||||
"https://github.com/chrisgoringe/cg-noise"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Adds KSampler custom nodes with variation seed and variation strength."
|
||||
},
|
||||
{
|
||||
"author": "spinagon",
|
||||
"title": "Seamless tiling Node for ComfyUI",
|
||||
@ -106,9 +226,9 @@
|
||||
"title": "ComfyUI-Latent-Modifiers",
|
||||
"reference": "https://github.com/Clybius/ComfyUI-Latent-Modifiers",
|
||||
"files": [
|
||||
"https://github.com/Clybius/ComfyUI-Latent-Modifiers/raw/main/sampler_mega_modifier.py"
|
||||
"https://github.com/Clybius/ComfyUI-Latent-Modifiers"
|
||||
],
|
||||
"install_type": "copy",
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: Latent Diffusion Mega Modifier. ComfyUI nodes which modify the latent during the diffusion process. (Sharpness, Tonemap, Rescale, Extra Noise)"
|
||||
},
|
||||
{
|
||||
@ -361,26 +481,6 @@
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes:Attention couple. This is a custom node that manipulates region-specific prompts. While vanilla ComfyUI employs an area specification method based on latent couples, this node divides regions using attention layers within UNet."
|
||||
},
|
||||
{
|
||||
"author": "Tropfchen",
|
||||
"title": "Embedding Picker",
|
||||
"reference": "https://github.com/Tropfchen/ComfyUI-Embedding_Picker",
|
||||
"files": [
|
||||
"https://github.com/Tropfchen/ComfyUI-Embedding_Picker"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: Embedding Picker. Tired of forgetting and misspelling often weird names of embeddings you use? Or perhaps you use only one, cause you forgot you have tens of them installed? Try this."
|
||||
},
|
||||
{
|
||||
"author": "Vrahn",
|
||||
"title": "ComfyUI-MasaCtrl-Node",
|
||||
"reference": "https://github.com/Vrahn/ComfyUI-MasaCtrl-Node",
|
||||
"files": [
|
||||
"https://github.com/Vrahn/ComfyUI-MasaCtrl-Node"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: MasaCtrl."
|
||||
},
|
||||
{
|
||||
"author": "spro",
|
||||
"title": "Latent Mirror node for ComfyUI",
|
||||
@ -700,207 +800,6 @@
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: KSampler With Refiner (Fooocus). The KSampler from <a href='https://github.com/lllyasviel/Fooocus' target='blank'>Fooocus</a> as a ComfyUI node <p style='background-color: black; color: red;'>NOTE: This patches basic ComfyUI behaviour - don't use together with other samplers. Or perhaps do? Other samplers might profit from those changes ... ymmv.</p>"
|
||||
},
|
||||
{
|
||||
"author": "city96",
|
||||
"title": "SD-Latent-Upscaler",
|
||||
"reference": "https://github.com/city96/SD-Latent-Upscaler",
|
||||
"files": [
|
||||
"https://github.com/city96/SD-Latent-Upscaler"
|
||||
],
|
||||
"pip": ["huggingface-hub"],
|
||||
"install_type": "git-clone",
|
||||
"description": "Upscaling stable diffusion latents using a small neural network."
|
||||
},
|
||||
{
|
||||
"author": "JPS-GER",
|
||||
"title": "JPS Custom Nodes for ComfyUI",
|
||||
"reference": "https://github.com/JPS-GER/ComfyUI_JPS-Nodes",
|
||||
"files": [
|
||||
"https://github.com/JPS-GER/ComfyUI_JPS-Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: SDXL - Resolutions, SDXL - Basic Settings, SDXL - Additional Settings, Math - Resolution Multiply, Math - Largest Integer, Switch - Generation Mode, ..."
|
||||
},
|
||||
{
|
||||
"author": "hustille",
|
||||
"title": "hus' utils for ComfyUI",
|
||||
"reference": "https://github.com/hustille/ComfyUI_hus_utils",
|
||||
"files": [
|
||||
"https://github.com/hustille/ComfyUI_hus_utils"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI nodes primarily for seed and filename generation"
|
||||
},
|
||||
{
|
||||
"author": "m-sokes",
|
||||
"title": "ComfyUI Sokes Nodes",
|
||||
"reference": "https://github.com/m-sokes/ComfyUI-Sokes-Nodes",
|
||||
"files": [
|
||||
"https://github.com/m-sokes/ComfyUI-Sokes-Nodes"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: Empty Latent Randomizer (9 Inputs)"
|
||||
},
|
||||
{
|
||||
"author": "Extraltodeus",
|
||||
"title": "noise latent perlinpinpin",
|
||||
"reference": "https://github.com/Extraltodeus/noise_latent_perlinpinpin",
|
||||
"files": [
|
||||
"https://github.com/Extraltodeus/noise_latent_perlinpinpin"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: NoisyLatentPerlin. This allows to create latent spaces filled with perlin-based noise that can actually be used by the samplers."
|
||||
},
|
||||
{
|
||||
"author": "theUpsider",
|
||||
"title": "ComfyUI-Logic",
|
||||
"reference": "https://github.com/theUpsider/ComfyUI-Logic",
|
||||
"files": [
|
||||
"https://github.com/theUpsider/ComfyUI-Logic"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "An extension to ComfyUI that introduces logic nodes and conditional rendering capabilities."
|
||||
},
|
||||
{
|
||||
"author": "tkoenig89",
|
||||
"title": "Load Image with metadata",
|
||||
"reference": "https://github.com/tkoenig89/ComfyUI_Load_Image_With_Metadata",
|
||||
"files": [
|
||||
"https://github.com/tkoenig89/ComfyUI_Load_Image_With_Metadata"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A custom node for comfy ui to read generation data from images (prompt, seed, size...). This could be used when upscaling generated images to use the original prompt and seed."
|
||||
},
|
||||
{
|
||||
"author": "mpiquero7164",
|
||||
"title": "SaveImgPrompt",
|
||||
"reference": "https://github.com/mpiquero7164/ComfyUI-SaveImgPrompt",
|
||||
"files": [
|
||||
"https://github.com/mpiquero7164/ComfyUI-SaveImgPrompt"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Save a png or jpeg and option to save prompt/workflow in a text or json file for each image in Comfy + Workflow loading."
|
||||
},
|
||||
{
|
||||
"author": "city96",
|
||||
"title": "SD-Advanced-Noise",
|
||||
"reference": "https://github.com/city96/SD-Advanced-Noise",
|
||||
"files": [
|
||||
"https://github.com/city96/SD-Advanced-Noise"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: LatentGaussianNoise, MathEncode. An experimental custom node that generates latent noise directly by utilizing the linear characteristics of the latent space."
|
||||
},
|
||||
{
|
||||
"author": "WASasquatch",
|
||||
"title": "ComfyUI Preset Merger",
|
||||
"reference": "https://github.com/WASasquatch/ComfyUI_Preset_Merger",
|
||||
"files": [
|
||||
"https://github.com/WASasquatch/ComfyUI_Preset_Merger"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: ModelMergeByPreset. Merge checkpoint models by preset"
|
||||
},
|
||||
{
|
||||
"author": "jamesWalker55",
|
||||
"title": "Various ComfyUI Nodes by Type",
|
||||
"reference": "https://github.com/jamesWalker55/comfyui-various",
|
||||
"files": [
|
||||
"https://github.com/jamesWalker55/comfyui-various"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: JWInteger, JWFloat, JWString, JWImageLoadRGB, JWImageResize, ..."
|
||||
},
|
||||
{
|
||||
"author": "NicholasMcCarthy",
|
||||
"title": "ComfyUI_TravelSuite",
|
||||
"reference": "https://github.com/NicholasMcCarthy/ComfyUI_TravelSuite",
|
||||
"files": [
|
||||
"https://github.com/NicholasMcCarthy/ComfyUI_TravelSuite"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "ComfyUI custom nodes to apply various latent travel techniques."
|
||||
},
|
||||
{
|
||||
"author": "ManglerFTW",
|
||||
"title": "ComfyI2I",
|
||||
"reference": "https://github.com/ManglerFTW/ComfyI2I",
|
||||
"files": [
|
||||
"https://github.com/ManglerFTW/ComfyI2I"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "A set of custom nodes to perform image 2 image functions in ComfyUI."
|
||||
},
|
||||
{
|
||||
"author": "city96",
|
||||
"title": "Latent-Interposer",
|
||||
"reference": "https://github.com/city96/SD-Latent-Interposer",
|
||||
"files": [
|
||||
"https://github.com/city96/SD-Latent-Interposer"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Custom node to convert the lantents between SDXL and SD v1.5 directly without the VAE decoding/encoding step."
|
||||
},
|
||||
{
|
||||
"author": "coreyryanhanson",
|
||||
"title": "ComfyQR",
|
||||
"reference": "https://github.com/coreyryanhanson/ComfyQR",
|
||||
"files": [
|
||||
"https://github.com/coreyryanhanson/ComfyQR"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "QR generation within ComfyUI. Contains nodes suitable for workflows from generating basic QR images to techniques with advanced QR masking."
|
||||
},
|
||||
{
|
||||
"author": "uarefans",
|
||||
"title": "ComfyUI-Fans",
|
||||
"reference": "https://github.com/uarefans/ComfyUI-Fans",
|
||||
"files": [
|
||||
"https://github.com/uarefans/ComfyUI-Fans"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: Fans Styler (Max 10 Style), Fans Text Concat (Until 10 text)."
|
||||
},
|
||||
{
|
||||
"author": "theUpsider",
|
||||
"title": "Styles CSV Loader Extension for ComfyUI",
|
||||
"reference": "https://github.com/theUpsider/ComfyUI-Styles_CSV_Loader",
|
||||
"files": [
|
||||
"https://github.com/theUpsider/ComfyUI-Styles_CSV_Loader"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This extension allows users to load styles from a CSV file, primarily for migration purposes from the automatic1111 Stable Diffusion web UI."
|
||||
},
|
||||
{
|
||||
"author": "M1kep",
|
||||
"title": "ComfyLiterals",
|
||||
"reference": "https://github.com/M1kep/ComfyLiterals",
|
||||
"files": [
|
||||
"https://github.com/M1kep/ComfyLiterals"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: Int, Float, String, Operation, Checkpoint"
|
||||
},
|
||||
{
|
||||
"author": "dimtoneff",
|
||||
"title": "ComfyUI PixelArt Detector",
|
||||
"reference": "https://github.com/dimtoneff/ComfyUI-PixelArt-Detector",
|
||||
"files": [
|
||||
"https://github.com/dimtoneff/ComfyUI-PixelArt-Detector"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "This node manipulates the pixel art image in ways that it should look pixel perfect (downscales, changes palette, upscales etc.)."
|
||||
},
|
||||
{
|
||||
"author": "dimtoneff",
|
||||
"title": "Eagle PNGInfo",
|
||||
"reference": "https://github.com/hylarucoder/ComfyUI-Eagle-PNGInfo",
|
||||
"files": [
|
||||
"https://github.com/hylarucoder/ComfyUI-Eagle-PNGInfo"
|
||||
],
|
||||
"install_type": "git-clone",
|
||||
"description": "Nodes: EagleImageNode"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
@ -42,9 +42,11 @@
|
||||
"https://github.com/ArtVentureX/comfyui-animatediff": [
|
||||
[
|
||||
"AnimateDiffCombine",
|
||||
"AnimateDiffLoader",
|
||||
"AnimateDiffLoader_v2",
|
||||
"AnimateDiffUnload"
|
||||
"AnimateDiffModuleLoader",
|
||||
"AnimateDiffSampler",
|
||||
"AnimateDiffSlidingWindowOptions",
|
||||
"ImageSizeAndBatchSize",
|
||||
"LoadVideo"
|
||||
],
|
||||
{
|
||||
"title_aux": "AnimateDiff"
|
||||
@ -167,7 +169,7 @@
|
||||
"title_aux": "ComfyUI_Ib_CustomNodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/Clybius/ComfyUI-Latent-Modifiers/raw/main/sampler_mega_modifier.py": [
|
||||
"https://github.com/Clybius/ComfyUI-Latent-Modifiers": [
|
||||
[
|
||||
"Latent Diffusion Mega Modifier"
|
||||
],
|
||||
@ -354,6 +356,9 @@
|
||||
"DWPreprocessor",
|
||||
"FakeScribblePreprocessor",
|
||||
"HEDPreprocessor",
|
||||
"HintImageEnchance",
|
||||
"ImageGenResolutionFromImage",
|
||||
"ImageGenResolutionFromLatent",
|
||||
"InpaintPreprocessor",
|
||||
"LeReS-DepthMapPreprocessor",
|
||||
"LineArtPreprocessor",
|
||||
@ -366,6 +371,8 @@
|
||||
"OneFormer-COCO-SemSegPreprocessor",
|
||||
"OpenposePreprocessor",
|
||||
"PiDiNetPreprocessor",
|
||||
"PixelPerfectResolution",
|
||||
"RaftOpticalFlowPreprocessor",
|
||||
"SAMPreprocessor",
|
||||
"ScribblePreprocessor",
|
||||
"Scribble_XDoG_Preprocessor",
|
||||
@ -515,12 +522,13 @@
|
||||
],
|
||||
"https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet": [
|
||||
[
|
||||
"ControlNetApplyPartialBatch",
|
||||
"ControlNetLoaderAdvanced",
|
||||
"CustomControlNetWeights",
|
||||
"CustomT2IAdapterWeights",
|
||||
"DiffControlNetLoaderAdvanced",
|
||||
"LatentKeyframe",
|
||||
"LatentKeyframeGroup",
|
||||
"LatentKeyframeTiming",
|
||||
"LoadImagesFromDirectory",
|
||||
"ScaledSoftControlNetWeights",
|
||||
"SoftControlNetWeights",
|
||||
@ -534,8 +542,11 @@
|
||||
"https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved": [
|
||||
[
|
||||
"ADE_AnimateDiffCombine",
|
||||
"ADE_AnimateDiffLoaderLegacy",
|
||||
"ADE_AnimateDiffLoaderV1Advanced",
|
||||
"ADE_AnimateDiffLoaderWithContext",
|
||||
"ADE_AnimateDiffUniformContextOptions",
|
||||
"ADE_AnimateDiffUnload",
|
||||
"ADE_EmptyLatentImageLarge",
|
||||
"AnimateDiffLoaderV1",
|
||||
"CheckpointLoaderSimpleWithNoiseSelect"
|
||||
],
|
||||
@ -800,6 +811,7 @@
|
||||
"https://github.com/RockOfFire/CR_Animation_Nodes": [
|
||||
[
|
||||
"CR Central Schedule",
|
||||
"CR Combine Schedules",
|
||||
"CR Current Frame",
|
||||
"CR Cycle Images",
|
||||
"CR Cycle Images Simple",
|
||||
@ -822,15 +834,17 @@
|
||||
"CR Keyframe List",
|
||||
"CR LoRA List",
|
||||
"CR Load Animation Frames",
|
||||
"CR Load Schedule From File",
|
||||
"CR Load Scheduled ControlNets",
|
||||
"CR Load Scheduled LoRAs",
|
||||
"CR Load Scheduled Models",
|
||||
"CR Model List",
|
||||
"CR Output Schedule List",
|
||||
"CR Output Schedule To File",
|
||||
"CR Prompt List",
|
||||
"CR Prompt List Keyframes",
|
||||
"CR Prompt Text",
|
||||
"CR Schedule Input Switch",
|
||||
"CR Schedule To ScheduleList",
|
||||
"CR Simple Prompt List",
|
||||
"CR Simple Prompt List Keyframes",
|
||||
"CR Simple Schedule",
|
||||
@ -852,6 +866,7 @@
|
||||
"CR Apply ControlNet",
|
||||
"CR Apply LoRA Stack",
|
||||
"CR Apply Model Merge",
|
||||
"CR Apply Multi Upscale",
|
||||
"CR Apply Multi-ControlNet",
|
||||
"CR Aspect Ratio",
|
||||
"CR Aspect Ratio SDXL",
|
||||
@ -883,6 +898,7 @@
|
||||
"CR Module Input",
|
||||
"CR Module Output",
|
||||
"CR Module Pipe Loader",
|
||||
"CR Multi Upscale Stack",
|
||||
"CR Multi-ControlNet Stack",
|
||||
"CR Pipe Switch",
|
||||
"CR Process Switch",
|
||||
@ -896,7 +912,8 @@
|
||||
"CR Seed to Int",
|
||||
"CR Switch Model and CLIP",
|
||||
"CR Text Input Switch",
|
||||
"CR Text Input Switch (4 way)"
|
||||
"CR Text Input Switch (4 way)",
|
||||
"CR Upscale Image"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI_Comfyroll_CustomNodes"
|
||||
@ -1043,7 +1060,10 @@
|
||||
],
|
||||
"https://github.com/TRI3D-LC/tri3d-comfyui-nodes": [
|
||||
[
|
||||
"tri3d-extract-hand"
|
||||
"tri3d-atr-parse",
|
||||
"tri3d-extract-hand",
|
||||
"tri3d-fuzzification",
|
||||
"tri3d-position-hands"
|
||||
],
|
||||
{
|
||||
"title_aux": "tri3d-comfyui-nodes"
|
||||
@ -1104,6 +1124,15 @@
|
||||
"title_aux": "Embedding Picker"
|
||||
}
|
||||
],
|
||||
"https://github.com/Tropfchen/ComfyUI-yaResolutionSelector": [
|
||||
[
|
||||
"YARS",
|
||||
"YARSAdv"
|
||||
],
|
||||
{
|
||||
"title_aux": "YARS: Yet Another Resolution Selector"
|
||||
}
|
||||
],
|
||||
"https://github.com/Ttl/ComfyUi_NNLatentUpscale": [
|
||||
[
|
||||
"NNLatentUpscale"
|
||||
@ -1112,14 +1141,6 @@
|
||||
"title_aux": "ComfyUI Neural network latent upscale custom node"
|
||||
}
|
||||
],
|
||||
"https://github.com/Vrahn/ComfyUI-MasaCtrl-Node": [
|
||||
[
|
||||
"MasaCtrl"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-MasaCtrl-Node"
|
||||
}
|
||||
],
|
||||
"https://github.com/WASasquatch/ComfyUI_Preset_Merger": [
|
||||
[
|
||||
"Preset_Model_Merge"
|
||||
@ -1128,6 +1149,14 @@
|
||||
"title_aux": "ComfyUI Preset Merger"
|
||||
}
|
||||
],
|
||||
"https://github.com/WASasquatch/FreeU_Advanced": [
|
||||
[
|
||||
"FreeU (Advanced)"
|
||||
],
|
||||
{
|
||||
"title_aux": "FreeU_Advanced"
|
||||
}
|
||||
],
|
||||
"https://github.com/WASasquatch/PPF_Noise_ComfyUI": [
|
||||
[
|
||||
"Blend Latents (PPF Noise)",
|
||||
@ -1393,7 +1422,9 @@
|
||||
"https://github.com/Zuellni/ComfyUI-ExLlama": [
|
||||
[
|
||||
"ZuellniExLlamaGenerator",
|
||||
"ZuellniExLlamaLoader"
|
||||
"ZuellniExLlamaLoader",
|
||||
"ZuellniExLlamaLora",
|
||||
"ZuellniExLlamaPreviewer"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-ExLlama"
|
||||
@ -1437,22 +1468,32 @@
|
||||
"CSV Generator [Dream]",
|
||||
"Calculation [Dream]",
|
||||
"Common Frame Dimensions [Dream]",
|
||||
"Compare Palettes [Dream]",
|
||||
"FFMPEG Video Encoder [Dream]",
|
||||
"File Count [Dream]",
|
||||
"Finalize Prompt [Dream]",
|
||||
"Float Input [Dream]",
|
||||
"Float to Log Entry [Dream]",
|
||||
"Frame Count Calculator [Dream]",
|
||||
"Frame Counter (Directory) [Dream]",
|
||||
"Frame Counter (Simple) [Dream]",
|
||||
"Frame Counter Info [Dream]",
|
||||
"Frame Counter Offset [Dream]",
|
||||
"Frame Counter Time Offset [Dream]",
|
||||
"Image Brightness Adjustment [Dream]",
|
||||
"Image Color Shift [Dream]",
|
||||
"Image Contrast Adjustment [Dream]",
|
||||
"Image Motion [Dream]",
|
||||
"Image Sequence Blend [Dream]",
|
||||
"Image Sequence Loader [Dream]",
|
||||
"Image Sequence Saver [Dream]",
|
||||
"Image Sequence Tweening [Dream]",
|
||||
"Int Input [Dream]",
|
||||
"Int to Log Entry [Dream]",
|
||||
"Laboratory [Dream]",
|
||||
"Linear Curve [Dream]",
|
||||
"Log Entry Joiner [Dream]",
|
||||
"Log File [Dream]",
|
||||
"Noise from Area Palettes [Dream]",
|
||||
"Noise from Palette [Dream]",
|
||||
"Palette Color Align [Dream]",
|
||||
@ -1463,10 +1504,13 @@
|
||||
"Sine Curve [Dream]",
|
||||
"Smooth Event Curve [Dream]",
|
||||
"String Input [Dream]",
|
||||
"String Tokenizer [Dream]",
|
||||
"String to Log Entry [Dream]",
|
||||
"Text Input [Dream]",
|
||||
"Triangle Curve [Dream]",
|
||||
"Triangle Event Curve [Dream]",
|
||||
"Video Encoder (mpegCoder) [Dream]"
|
||||
"Video Encoder (mpegCoder) [Dream]",
|
||||
"WAV Curve [Dream]"
|
||||
],
|
||||
{
|
||||
"title_aux": "Dream Project Animation Nodes"
|
||||
@ -1535,6 +1579,8 @@
|
||||
"Prompt With Style",
|
||||
"Prompt With Style V2",
|
||||
"Prompt With Style V3",
|
||||
"Range Float",
|
||||
"Range Integer",
|
||||
"Ratio Advanced",
|
||||
"Resize Image for SDXL",
|
||||
"Save Image If True",
|
||||
@ -1579,8 +1625,12 @@
|
||||
"ChameleonMask",
|
||||
"CheckpointLoader (dirty)",
|
||||
"CheckpointLoaderSimple (dirty)",
|
||||
"Color (RGB)",
|
||||
"Color (hexadecimal)",
|
||||
"Color Clip",
|
||||
"Color Clip (advanced)",
|
||||
"Color Clip ADE20k",
|
||||
"ColorDictionary",
|
||||
"CondList",
|
||||
"Conditioning (combine multiple)",
|
||||
"Conditioning (combine selective)",
|
||||
@ -1591,10 +1641,15 @@
|
||||
"Contours",
|
||||
"ControlNetHadamard",
|
||||
"ControlNetHadamard (manual)",
|
||||
"ConvertImg",
|
||||
"CopyMakeBorder",
|
||||
"CreateRequestMetadata",
|
||||
"Draw Contour(s)",
|
||||
"EqualizeHistogram",
|
||||
"EstimateColorInterval (hsv)",
|
||||
"Filter Contour",
|
||||
"FindComplementaryColor",
|
||||
"FindThreshold",
|
||||
"FlatLatentsIntoSingleGrid",
|
||||
"Framed Mask Grab Cut",
|
||||
"Framed Mask Grab Cut 2",
|
||||
@ -1602,14 +1657,19 @@
|
||||
"Get Models",
|
||||
"Get Prompt",
|
||||
"HypernetworkLoader (dirty)",
|
||||
"InRange (hsv)",
|
||||
"Inpaint",
|
||||
"Input/String to Int Array",
|
||||
"KMeansColor",
|
||||
"Load 64 Encoded Image",
|
||||
"LoraLoader (dirty)",
|
||||
"MaskGrid N KSamplers Advanced",
|
||||
"Merge Latent Batch Gridwise",
|
||||
"MonoMerge",
|
||||
"MorphologicOperation",
|
||||
"MorphologicSkeletoning",
|
||||
"OtsuThreshold",
|
||||
"RGB to HSV",
|
||||
"Rect Grab Cut",
|
||||
"Repeat Into Grid (image)",
|
||||
"Repeat Into Grid (latent)",
|
||||
@ -1728,6 +1788,17 @@
|
||||
"title_aux": "sc-node-comfyui"
|
||||
}
|
||||
],
|
||||
"https://github.com/chrisgoringe/cg-noise": [
|
||||
[
|
||||
"Hijack",
|
||||
"KSampler Advanced with Variations",
|
||||
"KSampler with Variations",
|
||||
"UnHijack"
|
||||
],
|
||||
{
|
||||
"title_aux": "Variation seeds"
|
||||
}
|
||||
],
|
||||
"https://github.com/city96/ComfyUI_DiT": [
|
||||
[
|
||||
"DiTCheckpointLoader",
|
||||
@ -1821,7 +1892,6 @@
|
||||
"https://github.com/cubiq/ComfyUI_IPAdapter_plus": [
|
||||
[
|
||||
"IPAdapterApply",
|
||||
"IPAdapterCLIPVisionEncode",
|
||||
"IPAdapterModelLoader"
|
||||
],
|
||||
{
|
||||
@ -1837,6 +1907,26 @@
|
||||
"title_aux": "Simple Math"
|
||||
}
|
||||
],
|
||||
"https://github.com/cubiq/ComfyUI_essentials": [
|
||||
[
|
||||
"ConsoleDebug+",
|
||||
"GetImageSize+",
|
||||
"GrowShrinkMask+",
|
||||
"ImageCASharpening+",
|
||||
"ImageCrop+",
|
||||
"ImageDesaturate+",
|
||||
"ImageFlip+",
|
||||
"ImagePosterize+",
|
||||
"ImageResize+",
|
||||
"MaskBlur+",
|
||||
"MaskFlip+",
|
||||
"MaskPreview+",
|
||||
"SimpleMath+"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI Essentials"
|
||||
}
|
||||
],
|
||||
"https://github.com/dagthomas/comfyui_dagthomas": [
|
||||
[
|
||||
"CSL",
|
||||
@ -2136,6 +2226,16 @@
|
||||
"title_aux": "attention-couple-ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI": [
|
||||
[
|
||||
"CDTuner",
|
||||
"Negapip",
|
||||
"Negpip"
|
||||
],
|
||||
{
|
||||
"title_aux": "cd-tuner_negpip-ComfyUI"
|
||||
}
|
||||
],
|
||||
"https://github.com/laksjdjf/pfg-ComfyUI": [
|
||||
[
|
||||
"PFG"
|
||||
@ -2273,6 +2373,7 @@
|
||||
"ReencodeLatentPipe",
|
||||
"RegionalPrompt",
|
||||
"RegionalSampler",
|
||||
"RegionalSamplerAdvanced",
|
||||
"RemoveNoiseMask",
|
||||
"SAMDetectorCombined",
|
||||
"SAMDetectorSegmented",
|
||||
@ -2316,9 +2417,14 @@
|
||||
[
|
||||
"Canny_Preprocessor_Provider_for_SEGS //Inspire",
|
||||
"DWPreprocessor_Provider_for_SEGS //Inspire",
|
||||
"FakeScribblePreprocessor_Provider_for_SEGS //Inspire",
|
||||
"GlobalSeed //Inspire",
|
||||
"HEDPreprocessor_Provider_for_SEGS //Inspire",
|
||||
"KSampler //Inspire",
|
||||
"KSamplerAdvanced //Inspire",
|
||||
"LeRes_DepthMap_Preprocessor_Provider_for_SEGS //Inspire",
|
||||
"LoadPromptsFromDir //Inspire",
|
||||
"LoadPromptsFromFile //Inspire",
|
||||
"LoraBlockInfo //Inspire",
|
||||
"LoraLoaderBlockWeight //Inspire",
|
||||
"MediaPipeFaceMeshDetectorProvider //Inspire",
|
||||
@ -2377,6 +2483,15 @@
|
||||
"title_aux": "Facerestore CF (Code Former)"
|
||||
}
|
||||
],
|
||||
"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding": [
|
||||
[
|
||||
"DynamicThresholdingFull",
|
||||
"DynamicThresholdingSimple"
|
||||
],
|
||||
{
|
||||
"title_aux": "Stable Diffusion Dynamic Thresholding (CFG Scale Fix)"
|
||||
}
|
||||
],
|
||||
"https://github.com/meap158/ComfyUI-GPU-temperature-protection": [
|
||||
[
|
||||
"GPUTemperatureProtection"
|
||||
@ -2385,6 +2500,14 @@
|
||||
"title_aux": "GPU temperature protection"
|
||||
}
|
||||
],
|
||||
"https://github.com/meap158/ComfyUI-Prompt-Expansion": [
|
||||
[
|
||||
"PromptExpansion"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-Prompt-Expansion"
|
||||
}
|
||||
],
|
||||
"https://github.com/melMass/comfy_mtb": [
|
||||
[
|
||||
"Animation Builder (mtb)",
|
||||
@ -2558,9 +2681,7 @@
|
||||
[
|
||||
"AdaptiveCannyDetector_PoP",
|
||||
"AnyAspectRatio",
|
||||
"ConditioningMultiplierPoP",
|
||||
"ConditioningMultiplier_PoP",
|
||||
"ConditioningNormalizerPoP",
|
||||
"ConditioningNormalizer_PoP",
|
||||
"LoadImageResizer_PoP",
|
||||
"LoraStackLoader10_PoP",
|
||||
@ -2608,6 +2729,21 @@
|
||||
"title_aux": "A8R8 ComfyUI Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/receyuki/comfyui-prompt-reader-node": [
|
||||
[
|
||||
"SDParameterGenerator",
|
||||
"SDPromptMerger",
|
||||
"SDPromptReader",
|
||||
"SDPromptSaver"
|
||||
],
|
||||
{
|
||||
"author": "receyuki",
|
||||
"description": "ComfyUI node version of SD Prompt Reader",
|
||||
"nickname": "SD Prompt Reader",
|
||||
"title": "SD Prompt Reader",
|
||||
"title_aux": "comfyui-prompt-reader-node"
|
||||
}
|
||||
],
|
||||
"https://github.com/richinsley/Comfy-LFO": [
|
||||
[
|
||||
"LFO_Pulse",
|
||||
@ -2620,6 +2756,15 @@
|
||||
"title_aux": "Comfy-LFO"
|
||||
}
|
||||
],
|
||||
"https://github.com/rklaffehn/rk-comfy-nodes": [
|
||||
[
|
||||
"RK_CivitAIAddHashes",
|
||||
"RK_CivitAIMetaChecker"
|
||||
],
|
||||
{
|
||||
"title_aux": "rk-comfy-nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/s1dlx/comfy_meh/raw/main/meh.py": [
|
||||
[
|
||||
"MergingExecutionHelper"
|
||||
@ -2675,6 +2820,7 @@
|
||||
[
|
||||
"AV_CheckpointModelsToParametersPipe",
|
||||
"AV_ControlNetEfficientLoader",
|
||||
"AV_ControlNetEfficientLoaderAdvanced",
|
||||
"AV_ControlNetEfficientStacker",
|
||||
"AV_ControlNetLoader",
|
||||
"AV_ControlNetPreprocessor",
|
||||
@ -2688,6 +2834,7 @@
|
||||
"BLIPCaption",
|
||||
"ColorBlend",
|
||||
"ColorCorrect",
|
||||
"DeepDanbooruCaption",
|
||||
"DependenciesEdit",
|
||||
"Fooocus_KSampler",
|
||||
"Fooocus_KSamplerAdvanced",
|
||||
@ -2742,8 +2889,22 @@
|
||||
"title_aux": "nui suite"
|
||||
}
|
||||
],
|
||||
"https://github.com/spacepxl/ComfyUI-HQ-Image-Save": [
|
||||
[
|
||||
"LoadLatentEXR",
|
||||
"SaveEXR",
|
||||
"SaveLatentEXR",
|
||||
"SaveTiff"
|
||||
],
|
||||
{
|
||||
"title_aux": "ComfyUI-HQ-Image-Save"
|
||||
}
|
||||
],
|
||||
"https://github.com/spinagon/ComfyUI-seamless-tiling": [
|
||||
[
|
||||
"CircularVAEDecode",
|
||||
"MakeCircularVAE",
|
||||
"OffsetImage",
|
||||
"SeamlessTile"
|
||||
],
|
||||
{
|
||||
@ -2836,7 +2997,10 @@
|
||||
],
|
||||
"https://github.com/szhublox/ambw_comfyui": [
|
||||
[
|
||||
"Auto Merge Block Weighted"
|
||||
"Auto Merge Block Weighted",
|
||||
"CLIPMergeSimple",
|
||||
"ModelMergeBlocks",
|
||||
"ModelMergeSimple"
|
||||
],
|
||||
{
|
||||
"title_aux": "Auto-MBW"
|
||||
@ -2910,6 +3074,25 @@
|
||||
"title_aux": "Hakkun-ComfyUI-nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/tusharbhutt/Endless-Nodes": [
|
||||
[
|
||||
"Endless Nodes Combo Parameterizer",
|
||||
"Endless Nodes Combo Parameterizer & Prompts",
|
||||
"Endless Nodes Eight Input Text Switch",
|
||||
"Endless Nodes Parameterizer",
|
||||
"Endless Nodes Parameterizer & Prompts",
|
||||
"Endless Nodes Six Input Text Switch",
|
||||
"Endless Nodes Six Integer IO Switch",
|
||||
"Endless Nodes Six Integer IO Widget"
|
||||
],
|
||||
{
|
||||
"author": "Endless Sea of Stars",
|
||||
"description": "A small set of nodes I created for various numerical and text inputs.",
|
||||
"nickname": "Endless Nodes",
|
||||
"title": "Endless Nodes",
|
||||
"title_aux": "Endless Nodes"
|
||||
}
|
||||
],
|
||||
"https://github.com/twri/sdxl_prompt_styler": [
|
||||
[
|
||||
"SDXLPromptStyler",
|
||||
@ -2939,6 +3122,7 @@
|
||||
"CLIP Positive-Negative XL w/Text (WLSH)",
|
||||
"CLIP Positive-Negative w/Text (WLSH)",
|
||||
"Checkpoint Loader w/Name (WLSH)",
|
||||
"Empty Latent by Pixels (WLSH)",
|
||||
"Empty Latent by Ratio (WLSH)",
|
||||
"Generate Edge Mask (WLSH)",
|
||||
"Generate Face Mask (WLSH)",
|
||||
@ -2952,6 +3136,7 @@
|
||||
"Resolutions by Ratio (WLSH)",
|
||||
"SDXL Quick Empty Latent (WLSH)",
|
||||
"SDXL Quick Image Scale (WLSH)",
|
||||
"SDXL Resolution Multiplier (WLSH)",
|
||||
"SDXL Resolutions (WLSH)",
|
||||
"SDXL Steps (WLSH)",
|
||||
"Save Positive Prompt File (WLSH)",
|
||||
@ -2969,6 +3154,7 @@
|
||||
],
|
||||
"https://github.com/wolfden/ComfyUi_PromptStylers": [
|
||||
[
|
||||
"SDXLPromptStylerAll",
|
||||
"SDXLPromptStylerHorror",
|
||||
"SDXLPromptStylerMisc",
|
||||
"SDXLPromptStylerbyArtist",
|
||||
@ -2994,11 +3180,14 @@
|
||||
"SDXLPromptStylerbyTimeofDay",
|
||||
"SDXLPromptStylerbyWyvern",
|
||||
"SDXLPromptbyCelticArt",
|
||||
"SDXLPromptbyContemporaryNordicArt",
|
||||
"SDXLPromptbyFashionArt",
|
||||
"SDXLPromptbyGothicRevival",
|
||||
"SDXLPromptbyIrishFolkArt",
|
||||
"SDXLPromptbyRomanticNationalismArt",
|
||||
"SDXLPromptbySportsArt",
|
||||
"SDXLPromptbyStreetArt",
|
||||
"SDXLPromptbyVikingArt",
|
||||
"SDXLPromptbyWildlifeArt"
|
||||
],
|
||||
{
|
||||
@ -3050,12 +3239,20 @@
|
||||
],
|
||||
"https://github.com/youyegit/tdxh_node_comfyui": [
|
||||
[
|
||||
"TdxhBoolNumber",
|
||||
"TdxhClipVison",
|
||||
"TdxhControlNetApply",
|
||||
"TdxhControlNetProcessor",
|
||||
"TdxhFloatInput",
|
||||
"TdxhImageToSize",
|
||||
"TdxhImageToSizeAdvanced",
|
||||
"TdxhImg2ImgLatent",
|
||||
"TdxhIntInput",
|
||||
"TdxhLoraLoader",
|
||||
"TdxhStringInput"
|
||||
"TdxhOnOrOff",
|
||||
"TdxhReference",
|
||||
"TdxhStringInput",
|
||||
"TdxhStringInputTranslator"
|
||||
],
|
||||
{
|
||||
"title_aux": "tdxh_node_comfyui"
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -4,44 +4,81 @@ import subprocess
|
||||
import sys
|
||||
import atexit
|
||||
import threading
|
||||
import re
|
||||
|
||||
# Logger setup
|
||||
if os.path.exists("comfyui.log"):
|
||||
if os.path.exists("comfyui.prev.log"):
|
||||
os.remove("comfyui.prev.log")
|
||||
os.rename("comfyui.log", "comfyui.prev.log")
|
||||
try:
|
||||
# Logger setup
|
||||
if os.path.exists("comfyui.log"):
|
||||
if os.path.exists("comfyui.prev.log"):
|
||||
if os.path.exists("comfyui.prev2.log"):
|
||||
os.remove("comfyui.prev2.log")
|
||||
os.rename("comfyui.prev.log", "comfyui.prev2.log")
|
||||
os.rename("comfyui.log", "comfyui.prev.log")
|
||||
|
||||
original_stdout = sys.stdout
|
||||
original_stderr = sys.stderr
|
||||
original_stdout = sys.stdout
|
||||
original_stderr = sys.stderr
|
||||
|
||||
tqdm = r'\d+%.*\[(.*?)\]'
|
||||
|
||||
log_file = open("comfyui.log", "w", encoding="utf-8")
|
||||
log_lock = threading.Lock()
|
||||
|
||||
class Logger:
|
||||
def __init__(self, is_stdout):
|
||||
self.is_stdout = is_stdout
|
||||
|
||||
def write(self, message):
|
||||
if not self.is_stdout:
|
||||
match = re.search(tqdm, message)
|
||||
if match:
|
||||
message = re.sub(r'([#|])\d', r'\1▌', message)
|
||||
message = re.sub('#', '█', message)
|
||||
if '100%' in message:
|
||||
self.sync_write(message)
|
||||
else:
|
||||
original_stderr.write(message)
|
||||
original_stderr.flush()
|
||||
else:
|
||||
self.sync_write(message)
|
||||
else:
|
||||
self.sync_write(message)
|
||||
|
||||
def sync_write(self, message):
|
||||
with log_lock:
|
||||
log_file.write(message)
|
||||
log_file.flush()
|
||||
|
||||
if self.is_stdout:
|
||||
original_stdout.write(message)
|
||||
original_stdout.flush()
|
||||
else:
|
||||
original_stderr.write(message)
|
||||
original_stderr.flush()
|
||||
|
||||
def flush(self):
|
||||
log_file.flush()
|
||||
if self.is_stdout:
|
||||
original_stdout.flush()
|
||||
else:
|
||||
original_stderr.flush()
|
||||
|
||||
|
||||
class Logger:
|
||||
def __init__(self, filename):
|
||||
self.file = open(filename, "w", encoding="utf-8")
|
||||
|
||||
def write(self, message):
|
||||
self.file.write(message)
|
||||
self.file.flush()
|
||||
original_stdout.write(message)
|
||||
original_stdout.flush()
|
||||
|
||||
def flush(self):
|
||||
self.file.flush()
|
||||
original_stdout.flush()
|
||||
|
||||
def close_file(self):
|
||||
self.file.close()
|
||||
def handle_stream(stream, prefix):
|
||||
for line in stream:
|
||||
print(prefix, line, end="")
|
||||
|
||||
|
||||
def handle_stream(stream, prefix):
|
||||
for line in stream:
|
||||
print(prefix, line, end="")
|
||||
def close_log():
|
||||
log_file.close()
|
||||
|
||||
|
||||
sys.stdout = Logger("comfyui.log")
|
||||
sys.stderr = sys.stdout
|
||||
sys.stdout = Logger(True)
|
||||
sys.stderr = Logger(False)
|
||||
|
||||
atexit.register(close_log)
|
||||
except Exception as e:
|
||||
print(f"[ComfyUI-Manager] Logging failed: {e}")
|
||||
|
||||
atexit.register(sys.stdout.close_file)
|
||||
|
||||
print("** ComfyUI start up time:", datetime.datetime.now())
|
||||
|
||||
|
||||
@ -4,7 +4,7 @@ import json
|
||||
from git import Repo
|
||||
from torchvision.datasets.utils import download_url
|
||||
|
||||
builtin_nodes = ["KSampler"]
|
||||
builtin_nodes = ["KSampler", "CheckpointSave"]
|
||||
|
||||
def scan_in_file(filename):
|
||||
try:
|
||||
|
||||
@ -5,24 +5,29 @@ import subprocess
|
||||
def get_enabled_subdirectories_with_files(base_directory):
|
||||
subdirs_with_files = []
|
||||
for subdir in os.listdir(base_directory):
|
||||
full_path = os.path.join(base_directory, subdir)
|
||||
if os.path.isdir(full_path) and not subdir.endswith(".disabled") and not subdir.startswith('.') and subdir != '__pycache__':
|
||||
print(f"## Install dependencies for '{subdir}'")
|
||||
requirements_file = os.path.join(full_path, "requirements.txt")
|
||||
install_script = os.path.join(full_path, "install.py")
|
||||
try:
|
||||
full_path = os.path.join(base_directory, subdir)
|
||||
if os.path.isdir(full_path) and not subdir.endswith(".disabled") and not subdir.startswith('.') and subdir != '__pycache__':
|
||||
print(f"## Install dependencies for '{subdir}'")
|
||||
requirements_file = os.path.join(full_path, "requirements.txt")
|
||||
install_script = os.path.join(full_path, "install.py")
|
||||
|
||||
if os.path.isfile(requirements_file) and os.path.isfile(install_script):
|
||||
subdirs_with_files.append((full_path, requirements_file, install_script))
|
||||
if os.path.exists(requirements_file) or os.path.exists(install_script):
|
||||
subdirs_with_files.append((full_path, requirements_file, install_script))
|
||||
except Exception as e:
|
||||
print(f"EXCEPTION During Dependencies INSTALL on '{subdir}':\n{e}")
|
||||
|
||||
return subdirs_with_files
|
||||
|
||||
|
||||
def install_requirements(requirements_file_path):
|
||||
subprocess.run(["pip", "install", "-r", requirements_file_path])
|
||||
if os.path.exists(requirements_file_path):
|
||||
subprocess.run(["pip", "install", "-r", requirements_file_path])
|
||||
|
||||
|
||||
def run_install_script(install_script_path):
|
||||
subprocess.run(["python", install_script_path])
|
||||
if os.path.exists(install_script_path):
|
||||
subprocess.run(["python", install_script_path])
|
||||
|
||||
|
||||
custom_nodes_directory = "custom_nodes"
|
||||
|
||||
20
scripts/install-comfyui-venv-win.bat
Executable file
20
scripts/install-comfyui-venv-win.bat
Executable file
@ -0,0 +1,20 @@
|
||||
git clone https://github.com/comfyanonymous/ComfyUI
|
||||
cd ComfyUI/custom_nodes
|
||||
git clone https://github.com/ltdrdata/ComfyUI-Manager
|
||||
cd ..
|
||||
python -m venv venv
|
||||
call venv/Scripts/activate
|
||||
python -m pip install -r 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 ..
|
||||
echo "cd ComfyUI" >> run_gpu.sh
|
||||
echo "call venv/Scripts/activate" >> run_gpu.sh
|
||||
echo "python main.py" >> run_gpu.sh
|
||||
chmod +x run_gpu.sh
|
||||
|
||||
echo "#!/bin/bash" > run_cpu.sh
|
||||
echo "cd ComfyUI" >> run_cpu.sh
|
||||
echo "call venv/Scripts/activate" >> run_cpu.sh
|
||||
echo "python main.py --cpu" >> run_cpu.sh
|
||||
chmod +x run_cpu.sh
|
||||
Loading…
x
Reference in New Issue
Block a user