diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 00000000..828f3002 --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,21 @@ +name: Publish to Comfy registry +on: + workflow_dispatch: + push: + branches: + - main + paths: + - "pyproject.toml" + +jobs: + publish-node: + name: Publish Custom Node to registry + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v4 + - name: Publish Custom Node + uses: Comfy-Org/publish-node-action@main + with: + ## Add your own personal access token to your Github Repository secrets and reference it here. + personal_access_token: ${{ secrets.REGISTRY_ACCESS_TOKEN }} \ No newline at end of file diff --git a/README.md b/README.md index 710cf654..306339da 100644 --- a/README.md +++ b/README.md @@ -5,6 +5,8 @@ ![menu](misc/menu.jpg) ## NOTICE +* V2.37 Show a ✅ mark to accounts that have been active on GitHub for more than six months. +* V2.33 Security policy is applied. * V2.21 [cm-cli](docs/en/cm-cli.md) tool is added. * V2.18 to V2.18.3 is not functioning due to a severe bug. Users on these versions are advised to promptly update to V2.18.4. Please navigate to the `ComfyUI/custom_nodes/ComfyUI-Manager` directory and execute `git pull` to update. * You can see whole nodes info on [ComfyUI Nodes Info](https://ltdrdata.github.io/) page. @@ -84,6 +86,7 @@ This repository provides Colab notebooks that allow you to install and use Comfy * Support for automatically installing dependencies of custom nodes upon restarting Colab notebooks. ## Changes +* **2.38** `Install Custom Nodes` menu is changed to `Custom Nodes Manager`. * **2.21** [cm-cli](docs/en/cm-cli.md) tool is added. * **2.4** Copy the connections of the nearest node by double-clicking. * **2.2.3** Support Components System @@ -191,6 +194,7 @@ This repository provides Colab notebooks that allow you to install and use Comfy * 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 * Currently, the system operates by cloning the git repository and sequentially installing the dependencies listed in requirements.txt using pip, followed by invoking the install.py script. In the future, we plan to discuss and determine the specifications for supporting custom nodes. @@ -275,11 +279,11 @@ NODE_CLASS_MAPPINGS.update({ ## Support of missing nodes installation -![missing-menu](misc/missing-menu.png) +![missing-menu](misc/missing-menu.jpg) * When you click on the ```Install Missing Custom Nodes``` button in the menu, it displays a list of extension nodes that contain nodes not currently present in the workflow. -![missing-list](misc/missing-list.png) +![missing-list](misc/missing-list.jpg) ## Additional Feature @@ -338,6 +342,31 @@ When you run the `scan.sh` script: * Edit `config.ini` file: add `windows_selector_event_loop_policy = True` +## Security policy + * Edit `config.ini` file: add `security_level = ` + * `strong` + * doesn't allow `high` and `middle` level risky feature + * `normal` + * doesn't allow `high` level risky feature if `--listen` is specified and not starts with `127.` + * `middle` level risky feature is available + * `weak` + * all feature is available + + * `high` level risky features + * `Install via git url`, `pip install` + * Installation of custom nodes registered not in the `default channel`. + * Display terminal log + + * `middle` level risky features + * Uninstall/Update/Fix custom nodes + * Installation of custom nodes registered in the `default channel`. + * Restore/Remove Snapshot + * Restart + + * `low` level risky features + * Update ComfyUI + + ## TODO: Unconventional form of custom node list * https://github.com/diontimmer/Sample-Diffusion-ComfyUI-Extension @@ -347,6 +376,10 @@ When you run the `scan.sh` script: * https://github.com/NielsGercama/comfyui_customsampling * https://github.com/wrightdaniel2017/ComfyUI-VideoLipSync * https://github.com/bxdsjs/ComfyUI-Image-preprocessing +* https://github.com/SMUELDigital/ComfyUI-ONSET +* https://github.com/SimithWang/comfyui-renameImages +* https://github.com/icefairy64/comfyui-model-tilt +* https://github.com/andrewharp/ComfyUI-EasyNodes ## Roadmap diff --git a/alter-list.json b/alter-list.json index dba5f954..33398277 100644 --- a/alter-list.json +++ b/alter-list.json @@ -28,7 +28,7 @@ { "id":"https://github.com/BadCafeCode/masquerade-nodes-comfyui", "tags":"ddetailer", - "description": "This extension provides a way to recognize and enhance masks for faces similar to Impact Pack." + "description": "This extension is a less feature-rich and well-maintained alternative to Impact Pack, but it has fewer dependencies and may be easier to install on abnormal configurations. The author recommends trying Impact Pack first." }, { "id":"https://github.com/BlenderNeko/ComfyUI_Cutoff", @@ -126,7 +126,7 @@ "description": "This is a ported version of ComfyUI for the sd-webui-roop-nsfw extension." }, { - "id":"https://github.com/laksjdjf/attention-couple-ComfyUI", + "id":"https://github.com/laksjdjf/cgem156-ComfyUI", "tags":"regional prompt, latent couple, prompt", "description": "This custom nodes provide a functionality similar to regional prompts, offering couple features at the attention level." }, @@ -209,6 +209,16 @@ "id":"https://github.com/AIFSH/ComfyUI-RVC", "tags":"sonar", "description": "a comfyui custom node for [a/Retrieval-based-Voice-Conversion-WebUI](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git), you can Voice-Conversion in comfyui now!" + }, + { + "id":"https://github.com/portu-sim/comfyui-bmab", + "tags":"bmab", + "description": "a comfyui custom node for [a/sd-webui-bmab](https://github.com/portu-sim/sd-webui-bmab)" + }, + { + "id":"https://github.com/ThereforeGames/ComfyUI-Unprompted", + "tags":"unprompted", + "description": "This extension is a port of [a/unprompted](https://github.com/ThereforeGames/unprompted)" } ] } \ No newline at end of file diff --git a/check.sh b/check.sh index c57178bc..6fa408c7 100755 --- a/check.sh +++ b/check.sh @@ -1,5 +1,8 @@ #!/bin/bash +echo +echo CHECK1 + files=( "custom-node-list.json" "model-list.json" @@ -26,3 +29,14 @@ files=( for file in "${files[@]}"; do python json-checker.py "$file" done + +echo +echo CHECK2 +find ~/.tmp/default -name "*.py" -print0 | xargs -0 grep "crypto" + +echo +echo CHECK3 +find ~/.tmp/default -name "requirements.txt" | xargs grep "^\s*https\\?:" +find ~/.tmp/default -name "requirements.txt" | xargs grep "\.whl" + +echo diff --git a/cm-cli.py b/cm-cli.py index b026c099..d3dd05aa 100644 --- a/cm-cli.py +++ b/cm-cli.py @@ -1,4 +1,3 @@ - import os import sys import traceback @@ -8,38 +7,24 @@ import subprocess import shutil import concurrent import threading +from typing import Optional + +import typer +from rich import print +from typing_extensions import List, Annotated +import re +import git sys.path.append(os.path.dirname(__file__)) sys.path.append(os.path.join(os.path.dirname(__file__), "glob")) import manager_core as core import cm_global -import git - - -print(f"\n-= ComfyUI-Manager CLI ({core.version_str}) =-\n") - - -if not (len(sys.argv) == 2 and sys.argv[1] in ['save-snapshot', 'restore-dependencies', 'clear']) and len(sys.argv) < 3: - print(f"\npython cm-cli.py [OPTIONS]\n\n" - f"OPTIONS:\n" - f" [install|reinstall|uninstall|update|disable|enable|fix] node_name ... ?[--channel ] ?[--mode [remote|local|cache]]\n" - f" [update|disable|enable|fix] all ?[--channel ] ?[--mode [remote|local|cache]]\n" - f" [simple-show|show] [installed|enabled|not-installed|disabled|all|snapshot|snapshot-list] ?[--channel ] ?[--mode [remote|local|cache]]\n" - f" save-snapshot ?[--output ]\n" - f" restore-snapshot ?[--pip-non-url] ?[--pip-non-local-url] ?[--pip-local-url]\n" - f" cli-only-mode [enable|disable]\n" - f" restore-dependencies\n" - f" deps-in-workflow --workflow --output \n" - f" install-deps \n" - f" clear\n") - exit(-1) - comfyui_manager_path = os.path.dirname(__file__) comfy_path = os.environ.get('COMFYUI_PATH') if comfy_path is None: - print(f"WARN: The `COMFYUI_PATH` environment variable is not set. Assuming `custom_nodes/ComfyUI-Manager/../../` as the ComfyUI path.\n", file=sys.stderr) + print(f"\n[bold yellow]WARN: The `COMFYUI_PATH` environment variable is not set. Assuming `custom_nodes/ComfyUI-Manager/../../` as the ComfyUI path.[/bold yellow]", file=sys.stderr) comfy_path = os.path.abspath(os.path.join(comfyui_manager_path, '..', '..')) startup_script_path = os.path.join(comfyui_manager_path, "startup-scripts") @@ -57,146 +42,6 @@ if os.path.exists(pip_overrides_path): cm_global.pip_overrides = json.load(json_file) -processed_install = set() - - -def post_install(url): - try: - repository_name = url.split("/")[-1].strip() - repo_path = os.path.join(custom_nodes_path, repository_name) - repo_path = os.path.abspath(repo_path) - - requirements_path = os.path.join(repo_path, 'requirements.txt') - install_script_path = os.path.join(repo_path, 'install.py') - - if os.path.exists(requirements_path): - with (open(requirements_path, 'r', encoding="UTF-8", errors="ignore") as file): - for line in file: - package_name = core.remap_pip_package(line.strip()) - if package_name and not core.is_installed(package_name): - install_cmd = [sys.executable, "-m", "pip", "install", package_name] - output = subprocess.check_output(install_cmd, cwd=repo_path, text=True) - for msg_line in output.split('\n'): - if 'Requirement already satisfied:' in msg_line: - print('.', end='') - else: - print(msg_line) - - if os.path.exists(install_script_path) and f'{repo_path}/install.py' not in processed_install: - processed_install.add(f'{repo_path}/install.py') - install_cmd = [sys.executable, install_script_path] - output = subprocess.check_output(install_cmd, cwd=repo_path, text=True) - for msg_line in output.split('\n'): - if 'Requirement already satisfied:' in msg_line: - print('.', end='') - else: - print(msg_line) - - except Exception: - print(f"ERROR: Restoring '{url}' is failed.") - - -def restore_dependencies(): - node_paths = [os.path.join(custom_nodes_path, name) for name in os.listdir(custom_nodes_path) - if os.path.isdir(os.path.join(custom_nodes_path, name)) and not name.endswith('.disabled')] - - total = len(node_paths) - i = 1 - for x in node_paths: - print(f"----------------------------------------------------------------------------------------------------") - print(f"Restoring [{i}/{total}]: {x}") - post_install(x) - i += 1 - - -def install_deps(): - if not os.path.exists(sys.argv[2]): - print(f"File not found: {sys.argv[2]}") - exit(-1) - else: - with open(sys.argv[2], 'r', encoding="UTF-8", errors="ignore") as json_file: - json_obj = json.load(json_file) - for k in json_obj['custom_nodes'].keys(): - state = core.simple_check_custom_node(k) - if state == 'installed': - continue - elif state == 'not-installed': - core.gitclone_install([k], instant_execution=True) - else: # disabled - core.gitclone_set_active([k], False) - - print("Dependency installation and activation complete.") - - -def restore_snapshot(): - global processed_install - - snapshot_name = sys.argv[2] - extras = [x for x in sys.argv if x in ['--pip-non-url', '--pip-local-url', '--pip-non-local-url']] - - print(f"pips restore mode: {extras}") - - if os.path.exists(snapshot_name): - snapshot_path = os.path.abspath(snapshot_name) - else: - snapshot_path = os.path.join(core.comfyui_manager_path, 'snapshots', snapshot_name) - if not os.path.exists(snapshot_path): - print(f"ERROR: `{snapshot_path}` is not exists.") - exit(-1) - - try: - cloned_repos = [] - checkout_repos = [] - skipped_repos = [] - enabled_repos = [] - disabled_repos = [] - is_failed = False - - def extract_infos(msg_lines): - nonlocal is_failed - - for x in msg_lines: - if x.startswith("CLONE: "): - cloned_repos.append(x[7:]) - elif x.startswith("CHECKOUT: "): - checkout_repos.append(x[10:]) - elif x.startswith("SKIPPED: "): - skipped_repos.append(x[9:]) - elif x.startswith("ENABLE: "): - enabled_repos.append(x[8:]) - elif x.startswith("DISABLE: "): - disabled_repos.append(x[9:]) - elif 'APPLY SNAPSHOT: False' in x: - is_failed = True - - print(f"Restore snapshot.") - cmd_str = [sys.executable, git_script_path, '--apply-snapshot', snapshot_path] + extras - output = subprocess.check_output(cmd_str, cwd=custom_nodes_path, text=True) - msg_lines = output.split('\n') - extract_infos(msg_lines) - - for url in cloned_repos: - post_install(url) - - # print summary - for x in cloned_repos: - print(f"[ INSTALLED ] {x}") - for x in checkout_repos: - print(f"[ CHECKOUT ] {x}") - for x in enabled_repos: - print(f"[ ENABLED ] {x}") - for x in disabled_repos: - print(f"[ DISABLED ] {x}") - - if is_failed: - print("ERROR: Failed to restore snapshot.") - - except Exception: - print("ERROR: Failed to restore snapshot.") - traceback.print_exc() - exit(-1) - - def check_comfyui_hash(): repo = git.Repo(comfy_path) core.comfy_ui_revision = len(list(repo.iter_commits('HEAD'))) @@ -207,7 +52,7 @@ def check_comfyui_hash(): core.comfy_ui_commit_datetime = repo.head.commit.committed_datetime -check_comfyui_hash() +check_comfyui_hash() # This is a preparation step for manager_core def read_downgrade_blacklist(): @@ -227,80 +72,132 @@ def read_downgrade_blacklist(): pass -read_downgrade_blacklist() - -channel = 'default' -mode = 'remote' -nodes = set() +read_downgrade_blacklist() # This is a preparation step for manager_core -def load_custom_nodes(): - channel_dict = core.get_channel_dict() - if channel not in channel_dict: - print(f"ERROR: Invalid channel is specified `--channel {channel}`", file=sys.stderr) - exit(-1) +class Ctx: + def __init__(self): + self.channel = 'default' + self.mode = 'remote' + self.processed_install = set() + self.custom_node_map_cache = None - if mode not in ['remote', 'local', 'cache']: - print(f"ERROR: Invalid mode is specified `--mode {mode}`", file=sys.stderr) - exit(-1) + def set_channel_mode(self, channel, mode): + if mode is not None: + self.mode = mode - channel_url = channel_dict[channel] + valid_modes = ["remote", "local", "cache"] + if mode and mode.lower() not in valid_modes: + typer.echo( + f"Invalid mode: {mode}. Allowed modes are 'remote', 'local', 'cache'.", + err=True, + ) + exit(1) - res = {} - json_obj = asyncio.run(core.get_data_by_mode(mode, 'custom-node-list.json', channel_url=channel_url)) - for x in json_obj['custom_nodes']: - for y in x['files']: - if 'github.com' in y and not (y.endswith('.py') or y.endswith('.js')): - repo_name = y.split('/')[-1] - res[repo_name] = x + if channel is not None: + self.channel = channel - if 'id' in x: - if x['id'] not in res: - res[x['id']] = x + def post_install(self, url): + try: + repository_name = url.split("/")[-1].strip() + repo_path = os.path.join(custom_nodes_path, repository_name) + repo_path = os.path.abspath(repo_path) - return res + requirements_path = os.path.join(repo_path, 'requirements.txt') + install_script_path = os.path.join(repo_path, 'install.py') + + if os.path.exists(requirements_path): + with (open(requirements_path, 'r', encoding="UTF-8", errors="ignore") as file): + for line in file: + package_name = core.remap_pip_package(line.strip()) + if package_name and not core.is_installed(package_name): + install_cmd = [sys.executable, "-m", "pip", "install", package_name] + output = subprocess.check_output(install_cmd, cwd=repo_path, text=True) + for msg_line in output.split('\n'): + if 'Requirement already satisfied:' in msg_line: + print('.', end='') + else: + print(msg_line) + + if os.path.exists(install_script_path) and f'{repo_path}/install.py' not in self.processed_install: + self.processed_install.add(f'{repo_path}/install.py') + install_cmd = [sys.executable, install_script_path] + output = subprocess.check_output(install_cmd, cwd=repo_path, text=True) + for msg_line in output.split('\n'): + if 'Requirement already satisfied:' in msg_line: + print('.', end='') + else: + print(msg_line) + + except Exception: + print(f"ERROR: Restoring '{url}' is failed.") + + def restore_dependencies(self): + node_paths = [os.path.join(custom_nodes_path, name) for name in os.listdir(custom_nodes_path) + if os.path.isdir(os.path.join(custom_nodes_path, name)) and not name.endswith('.disabled')] + + total = len(node_paths) + i = 1 + for x in node_paths: + print(f"----------------------------------------------------------------------------------------------------") + print(f"Restoring [{i}/{total}]: {x}") + self.post_install(x) + i += 1 + + def load_custom_nodes(self): + channel_dict = core.get_channel_dict() + if self.channel not in channel_dict: + print(f"[bold red]ERROR: Invalid channel is specified `--channel {self.channel}`[/bold red]", file=sys.stderr) + exit(1) + + if self.mode not in ['remote', 'local', 'cache']: + print(f"[bold red]ERROR: Invalid mode is specified `--mode {self.mode}`[/bold red]", file=sys.stderr) + exit(1) + + channel_url = channel_dict[self.channel] + + res = {} + json_obj = asyncio.run(core.get_data_by_mode(self.mode, 'custom-node-list.json', channel_url=channel_url)) + for x in json_obj['custom_nodes']: + for y in x['files']: + if 'github.com' in y and not (y.endswith('.py') or y.endswith('.js')): + repo_name = y.split('/')[-1] + res[repo_name] = (x, False) + + if 'id' in x: + if x['id'] not in res: + res[x['id']] = (x, True) + + return res + + def get_custom_node_map(self): + if self.custom_node_map_cache is not None: + return self.custom_node_map_cache + + self.custom_node_map_cache = self.load_custom_nodes() + + return self.custom_node_map_cache + + def lookup_node_path(self, node_name, robust=False): + if '..' in node_name: + print(f"\n[bold red]ERROR: Invalid node name '{node_name}'[/bold red]\n") + exit(2) + + custom_node_map = self.get_custom_node_map() + if node_name in custom_node_map: + node_url = custom_node_map[node_name][0]['files'][0] + repo_name = node_url.split('/')[-1] + node_path = os.path.join(custom_nodes_path, repo_name) + return node_path, custom_node_map[node_name][0] + elif robust: + node_path = os.path.join(custom_nodes_path, node_name) + return node_path, None + + print(f"\n[bold red]ERROR: Invalid node name '{node_name}'[/bold red]\n") + exit(2) -def process_args(): - global channel - global mode - - i = 2 - while i < len(sys.argv): - if sys.argv[i] == '--channel': - if i+1 < len(sys.argv): - channel = sys.argv[i+1] - i += 1 - elif sys.argv[i] == '--mode': - if i+1 < len(sys.argv): - mode = sys.argv[i+1] - i += 1 - else: - nodes.add(sys.argv[i]) - - i += 1 - - -process_args() -custom_node_map = load_custom_nodes() - - -def lookup_node_path(node_name, robust=False): - if '..' in node_name: - print(f"ERROR: invalid node name '{node_name}'") - exit(-1) - - if node_name in custom_node_map: - node_url = custom_node_map[node_name]['files'][0] - repo_name = node_url.split('/')[-1] - node_path = os.path.join(custom_nodes_path, repo_name) - return node_path, custom_node_map[node_name] - elif robust: - node_path = os.path.join(custom_nodes_path, node_name) - return node_path, None - - print(f"ERROR: invalid node name '{node_name}'") - exit(-1) +cm_ctx = Ctx() def install_node(node_name, is_all=False, cnt_msg=''): @@ -308,38 +205,38 @@ def install_node(node_name, is_all=False, cnt_msg=''): # install via urls res = core.gitclone_install([node_name]) if not res: - print(f"ERROR: An error occurred while installing '{node_name}'.") + print(f"[bold red]ERROR: An error occurred while installing '{node_name}'.[/bold red]") else: print(f"{cnt_msg} [INSTALLED] {node_name:50}") else: - node_path, node_item = lookup_node_path(node_name) + node_path, node_item = cm_ctx.lookup_node_path(node_name) if os.path.exists(node_path): if not is_all: print(f"{cnt_msg} [ SKIPPED ] {node_name:50} => Already installed") - elif os.path.exists(node_path+'.disabled'): + elif os.path.exists(node_path + '.disabled'): enable_node(node_name) else: res = core.gitclone_install(node_item['files'], instant_execution=True, msg_prefix=f"[{cnt_msg}] ") if not res: - print(f"ERROR: An error occurred while installing '{node_name}'.") + print(f"[bold red]ERROR: An error occurred while installing '{node_name}'.[/bold red]") else: print(f"{cnt_msg} [INSTALLED] {node_name:50}") def reinstall_node(node_name, is_all=False, cnt_msg=''): - node_path, node_item = lookup_node_path(node_name) + node_path, node_item = cm_ctx.lookup_node_path(node_name) if os.path.exists(node_path): shutil.rmtree(node_path) - if os.path.exists(node_path+'.disabled'): - shutil.rmtree(node_path+'.disabled') + if os.path.exists(node_path + '.disabled'): + shutil.rmtree(node_path + '.disabled') install_node(node_name, is_all=is_all, cnt_msg=cnt_msg) def fix_node(node_name, is_all=False, cnt_msg=''): - node_path, node_item = lookup_node_path(node_name, robust=True) + node_path, node_item = cm_ctx.lookup_node_path(node_name, robust=True) files = node_item['files'] if node_item is not None else [node_path] @@ -348,18 +245,18 @@ def fix_node(node_name, is_all=False, cnt_msg=''): res = core.gitclone_fix(files, instant_execution=True) if not res: print(f"ERROR: An error occurred while fixing '{node_name}'.") - elif not is_all and os.path.exists(node_path+'.disabled'): + elif not is_all and os.path.exists(node_path + '.disabled'): print(f"{cnt_msg} [ SKIPPED ]: {node_name:50} => Disabled") elif not is_all: print(f"{cnt_msg} [ SKIPPED ]: {node_name:50} => Not installed") def uninstall_node(node_name, is_all=False, cnt_msg=''): - node_path, node_item = lookup_node_path(node_name, robust=True) + node_path, node_item = cm_ctx.lookup_node_path(node_name, robust=True) files = node_item['files'] if node_item is not None else [node_path] - if os.path.exists(node_path) or os.path.exists(node_path+'.disabled'): + if os.path.exists(node_path) or os.path.exists(node_path + '.disabled'): res = core.gitclone_uninstall(files) if not res: print(f"ERROR: An error occurred while uninstalling '{node_name}'.") @@ -370,7 +267,7 @@ def uninstall_node(node_name, is_all=False, cnt_msg=''): def update_node(node_name, is_all=False, cnt_msg=''): - node_path, node_item = lookup_node_path(node_name, robust=True) + node_path, node_item = cm_ctx.lookup_node_path(node_name, robust=True) files = node_item['files'] if node_item is not None else [node_path] @@ -383,13 +280,11 @@ def update_node(node_name, is_all=False, cnt_msg=''): return node_path -def update_parallel(): - global nodes - +def update_parallel(nodes): is_all = False if 'all' in nodes: is_all = True - nodes = [x for x in custom_node_map.keys() if os.path.exists(os.path.join(custom_nodes_path, x)) or os.path.exists(os.path.join(custom_nodes_path, x) + '.disabled')] + nodes = [x for x in cm_ctx.get_custom_node_map().keys() if os.path.exists(os.path.join(custom_nodes_path, x)) or os.path.exists(os.path.join(custom_nodes_path, x) + '.disabled')] nodes = [x for x in nodes if x.lower() not in ['comfy', 'comfyui', 'all']] @@ -421,8 +316,11 @@ def update_parallel(): i = 1 for node_path in processed: - print(f"[{i}/{total}] Post update: {node_path}") - post_install(node_path) + if node_path is None: + print(f"[{i}/{total}] Post update: ERROR") + else: + print(f"[{i}/{total}] Post update: {node_path}") + cm_ctx.post_install(node_path) i += 1 @@ -440,10 +338,10 @@ def enable_node(node_name, is_all=False, cnt_msg=''): if node_name == 'ComfyUI-Manager': return - node_path, node_item = lookup_node_path(node_name, robust=True) + node_path, node_item = cm_ctx.lookup_node_path(node_name, robust=True) - if os.path.exists(node_path+'.disabled'): - current_name = node_path+'.disabled' + if os.path.exists(node_path + '.disabled'): + current_name = node_path + '.disabled' os.rename(current_name, node_path) print(f"{cnt_msg} [ENABLED] {node_name:50}") elif os.path.exists(node_path): @@ -455,22 +353,25 @@ def enable_node(node_name, is_all=False, cnt_msg=''): def disable_node(node_name, is_all=False, cnt_msg=''): if node_name == 'ComfyUI-Manager': return - - node_path, node_item = lookup_node_path(node_name, robust=True) + + node_path, node_item = cm_ctx.lookup_node_path(node_name, robust=True) if os.path.exists(node_path): current_name = node_path - new_name = node_path+'.disabled' + new_name = node_path + '.disabled' os.rename(current_name, new_name) print(f"{cnt_msg} [DISABLED] {node_name:50}") - elif os.path.exists(node_path+'.disabled'): + elif os.path.exists(node_path + '.disabled'): print(f"{cnt_msg} [ SKIPPED] {node_name:50} => Already disabled") elif not is_all: print(f"{cnt_msg} [ SKIPPED] {node_name:50} => Not installed") def show_list(kind, simple=False): - for k, v in custom_node_map.items(): + for k, v in cm_ctx.get_custom_node_map().items(): + if v[1]: + continue + node_path = os.path.join(custom_nodes_path, k) states = set() @@ -479,7 +380,7 @@ def show_list(kind, simple=False): states.add('installed') states.add('enabled') states.add('all') - elif os.path.exists(node_path+'.disabled'): + elif os.path.exists(node_path + '.disabled'): prefix = '[ DISABLED ] ' states.add('installed') states.add('disabled') @@ -493,8 +394,8 @@ def show_list(kind, simple=False): if simple: print(f"{k:50}") else: - short_id = v.get('id', "") - print(f"{prefix} {k:50} {short_id:20} (author: {v['author']})") + short_id = v[0].get('id', "") + print(f"{prefix} {k:50} {short_id:20} (author: {v[0]['author']})") # unregistered nodes candidates = os.listdir(os.path.realpath(custom_nodes_path)) @@ -521,7 +422,7 @@ def show_list(kind, simple=False): states.add('enabled') states.add('all') - if k not in custom_node_map: + if k not in cm_ctx.get_custom_node_map(): if kind in states: if simple: print(f"{k:50}") @@ -561,68 +462,16 @@ def cancel(): os.remove(restore_snapshot_path) -def save_snapshot(): - output_path = None - for i in range(len(sys.argv)): - if sys.argv[i] == '--output': - if len(sys.argv) >= i: - output_path = sys.argv[i+1] - - return core.save_snapshot_with_postfix('snapshot', output_path) - - def auto_save_snapshot(): - return core.save_snapshot_with_postfix('cli-autosave') + path = core.save_snapshot_with_postfix('cli-autosave') + print(f"Current snapshot is saved as `{path}`") -def deps_in_workflow(): - input_path = None - output_path = None - - for i in range(len(sys.argv)): - if sys.argv[i] == '--workflow' and len(sys.argv) > i and not sys.argv[i+1].startswith('-'): - input_path = sys.argv[i+1] - - elif sys.argv[i] == '--output' and len(sys.argv) > i and not sys.argv[i+1].startswith('-'): - output_path = sys.argv[i+1] - - if input_path is None: - print(f"missing arguments: --workflow ") - exit(-1) - elif not os.path.exists(input_path): - print(f"File not found: {input_path}") - exit(-1) - - if output_path is None: - print(f"missing arguments: --output ") - exit(-1) - - used_exts, unknown_nodes = asyncio.run(core.extract_nodes_from_workflow(input_path, mode=mode, channel_url=channel)) - - custom_nodes = {} - for x in used_exts: - custom_nodes[x] = { 'state': core.simple_check_custom_node(x), - 'hash': '-' - } - - res = { - 'custom_nodes': custom_nodes, - 'unknown_nodes': list(unknown_nodes) - } - - with open(output_path, "w", encoding='utf-8') as output_file: - json.dump(res, output_file, indent=4) - - print(f"Workflow dependencies are being saved into {output_path}.") - - -def for_each_nodes(act, allow_all=True): - global nodes - +def for_each_nodes(nodes, act, allow_all=True): is_all = False if allow_all and 'all' in nodes: is_all = True - nodes = [x for x in custom_node_map.keys() if os.path.exists(os.path.join(custom_nodes_path, x)) or os.path.exists(os.path.join(custom_nodes_path, x) + '.disabled')] + nodes = [x for x in cm_ctx.get_custom_node_map().keys() if os.path.exists(os.path.join(custom_nodes_path, x)) or os.path.exists(os.path.join(custom_nodes_path, x) + '.disabled')] nodes = [x for x in nodes if x.lower() not in ['comfy', 'comfyui', 'all']] @@ -637,19 +486,98 @@ def for_each_nodes(act, allow_all=True): i += 1 -op = sys.argv[1] +app = typer.Typer() -if op == 'install': - for_each_nodes(install_node) +@app.command(help="Display help for commands") +def help(ctx: typer.Context): + print(ctx.find_root().get_help()) + ctx.exit(0) -elif op == 'reinstall': - for_each_nodes(reinstall_node) -elif op == 'uninstall': - for_each_nodes(uninstall_node) +@app.command(help="Install custom nodes") +def install( + nodes: List[str] = typer.Argument( + ..., help="List of custom nodes to install" + ), + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + cm_ctx.set_channel_mode(channel, mode) + for_each_nodes(nodes, act=install_node) + + +@app.command(help="Reinstall custom nodes") +def reinstall( + nodes: List[str] = typer.Argument( + ..., help="List of custom nodes to reinstall" + ), + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + cm_ctx.set_channel_mode(channel, mode) + for_each_nodes(nodes, act=reinstall_node) + + +@app.command(help="Uninstall custom nodes") +def uninstall( + nodes: List[str] = typer.Argument( + ..., help="List of custom nodes to uninstall" + ), + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + cm_ctx.set_channel_mode(channel, mode) + for_each_nodes(nodes, act=uninstall_node) + + +@app.command(help="Disable custom nodes") +def update( + nodes: List[str] = typer.Argument( + ..., + help="[all|List of custom nodes to update]" + ), + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + cm_ctx.set_channel_mode(channel, mode) -elif op == 'update': if 'all' in nodes: auto_save_snapshot() @@ -658,76 +586,444 @@ elif op == 'update': update_comfyui() break - update_parallel() + update_parallel(nodes) + + +@app.command(help="Disable custom nodes") +def disable( + nodes: List[str] = typer.Argument( + ..., + help="[all|List of custom nodes to disable]" + ), + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + cm_ctx.set_channel_mode(channel, mode) -elif op == 'disable': if 'all' in nodes: auto_save_snapshot() - for_each_nodes(disable_node, allow_all=True) + for_each_nodes(nodes, disable_node, allow_all=True) + + +@app.command(help="Enable custom nodes") +def enable( + nodes: List[str] = typer.Argument( + ..., + help="[all|List of custom nodes to enable]" + ), + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + cm_ctx.set_channel_mode(channel, mode) -elif op == 'enable': if 'all' in nodes: auto_save_snapshot() - for_each_nodes(enable_node, allow_all=True) + for_each_nodes(nodes, enable_node, allow_all=True) + + +@app.command(help="Fix dependencies of custom nodes") +def fix( + nodes: List[str] = typer.Argument( + ..., + help="[all|List of custom nodes to fix]" + ), + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + cm_ctx.set_channel_mode(channel, mode) -elif op == 'fix': if 'all' in nodes: auto_save_snapshot() - for_each_nodes(fix_node, allow_all=True) + for_each_nodes(nodes, fix_node, allow_all=True) -elif op == 'show': - if sys.argv[2] == 'snapshot': + +@app.command("show", help="Show node list (simple mode)") +def show( + arg: str = typer.Argument( + help="[installed|enabled|not-installed|disabled|all|snapshot|snapshot-list]" + ), + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + valid_commands = [ + "installed", + "enabled", + "not-installed", + "disabled", + "all", + "snapshot", + "snapshot-list", + ] + if arg not in valid_commands: + typer.echo(f"Invalid command: `show {arg}`", err=True) + exit(1) + + cm_ctx.set_channel_mode(channel, mode) + if arg == 'snapshot': show_snapshot() - elif sys.argv[2] == 'snapshot-list': + elif arg == 'snapshot-list': show_snapshot_list() else: - show_list(sys.argv[2]) + show_list(arg) -elif op == 'simple-show': - if sys.argv[2] == 'snapshot': + +@app.command("simple-show", help="Show node list (simple mode)") +def simple_show( + arg: str = typer.Argument( + help="[installed|enabled|not-installed|disabled|all|snapshot|snapshot-list]" + ), + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + valid_commands = [ + "installed", + "enabled", + "not-installed", + "disabled", + "all", + "snapshot", + "snapshot-list", + ] + if arg not in valid_commands: + typer.echo(f"[bold red]Invalid command: `show {arg}`[/bold red]", err=True) + exit(1) + + cm_ctx.set_channel_mode(channel, mode) + if arg == 'snapshot': show_snapshot(True) - elif sys.argv[2] == 'snapshot-list': + elif arg == 'snapshot-list': show_snapshot_list(True) else: - show_list(sys.argv[2], True) + show_list(arg, True) -elif op == 'cli-only-mode': + +@app.command('cli-only-mode', help="Set whether to use ComfyUI-Manager in CLI-only mode.") +def cli_only_mode( + mode: str = typer.Argument( + ..., help="[enable|disable]" + )): cli_mode_flag = os.path.join(os.path.dirname(__file__), '.enable-cli-only-mode') - if sys.argv[2] == 'enable': + if mode.lower() == 'enable': with open(cli_mode_flag, 'w') as file: pass - print(f"\ncli-only-mode: enabled\n") - elif sys.argv[2] == 'disable': + print(f"\nINFO: `cli-only-mode` is enabled\n") + elif mode.lower() == 'disable': if os.path.exists(cli_mode_flag): os.remove(cli_mode_flag) - print(f"\ncli-only-mode: disabled\n") + print(f"\nINFO: `cli-only-mode` is disabled\n") else: - print(f"\ninvalid value for cli-only-mode: {sys.argv[2]}\n") + print(f"\n[bold red]Invalid value for cli-only-mode: {mode}[/bold red]\n") + exit(1) -elif op == "deps-in-workflow": - deps_in_workflow() -elif op == 'save-snapshot': - path = save_snapshot() +@app.command( + "deps-in-workflow", help="Generate dependencies file from workflow (.json/.png)" +) +def deps_in_workflow( + workflow: Annotated[ + str, typer.Option(show_default=False, help="Workflow file (.json/.png)") + ], + output: Annotated[ + str, typer.Option(show_default=False, help="Output file (.json)") + ], + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + cm_ctx.set_channel_mode(channel, mode) + + input_path = workflow + output_path = output + + if not os.path.exists(input_path): + print(f"[bold red]File not found: {input_path}[/bold red]") + exit(1) + + used_exts, unknown_nodes = asyncio.run(core.extract_nodes_from_workflow(input_path, mode=cm_ctx.mode, channel_url=cm_ctx.channel)) + + custom_nodes = {} + for x in used_exts: + custom_nodes[x] = {'state': core.simple_check_custom_node(x), + 'hash': '-' + } + + res = { + 'custom_nodes': custom_nodes, + 'unknown_nodes': list(unknown_nodes) + } + + with open(output_path, "w", encoding='utf-8') as output_file: + json.dump(res, output_file, indent=4) + + print(f"Workflow dependencies are being saved into {output_path}.") + + +@app.command("save-snapshot", help="Save a snapshot of the current ComfyUI environment. If output path isn't provided. Save to ComfyUI-Manager/snapshots path.") +def save_snapshot( + output: Annotated[ + str, + typer.Option( + show_default=False, help="Specify the output file path. (.json/.yaml)" + ), + ] = None, +): + path = core.save_snapshot_with_postfix('snapshot', output) print(f"Current snapshot is saved as `{path}`") -elif op == 'restore-snapshot': - restore_snapshot() -elif op == 'restore-dependencies': - restore_dependencies() +@app.command("restore-snapshot", help="Restore snapshot from snapshot file") +def restore_snapshot( + snapshot_name: str, + pip_non_url: Optional[bool] = typer.Option( + default=None, + show_default=False, + is_flag=True, + help="Restore for pip packages registered on PyPI.", + ), + pip_non_local_url: Optional[bool] = typer.Option( + default=None, + show_default=False, + is_flag=True, + help="Restore for pip packages registered at web URLs.", + ), + pip_local_url: Optional[bool] = typer.Option( + default=None, + show_default=False, + is_flag=True, + help="Restore for pip packages specified by local paths.", + ), +): + extras = [] + if pip_non_url: + extras.append('--pip-non-url') -elif op == 'install-deps': + if pip_non_local_url: + extras.append('--pip-non-local-url') + + if pip_local_url: + extras.append('--pip-local-url') + + print(f"PIPs restore mode: {extras}") + + if os.path.exists(snapshot_name): + snapshot_path = os.path.abspath(snapshot_name) + else: + snapshot_path = os.path.join(core.comfyui_manager_path, 'snapshots', snapshot_name) + if not os.path.exists(snapshot_path): + print(f"[bold red]ERROR: `{snapshot_path}` is not exists.[/bold red]") + exit(1) + + try: + cloned_repos = [] + checkout_repos = [] + skipped_repos = [] + enabled_repos = [] + disabled_repos = [] + is_failed = False + + def extract_infos(msg): + nonlocal is_failed + + for x in msg: + if x.startswith("CLONE: "): + cloned_repos.append(x[7:]) + elif x.startswith("CHECKOUT: "): + checkout_repos.append(x[10:]) + elif x.startswith("SKIPPED: "): + skipped_repos.append(x[9:]) + elif x.startswith("ENABLE: "): + enabled_repos.append(x[8:]) + elif x.startswith("DISABLE: "): + disabled_repos.append(x[9:]) + elif 'APPLY SNAPSHOT: False' in x: + is_failed = True + + print(f"Restore snapshot.") + cmd_str = [sys.executable, git_script_path, '--apply-snapshot', snapshot_path] + extras + output = subprocess.check_output(cmd_str, cwd=custom_nodes_path, text=True) + msg_lines = output.split('\n') + extract_infos(msg_lines) + + for url in cloned_repos: + cm_ctx.post_install(url) + + # print summary + for x in cloned_repos: + print(f"[ INSTALLED ] {x}") + for x in checkout_repos: + print(f"[ CHECKOUT ] {x}") + for x in enabled_repos: + print(f"[ ENABLED ] {x}") + for x in disabled_repos: + print(f"[ DISABLED ] {x}") + + if is_failed: + print(output) + print("[bold red]ERROR: Failed to restore snapshot.[/bold red]") + + except Exception: + print("[bold red]ERROR: Failed to restore snapshot.[/bold red]") + traceback.print_exc() + raise typer.Exit(code=1) + + +@app.command( + "restore-dependencies", help="Restore dependencies from whole installed custom nodes." +) +def restore_dependencies(): + node_paths = [os.path.join(custom_nodes_path, name) for name in os.listdir(custom_nodes_path) + if os.path.isdir(os.path.join(custom_nodes_path, name)) and not name.endswith('.disabled')] + + total = len(node_paths) + i = 1 + for x in node_paths: + print(f"----------------------------------------------------------------------------------------------------") + print(f"Restoring [{i}/{total}]: {x}") + cm_ctx.post_install(x) + i += 1 + + +@app.command( + "post-install", help="Install dependencies and execute installation script" +) +def post_install( + path: str = typer.Argument( + help="path to custom node", + )): + path = os.path.expanduser(path) + cm_ctx.post_install(path) + + +@app.command( + "install-deps", + help="Install dependencies from dependencies file(.json) or workflow(.png/.json)", +) +def install_deps( + deps: str = typer.Argument( + help="Dependency spec file (.json)", + ), + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + ), +): + cm_ctx.set_channel_mode(channel, mode) auto_save_snapshot() - install_deps() -elif op == 'clear': + if not os.path.exists(deps): + print(f"[bold red]File not found: {deps}[/bold red]") + exit(1) + else: + with open(deps, 'r', encoding="UTF-8", errors="ignore") as json_file: + try: + json_obj = json.load(json_file) + except: + print(f"[bold red]Invalid json file: {deps}[/bold red]") + exit(1) + + for k in json_obj['custom_nodes'].keys(): + state = core.simple_check_custom_node(k) + if state == 'installed': + continue + elif state == 'not-installed': + core.gitclone_install([k], instant_execution=True) + else: # disabled + core.gitclone_set_active([k], False) + + print("Dependency installation and activation complete.") + + +@app.command(help="Clear reserved startup action in ComfyUI-Manager") +def clear(): cancel() -else: - print(f"\nInvalid command `{op}`") + +@app.command("export-custom-node-ids", help="Export custom node ids") +def export_custom_node_ids( + path: str, + channel: Annotated[ + str, + typer.Option( + show_default=False, + help="Specify the operation mode" + ), + ] = None, + mode: str = typer.Option( + None, + help="[remote|local|cache]" + )): + cm_ctx.set_channel_mode(channel, mode) + + with open(path, "w", encoding='utf-8') as output_file: + for x in cm_ctx.get_custom_node_map().keys(): + print(x, file=output_file) + + +if __name__ == '__main__': + sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) + sys.exit(app()) print(f"") diff --git a/custom-node-list.json b/custom-node-list.json index 0d96f35a..1751f6ce 100644 --- a/custom-node-list.json +++ b/custom-node-list.json @@ -1,4 +1,4 @@ -{ +{ "custom_nodes": [ { "author": "Dr.Lt.Data", @@ -21,7 +21,7 @@ ], "pip": ["ultralytics"], "install_type": "git-clone", - "description": "This extension offers various detector nodes and detailer nodes that allow you to configure a workflow that automatically enhances facial details. And provide iterative upscaler.\n[w/NOTE:'Segs & Mask' has been renamed to 'ImpactSegsAndMask.' Please replace the node with the new name.]" + "description": "This extension offers various detector nodes and detailer nodes that allow you to configure a workflow that automatically enhances facial details. And provide iterative upscaler." }, { "author": "Dr.Lt.Data", @@ -44,7 +44,18 @@ "https://github.com/comfyanonymous/ComfyUI_experiments" ], "install_type": "git-clone", - "description": "Nodes: ModelSamplerTonemapNoiseTest, TonemapNoiseWithRescaleCFG, ReferenceOnlySimple, RescaleClassifierFreeGuidanceTest, ModelMergeBlockNumber, ModelMergeSDXL, ModelMergeSDXLTransformers, ModelMergeSDXLDetailedTransformers.[w/NOTE: This is a consolidation of the previously separate custom nodes. Please delete the sampler_tonemap.py, sampler_rescalecfg.py, advanced_model_merging.py, sdxl_model_merging.py, and reference_only.py files installed in custom_nodes before.]" + "description": "Nodes: ModelSamplerTonemapNoiseTest, TonemapNoiseWithRescaleCFG, ReferenceOnlySimple, RescaleClassifierFreeGuidanceTest, ModelMergeBlockNumber, ModelMergeSDXL, ModelMergeSDXLTransformers, ModelMergeSDXLDetailedTransformers." + }, + { + "author": "comfyanonymous", + "title": "TensorRT Node for ComfyUI", + "id": "tensorrt", + "reference": "https://github.com/comfyanonymous/ComfyUI_TensorRT", + "files": [ + "https://github.com/comfyanonymous/ComfyUI_TensorRT" + ], + "install_type": "git-clone", + "description": "This node enables the best performance on NVIDIA RTX™ Graphics Cards (GPUs) for Stable Diffusion by leveraging NVIDIA TensorRT." }, { "author": "Stability-AI", @@ -185,15 +196,15 @@ "description": "Proper implementation of ImageMagick - the famous software suite for editing and manipulating digital images to ComfyUI using [a/wandpy](https://github.com/emcconville/wand).\nNOTE: You need to install ImageMagick, manually." }, { - "author": "biegert", + "author": "time-river", "title": "CLIPSeg", "id": "clipseg", - "reference": "https://github.com/biegert/ComfyUI-CLIPSeg", + "reference": "https://github.com/time-river/ComfyUI-CLIPSeg", "files": [ - "https://github.com/biegert/ComfyUI-CLIPSeg/raw/main/custom_nodes/clipseg.py" + "https://github.com/time-river/ComfyUI-CLIPSeg/raw/main/custom_nodes/clipseg.py" ], "install_type": "copy", - "description": "The CLIPSeg node generates a binary mask for a given input image and text prompt." + "description": "The CLIPSeg node generates a binary mask for a given input image and text prompt.\nNOTE:This custom node is a forked custom node with hotfixes applied from the [a/original repository](https://github.com/biegert/ComfyUI-CLIPSeg), which is no longer maintained." }, { "author": "BlenderNeko", @@ -411,6 +422,17 @@ "install_type": "git-clone", "description": "An implementation of the RAG LlamaIndex with Agents from AutoGen" }, + { + "author": "SaltAI", + "title": "SaltAI Language Toolkit", + "id": "saltai-langtool", + "reference": "https://github.com/get-salt-AI/SaltAI_Language_Toolkit", + "files": [ + "https://github.com/get-salt-AI/SaltAI_Language_Toolkit" + ], + "install_type": "git-clone", + "description": "The project integrates the Retrieval Augmented Generation (RAG) tool [a/Llama-Index](https://www.llamaindex.ai/), [a/Microsoft's AutoGen](https://microsoft.github.io/autogen/), and [a/LlaVA-Next](https://github.com/LLaVA-VL/LLaVA-NeXT) with ComfyUI's adaptable node interface, enhancing the functionality and user experience of the platform." + }, { "author": "omar92", "title": "Quality of life Suit:V2", @@ -497,7 +519,7 @@ "https://github.com/BadCafeCode/masquerade-nodes-comfyui" ], "install_type": "git-clone", - "description": "This is a node pack for ComfyUI, primarily dealing with masks." + "description": "This is a low-dependency node pack primarily dealing with masks. The author recommends using Impact-Pack instead (unless you specifically have trouble installing dependencies)." }, { "author": "guoyk93", @@ -918,7 +940,7 @@ "https://github.com/Nourepide/ComfyUI-Allor" ], "install_type": "git-clone", - "description": "Allor is a plugin for ComfyUI with an emphasis on transparency and performance.\n[w/NOTE: If you do not disable the default node override feature in the settings, the built-in nodes, namely ImageScale and ImageScaleBy nodes, will be disabled. (ref: [a/Configutation](https://github.com/Nourepide/ComfyUI-Allor#configuration))]" + "description": "Allor is a plugin for ComfyUI with an emphasis on transparency and performance." }, { "author": "melMass", @@ -1545,7 +1567,7 @@ "https://github.com/Gourieff/ComfyUI-FutureWarningIgnore/raw/main/0_FutureWarningIgnore.py" ], "install_type": "copy", - "description": "This extension collapses 'future warning'" + "description": "This extension collapses 'future warning' messages in your Console" }, { "author": "imb101", @@ -1560,8 +1582,7 @@ }, { "author": "Chaoses-Ib", - "title": "ComfyUI_Ib_CustomNodes", - "id": "ib-nodes", + "title": "ComfyUI_Ib_CustomNodes","id": "ib-nodes", "reference": "https://github.com/Chaoses-Ib/ComfyUI_Ib_CustomNodes", "files": [ "https://github.com/Chaoses-Ib/ComfyUI_Ib_CustomNodes" @@ -1635,6 +1656,17 @@ "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": "theUpsider", + "title": "ComfyUI-Logic", + "id": "comfy-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": "M1kep", "title": "Comfy_KepListStuff", @@ -1745,17 +1777,6 @@ "install_type": "git-clone", "description": "A set of custom nodes to perform image 2 image functions in ComfyUI." }, - { - "author": "theUpsider", - "title": "ComfyUI-Logic", - "id": "comfy-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": "mpiquero7164", "title": "SaveImgPrompt", @@ -1832,6 +1853,28 @@ "install_type": "git-clone", "description": "The main node makes your conditioning go towards similar concepts so to enrich your composition or further away so to make it more precise. It gathers similar pre-cond vectors for as long as the cosine similarity score diminishes. If it climbs back it stops. This allows to set a relative direction to similar concepts.\nThere are examples at the end but [a/you can also check this imgur album](https://imgur.com/a/WvPd81Y) which demonstrates the capability of improving variety." }, + { + "author": "Extraltodeus", + "title": "Stable-Diffusion-temperature-settings", + "id": "sd-temperature", + "reference": "https://github.com/Extraltodeus/Stable-Diffusion-temperature-settings", + "files": [ + "https://github.com/Extraltodeus/Stable-Diffusion-temperature-settings" + ], + "install_type": "git-clone", + "description": "Provides the ability to set the temperature for both UNET and CLIP. For ComfyUI." + }, + { + "author": "Extraltodeus", + "title": "Uncond-Zero-for-ComfyUI", + "id": "uncond-zero", + "reference": "https://github.com/Extraltodeus/Uncond-Zero-for-ComfyUI", + "files": [ + "https://github.com/Extraltodeus/Uncond-Zero-for-ComfyUI" + ], + "install_type": "git-clone", + "description": "Allows to sample without generating any uncond with Stable Diffusion!" + }, { "author": "JPS", "title": "JPS Custom Nodes for ComfyUI", @@ -1857,7 +1900,7 @@ { "author": "hustille", "title": "ComfyUI_Fooocus_KSampler", - "id": "fooocus", + "id": "fooocus-ksampler", "reference": "https://github.com/hustille/ComfyUI_Fooocus_KSampler", "files": [ "https://github.com/hustille/ComfyUI_Fooocus_KSampler" @@ -1921,6 +1964,17 @@ "install_type": "git-clone", "description": "Bridge between ComfyUI and blender's ComfyUI-BlenderAI-node addon." }, + { + "author": "AIGODLIKE", + "title": "ComfyUI-ToonCrafter", + "id": "tooncrafter", + "reference": "https://github.com/AIGODLIKE/ComfyUI-ToonCrafter", + "files": [ + "https://github.com/AIGODLIKE/ComfyUI-ToonCrafter" + ], + "install_type": "git-clone", + "description": "This project is used to enable [a/ToonCrafter](https://github.com/ToonCrafter/ToonCrafter) to be used in ComfyUI.\nYou can use it to achieve generative keyframe animation\nAnd use it in Blender for animation rendering and prediction" + }, { "author": "syllebra", "title": "BilboX's ComfyUI Custom Nodes", @@ -1978,14 +2032,14 @@ }, { "author": "laksjdjf", - "title": "attention-couple-ComfyUI", - "id": "attention-couple", - "reference": "https://github.com/laksjdjf/attention-couple-ComfyUI", + "title": "cgem156-ComfyUI🍌", + "id": "cgem156", + "reference": "https://github.com/laksjdjf/cgem156-ComfyUI", "files": [ - "https://github.com/laksjdjf/attention-couple-ComfyUI" + "https://github.com/laksjdjf/cgem156-ComfyUI" ], "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." + "description": "The custom nodes of laksjdjf have been integrated into the node pack of cgem156🍌.\nNOTE:This includes the attention couple feature." }, { "author": "laksjdjf", @@ -2096,6 +2150,16 @@ "install_type": "git-clone", "description": "Based off of: [a/Birch-san/diffusers-play/approx_vae](https://github.com/Birch-san/diffusers-play/tree/main/approx_vae). This ComfyUI node allows you to quickly preview SDXL 1.0 latents." }, + { + "author": "nagolinc", + "title": "comfyui_openai_node", + "reference": "https://github.com/nagolinc/comfyui_openai_node", + "files": [ + "https://github.com/nagolinc/comfyui_openai_node" + ], + "install_type": "git-clone", + "description": "This provides a single node openai > Open AI query node\nthat takes a system prompt and user message and sends them to chatGPT 3.5\nNote, you MUST have an OPEN AI API key stored in the environment variable OPENAI_API_KEY in order for this to work." + }, { "author": "bradsec", "title": "ResolutionSelector for ComfyUI", @@ -2513,6 +2577,17 @@ "install_type": "git-clone", "description": "Unofficial ComfyUI implementation of [a/RAVE](https://rave-video.github.io/)" }, + { + "author": "spacepxl", + "title": "ComfyUI-StyleGan", + "id": "stylegan", + "reference": "https://github.com/spacepxl/ComfyUI-StyleGan", + "files": [ + "https://github.com/spacepxl/ComfyUI-StyleGan" + ], + "install_type": "git-clone", + "description": "Basic support for StyleGAN2 and StyleGAN3 models." + }, { "author": "PTA", "title": "auto nodes layout", @@ -2533,7 +2608,7 @@ "https://github.com/receyuki/comfyui-prompt-reader-node" ], "install_type": "git-clone", - "description": "ComfyUI node version of the SD Prompt Reader." + "description": "The ultimate solution for managing image metadata and multi-tool compatibility. ComfyUI node version of the SD Prompt Reader." }, { "author": "rklaffehn", @@ -2747,7 +2822,7 @@ { "author": "kijai", "title": "ComfyUI-DDColor", - "id": "ddcolor", + "id": "ddcolor-kijai", "reference": "https://github.com/kijai/ComfyUI-DDColor", "files": [ "https://github.com/kijai/ComfyUI-DDColor" @@ -2756,15 +2831,15 @@ "description": "Node to use [a/DDColor](https://github.com/piddnad/DDColor) in ComfyUI." }, { - "author": "Kijai", + "author": "kijai", "title": "Animatediff MotionLoRA Trainer", "id": "motionlora-trainer", "reference": "https://github.com/kijai/ComfyUI-ADMotionDirector", "files": [ "https://github.com/kijai/ComfyUI-ADMotionDirector" - ], + ], "install_type": "git-clone", - "description": "This is a trainer for AnimateDiff MotionLoRAs, based on the implementation of MotionDirector by ExponentialML." + "description": "This is a trainer for AnimateDiff MotionLoRAs, based on the implementation of MotionDirector by ExponentialML.\nNOTE:[a/ADMotionDirector](https://github.com/ExponentialML/AnimateDiff-MotionDirector)" }, { "author": "kijai", @@ -2791,12 +2866,13 @@ { "author": "kijai", "title": "ComfyUI-DynamiCrafterWrapper", + "id": "dynamicrafter-kijai", "reference": "https://github.com/kijai/ComfyUI-DynamiCrafterWrapper", "files": [ "https://github.com/kijai/ComfyUI-DynamiCrafterWrapper" ], "install_type": "git-clone", - "description": "Wrapper nodes to use DynamiCrafter image2video and frame interpolation models in ComfyUI" + "description": "Wrapper nodes to use DynamiCrafter image2video and frame interpolation models in ComfyUI\nAnd this extension supports ToonCrafter as well" }, { "author": "kijai", @@ -2850,6 +2926,28 @@ "install_type": "git-clone", "description": "ComfyUI wrapper nodes to use the Diffusers implementation of BrushNet" }, + { + "author": "kijai", + "title": "ComfyUI-IC-Light", + "id": "ic-light-kijai", + "reference": "https://github.com/kijai/ComfyUI-IC-Light", + "files": [ + "https://github.com/kijai/ComfyUI-IC-Light" + ], + "install_type": "git-clone", + "description": "ComfyUI native nodes for IC-Light" + }, + { + "author": "kijai", + "title": "ComfyUI-DepthAnythingV2", + "id": "depth-anything-v2", + "reference": "https://github.com/kijai/ComfyUI-DepthAnythingV2", + "files": [ + "https://github.com/kijai/ComfyUI-DepthAnythingV2" + ], + "install_type": "git-clone", + "description": "ComfyUI nodes to use [a/DepthAnythingV2](https://depth-anything-v2.github.io/)\nNOTE:Models autodownload to ComfyUI/models/depthanything from [a/https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main](https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main)" + }, { "author": "hhhzzyang", "title": "Comfyui-Lama", @@ -2916,6 +3014,17 @@ "install_type": "git-clone", "description": "Nodes: tri3d-extract-hand, tri3d-fuzzification, tri3d-position-hands, tri3d-atr-parse." }, + { + "author": "TRI3D-LC", + "title": "ComfyUI-MiroBoard", + "id": "miroboard", + "reference": "https://github.com/TRI3D-LC/ComfyUI-MiroBoard", + "files": [ + "https://github.com/TRI3D-LC/ComfyUI-MiroBoard" + ], + "install_type": "git-clone", + "description": "Nodes: add-image-miro-board." + }, { "author": "storyicon", "title": "segment anything", @@ -2927,6 +3036,17 @@ "install_type": "git-clone", "description": "Based on GroundingDino and SAM, use semantic strings to segment any element in an image. The comfyui version of sd-webui-segment-anything." }, + { + "author": "storyicon", + "title": "ComfyUI MuseV Evolved", + "id": "musev-evolved", + "reference": "https://github.com/storyicon/comfyui_musev_evolved", + "files": [ + "https://github.com/storyicon/comfyui_musev_evolved" + ], + "install_type": "git-clone", + "description": "Nodes:MuseVImg2Vid (comfyui_musev_evolved)\nNOTE: Download [a/MuseV](https://huggingface.co/TMElyralab/MuseV) to ComfyUI/models/diffusers" + }, { "author": "a1lazydog", "title": "ComfyUI-AudioScheduler", @@ -3133,6 +3253,28 @@ "install_type": "git-clone", "description": "[a/ImageReward](https://github.com/THUDM/ImageReward): Human preference learning in text-to-image generation. This is a [a/paper](https://arxiv.org/abs/2304.05977) from NeurIPS 2023" }, + { + "author": "shadowcz007", + "title": "comfyui-sound-lab", + "id": "soundlab", + "reference": "https://github.com/shadowcz007/comfyui-sound-lab", + "files": [ + "https://github.com/shadowcz007/comfyui-sound-lab" + ], + "install_type": "git-clone", + "description": "Nodes:Music Gen, Audio Play, Stable Audio" + }, + { + "author": "shadowcz007", + "title": "comfyui-edit-mask", + "id": "edit-mask", + "reference": "https://github.com/shadowcz007/comfyui-edit-mask", + "files": [ + "https://github.com/shadowcz007/comfyui-edit-mask" + ], + "install_type": "git-clone", + "description": "Nodes:Edit Mask" + }, { "author": "ostris", "title": "Ostris Nodes ComfyUI", @@ -3720,6 +3862,7 @@ { "author": "komojini", "title": "komojini-comfyui-nodes", + "id": "komojini-nodes", "reference": "https://github.com/komojini/komojini-comfyui-nodes", "files": [ "https://github.com/komojini/komojini-comfyui-nodes" @@ -3730,6 +3873,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "APISR IN COMFYUI", + "id": "apisr-zho", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-APISR", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-APISR" @@ -3740,6 +3884,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI-Text_Image-Composite [WIP]", + "id": "txtimg-composite", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Text_Image-Composite", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Text_Image-Composite" @@ -3750,6 +3895,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI-Gemini", + "id": "gemini", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Gemini", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Gemini" @@ -3760,6 +3906,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "comfyui-portrait-master-zh-cn", + "id": "portrait-master-zho", "reference": "https://github.com/ZHO-ZHO-ZHO/comfyui-portrait-master-zh-cn", "files": [ "https://github.com/ZHO-ZHO-ZHO/comfyui-portrait-master-zh-cn" @@ -3770,6 +3917,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI-Q-Align", + "id": "qalign-zho", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Q-Align", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Q-Align" @@ -3780,6 +3928,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI-InstantID", + "id": "instantid-zho", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID" @@ -3790,6 +3939,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI PhotoMaker (ZHO)", + "id": "photomaker-zho", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO" @@ -3800,6 +3950,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI-Qwen-VL-API", + "id": "qwen-vl-api", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-VL-API", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-VL-API" @@ -3810,6 +3961,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI-SVD-ZHO (WIP)", + "id": "svd-zho", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-SVD-ZHO", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-SVD-ZHO" @@ -3820,6 +3972,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI SegMoE", + "id": "segmoe", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-SegMoE", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-SegMoE" @@ -3830,16 +3983,18 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI YoloWorld-EfficientSAM", + "id": "yoloworld", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-YoloWorld-EfficientSAM", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-YoloWorld-EfficientSAM" ], "install_type": "git-clone", - "description": "Unofficial implementation of [a/YOLO-World + EfficientSAM](https://huggingface.co/spaces/SkalskiP/YOLO-World) & [a/YOLO-World](https://github.com/AILab-CVC/YOLO-World) for ComfyUI\nNOTE: Install the efficient_sam model from the Install models menu.\n[w/When installing or updating this custom node, many installation packages may be downgraded due to the installation of requirements.]" + "description": "Unofficial implementation of [a/YOLO-World + EfficientSAM](https://huggingface.co/spaces/SkalskiP/YOLO-World) & [a/YOLO-World](https://github.com/AILab-CVC/YOLO-World) for ComfyUI\nNOTE: Install the efficient_sam model from the Install models menu.\n[w/When installing or updating this custom node, many installation packages may be downgraded due to the installation of requirements.\n!! python3.12 is incompatible.]" }, { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI-PixArt-alpha-Diffusers", + "id": "pixart-alpha", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PixArt-alpha-Diffusers", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PixArt-alpha-Diffusers" @@ -3850,6 +4005,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI-BRIA_AI-RMBG", + "id": "bria-ai-rmbg", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-BRIA_AI-RMBG", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-BRIA_AI-RMBG" @@ -3860,6 +4016,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "DepthFM IN COMFYUI", + "id": "depthfm", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM" @@ -3870,6 +4027,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "ComfyUI-BiRefNet-ZHO", + "id": "birefnet", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-BiRefNet-ZHO", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-BiRefNet-ZHO" @@ -3880,6 +4038,7 @@ { "author": "ZHO-ZHO-ZHO", "title": "Phi-3-mini in ComfyUI", + "id": "phi3mini", "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Phi-3-mini", "files": [ "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Phi-3-mini" @@ -3887,6 +4046,39 @@ "install_type": "git-clone", "description": "Nodes:Phi3mini_4k_ModelLoader_Zho, Phi3mini_4k_Zho, Phi3mini_4k_Chat_Zho" }, + { + "author": "ZHO-ZHO-ZHO", + "title": "ComfyUI-ArtGallery", + "id": "artgallery", + "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-ArtGallery", + "files": [ + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-ArtGallery" + ], + "install_type": "git-clone", + "description": "Prompt Visualization | Art Gallery\n[w/WARN: Installation requires 2GB of space, and it will involve a long download time.]" + }, + { + "author": "ZHO-ZHO-ZHO", + "title": "ComfyUI-Animated-optical-illusions", + "id": "animated-optical-illusion", + "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Animated-optical-illusions", + "files": [ + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Animated-optical-illusions" + ], + "install_type": "git-clone", + "description": "Animated optical illusions in ComfyUI" + }, + { + "author": "ZHO-ZHO-ZHO", + "title": "ComfyUI-Qwen-2", + "id": "qwen-2", + "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-2", + "files": [ + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-2" + ], + "install_type": "git-clone", + "description": "Using Qwen-2 in ComfyUI" + }, { "author": "kenjiqq", "title": "qq-nodes-comfyui", @@ -4150,6 +4342,7 @@ { "author": "AustinMroz", "title": "SpliceTools", + "id": "splicetools", "reference": "https://github.com/AustinMroz/ComfyUI-SpliceTools", "files": [ "https://github.com/AustinMroz/ComfyUI-SpliceTools" @@ -4157,6 +4350,28 @@ "install_type": "git-clone", "description": "Experimental utility nodes with a focus on manipulation of noised latents" }, + { + "author": "AustinMroz", + "title": "DynamicOversampling", + "id": "dynamic-oversampling", + "reference": "https://github.com/AustinMroz/ComfyUI-DynamicOversampling", + "files": [ + "https://github.com/AustinMroz/ComfyUI-DynamicOversampling" + ], + "install_type": "git-clone", + "description": "Nodes:DynamicSampler, MeasuredSampler, ResolveMaskPromise" + }, + { + "author": "AustinMroz", + "title": "ComfyUI-WorkflowCheckpointing", + "id": "workflowcheckpointing", + "reference": "https://github.com/AustinMroz/ComfyUI-WorkflowCheckpointing", + "files": [ + "https://github.com/AustinMroz/ComfyUI-WorkflowCheckpointing" + ], + "install_type": "git-clone", + "description": "Automatically creates checkpoints during workflow execution. If If an workflow is canceled or ComfyUI crashes mid-execution, then these checkpoints are used when the workflow is re-queued to resume execution with minimal progress loss." + }, { "author": "11cafe", "title": "ComfyUI Workspace Manager - Comfyspace", @@ -4393,18 +4608,7 @@ "https://github.com/MNeMoNiCuZ/ComfyUI-mnemic-nodes" ], "install_type": "git-clone", - "description": "Nodes:Save Text File" - }, - { - "author": "AI2lab", - "title": "comfyUI-tool-2lab", - "id": "tool2lab", - "reference": "https://github.com/AI2lab/comfyUI-tool-2lab", - "files": [ - "https://github.com/AI2lab/comfyUI-tool-2lab" - ], - "install_type": "git-clone", - "description": "simple tool set for developing workflow and publish to web api server" + "description": "Nodes: Save Text File, Download Image from URL, Groq LLM API, Generate Negative Prompt (experimental)" }, { "author": "AI2lab", @@ -4420,6 +4624,7 @@ { "author": "SpaceKendo", "title": "Text to video for Stable Video Diffusion in ComfyUI", + "id": "svd-txt2vid", "reference": "https://github.com/SpaceKendo/ComfyUI-svd_txt2vid", "files": [ "https://github.com/SpaceKendo/ComfyUI-svd_txt2vid" @@ -4430,6 +4635,7 @@ { "author": "NimaNzrii", "title": "comfyui-popup_preview", + "id": "popup-preview", "reference": "https://github.com/NimaNzrii/comfyui-popup_preview", "files": [ "https://github.com/NimaNzrii/comfyui-popup_preview" @@ -4440,6 +4646,7 @@ { "author": "NimaNzrii", "title": "comfyui-photoshop", + "id": "comfy-photoshop", "reference": "https://github.com/NimaNzrii/comfyui-photoshop", "files": [ "https://github.com/NimaNzrii/comfyui-photoshop" @@ -4450,6 +4657,7 @@ { "author": "Rui", "title": "RUI-Nodes", + "id": "rui-nodes", "reference": "https://github.com/rui40000/RUI-Nodes", "files": [ "https://github.com/rui40000/RUI-Nodes" @@ -4460,6 +4668,7 @@ { "author": "dmarx", "title": "ComfyUI-Keyframed", + "id": "keyframed", "reference": "https://github.com/dmarx/ComfyUI-Keyframed", "files": [ "https://github.com/dmarx/ComfyUI-Keyframed" @@ -4470,6 +4679,7 @@ { "author": "dmarx", "title": "ComfyUI-AudioReactive", + "id": "audioreactive", "reference": "https://github.com/dmarx/ComfyUI-AudioReactive", "files": [ "https://github.com/dmarx/ComfyUI-AudioReactive" @@ -4480,6 +4690,7 @@ { "author": "TripleHeadedMonkey", "title": "ComfyUI_MileHighStyler", + "id": "milehighstyler", "reference": "https://github.com/TripleHeadedMonkey/ComfyUI_MileHighStyler", "files": [ "https://github.com/TripleHeadedMonkey/ComfyUI_MileHighStyler" @@ -4490,6 +4701,7 @@ { "author": "BennyKok", "title": "ComfyUI Deploy", + "id": "comfy-deploy", "reference": "https://github.com/BennyKok/comfyui-deploy", "files": [ "https://github.com/BennyKok/comfyui-deploy" @@ -4500,6 +4712,7 @@ { "author": "florestefano1975", "title": "comfyui-portrait-master", + "id": "portrait-master", "reference": "https://github.com/florestefano1975/comfyui-portrait-master", "files": [ "https://github.com/florestefano1975/comfyui-portrait-master" @@ -4510,6 +4723,7 @@ { "author": "florestefano1975", "title": "comfyui-prompt-composer", + "id": "prompt-composer", "reference": "https://github.com/florestefano1975/comfyui-prompt-composer", "files": [ "https://github.com/florestefano1975/comfyui-prompt-composer" @@ -4520,6 +4734,7 @@ { "author": "florestefano1975", "title": "ComfyUI StabilityAI Suite", + "id": "sai-suite", "reference": "https://github.com/florestefano1975/ComfyUI-StabilityAI-Suite", "files": [ "https://github.com/florestefano1975/ComfyUI-StabilityAI-Suite" @@ -4530,6 +4745,7 @@ { "author": "florestefano1975", "title": "ComfyUI HiDiffusion", + "id": "hidiffusion", "reference": "https://github.com/florestefano1975/ComfyUI-HiDiffusion", "files": [ "https://github.com/florestefano1975/ComfyUI-HiDiffusion" @@ -4540,6 +4756,7 @@ { "author": "mozman", "title": "ComfyUI_mozman_nodes", + "id": "mozman-nodes", "reference": "https://github.com/mozman/ComfyUI_mozman_nodes", "files": [ "https://github.com/mozman/ComfyUI_mozman_nodes" @@ -4550,6 +4767,7 @@ { "author": "rcsaquino", "title": "rcsaquino/comfyui-custom-nodes", + "id": "rcsaquino-nodes", "reference": "https://github.com/rcsaquino/comfyui-custom-nodes", "files": [ "https://github.com/rcsaquino/comfyui-custom-nodes" @@ -4560,6 +4778,7 @@ { "author": "rcfcu2000", "title": "zhihuige-nodes-comfyui", + "id": "zhihuige-nodes", "reference": "https://github.com/rcfcu2000/zhihuige-nodes-comfyui", "files": [ "https://github.com/rcfcu2000/zhihuige-nodes-comfyui" @@ -4570,6 +4789,7 @@ { "author": "IDGallagher", "title": "IG Interpolation Nodes", + "id": "ig-nodes", "reference": "https://github.com/IDGallagher/ComfyUI-IG-Nodes", "files": [ "https://github.com/IDGallagher/ComfyUI-IG-Nodes" @@ -4733,15 +4953,15 @@ "description": "This extension enables the use of the diffuser pipeline in ComfyUI." }, { - "author": "edenartlab", - "title": "eden_comfy_pipelines", - "id": "eden-pipeline", + "author": "aiXander", + "title": "Various custom nodes by Eden.art", + "id": "Eden", "reference": "https://github.com/edenartlab/eden_comfy_pipelines", "files": [ "https://github.com/edenartlab/eden_comfy_pipelines" ], "install_type": "git-clone", - "description": "Nodes:CLIP Interrogator, ..." + "description": "A set of custom nodes for various purposed, maintained by Eden.art" }, { "author": "pkpk", @@ -4857,8 +5077,8 @@ }, { "author": "ai-liam", - "title": "LiamUtil", - "id": "liam", + "title": "LiamUtil (single node)", + "id": "liam-util-single", "reference": "https://github.com/ai-liam/comfyui_liam_util", "files": [ "https://github.com/ai-liam/comfyui_liam_util" @@ -4866,6 +5086,17 @@ "install_type": "git-clone", "description": "Nodes: LiamLoadImage. This node provides the capability to load images from a URL." }, + { + "author": "ai-liam", + "title": "LiamUtil", + "id": "liam-util", + "reference": "https://github.com/ai-liam/comfyui-liam", + "files": [ + "https://github.com/ai-liam/comfyui-liam" + ], + "install_type": "git-clone", + "description": "Nodes: LiamLibLoadImage, LiamLibImageToGray, LiamLibSaveImg, LiamLibFillImage, PreviewReliefImage, GetBetterDepthImage, LiamLibSaveText" + }, { "author": "Ryuukeisyou", "title": "comfyui_face_parsing", @@ -4981,6 +5212,7 @@ { "author": "SiliconFlow", "title": "OneDiff Nodes", + "id": "onddiff", "reference": "https://github.com/siliconflow/onediff_comfy_nodes", "files": [ "https://github.com/siliconflow/onediff_comfy_nodes" @@ -4988,19 +5220,10 @@ "install_type": "git-clone", "description": "[a/Onediff](https://github.com/siliconflow/onediff) ComfyUI Nodes." }, - { - "author": "ZHO-ZHO-ZHO", - "title": "ComfyUI-ArtGallery", - "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-ArtGallery", - "files": [ - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-ArtGallery" - ], - "install_type": "git-clone", - "description": "Prompt Visualization | Art Gallery\n[w/WARN: Installation requires 2GB of space, and it will involve a long download time.]" - }, { "author": "hinablue", "title": "ComfyUI 3D Pose Editor", + "id": "3d-pose-editor", "reference": "https://github.com/hinablue/ComfyUI_3dPoseEditor", "files": [ "https://github.com/hinablue/ComfyUI_3dPoseEditor" @@ -5011,6 +5234,7 @@ { "author": "chaojie", "title": "ComfyUI-CameraCtrl-Wrapper", + "id": "cameractrl-wrapper", "reference": "https://github.com/chaojie/ComfyUI-CameraCtrl-Wrapper", "files": [ "https://github.com/chaojie/ComfyUI-CameraCtrl-Wrapper" @@ -5021,6 +5245,7 @@ { "author": "chaojie", "title": "ComfyUI-EasyAnimate", + "id": "easyanimate", "reference": "https://github.com/chaojie/ComfyUI-EasyAnimate", "files": [ "https://github.com/chaojie/ComfyUI-EasyAnimate" @@ -5031,6 +5256,7 @@ { "author": "chaojie", "title": "ComfyUI_StreamingT2V", + "id": "streamingt2v", "reference": "https://github.com/chaojie/ComfyUI_StreamingT2V", "files": [ "https://github.com/chaojie/ComfyUI_StreamingT2V" @@ -5041,16 +5267,18 @@ { "author": "chaojie", "title": "ComfyUI-Open-Sora-Plan", + "id": "opensora-plan", "reference": "https://github.com/chaojie/ComfyUI-Open-Sora-Plan", "files": [ "https://github.com/chaojie/ComfyUI-Open-Sora-Plan" ], "install_type": "git-clone", - "description": "ComfyUI-Open-Sora-Plan" + "description": "ComfyUI node for [a/Open-Sora-Plan](https://github.com/PKU-YuanGroup/Open-Sora-Plan)" }, { "author": "chaojie", "title": "ComfyUI-MuseTalk", + "id": "musetalk-chaojie", "reference": "https://github.com/chaojie/ComfyUI-MuseTalk", "files": [ "https://github.com/chaojie/ComfyUI-MuseTalk" @@ -5061,6 +5289,7 @@ { "author": "chaojie", "title": "ComfyUI-MuseV", + "id": "musev", "reference": "https://github.com/chaojie/ComfyUI-MuseV", "files": [ "https://github.com/chaojie/ComfyUI-MuseV" @@ -5071,6 +5300,7 @@ { "author": "chaojie", "title": "ComfyUI-AniPortrait", + "id": "aniportrait", "reference": "https://github.com/chaojie/ComfyUI-AniPortrait", "files": [ "https://github.com/chaojie/ComfyUI-AniPortrait" @@ -5081,6 +5311,7 @@ { "author": "chaojie", "title": "ComfyUI-Img2Img-Turbo", + "id": "img2img-turbo", "reference": "https://github.com/chaojie/ComfyUI-Img2Img-Turbo", "files": [ "https://github.com/chaojie/ComfyUI-Img2Img-Turbo" @@ -5091,6 +5322,7 @@ { "author": "chaojie", "title": "ComfyUI-Champ", + "id": "champ", "reference": "https://github.com/chaojie/ComfyUI-Champ", "files": [ "https://github.com/chaojie/ComfyUI-Champ" @@ -5101,6 +5333,7 @@ { "author": "chaojie", "title": "ComfyUI-Open-Sora", + "id": "opensora", "reference": "https://github.com/chaojie/ComfyUI-Open-Sora", "files": [ "https://github.com/chaojie/ComfyUI-Open-Sora" @@ -5111,6 +5344,7 @@ { "author": "chaojie", "title": "ComfyUI-Trajectory", + "id": "trajectory", "reference": "https://github.com/chaojie/ComfyUI-Trajectory", "files": [ "https://github.com/chaojie/ComfyUI-Trajectory" @@ -5121,6 +5355,7 @@ { "author": "chaojie", "title": "ComfyUI-dust3r", + "id": "dust3r", "reference": "https://github.com/chaojie/ComfyUI-dust3r", "files": [ "https://github.com/chaojie/ComfyUI-dust3r" @@ -5131,6 +5366,7 @@ { "author": "chaojie", "title": "ComfyUI-Gemma", + "id": "gamma", "reference": "https://github.com/chaojie/ComfyUI-Gemma", "files": [ "https://github.com/chaojie/ComfyUI-Gemma" @@ -5141,6 +5377,7 @@ { "author": "chaojie", "title": "ComfyUI-DynamiCrafter", + "id": "dynamicrafter-chaojie", "reference": "https://github.com/chaojie/ComfyUI-DynamiCrafter", "files": [ "https://github.com/chaojie/ComfyUI-DynamiCrafter" @@ -5151,6 +5388,7 @@ { "author": "chaojie", "title": "ComfyUI-Panda3d", + "id": "panda3d", "reference": "https://github.com/chaojie/ComfyUI-Panda3d", "files": [ "https://github.com/chaojie/ComfyUI-Panda3d" @@ -5161,6 +5399,7 @@ { "author": "chaojie", "title": "ComfyUI-Pymunk", + "id": "pymunk", "reference": "https://github.com/chaojie/ComfyUI-Pymunk", "files": [ "https://github.com/chaojie/ComfyUI-Pymunk" @@ -5171,6 +5410,7 @@ { "author": "chaojie", "title": "ComfyUI-MotionCtrl", + "id": "motionctrl", "reference": "https://github.com/chaojie/ComfyUI-MotionCtrl", "files": [ "https://github.com/chaojie/ComfyUI-MotionCtrl" @@ -5181,6 +5421,7 @@ { "author": "chaojie", "title": "ComfyUI-Motion-Vector-Extractor", + "id": "motion-vector-extractor", "reference": "https://github.com/chaojie/ComfyUI-Motion-Vector-Extractor", "files": [ "https://github.com/chaojie/ComfyUI-Motion-Vector-Extractor" @@ -5191,6 +5432,7 @@ { "author": "chaojie", "title": "ComfyUI-MotionCtrl-SVD", + "id": "motionctrl-svd", "reference": "https://github.com/chaojie/ComfyUI-MotionCtrl-SVD", "files": [ "https://github.com/chaojie/ComfyUI-MotionCtrl-SVD" @@ -5201,6 +5443,7 @@ { "author": "chaojie", "title": "ComfyUI-DragAnything", + "id": "draganything", "reference": "https://github.com/chaojie/ComfyUI-DragAnything", "files": [ "https://github.com/chaojie/ComfyUI-DragAnything" @@ -5211,6 +5454,7 @@ { "author": "chaojie", "title": "ComfyUI-DragNUWA", + "id": "dragnuwa", "reference": "https://github.com/chaojie/ComfyUI-DragNUWA", "files": [ "https://github.com/chaojie/ComfyUI-DragNUWA" @@ -5221,6 +5465,7 @@ { "author": "chaojie", "title": "ComfyUI-Moore-AnimateAnyone", + "id": "moore-animateanyone", "reference": "https://github.com/chaojie/ComfyUI-Moore-AnimateAnyone", "files": [ "https://github.com/chaojie/ComfyUI-Moore-AnimateAnyone" @@ -5231,6 +5476,7 @@ { "author": "chaojie", "title": "ComfyUI-I2VGEN-XL", + "id": "i2vgen-xl", "reference": "https://github.com/chaojie/ComfyUI-I2VGEN-XL", "files": [ "https://github.com/chaojie/ComfyUI-I2VGEN-XL" @@ -5241,6 +5487,7 @@ { "author": "chaojie", "title": "ComfyUI-LightGlue", + "id": "lightglue", "reference": "https://github.com/chaojie/ComfyUI-LightGlue", "files": [ "https://github.com/chaojie/ComfyUI-LightGlue" @@ -5251,6 +5498,7 @@ { "author": "chaojie", "title": "ComfyUI-RAFT", + "id": "raft", "reference": "https://github.com/chaojie/ComfyUI-RAFT", "files": [ "https://github.com/chaojie/ComfyUI-RAFT" @@ -5261,6 +5509,7 @@ { "author": "chaojie", "title": "ComfyUI-LaVIT", + "id": "lavit", "reference": "https://github.com/chaojie/ComfyUI-LaVIT", "files": [ "https://github.com/chaojie/ComfyUI-LaVIT" @@ -5271,6 +5520,7 @@ { "author": "chaojie", "title": "ComfyUI-SimDA", + "id": "simda", "reference": "https://github.com/chaojie/ComfyUI-SimDA", "files": [ "https://github.com/chaojie/ComfyUI-SimDA" @@ -5281,6 +5531,7 @@ { "author": "chaojie", "title": "ComfyUI-Video-Editing-X-Attention", + "id": "video-editing-x-attention", "reference": "https://github.com/chaojie/ComfyUI-Video-Editing-X-Attention", "files": [ "https://github.com/chaojie/ComfyUI-Video-Editing-X-Attention" @@ -5291,6 +5542,7 @@ { "author": "alexopus", "title": "ComfyUI Image Saver", + "id": "image-saver", "reference": "https://github.com/alexopus/ComfyUI-Image-Saver", "files": [ "https://github.com/alexopus/ComfyUI-Image-Saver" @@ -5301,6 +5553,7 @@ { "author": "kft334", "title": "Knodes", + "id": "knodes", "reference": "https://github.com/kft334/Knodes", "files": [ "https://github.com/kft334/Knodes" @@ -5311,6 +5564,7 @@ { "author": "MrForExample", "title": "ComfyUI-3D-Pack", + "id": "3dpack", "reference": "https://github.com/MrForExample/ComfyUI-3D-Pack", "files": [ "https://github.com/MrForExample/ComfyUI-3D-Pack" @@ -5322,6 +5576,7 @@ { "author": "Mr.ForExample", "title": "ComfyUI-AnimateAnyone-Evolved", + "id": "animateanyone-evolved", "reference": "https://github.com/MrForExample/ComfyUI-AnimateAnyone-Evolved", "files": [ "https://github.com/MrForExample/ComfyUI-AnimateAnyone-Evolved" @@ -5583,6 +5838,7 @@ { "author": "nkchocoai", "title": "ComfyUI-Dart", + "id": "dart", "reference": "https://github.com/nkchocoai/ComfyUI-Dart", "files": [ "https://github.com/nkchocoai/ComfyUI-Dart" @@ -5593,6 +5849,7 @@ { "author": "JaredTherriault", "title": "ComfyUI-JNodes", + "id": "jnodes", "reference": "https://github.com/JaredTherriault/ComfyUI-JNodes", "files": [ "https://github.com/JaredTherriault/ComfyUI-JNodes" @@ -5603,6 +5860,7 @@ { "author": "prozacgod", "title": "ComfyUI Multi-Workspace", + "id": "multi-workspace", "reference": "https://github.com/prozacgod/comfyui-pzc-multiworkspace", "files": [ "https://github.com/prozacgod/comfyui-pzc-multiworkspace" @@ -5613,6 +5871,7 @@ { "author": "Siberpone", "title": "Lazy Pony Prompter", + "id": "lazy-pony-prompter", "reference": "https://github.com/Siberpone/lazy-pony-prompter", "files": [ "https://github.com/Siberpone/lazy-pony-prompter" @@ -5623,6 +5882,7 @@ { "author": "dave-palt", "title": "comfyui_DSP_imagehelpers", + "id": "dsp-imagehelpers", "reference": "https://github.com/dave-palt/comfyui_DSP_imagehelpers", "files": [ "https://github.com/dave-palt/comfyui_DSP_imagehelpers" @@ -5633,6 +5893,7 @@ { "author": "Inzaniak", "title": "Ranbooru for ComfyUI", + "id": "ranbooru", "reference": "https://github.com/Inzaniak/comfyui-ranbooru", "files": [ "https://github.com/Inzaniak/comfyui-ranbooru" @@ -5643,6 +5904,7 @@ { "author": "miosp", "title": "ComfyUI-FBCNN", + "id": "fbcnn", "reference": "https://github.com/Miosp/ComfyUI-FBCNN", "files": [ "https://github.com/Miosp/ComfyUI-FBCNN" @@ -5653,6 +5915,7 @@ { "author": "JcandZero", "title": "ComfyUI_GLM4Node", + "id": "glm4node", "reference": "https://github.com/JcandZero/ComfyUI_GLM4Node", "files": [ "https://github.com/JcandZero/ComfyUI_GLM4Node" @@ -5663,6 +5926,7 @@ { "author": "darkpixel", "title": "DarkPrompts", + "id": "darkprompts", "reference": "https://github.com/darkpixel/darkprompts", "files": [ "https://github.com/darkpixel/darkprompts" @@ -5673,6 +5937,7 @@ { "author": "shiimizu", "title": "ComfyUI PhotoMaker Plus", + "id": "photomaker-plus", "reference": "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus", "files": [ "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus" @@ -5683,6 +5948,7 @@ { "author": "yytdfc", "title": "Amazon Bedrock nodes for ComfyUI", + "id": "bedrock", "reference": "https://github.com/aws-samples/comfyui-llm-node-for-amazon-bedrock", "files": [ "https://github.com/aws-samples/comfyui-llm-node-for-amazon-bedrock" @@ -5694,6 +5960,7 @@ { "author": "Qais Malkawi", "title": "ComfyUI-Qais-Helper", + "id": "qais-helper", "reference": "https://github.com/QaisMalkawi/ComfyUI-QaisHelper", "files": [ "https://github.com/QaisMalkawi/ComfyUI-QaisHelper" @@ -5704,6 +5971,7 @@ { "author": "longgui0318", "title": "comfyui-mask-util", + "id": "mask-util", "reference": "https://github.com/longgui0318/comfyui-mask-util", "files": [ "https://github.com/longgui0318/comfyui-mask-util" @@ -5714,6 +5982,7 @@ { "author": "longgui0318", "title": "comfyui-llm-assistant", + "id": "llm-assistant", "reference": "https://github.com/longgui0318/comfyui-llm-assistant", "files": [ "https://github.com/longgui0318/comfyui-llm-assistant" @@ -5724,6 +5993,7 @@ { "author": "longgui0318", "title": "comfyui-oms-diffusion", + "id": "oms-diffusion", "reference": "https://github.com/longgui0318/comfyui-oms-diffusion", "files": [ "https://github.com/longgui0318/comfyui-oms-diffusion" @@ -5734,6 +6004,7 @@ { "author": "longgui0318", "title": "comfyui-magic-clothing", + "id": "magic-clothing", "reference": "https://github.com/longgui0318/comfyui-magic-clothing", "files": [ "https://github.com/longgui0318/comfyui-magic-clothing" @@ -5754,6 +6025,7 @@ { "author": "adriflex", "title": "ComfyUI_Blender_Texdiff", + "id": "blender-texdiff", "reference": "https://github.com/adriflex/ComfyUI_Blender_Texdiff", "files": [ "https://github.com/adriflex/ComfyUI_Blender_Texdiff" @@ -5764,6 +6036,7 @@ { "author": "Shraknard", "title": "ComfyUI-Remover", + "id": "remover", "reference": "https://github.com/Shraknard/ComfyUI-Remover", "files": [ "https://github.com/Shraknard/ComfyUI-Remover" @@ -5784,6 +6057,7 @@ { "author": "Nlar", "title": "ComfyUI_CartoonSegmentation", + "id": "cartoon-seg", "reference": "https://github.com/Nlar/ComfyUI_CartoonSegmentation", "files": [ "https://github.com/Nlar/ComfyUI_CartoonSegmentation" @@ -5794,6 +6068,7 @@ { "author": "godspede", "title": "ComfyUI Substring", + "id": "substring", "reference": "https://github.com/godspede/ComfyUI_Substring", "files": [ "https://github.com/godspede/ComfyUI_Substring" @@ -5804,6 +6079,7 @@ { "author": "gokayfem", "title": "VLM_nodes", + "id": "vlm", "reference": "https://github.com/gokayfem/ComfyUI_VLM_nodes", "files": [ "https://github.com/gokayfem/ComfyUI_VLM_nodes" @@ -5814,6 +6090,7 @@ { "author": "gokayfem", "title": "ComfyUI-Dream-Interpreter", + "id": "dream-interpreter", "reference": "https://github.com/gokayfem/ComfyUI-Dream-Interpreter", "files": [ "https://github.com/gokayfem/ComfyUI-Dream-Interpreter" @@ -5824,6 +6101,7 @@ { "author": "gokayfem", "title": "ComfyUI-Depth-Visualization", + "id": "delpth-visualization", "reference": "https://github.com/gokayfem/ComfyUI-Depth-Visualization", "files": [ "https://github.com/gokayfem/ComfyUI-Depth-Visualization" @@ -5834,6 +6112,7 @@ { "author": "gokayfem", "title": "ComfyUI-Texture-Simple", + "id": "texture-simple", "reference": "https://github.com/gokayfem/ComfyUI-Texture-Simple", "files": [ "https://github.com/gokayfem/ComfyUI-Texture-Simple" @@ -5844,6 +6123,7 @@ { "author": "Hiero207", "title": "Hiero-Nodes", + "id": "hiero", "reference": "https://github.com/Hiero207/ComfyUI-Hiero-Nodes", "files": [ "https://github.com/Hiero207/ComfyUI-Hiero-Nodes" @@ -5854,6 +6134,7 @@ { "author": "azure-dragon-ai", "title": "ComfyUI-ClipScore-Nodes", + "id": "clipscore", "reference": "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes", "files": [ "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes" @@ -5864,6 +6145,7 @@ { "author": "yuvraj108c", "title": "ComfyUI Whisper", + "id": "whisper", "reference": "https://github.com/yuvraj108c/ComfyUI-Whisper", "files": [ "https://github.com/yuvraj108c/ComfyUI-Whisper" @@ -5874,6 +6156,7 @@ { "author": "yuvraj108c", "title": "ComfyUI-Pronodes", + "id": "pronodes", "reference": "https://github.com/yuvraj108c/ComfyUI-Pronodes", "files": [ "https://github.com/yuvraj108c/ComfyUI-Pronodes" @@ -5884,6 +6167,7 @@ { "author": "yuvraj108c", "title": "ComfyUI-Vsgan", + "id": "vsgan", "reference": "https://github.com/yuvraj108c/ComfyUI-Vsgan", "files": [ "https://github.com/yuvraj108c/ComfyUI-Vsgan" @@ -5894,6 +6178,7 @@ { "author": "yuvraj108c", "title": "ComfyUI Depth Anything TensorRT", + "id": "depth-anything-tensorrt", "reference": "https://github.com/yuvraj108c/ComfyUI-Depth-Anything-Tensorrt", "files": [ "https://github.com/yuvraj108c/ComfyUI-Depth-Anything-Tensorrt" @@ -5904,6 +6189,7 @@ { "author": "yuvraj108c", "title": "ComfyUI PiperTTS", + "id": "pipertts", "reference": "https://github.com/yuvraj108c/ComfyUI-PiperTTS", "files": [ "https://github.com/yuvraj108c/ComfyUI-PiperTTS" @@ -5914,6 +6200,7 @@ { "author": "yuvraj108c", "title": "ComfyUI Upscaler TensorRT", + "id": "upscaler-tensorrt", "reference": "https://github.com/yuvraj108c/ComfyUI-Upscaler-Tensorrt", "files": [ "https://github.com/yuvraj108c/ComfyUI-Upscaler-Tensorrt" @@ -5924,6 +6211,7 @@ { "author": "blepping", "title": "ComfyUI-bleh", + "id": "bleh", "reference": "https://github.com/blepping/ComfyUI-bleh", "files": [ "https://github.com/blepping/ComfyUI-bleh" @@ -5934,6 +6222,7 @@ { "author": "blepping", "title": "ComfyUI-sonar", + "id": "sonar", "reference": "https://github.com/blepping/ComfyUI-sonar", "files": [ "https://github.com/blepping/ComfyUI-sonar" @@ -5944,6 +6233,7 @@ { "author": "blepping", "title": "ComfyUI jank HiDiffusion", + "id": "jank-hidiffusion", "reference": "https://github.com/blepping/comfyui_jankhidiffusion", "files": [ "https://github.com/blepping/comfyui_jankhidiffusion" @@ -5974,6 +6264,7 @@ { "author": "mape", "title": "mape's helpers", + "id": "mape-helpers", "reference": "https://github.com/mape/ComfyUI-mape-Helpers", "files": [ "https://github.com/mape/ComfyUI-mape-Helpers" @@ -5984,6 +6275,7 @@ { "author": "zhongpei", "title": "Comfyui_image2prompt", + "id": "img2prompt", "reference": "https://github.com/zhongpei/Comfyui_image2prompt", "files": [ "https://github.com/zhongpei/Comfyui_image2prompt" @@ -5994,16 +6286,18 @@ { "author": "zhongpei", "title": "ComfyUI for InstructIR", + "id": "instructir", "reference": "https://github.com/zhongpei/ComfyUI-InstructIR", "files": [ "https://github.com/zhongpei/ComfyUI-InstructIR" ], "install_type": "git-clone", - "description": "Enhancing Image Restoration" + "description": "Enhancing Image Restoration. (ref:[a/InstructIR](https://github.com/mv-lab/InstructIR))" }, { "author": "Loewen-Hob", - "title": "Rembg Background Removal Node for ComfyUI", + "title": "Rembg Background Removal Node for ComfyUI (Better)", + "id": "rembg-better", "reference": "https://github.com/Loewen-Hob/rembg-comfyui-node-better", "files": [ "https://github.com/Loewen-Hob/rembg-comfyui-node-better" @@ -6014,6 +6308,7 @@ { "author": "HaydenReeve", "title": "ComfyUI Better Strings", + "id": "better-string", "reference": "https://github.com/HaydenReeve/ComfyUI-Better-Strings", "files": [ "https://github.com/HaydenReeve/ComfyUI-Better-Strings" @@ -6024,6 +6319,7 @@ { "author": "StartHua", "title": "ComfyUI_Seg_VITON", + "id": "seg-viton", "reference": "https://github.com/StartHua/ComfyUI_Seg_VITON", "files": [ "https://github.com/StartHua/ComfyUI_Seg_VITON" @@ -6034,6 +6330,7 @@ { "author": "StartHua", "title": "Comfyui_joytag", + "id": "joytag", "reference": "https://github.com/StartHua/Comfyui_joytag", "files": [ "https://github.com/StartHua/Comfyui_joytag" @@ -6044,6 +6341,7 @@ { "author": "StartHua", "title": "comfyui_segformer_b2_clothes", + "id": "segformer-b2-clothes", "reference": "https://github.com/StartHua/Comfyui_segformer_b2_clothes", "files": [ "https://github.com/StartHua/Comfyui_segformer_b2_clothes" @@ -6054,6 +6352,7 @@ { "author": "StartHua", "title": "ComfyUI_OOTDiffusion_CXH", + "id": "ootdiffusion-cxh", "reference": "https://github.com/StartHua/ComfyUI_OOTDiffusion_CXH", "files": [ "https://github.com/StartHua/ComfyUI_OOTDiffusion_CXH" @@ -6061,9 +6360,21 @@ "install_type": "git-clone", "description": "Nodes:Ood_hd_CXH, Ood_hd_CXH. [a/OOTDiffusion](https://github.com/levihsu/OOTDiffusion)" }, + { + "author": "StartHua", + "title": "ComfyUI_PCDMs", + "id": "pcdms", + "reference": "https://github.com/StartHua/ComfyUI_PCDMs", + "files": [ + "https://github.com/StartHua/ComfyUI_PCDMs" + ], + "install_type": "git-clone", + "description": "Original project: [a/link](https://github.com/tencent-ailab/PCDMs)\nBased on testing, the author's original images work very well, but using my own images generally requires some luck!" + }, { "author": "ricklove", "title": "comfyui-ricklove", + "id": "ricklove", "reference": "https://github.com/ricklove/comfyui-ricklove", "files": [ "https://github.com/ricklove/comfyui-ricklove" @@ -6074,6 +6385,7 @@ { "author": "nosiu", "title": "ComfyUI InstantID Faceswapper", + "id": "instantid-faceswapper", "reference": "https://github.com/nosiu/comfyui-instantId-faceswap", "files": [ "https://github.com/nosiu/comfyui-instantId-faceswap" @@ -6081,16 +6393,6 @@ "install_type": "git-clone", "description": "Implementation of [a/faceswap](https://github.com/nosiu/InstantID-faceswap/tree/main) based on [a/InstantID](https://github.com/InstantID/InstantID) for ComfyUI. Allows usage of [a/LCM Lora](https://huggingface.co/latent-consistency/lcm-lora-sdxl) which can produce good results in only a few generation steps.\nNOTE:Works ONLY with SDXL checkpoints." }, - { - "author": "zhongpei", - "title": "ComfyUI for InstructIR", - "reference": "https://github.com/zhongpei/ComfyUI-InstructIR", - "files": [ - "https://github.com/zhongpei/ComfyUI-InstructIR" - ], - "install_type": "git-clone", - "description": "Enhancing Image Restoration. (ref:[a/InstructIR](https://github.com/mv-lab/InstructIR))" - }, { "author": "LyazS", "title": "Anime Character Segmentation node for comfyui", @@ -6142,14 +6444,15 @@ "description": "ComfyS3 seamlessly integrates with [a/Amazon S3](https://aws.amazon.com/en/s3/) in ComfyUI. This open-source project provides custom nodes for effortless loading and saving of images, videos, and checkpoint models directly from S3 buckets within the ComfyUI graph interface." }, { - "author": "davask", + "author": "MaraScott", "title": "🐰 MaraScott Nodes", - "reference": "https://github.com/davask/ComfyUI_MaraScott_Nodes", + "id": "marascott-nodes", + "reference": "https://github.com/MaraScott/ComfyUI_MaraScott_Nodes", "files": [ - "https://github.com/davask/ComfyUI_MaraScott_Nodes" + "https://github.com/MaraScott/ComfyUI_MaraScott_Nodes" ], "install_type": "git-clone", - "description": "A set of community node including a universal bus and a large Upscaler/Refiner\n[w/ComfyUI-MarasIT-Nodes has been changed to ComfyUI_MaraScott_Nodes. If you have previously installed ComfyUI-MarasIT-Nodes, Please uninstall the previous one and reinstall this.]" + "description": "A set of nodes including a universal bus, an Inpainting By Mask and a large Upscaler/Refiner\n[AnyBus,McInpainty,McBoaty]" }, { "author": "yffyhk", @@ -6174,6 +6477,7 @@ { "author": "dfl", "title": "ComfyUI-TCD-scheduler", + "id": "dfl-tcd", "reference": "https://github.com/dfl/comfyui-tcd-scheduler", "files": [ "https://github.com/dfl/comfyui-tcd-scheduler" @@ -6204,6 +6508,7 @@ { "author": "kadirnar", "title": "ComfyUI-Transformers", + "id": "comfy-transformers", "reference": "https://github.com/kadirnar/ComfyUI-Transformers", "files": [ "https://github.com/kadirnar/ComfyUI-Transformers" @@ -6211,6 +6516,17 @@ "install_type": "git-clone", "description": "ComfyUI-Transformers is a cutting-edge project combining the power of computer vision and natural language processing to create intuitive and user-friendly interfaces. Our goal is to make technology more accessible and engaging." }, + { + "author": "kadirnar", + "title": "ComfyUI-YOLO", + "id": "comfy-yolo", + "reference": "https://github.com/kadirnar/ComfyUI-YOLO", + "files": [ + "https://github.com/kadirnar/ComfyUI-YOLO" + ], + "install_type": "git-clone", + "description": "Nodes:Load Ultralytics Model, Ultralytics Inference, Ultralytics Visualization, Convert to Dictionary, BBox to XYWH" + }, { "author": "digitaljohn", "title": "ComfyUI-ProPost", @@ -6294,6 +6610,7 @@ { "author": "ShmuelRonen", "title": "ComfyUI-SVDResizer", + "id": "svdresizer", "reference": "https://github.com/ShmuelRonen/ComfyUI-SVDResizer", "files": [ "https://github.com/ShmuelRonen/ComfyUI-SVDResizer" @@ -6301,9 +6618,32 @@ "install_type": "git-clone", "description": "SVDResizer is a helper for resizing the source image, according to the sizes enabled in Stable Video Diffusion. The rationale behind the possibility of changing the size of the image in steps between the ranges of 576 and 1024, is the use of the greatest common denominator of these two numbers which is 64. SVD is lenient with resizing that adheres to this rule, so the chance of coherent video that is not the standard size of 576X1024 is greater. It is advisable to keep the value 1024 constant and play with the second size to maintain the stability of the result." }, + { + "author": "ShmuelRonen", + "title": "Wav2Lip Node for ComfyUI", + "id": "wav2lip", + "reference": "https://github.com/ShmuelRonen/ComfyUI_wav2lip", + "files": [ + "https://github.com/ShmuelRonen/ComfyUI_wav2lip" + ], + "install_type": "git-clone", + "description": "The Wav2Lip node is a custom node for ComfyUI that allows you to perform lip-syncing on videos using the Wav2Lip model. It takes an input video and an audio file and generates a lip-synced output video." + }, + { + "author": "ShmuelRonen", + "title": "ComfyUI_Gemini_Flash", + "id": "gemini-flash", + "reference": "https://github.com/ShmuelRonen/ComfyUI_Gemini_Flash", + "files": [ + "https://github.com/ShmuelRonen/ComfyUI_Gemini_Flash" + ], + "install_type": "git-clone", + "description": "ComfyUI_Gemini_Flash is a custom node for ComfyUI, integrating the capabilities of the Gemini 1.5 Flash model. This node supports text and vision-based prompts, allowing users to analyze and adapt images to text prompts for text2image tasks." + }, { "author": "redhottensors", "title": "ComfyUI-Prediction", + "id": "prediction", "reference": "https://github.com/redhottensors/ComfyUI-Prediction", "files": [ "https://github.com/redhottensors/ComfyUI-Prediction" @@ -6314,6 +6654,7 @@ { "author": "Mamaaaamooooo", "title": "Batch Rembg for ComfyUI", + "id": "batch-rembg", "reference": "https://github.com/Mamaaaamooooo/batchImg-rembg-ComfyUI-nodes", "files": [ "https://github.com/Mamaaaamooooo/batchImg-rembg-ComfyUI-nodes" @@ -6324,6 +6665,7 @@ { "author": "jordoh", "title": "ComfyUI Deepface", + "id": "deepface", "reference": "https://github.com/jordoh/ComfyUI-Deepface", "files": [ "https://github.com/jordoh/ComfyUI-Deepface" @@ -6334,6 +6676,7 @@ { "author": "al-swaiti", "title": "ComfyUI-CascadeResolutions", + "id": "cascade-resolution", "reference": "https://github.com/al-swaiti/ComfyUI-CascadeResolutions", "files": [ "https://github.com/al-swaiti/ComfyUI-CascadeResolutions" @@ -6344,6 +6687,7 @@ { "author": "mirabarukaso", "title": "ComfyUI_Mira", + "id": "mira", "reference": "https://github.com/mirabarukaso/ComfyUI_Mira", "files": [ "https://github.com/mirabarukaso/ComfyUI_Mira" @@ -6354,6 +6698,7 @@ { "author": "1038lab", "title": "ComfyUI-GPT2P", + "id": "gpt2p", "reference": "https://github.com/1038lab/ComfyUI-GPT2P", "files": [ "https://github.com/1038lab/ComfyUI-GPT2P" @@ -6361,19 +6706,10 @@ "install_type": "git-clone", "description": "ComfyUI Node - Hugging Face repositories GTP2 Prompt" }, - { - "author": "LykosAI", - "title": "ComfyUI Nodes for Inference.Core", - "reference": "https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes", - "files": [ - "https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes" - ], - "install_type": "git-clone", - "description": "Primary Nodes for Inference.Core and Stability Matrix. With a focus on not impacting startup performance and using fully qualified Node names." - }, { "author": "Klinter", "title": "Klinter_nodes", + "id": "klinter", "reference": "https://github.com/klinter007/klinter_nodes", "files": [ "https://github.com/klinter007/klinter_nodes" @@ -6384,6 +6720,7 @@ { "author": "Ludobico", "title": "ComfyUI-ScenarioPrompt", + "id": "scenarioprompt", "reference": "https://github.com/Ludobico/ComfyUI-ScenarioPrompt", "files": [ "https://github.com/Ludobico/ComfyUI-ScenarioPrompt" @@ -6394,6 +6731,7 @@ { "author": "logtd", "title": "InstanceDiffusion Nodes", + "id": "instancediffusion", "reference": "https://github.com/logtd/ComfyUI-InstanceDiffusion", "files": [ "https://github.com/logtd/ComfyUI-InstanceDiffusion" @@ -6404,6 +6742,7 @@ { "author": "logtd", "title": "Tracking Nodes for Videos", + "id": "tracking", "reference": "https://github.com/logtd/ComfyUI-TrackingNodes", "files": [ "https://github.com/logtd/ComfyUI-TrackingNodes" @@ -6414,6 +6753,7 @@ { "author": "logtd", "title": "ComfyUI-InversedNoise", + "id": "inversed-noise", "reference": "https://github.com/logtd/ComfyUI-InversedNoise", "files": [ "https://github.com/logtd/ComfyUI-InversedNoise" @@ -6424,6 +6764,7 @@ { "author": "logtd", "title": "ComfyUI-RefSampling", + "id": "refsampling", "reference": "https://github.com/logtd/ComfyUI-RefSampling", "files": [ "https://github.com/logtd/ComfyUI-RefSampling" @@ -6434,6 +6775,7 @@ { "author": "logtd", "title": "ComfyUI-FLATTEN", + "id": "flatten", "reference": "https://github.com/logtd/ComfyUI-FLATTEN", "files": [ "https://github.com/logtd/ComfyUI-FLATTEN" @@ -6444,6 +6786,7 @@ { "author": "logtd", "title": "ComfyUI-RAVE Attention", + "id": "rave", "reference": "https://github.com/logtd/ComfyUI-RAVE_ATTN", "files": [ "https://github.com/logtd/ComfyUI-RAVE_ATTN" @@ -6454,6 +6797,7 @@ { "author": "Big-Idea-Technology", "title": "ComfyUI-Book-Tools Nodes for ComfyUI", + "id": "booktool", "reference": "https://github.com/Big-Idea-Technology/ComfyUI-Book-Tools", "files": [ "https://github.com/Big-Idea-Technology/ComfyUI-Book-Tools" @@ -6473,7 +6817,8 @@ }, { "author": "Guillaume-Fgt", - "title": "ComfyUI-ScenarioPrompt", + "title": "ComfyUI_StableCascadeLatentRatio", + "id": "cascade-latent-ratio", "reference": "https://github.com/Guillaume-Fgt/ComfyUI_StableCascadeLatentRatio", "files": [ "https://github.com/Guillaume-Fgt/ComfyUI_StableCascadeLatentRatio" @@ -6484,6 +6829,7 @@ { "author": "AuroBit", "title": "ComfyUI OOTDiffusion", + "id": "ootdiffusion", "reference": "https://github.com/AuroBit/ComfyUI-OOTDiffusion", "files": [ "https://github.com/AuroBit/ComfyUI-OOTDiffusion" @@ -6494,6 +6840,7 @@ { "author": "AuroBit", "title": "ComfyUI-AnimateAnyone-reproduction", + "id": "animateanyone-reproduction", "reference": "https://github.com/AuroBit/ComfyUI-AnimateAnyone-reproduction", "files": [ "https://github.com/AuroBit/ComfyUI-AnimateAnyone-reproduction" @@ -6504,6 +6851,7 @@ { "author": "czcz1024", "title": "Face Compare", + "id": "facecompare", "reference": "https://github.com/czcz1024/Comfyui-FaceCompare", "files": [ "https://github.com/czcz1024/Comfyui-FaceCompare" @@ -6631,16 +6979,6 @@ "install_type": "git-clone", "description": "A ComfyUI node to download models(Checkpoints and LoRA) from external links and act as an output standalone node." }, - { - "author": "Alysondao", - "title": "Comfyui-Yolov8-JSON", - "reference": "https://github.com/Alysondao/Comfyui-Yolov8-JSON", - "files": [ - "https://github.com/Alysondao/Comfyui-Yolov8-JSON" - ], - "install_type": "git-clone", - "description": "This node is mainly based on the Yolov8 model for object detection, and it outputs related images, masks, and JSON information." - }, { "author": "CC-BryanOttho", "title": "ComfyUI_API_Manager", @@ -6704,6 +7042,49 @@ "install_type": "git-clone", "description": "ComfyUI node of [a/Kohaku's DanTagGen Demo](https://huggingface.co/KBlueLeaf/DanTagGen?not-for-all-audiences=true)." }, + { + "author": "huchenlei", + "title": "ComfyUI-openpose-editor", + "reference": "https://github.com/huchenlei/ComfyUI-openpose-editor", + "files": [ + "https://github.com/huchenlei/ComfyUI-openpose-editor" + ], + "install_type": "git-clone", + "description": "Port of [a/https://github.com/huchenlei/sd-webui-openpose-editor](https://github.com/huchenlei/sd-webui-openpose-editor) in ComfyUI" + }, + { + "author": "huchenlei", + "title": "ComfyUI-IC-Light-Native", + "id": "ic-light-native", + "reference": "https://github.com/huchenlei/ComfyUI-IC-Light-Native", + "files": [ + "https://github.com/huchenlei/ComfyUI-IC-Light-Native" + ], + "install_type": "git-clone", + "description": "ComfyUI native implementation of [a/IC-Light](https://github.com/lllyasviel/IC-Light)." + }, + { + "author": "huchenlei", + "title": "ComfyUI DenseDiffusion", + "id": "densediffusion", + "reference": "https://github.com/huchenlei/ComfyUI_densediffusion", + "files": [ + "https://github.com/huchenlei/ComfyUI_densediffusion" + ], + "install_type": "git-clone", + "description": "[a/DenseDiffusion](https://github.com/naver-ai/DenseDiffusion) custom node for ComfyUI." + }, + { + "author": "huchenlei", + "title": "ComfyUI_omost", + "id": "omost", + "reference": "https://github.com/huchenlei/ComfyUI_omost", + "files": [ + "https://github.com/huchenlei/ComfyUI_omost" + ], + "install_type": "git-clone", + "description": "ComfyUI implementation of [a/Omost](https://github.com/lllyasviel/Omost), and everything about regional prompt.\nNOTE: You need to install ComfyUI_densediffusion to use this node." + }, { "author": "nathannlu", "title": "ComfyUI Pets", @@ -6729,7 +7110,7 @@ { "author": "11dogzi", "title": "Comfyui-ergouzi-Nodes", - "id": "ergouzi", + "id": "ergouzi-nodes", "reference": "https://github.com/11dogzi/Comfyui-ergouzi-Nodes", "files": [ "https://github.com/11dogzi/Comfyui-ergouzi-Nodes" @@ -6737,6 +7118,17 @@ "install_type": "git-clone", "description": "This is a node group kit that covers multiple nodes such as local refinement, tag management, random prompt words, text processing, image processing, mask processing, etc" }, + { + "author": "11dogzi", + "title": "Comfyui-ergouzi-samplers", + "id": "ergouzi-samplers", + "reference": "https://github.com/11dogzi/Comfyui-ergouzi-samplers", + "files": [ + "https://github.com/11dogzi/Comfyui-ergouzi-samplers" + ], + "install_type": "git-clone", + "description": "Partial redraw sampler and variant seed sampler" + }, { "author": "BXYMartin", "title": "ComfyUI-InstantIDUtils", @@ -6772,6 +7164,7 @@ { "author": "atmaranto", "title": "SaveAsScript", + "id": "saveasscript", "reference": "https://github.com/atmaranto/ComfyUI-SaveAsScript", "files": [ "https://github.com/atmaranto/ComfyUI-SaveAsScript" @@ -6782,6 +7175,7 @@ { "author": "meshmesh-io", "title": "mm-comfyui-megamask", + "id": "megamask", "reference": "https://github.com/meshmesh-io/mm-comfyui-megamask", "files": [ "https://github.com/meshmesh-io/mm-comfyui-megamask" @@ -6792,6 +7186,7 @@ { "author": "meshmesh-io", "title": "mm-comfyui-loopback", + "id": "mm-loopback", "reference": "https://github.com/meshmesh-io/mm-comfyui-loopback", "files": [ "https://github.com/meshmesh-io/mm-comfyui-loopback" @@ -6802,6 +7197,7 @@ { "author": "meshmesh-io", "title": "ComfyUI-MeshMesh", + "id": "meshmesh", "reference": "https://github.com/meshmesh-io/ComfyUI-MeshMesh", "files": [ "https://github.com/meshmesh-io/ComfyUI-MeshMesh" @@ -6812,6 +7208,7 @@ { "author": "CozyMantis", "title": "Cozy Human Parser", + "id": "humanparser", "reference": "https://github.com/cozymantis/human-parser-comfyui-node", "files": [ "https://github.com/cozymantis/human-parser-comfyui-node" @@ -6822,6 +7219,7 @@ { "author": "CozyMantis", "title": "Cozy Reference Pose Generator", + "id": "posegen", "reference": "https://github.com/cozymantis/pose-generator-comfyui-node", "files": [ "https://github.com/cozymantis/pose-generator-comfyui-node" @@ -6832,6 +7230,7 @@ { "author": "CozyMantis", "title": "Cozy Utils", + "id": "cozy-utils", "reference": "https://github.com/cozymantis/cozy-utils-comfyui-nodes", "files": [ "https://github.com/cozymantis/cozy-utils-comfyui-nodes" @@ -6861,17 +7260,19 @@ }, { "author": "ljleb", - "title": "comfy-mecha", + "title": "Mecha Merge Node Pack", + "id": "mecha", "reference": "https://github.com/ljleb/comfy-mecha", "files": [ "https://github.com/ljleb/comfy-mecha" ], "install_type": "git-clone", - "description": "Nodes:Blocks Mecha Hyper, Mecha Merger, Model Mecha Recipe, Custom Code Mecha Recipe" + "description": "Model merging node pack with a focus on low memory footprint." }, { "author": "diSty", "title": "ComfyUI Frame Maker", + "id": "frame-maker", "reference": "https://github.com/diStyApps/ComfyUI_FrameMaker", "files": [ "https://github.com/diStyApps/ComfyUI_FrameMaker" @@ -6882,6 +7283,7 @@ { "author": "hackkhai", "title": "ComfyUI-Image-Matting", + "id": "image-matting", "reference": "https://github.com/hackkhai/ComfyUI-Image-Matting", "files": [ "https://github.com/hackkhai/ComfyUI-Image-Matting" @@ -6892,6 +7294,7 @@ { "author": "Pos13", "title": "Cyclist", + "id": "cyclist", "reference": "https://github.com/Pos13/comfyui-cyclist", "files": [ "https://github.com/Pos13/comfyui-cyclist" @@ -6902,6 +7305,7 @@ { "author": "ExponentialML", "title": "ComfyUI_ModelScopeT2V", + "id": "modelscopet2v", "reference": "https://github.com/ExponentialML/ComfyUI_ModelScopeT2V", "files": [ "https://github.com/ExponentialML/ComfyUI_ModelScopeT2V" @@ -6912,6 +7316,7 @@ { "author": "ExponentialML", "title": "ComfyUI - Native DynamiCrafter", + "id": "dynamicrafter", "reference": "https://github.com/ExponentialML/ComfyUI_Native_DynamiCrafter", "files": [ "https://github.com/ExponentialML/ComfyUI_Native_DynamiCrafter" @@ -6922,6 +7327,7 @@ { "author": "ExponentialML", "title": "ComfyUI_VisualStylePrompting", + "id": "visual-style-prompting", "reference": "https://github.com/ExponentialML/ComfyUI_VisualStylePrompting", "files": [ "https://github.com/ExponentialML/ComfyUI_VisualStylePrompting" @@ -6942,6 +7348,7 @@ { "author": "stavsap", "title": "ComfyUI Ollama", + "id": "ollama", "reference": "https://github.com/stavsap/comfyui-ollama", "files": [ "https://github.com/stavsap/comfyui-ollama" @@ -6952,6 +7359,7 @@ { "author": "dchatel", "title": "comfyui_facetools", + "id": "facetools", "reference": "https://github.com/dchatel/comfyui_facetools", "files": [ "https://github.com/dchatel/comfyui_facetools" @@ -6962,6 +7370,7 @@ { "author": "prodogape", "title": "Comfyui-Minio", + "id": "minio", "reference": "https://github.com/prodogape/ComfyUI-Minio", "files": [ "https://github.com/prodogape/ComfyUI-Minio" @@ -6969,9 +7378,42 @@ "install_type": "git-clone", "description": "This plugin is mainly based on Minio, implementing the ability to read images from Minio, save images, facilitating expansion and connection across multiple machines." }, + { + "author": "prodogape", + "title": "ComfyUI-EasyOCR", + "id": "easyocr", + "reference": "https://github.com/prodogape/ComfyUI-EasyOCR", + "files": [ + "https://github.com/prodogape/ComfyUI-EasyOCR" + ], + "install_type": "git-clone", + "description": "This node is primarily based on Easy-OCR to implement OCR text recognition functionality." + }, + { + "author": "prodogape", + "title": "ComfyUI-OmDet", + "id": "omdet", + "reference": "https://github.com/prodogape/ComfyUI-OmDet", + "files": [ + "https://github.com/prodogape/ComfyUI-OmDet" + ], + "install_type": "git-clone", + "description": "This node is mainly based on [a/OmDet](https://github.com/om-ai-lab/OmDet) for object detection, and it outputs related images, masks, and Labelme JSON information." + }, + { + "author": "Alysondao", + "title": "Comfyui-Yolov8-JSON", + "reference": "https://github.com/Alysondao/Comfyui-Yolov8-JSON", + "files": [ + "https://github.com/Alysondao/Comfyui-Yolov8-JSON" + ], + "install_type": "git-clone", + "description": "This node is mainly based on the Yolov8 model for object detection, and it outputs related images, masks, and JSON information." + }, { "author": "kingzcheung", "title": "ComfyUI_kkTranslator_nodes", + "id": "kktranslator", "reference": "https://github.com/AIGCTeam/ComfyUI_kkTranslator_nodes", "files": [ "https://github.com/AIGCTeam/ComfyUI_kkTranslator_nodes" @@ -6982,6 +7424,7 @@ { "author": "vsevolod-oparin", "title": "Kandinsky 2.2 ComfyUI Plugin", + "id": "kandinsky", "reference": "https://github.com/vsevolod-oparin/comfyui-kandinsky22", "files": [ "https://github.com/vsevolod-oparin/comfyui-kandinsky22" @@ -6992,6 +7435,7 @@ { "author": "Xyem", "title": "Xycuno Oobabooga", + "id": "xycuno-oobabooga", "reference": "https://github.com/Xyem/Xycuno-Oobabooga", "files": [ "https://github.com/Xyem/Xycuno-Oobabooga" @@ -7002,6 +7446,7 @@ { "author": "shi3z", "title": "ComfyUI_Memeplex_DALLE", + "id": "memeplex-dalle", "reference": "https://github.com/shi3z/ComfyUI_Memeplex_DALLE", "files": [ "https://github.com/shi3z/ComfyUI_Memeplex_DALLE" @@ -7012,6 +7457,7 @@ { "author": "if-ai", "title": "ComfyUI-IF_AI_tools", + "id": "if-ai-tools", "reference": "https://github.com/if-ai/ComfyUI-IF_AI_tools", "files": [ "https://github.com/if-ai/ComfyUI-IF_AI_tools" @@ -7022,6 +7468,7 @@ { "author": "if-ai", "title": "ComfyUI-IF_AI_WishperSpeechNode", + "id": "if-ai-whisper-speech", "reference": "https://github.com/if-ai/ComfyUI-IF_AI_WishperSpeechNode", "files": [ "https://github.com/if-ai/ComfyUI-IF_AI_WishperSpeechNode" @@ -7029,9 +7476,21 @@ "install_type": "git-clone", "description": "This repository hosts a Text-to-Speech (TTS) application that leverages Whisper Speech for voice synthesis, allowing users to train a voice model on-the-fly. It is built on ComfyUI and supports rapid training and inference processes." }, + { + "author": "if-ai", + "title": "ComfyUI-IF_AI_HFDownloaderNode", + "id": "if-ai-hfdownloader", + "reference": "https://github.com/if-ai/ComfyUI-IF_AI_HFDownloaderNode", + "files": [ + "https://github.com/if-ai/ComfyUI-IF_AI_HFDownloaderNode" + ], + "install_type": "git-clone", + "description": "Talking avatars Heads for the IF_AI tools integrates dreamtalk in ComfyUI" + }, { "author": "dmMaze", "title": "Sketch2Manga", + "id": "sketch2manga", "reference": "https://github.com/dmMaze/sketch2manga", "files": [ "https://github.com/dmMaze/sketch2manga" @@ -7042,6 +7501,7 @@ { "author": "olduvai-jp", "title": "ComfyUI-HfLoader", + "id": "hfloader", "reference": "https://github.com/olduvai-jp/ComfyUI-HfLoader", "files": [ "https://github.com/olduvai-jp/ComfyUI-HfLoader" @@ -7052,6 +7512,7 @@ { "author": "AiMiDi", "title": "ComfyUI-Aimidi-nodes", + "id": "aimidi-nodes", "reference": "https://github.com/AiMiDi/ComfyUI-Aimidi-nodes", "files": [ "https://github.com/AiMiDi/ComfyUI-Aimidi-nodes" @@ -7062,6 +7523,7 @@ { "author": "ForeignGods", "title": "ComfyUI-Mana-Nodes", + "id": "mana-nodes", "reference": "https://github.com/ForeignGods/ComfyUI-Mana-Nodes", "files": [ "https://github.com/ForeignGods/ComfyUI-Mana-Nodes" @@ -7072,6 +7534,7 @@ { "author": "Cornea Valentin", "title": "ControlNet Auxiliar", + "id": "controlnet-aux-valentin", "reference": "https://github.com/madtunebk/ComfyUI-ControlnetAux", "files": [ "https://github.com/madtunebk/ComfyUI-ControlnetAux" @@ -7081,7 +7544,7 @@ }, { "author": "MarkoCa1", - "title": "ComfyUI_Text", + "title": "ComfyUI-Text", "reference": "https://github.com/MarkoCa1/ComfyUI-Text", "files": [ "https://github.com/MarkoCa1/ComfyUI-Text" @@ -7092,6 +7555,7 @@ { "author": "MarkoCa1", "title": "ComfyUI_Segment_Mask", + "id": "seg-mask", "reference": "https://github.com/MarkoCa1/ComfyUI_Segment_Mask", "files": [ "https://github.com/MarkoCa1/ComfyUI_Segment_Mask" @@ -7102,6 +7566,7 @@ { "author": "Shadetail", "title": "Eagleshadow Custom Nodes", + "id": "eagleshadow", "reference": "https://github.com/Shadetail/ComfyUI_Eagleshadow", "files": [ "https://github.com/Shadetail/ComfyUI_Eagleshadow" @@ -7112,6 +7577,7 @@ { "author": "ArdeniusAI", "title": "CPlus_Ardenius ComfyUI Control Box", + "id": "controlbox", "reference": "https://github.com/ArdeniusAI/CPlus_Ardenius", "files": [ "https://github.com/ArdeniusAI/CPlus_Ardenius" @@ -7132,6 +7598,7 @@ { "author": "daxcay", "title": "ComfyUI-JDCN", + "id": "jdcn", "reference": "https://github.com/daxcay/ComfyUI-JDCN", "files": [ "https://github.com/daxcay/ComfyUI-JDCN" @@ -7141,17 +7608,28 @@ }, { "author": "daxcay", - "title": "ComfyUI-DRMN", - "reference": "https://github.com/daxcay/ComfyUI-DRMN", + "title": "ComfyUI-DataSet", + "reference": "https://github.com/daxcay/ComfyUI-DataSet", "files": [ - "https://github.com/daxcay/ComfyUI-DRMN" + "https://github.com/daxcay/ComfyUI-DataSet" ], "install_type": "git-clone", - "description": "Data Research And Manipulators Nodes for Model Trainers, Artists, Designers and Animators. Captions, Visualizer, Text Manipulator" + "description": "Data Research, Preparation And Manipulators Nodes for Model Trainers, Artists, Designers and Animators. Captions, Visualizer, Text Manipulator\nNOTE: This repo is renamed to ComfyUI-DataSet.\n[w/Repository name is renamed to ComfyUI-DataSet from ComfyUI-DRMN. Please, remove previous one and reinstall.]" + }, + { + "author": "daxcay", + "title": "ComfyUI-NODEJS", + "reference": "https://github.com/daxcay/ComfyUI-NODEJS", + "files": [ + "https://github.com/daxcay/ComfyUI-NODEJS" + ], + "install_type": "git-clone", + "description": "This node allows the execution of Node.js application within ComfyUI by leveraging the ComfyUI-NODEJS, which starts alongside ComfyUI and facilitates the installation of Node.js. The integration enables Python subprocesses to execute Node.js scripts." }, { "author": "Seedsa", "title": "ComfyUI Fooocus Nodes", + "id": "fooocus-nodes", "reference": "https://github.com/Seedsa/Fooocus_Nodes", "files": [ "https://github.com/Seedsa/Fooocus_Nodes" @@ -7172,6 +7650,7 @@ { "author": "ratulrafsan", "title": "Comfyui-SAL-VTON", + "id": "sal-vton", "reference": "https://github.com/ratulrafsan/Comfyui-SAL-VTON", "files": [ "https://github.com/ratulrafsan/Comfyui-SAL-VTON" @@ -7182,6 +7661,7 @@ { "author": "Nevysha", "title": "ComfyUI-nevysha-top-menu", + "id": "nevysha-top-menu", "reference": "https://github.com/Nevysha/ComfyUI-nevysha-top-menu", "files": [ "https://github.com/Nevysha/ComfyUI-nevysha-top-menu" @@ -7191,17 +7671,19 @@ }, { "author": "alisson-anjos", - "title": "ComfyUI-LLaVA-Describer", - "reference": "https://github.com/alisson-anjos/ComfyUI-LLaVA-Describer", + "title": "ComfyUI-Ollama-Describer", + "id": "ollama-describer", + "reference": "https://github.com/alisson-anjos/ComfyUI-Ollama-Describer", "files": [ - "https://github.com/alisson-anjos/ComfyUI-LLaVA-Describer" + "https://github.com/alisson-anjos/ComfyUI-Ollama-Describer" ], "install_type": "git-clone", - "description": "This is an extension for ComfyUI to extract descriptions from your images using the multimodal model called LLaVa. The LLaVa model - Large Language and Vision Assistant, although trained on a relatively small dataset, demonstrates exceptional capabilities in understanding images and answering questions about them. This model shows behaviors similar to multimodal models like GPT-4, even when presented with unseen images and instructions." + "description": "This is an extension for ComfyUI that makes it possible to use some LLM models provided by Ollama, such as Gemma, Llava (multimodal), Llama2, Llama3 or Mistral. Speaking specifically of the LLaVa - Large Language and Vision Assistant model, although trained on a relatively small dataset, it demonstrates exceptional capabilities in understanding images and answering questions about them. This model presents similar behaviors to multimodal models such as GPT-4, even when presented with invisible images and instructions." }, { "author": "chaosaiart", "title": "Chaosaiart-Nodes", + "id": "chaosaiart", "reference": "https://github.com/chaosaiart/Chaosaiart-Nodes", "files": [ "https://github.com/chaosaiart/Chaosaiart-Nodes" @@ -7212,6 +7694,7 @@ { "author": "viperyl", "title": "ComfyUI-BiRefNet", + "id": "birefnet", "reference": "https://github.com/viperyl/ComfyUI-BiRefNet", "files": [ "https://github.com/viperyl/ComfyUI-BiRefNet" @@ -7219,9 +7702,22 @@ "install_type": "git-clone", "description": "Bilateral Reference Network achieves SOTA result in multi Salient Object Segmentation dataset, this repo pack BiRefNet as ComfyUI nodes, and make this SOTA model easier use for everyone." }, + { + "author": "viperyl", + "title": "ComfyUI-RGT", + "id": "rgt", + "reference": "https://github.com/viperyl/ComfyUI-RGT", + "pip": ["loguru"], + "files": [ + "https://github.com/viperyl/ComfyUI-RGT" + ], + "install_type": "git-clone", + "description": "This repo cast Recursive Generalization Transformer for Image Super-Resolution to ComfyUI, the original [a/paper link](https://arxiv.org/abs/2303.06373) and [a/github link](https://github.com/zhengchen1999/RGT)" + }, { "author": "SuperBeastsAI", "title": "ComfyUI-SuperBeasts", + "id": "superbeasts", "reference": "https://github.com/SuperBeastsAI/ComfyUI-SuperBeasts", "files": [ "https://github.com/SuperBeastsAI/ComfyUI-SuperBeasts" @@ -7229,19 +7725,10 @@ "install_type": "git-clone", "description": "Nodes:HDR Effects (SuperBeasts.AI). This repository contains custom nodes for ComfyUI created and used by SuperBeasts.AI (@SuperBeasts.AI on Instagram)" }, - { - "author": "IKHOR", - "title": "ikhor-nodes", - "reference": "https://github.com/IKHOR/ComfyUI-IKHOR-Jam-Nodes", - "files": [ - "https://github.com/IKHOR/ComfyUI-IKHOR-Jam-Nodes" - ], - "install_type": "git-clone", - "description": "Nodes:LoadFromS3, LoadBatchFromS3, SaveToS3, SaveBatchToS3" - }, { "author": "hay86", "title": "ComfyUI Dreamtalk", + "id": "dreamtalk", "reference": "https://github.com/hay86/ComfyUI_Dreamtalk", "files": [ "https://github.com/hay86/ComfyUI_Dreamtalk" @@ -7252,6 +7739,7 @@ { "author": "hay86", "title": "ComfyUI OpenVoice", + "id": "openvoice-hay86", "reference": "https://github.com/hay86/ComfyUI_OpenVoice", "files": [ "https://github.com/hay86/ComfyUI_OpenVoice" @@ -7262,6 +7750,7 @@ { "author": "hay86", "title": "ComfyUI DDColor", + "id": "ddcolor-hay86", "reference": "https://github.com/hay86/ComfyUI_DDColor", "files": [ "https://github.com/hay86/ComfyUI_DDColor" @@ -7272,6 +7761,7 @@ { "author": "hay86", "title": "ComfyUI MiniCPM-V", + "id": "minicpm-v", "reference": "https://github.com/hay86/ComfyUI_MiniCPM-V", "files": [ "https://github.com/hay86/ComfyUI_MiniCPM-V" @@ -7301,13 +7791,14 @@ }, { "author": "shinich39", - "title": "comfyui-random-node-39", - "reference": "https://github.com/shinich39/comfyui-ramdom-node-39", + "title": "comfyui-random-node", + "id": "random-node", + "reference": "https://github.com/shinich39/comfyui-ramdom-node", "files": [ - "https://github.com/shinich39/comfyui-ramdom-node-39" + "https://github.com/shinich39/comfyui-ramdom-node" ], "install_type": "git-clone", - "description": "Choose random node." + "description": "Shuffle nodes after queue added. [w/Repository name has been changed from comfyui-random-node-39 to comfyui-random-node. Please remove and reinstall it.]" }, { "author": "shinich39", @@ -7462,6 +7953,7 @@ { "author": "BlakeOne", "title": "ComfyUI NodePresets", + "id": "nodepresets", "reference": "https://github.com/BlakeOne/ComfyUI-NodePresets", "files": [ "https://github.com/BlakeOne/ComfyUI-NodePresets" @@ -7472,6 +7964,7 @@ { "author": "BlakeOne", "title": "ComfyUI NodeReset", + "id": "nodereset", "reference": "https://github.com/BlakeOne/ComfyUI-NodeReset", "files": [ "https://github.com/BlakeOne/ComfyUI-NodeReset" @@ -7482,6 +7975,7 @@ { "author": "kale4eat", "title": "ComfyUI_demucus", + "id": "demucus", "reference": "https://github.com/kale4eat/ComfyUI-path-util", "files": [ "https://github.com/kale4eat/ComfyUI-path-util" @@ -7549,16 +8043,6 @@ "install_type": "git-clone", "description": "Custom Node for comfyUI for virtual lighting based on normal map.\nYou can use normal maps to add virtual lighting effects to your images." }, - { - "author": "AppleBotzz", - "title": "ComfyUI_LLMVISION", - "reference": "https://github.com/AppleBotzz/ComfyUI_LLMVISION", - "files": [ - "https://github.com/AppleBotzz/ComfyUI_LLMVISION" - ], - "install_type": "git-clone", - "description": "This repository provides integration of GPT-4 and Claude 3 models into ComfyUI, allowing for both image and text-based interactions within the ComfyUI workflow." - }, { "author": "A4P7J1N7M05OT", "title": "ComfyUI-PixelOE", @@ -7623,9 +8107,32 @@ "install_type": "git-clone", "description": "Use RetinaFace to detect and automatically crop faces." }, + { + "author": "liusida", + "title": "ComfyUI-SD3-nodes", + "id": "sd3-nodes", + "reference": "https://github.com/liusida/ComfyUI-SD3-nodes", + "files": [ + "https://github.com/liusida/ComfyUI-SD3-nodes" + ], + "install_type": "git-clone", + "description": "Nodes that support Stable Diffusion 3 Medium better." + }, + { + "author": "liusida", + "title": "ComfyUI-B-LoRA", + "id": "b-lora", + "reference": "https://github.com/liusida/ComfyUI-B-LoRA", + "files": [ + "https://github.com/liusida/ComfyUI-B-LoRA" + ], + "install_type": "git-clone", + "description": "Load and apply B-LoRA models, currently B-LoRA models only works with SDXL (sdxl_base_1.0)." + }, { "author": "jtydhr88", "title": "ComfyUI-Workflow-Encrypt", + "id": "workflow-encrypt", "reference": "https://github.com/jtydhr88/ComfyUI-Workflow-Encrypt", "files": [ "https://github.com/jtydhr88/ComfyUI-Workflow-Encrypt" @@ -7633,6 +8140,17 @@ "install_type": "git-clone", "description": "Encrypt your comfyui workflow, and share it with key" }, + { + "author": "jtydhr88", + "title": "ComfyUI LayerDivider", + "id": "layer-divider", + "reference": "https://github.com/jtydhr88/ComfyUI-LayerDivider", + "files": [ + "https://github.com/jtydhr88/ComfyUI-LayerDivider" + ], + "install_type": "git-clone", + "description": "ComfyUI LayerDivider is custom nodes that generating layered psd files inside ComfyUI[w/Please follow readme and run install_windows_portable_win_py311_cu121 for ComfyUI embedded python.]" + }, { "author": "SeaArtLab", "title": "ComfyUI-Long-CLIP", @@ -7664,6 +8182,17 @@ "install_type": "git-clone", "description": "This repository simply caches the CLIP embeddings and subtly accelerates the inference process by bypassing unnecessary computations." }, + { + "author": "discus0434", + "title": "ComfyUI Aesthetic Predictor V2.5", + "id": "caching-embeddings", + "reference": "https://github.com/discus0434/comfyui-aesthetic-predictor-v2-5", + "files": [ + "https://github.com/discus0434/comfyui-aesthetic-predictor-v2-5" + ], + "install_type": "git-clone", + "description": "Simple ComfyUI node that predicts the score of an aesthetic image with SigLIP-based predictor." + }, { "author": "AIFSH", "title": "ComfyUI-UVR5", @@ -7700,7 +8229,7 @@ { "author": "AIFSH", "title": "ComfyUI-MuseTalk_FSH", - "id": "musetalk", + "id": "musetalk-fsh", "reference": "https://github.com/AIFSH/ComfyUI-MuseTalk_FSH", "files": [ "https://github.com/AIFSH/ComfyUI-MuseTalk_FSH" @@ -7722,7 +8251,7 @@ { "author": "AIFSH", "title": "ComfyUI-RVC", - "id": "rvc", + "id": "aifsh-rvc", "reference": "https://github.com/AIFSH/ComfyUI-RVC", "files": [ "https://github.com/AIFSH/ComfyUI-RVC" @@ -7733,14 +8262,91 @@ { "author": "AIFSH", "title": "ComfyUI-XTTS", - "reference": "https://github.com/AIFSH/ComfyUI-XTTS", "id": "xtts", + "reference": "https://github.com/AIFSH/ComfyUI-XTTS", "files": [ "https://github.com/AIFSH/ComfyUI-XTTS" ], "install_type": "git-clone", "description": "a custom comfyui node for [a/coqui-ai/TTS](https://github.com/coqui-ai/TTS.git)'s xtts module! support 17 languages voice cloning and tts" }, + { + "author": "AIFSH", + "title": "ComfyUI-Live2DViewer", + "id": "live2dviewer", + "reference": "https://github.com/AIFSH/ComfyUI-Live2DViewer", + "files": [ + "https://github.com/AIFSH/ComfyUI-Live2DViewer" + ], + "install_type": "git-clone", + "description": "a comfyui node for viewing Live2D model" + }, + { + "author": "AIFSH", + "title": "ComfyUI-FishSpeech", + "id": "fishspeech", + "reference": "https://github.com/AIFSH/ComfyUI-FishSpeech", + "files": [ + "https://github.com/AIFSH/ComfyUI-FishSpeech" + ], + "install_type": "git-clone", + "description": "a custom comfyui node for [a/fish-speech](https://github.com/fishaudio/fish-speech.git)" + }, + { + "author": "AIFSH", + "title": "ComfyUI_V-Express", + "id": "v-express-aifsh", + "reference": "https://github.com/AIFSH/ComfyUI_V-Express", + "files": [ + "https://github.com/AIFSH/ComfyUI_V-Express" + ], + "install_type": "git-clone", + "description": "the comfyui custom node of [a/V-Express](https://github.com/tencent-ailab/V-Express) to make audio driven videos!" + }, + { + "author": "AIFSH", + "title": "ComfyUI-MimicBrush", + "id": "mimicbrush", + "reference": "https://github.com/AIFSH/ComfyUI-MimicBrush", + "files": [ + "https://github.com/AIFSH/ComfyUI-MimicBrush" + ], + "install_type": "git-clone", + "description": "a comfyui custom node for [a/MimicBrush](https://github.com/ali-vilab/MimicBrush),then inpainting with reference image." + }, + { + "author": "AIFSH", + "title": "ComfyUI-Hallo", + "id": "hallo", + "reference": "https://github.com/AIFSH/ComfyUI-Hallo", + "files": [ + "https://github.com/AIFSH/ComfyUI-Hallo" + ], + "install_type": "git-clone", + "description": "a comfyui custom node for [a/hallo](https://github.com/fudan-generative-vision/hallo)" + }, + { + "author": "AIFSH", + "title": "ComfyUI-UniAnimate", + "id": "unianimate", + "reference": "https://github.com/AIFSH/ComfyUI-UniAnimate", + "files": [ + "https://github.com/AIFSH/ComfyUI-UniAnimate" + ], + "install_type": "git-clone", + "description": "a comfyui custom node for [a/UniAnimate](https://github.com/ali-vilab/UniAnimate)" + }, + { + "author": "AIFSH", + "title": "ComfyUI-3d-photo-inpainting", + "id": "3d-photo-inpainting", + "reference": "https://github.com/AIFSH/ComfyUI-3d-photo-inpainting", + "files": [ + "https://github.com/AIFSH/ComfyUI-3d-photo-inpainting" + ], + "install_type": "git-clone", + "description": "a comfyui custom node for [a/3d-photo-inpainting](https://github.com/vt-vl-lab/3d-photo-inpainting),then you can render one image to zoom-in/dolly zoom/swing motion/circle motion video" + }, { "author": "Koishi-Star", "title": "Euler-Smea-Dyn-Sampler", @@ -7766,6 +8372,7 @@ { "author": "smthemex", "title": "ComfyUI_ChatGLM_API", + "id": "chatglm-api", "reference": "https://github.com/smthemex/ComfyUI_ChatGLM_API", "files": [ "https://github.com/smthemex/ComfyUI_ChatGLM_API" @@ -7773,9 +8380,65 @@ "install_type": "git-clone", "description": "You can call Chatglm's API in comfyUI to translate and describe pictures, and the API similar to OpenAI." }, + { + "author": "smthemex", + "title": "ComfyUI_StableAudio_Open", + "id": "stable-audio-open-1.0", + "reference": "https://github.com/smthemex/ComfyUI_StableAudio_Open", + "files": [ + "https://github.com/smthemex/ComfyUI_StableAudio_Open" + ], + "install_type": "git-clone", + "description": "You can use stable-audio-open-1.0 in comfyUI" + }, + { + "author": "smthemex", + "title": "ComfyUI_HiDiffusion_Pro", + "id": "hidiffusion-pro", + "reference": "https://github.com/smthemex/ComfyUI_HiDiffusion_Pro", + "files": [ + "https://github.com/smthemex/ComfyUI_HiDiffusion_Pro" + ], + "install_type": "git-clone", + "description": "A HiDiffusion node for ComfyUI." + }, + { + "author": "smthemex", + "title": "ComfyUI_StoryDiffusion", + "id": "StoryDiffusion", + "reference": "https://github.com/smthemex/ComfyUI_StoryDiffusion", + "files": [ + "https://github.com/smthemex/ComfyUI_StoryDiffusion" + ], + "install_type": "git-clone", + "description": "A StoryDiffusion node for ComfyUI." + }, + { + "author": "smthemex", + "title": "ComfyUI_Pic2Story", + "id": "pic2story", + "reference": "https://github.com/smthemex/ComfyUI_Pic2Story", + "files": [ + "https://github.com/smthemex/ComfyUI_Pic2Story" + ], + "install_type": "git-clone", + "description": "ComfyUI simple node based on BLIP method, with the function of Image to Txt." + }, + { + "author": "smthemex", + "title": "ComfyUI_Llama3_8B", + "id": "llama3-8b", + "reference": "https://github.com/smthemex/ComfyUI_Llama3_8B", + "files": [ + "https://github.com/smthemex/ComfyUI_Llama3_8B" + ], + "install_type": "git-clone", + "description": "Llama3_8B for comfyUI, using pipeline workflow." + }, { "author": "smthemex", "title": "ComfyUI_ParlerTTS", + "id": "parlertts", "reference": "https://github.com/smthemex/ComfyUI_ParlerTTS", "files": [ "https://github.com/smthemex/ComfyUI_ParlerTTS" @@ -7783,19 +8446,10 @@ "install_type": "git-clone", "description": "You can call the ParlerTTS tool in comfyUI, which currently only supports English." }, - { - "author": "smthemex", - "title": "ComfyUI_Pic2Story", - "reference": "https://github.com/smthemex/ComfyUI_Pic2Story", - "files": [ - "https://github.com/smthemex/ComfyUI_Pic2Story" - ], - "install_type": "git-clone", - "description": "ComfyUI simple node based on BLIP method, with the function of 'Image to Txt'." - }, { "author": "smthemex", "title": "ComfyUI_Pipeline_Tool", + "id": "pipeline-tool", "reference": "https://github.com/smthemex/ComfyUI_Pipeline_Tool", "files": [ "https://github.com/smthemex/ComfyUI_Pipeline_Tool" @@ -7805,17 +8459,41 @@ }, { "author": "smthemex", - "title": "ComfyUI_Llama3_8B", - "reference": "https://github.com/smthemex/ComfyUI_Llama3_8B", + "title": "ComfyUI_ID_Animator", + "id": "id-animator", + "reference": "https://github.com/smthemex/ComfyUI_ID_Animator", "files": [ - "https://github.com/smthemex/ComfyUI_Llama3_8B" + "https://github.com/smthemex/ComfyUI_ID_Animator" ], "install_type": "git-clone", - "description": "Llama3_8B for comfyUI, using pipeline workflow." + "description": "This node allows you to use ID_Animator, the zero shot video generation model" + }, + { + "author": "smthemex", + "title": "ComfyUI_CustomNet", + "id": "customnet", + "reference": "https://github.com/smthemex/ComfyUI_CustomNet", + "files": [ + "https://github.com/smthemex/ComfyUI_CustomNet" + ], + "install_type": "git-clone", + "description": "This node allows you to use customnet." + }, + { + "author": "smthemex", + "title": "ComfyUI_Pops", + "id": "pops", + "reference": "https://github.com/smthemex/ComfyUI_Pops", + "files": [ + "https://github.com/smthemex/ComfyUI_Pops" + ], + "install_type": "git-clone", + "description": "You can use [a/Popspaper](https://popspaper.github.io/pOps/) method in comfyUI" }, { "author": "choey", "title": "Comfy-Topaz", + "id": "topaz", "reference": "https://github.com/choey/Comfy-Topaz", "files": [ "https://github.com/choey/Comfy-Topaz" @@ -7826,6 +8504,7 @@ { "author": "ALatentPlace", "title": "ComfyUI_yanc", + "id": "yanc", "reference": "https://github.com/ALatentPlace/ComfyUI_yanc", "files": [ "https://github.com/ALatentPlace/ComfyUI_yanc" @@ -7846,6 +8525,7 @@ { "author": "wandbrandon", "title": "comfyui-pixel", + "id": "pixel", "reference": "https://github.com/wandbrandon/comfyui-pixel", "files": [ "https://github.com/wandbrandon/comfyui-pixel" @@ -7856,6 +8536,7 @@ { "author": "nullquant", "title": "BrushNet", + "id": "brushnet", "reference": "https://github.com/nullquant/ComfyUI-BrushNet", "files": [ "https://github.com/nullquant/ComfyUI-BrushNet" @@ -7866,6 +8547,7 @@ { "author": "pamparamm", "title": "Perturbed-Attention Guidance", + "id": "pag", "reference": "https://github.com/pamparamm/sd-perturbed-attention", "files": [ "https://github.com/pamparamm/sd-perturbed-attention" @@ -7886,6 +8568,7 @@ { "author": "fevre27", "title": "Self-Guidance nodes", + "id": "self-guidance", "reference": "https://github.com/forever22777/comfyui-self-guidance", "files": [ "https://github.com/forever22777/comfyui-self-guidance" @@ -7895,13 +8578,25 @@ }, { "author": "aburahamu", - "title": "ComfyUI-RequestsPoster", + "title": "ComfyUI-RequestPoster", + "id": "request-poster", "reference": "https://github.com/aburahamu/ComfyUI-RequestsPoster", "files": [ "https://github.com/aburahamu/ComfyUI-RequestsPoster" ], "install_type": "git-clone", - "description": "This custom node is that simply posts HttpRequest from ComfyUI." + "description": "This extension can send HTTP Requests. You can request image generation to StableDiffusion3 and post images to X (Twitter) and Discord." + }, + { + "author": "aburahamu", + "title": "ComfyUI-IsNiceParts", + "id": "isniceparts", + "reference": "https://github.com/aburahamu/ComfyUI-IsNiceParts", + "files": [ + "https://github.com/aburahamu/ComfyUI-IsNiceParts" + ], + "install_type": "git-clone", + "description": "This custom node detects body parts (currently only hands) from the received image and outputs the image if the skeleton can be estimated." }, { "author": "Sorcerio", @@ -7946,6 +8641,7 @@ { "author": "turkyden", "title": "ComfyUI-Comic", + "id": "comic", "reference": "https://github.com/turkyden/ComfyUI-Comic", "files": [ "https://github.com/turkyden/ComfyUI-Comic" @@ -7956,6 +8652,7 @@ { "author": "royceschultz", "title": "ComfyUI-TranscriptionTools", + "id": "transcription-tools", "reference": "https://github.com/royceschultz/ComfyUI-TranscriptionTools", "files": [ "https://github.com/royceschultz/ComfyUI-TranscriptionTools" @@ -7966,6 +8663,7 @@ { "author": "kunieone", "title": "ComfyUI_alkaid", + "id": "alkadi", "reference": "https://github.com/kunieone/ComfyUI_alkaid", "files": [ "https://github.com/kunieone/ComfyUI_alkaid" @@ -7973,19 +8671,10 @@ "install_type": "git-clone", "description": "Nodes:A_Face3DSwapper, A_FaceCrop, A_FacePaste, A_OpenPosePreprocessor, A_EmptyLatentImageLongside, A_GetImageSize, AlkaidLoader, AdapterFaceLoader, AdapterStyleLoader, ..." }, - { - "author": "jtydhr88", - "title": "ComfyUI-InstantMesh", - "reference": "https://github.com/jtydhr88/ComfyUI-InstantMesh", - "files": [ - "https://github.com/jtydhr88/ComfyUI-InstantMesh" - ], - "install_type": "git-clone", - "description": "ComfyUI InstantMesh is custom nodes that running TencentARC/InstantMesh into ComfyUI, this extension depends on ComfyUI-3D-Pack. Please refer to Readme carefully to install." - }, { "author": "txt2any", "title": "ComfyUI-PromptOrganizer", + "id": "prompt-organizer", "reference": "https://github.com/txt2any/ComfyUI-PromptOrganizer", "files": [ "https://github.com/txt2any/ComfyUI-PromptOrganizer" @@ -7996,6 +8685,7 @@ { "author": "kealiu", "title": "ComfyUI Load and Save file to S3", + "id": "savefile-to-s3", "reference": "https://github.com/kealiu/ComfyUI-S3-Tools", "files": [ "https://github.com/kealiu/ComfyUI-S3-Tools" @@ -8006,6 +8696,7 @@ { "author": "kealiu", "title": "ComfyUI-ZeroShot-MTrans", + "id": "zeroshot-mtrans", "reference": "https://github.com/kealiu/ComfyUI-ZeroShot-MTrans", "files": [ "https://github.com/kealiu/ComfyUI-ZeroShot-MTrans" @@ -8016,6 +8707,7 @@ { "author": "kealiu", "title": "ComfyUI-Zero123-Porting", + "id": "zero123-porting", "reference": "https://github.com/kealiu/ComfyUI-Zero123-Porting", "files": [ "https://github.com/kealiu/ComfyUI-Zero123-Porting" @@ -8026,6 +8718,7 @@ { "author": "TashaSkyUp", "title": "ComfyUI_LiteLLM", + "id": "litellm", "reference": "https://github.com/Hopping-Mad-Games/ComfyUI_LiteLLM", "files": [ "https://github.com/Hopping-Mad-Games/ComfyUI_LiteLLM" @@ -8036,6 +8729,7 @@ { "author": "AonekoSS", "title": "ComfyUI-SimpleCounter", + "id": "simplecounter", "reference": "https://github.com/AonekoSS/ComfyUI-SimpleCounter", "files": [ "https://github.com/AonekoSS/ComfyUI-SimpleCounter" @@ -8043,9 +8737,21 @@ "install_type": "git-clone", "description": "Node: utils/Simple Counter\nThis node is a simple counter, when pressing 'Queue Prompt' resets the count." }, + { + "author": "AonekoSS", + "title": "ComfyUI-LoRA-Tuner", + "id": "lora-tuner", + "reference": "https://github.com/AonekoSS/ComfyUI-LoRA-Tuner", + "files": [ + "https://github.com/AonekoSS/ComfyUI-LoRA-Tuner" + ], + "install_type": "git-clone", + "description": "Nodes: LoRA-Tuner. For using multiple LoRA easily." + }, { "author": "heshengtao", "title": "comfyui_LLM_party", + "id": "llm-party", "reference": "https://github.com/heshengtao/comfyui_LLM_party", "files": [ "https://github.com/heshengtao/comfyui_LLM_party" @@ -8056,6 +8762,7 @@ { "author": "VAST-AI-Research", "title": "Tripo for ComfyUI", + "id": "tripo", "reference": "https://github.com/VAST-AI-Research/ComfyUI-Tripo", "files": [ "https://github.com/VAST-AI-Research/ComfyUI-Tripo" @@ -8066,6 +8773,7 @@ { "author": "JettHu", "title": "ComfyUI_TGate", + "id": "tgate", "reference": "https://github.com/JettHu/ComfyUI_TGate", "files": [ "https://github.com/JettHu/ComfyUI_TGate" @@ -8076,6 +8784,7 @@ { "author": "JettHu", "title": "ComfyUI-TCD", + "id": "jetthu-tcd", "reference": "https://github.com/JettHu/ComfyUI-TCD", "files": [ "https://github.com/JettHu/ComfyUI-TCD" @@ -8086,6 +8795,7 @@ { "author": "sugarkwork", "title": "comfyui_tag_filter", + "id": "tag-filter", "reference": "https://github.com/sugarkwork/comfyui_tag_fillter", "files": [ "https://github.com/sugarkwork/comfyui_tag_fillter" @@ -8106,6 +8816,7 @@ { "author": "TencentQQGYLab", "title": "ComfyUI-ELLA", + "id": "ella", "reference": "https://github.com/TencentQQGYLab/ComfyUI-ELLA", "files": [ "https://github.com/TencentQQGYLab/ComfyUI-ELLA" @@ -8116,6 +8827,7 @@ { "author": "DarKDinDoN", "title": "ComfyUI Checkpoint Automatic Config", + "id": "checkpoint-autoconfig", "reference": "https://github.com/DarKDinDoN/comfyui-checkpoint-automatic-config", "files": [ "https://github.com/DarKDinDoN/comfyui-checkpoint-automatic-config" @@ -8123,19 +8835,10 @@ "install_type": "git-clone", "description": "This node was designed to help with checkpoint configuration." }, - { - "author": "aburahamu", - "title": "ComfyUI-RequestPoster", - "reference": "https://github.com/aburahamu/ComfyUI-RequestsPoster", - "files": [ - "https://github.com/aburahamu/ComfyUI-RequestsPoster" - ], - "install_type": "git-clone", - "description": "This extension can send HTTP Requests. You can request image generation to StableDiffusion3 and post images to X (Twitter) and Discord." - }, { "author": "MinusZoneAI", "title": "ComfyUI-Prompt-MZ", + "id": "prompt-mz", "reference": "https://github.com/MinusZoneAI/ComfyUI-Prompt-MZ", "files": [ "https://github.com/MinusZoneAI/ComfyUI-Prompt-MZ" @@ -8143,9 +8846,21 @@ "install_type": "git-clone", "description": "Use llama.cpp to help generate some nodes for prompt word related work" }, + { + "author": "MinusZoneAI", + "title": "ComfyUI-StylizePhoto-MZ", + "id": "stylizephoto", + "reference": "https://github.com/MinusZoneAI/ComfyUI-StylizePhoto-MZ", + "files": [ + "https://github.com/MinusZoneAI/ComfyUI-StylizePhoto-MZ" + ], + "install_type": "git-clone", + "description": "A stylized node with simple operation. The effect is achieved by I2I and lora. The clay style is currently implemented.Comes with watermark function." + }, { "author": "blueraincoatli", "title": "comfyUI_SillyNodes", + "id": "silly", "reference": "https://github.com/blueraincoatli/comfyUI_SillyNodes", "files": [ "https://github.com/blueraincoatli/comfyUI_SillyNodes" @@ -8156,6 +8871,7 @@ { "author": "ty0x2333", "title": "ComfyUI-Dev-Utils", + "id": "dev-utils", "reference": "https://github.com/ty0x2333/ComfyUI-Dev-Utils", "files": [ "https://github.com/ty0x2333/ComfyUI-Dev-Utils" @@ -8163,25 +8879,27 @@ "install_type": "git-clone", "description": "Execution Time Analysis, Reroute Enhancement, Node collection for developers." }, - { - "author": "huchenlei", - "title": "ComfyUI-openpose-editor", - "reference": "https://github.com/huchenlei/ComfyUI-openpose-editor", - "files": [ - "https://github.com/huchenlei/ComfyUI-openpose-editor" - ], - "install_type": "git-clone", - "description": "Port of [a/https://github.com/huchenlei/sd-webui-openpose-editor](https://github.com/huchenlei/sd-webui-openpose-editor) in ComfyUI" - }, { "author": "lquesada", "title": "ComfyUI-Prompt-Combinator", + "id": "prompt-combinator", "reference": "https://github.com/lquesada/ComfyUI-Prompt-Combinator", "files": [ "https://github.com/lquesada/ComfyUI-Prompt-Combinator" ], "install_type": "git-clone", - "description": "'🔢 Prompt Combinator' is a node that generates all possible combinations of prompts from several lists of strings." + "description": "'🔢 Prompt Combinator' is a node that generates all possible combinations of prompts from several lists of strings.\n'🔢 Prompt Combinator Merger' is a node that enables merging the output of two different '🔢 Prompt Combinator' nodes." + }, + { + "author": "lquesada", + "title": "ComfyUI-Inpaint-CropAndStitch", + "id": "crop-and-stitch", + "reference": "https://github.com/lquesada/ComfyUI-Inpaint-CropAndStitch", + "files": [ + "https://github.com/lquesada/ComfyUI-Inpaint-CropAndStitch" + ], + "install_type": "git-clone", + "description": "'✂️ Inpaint Crop' is a node that crops an image before sampling. The context area can be specified via the mask, expand pixels and expand factor or via a separate (optional) mask.\n'✂️ Inpaint Stitch' is a node that stitches the inpainted image back into the original image without altering unmasked areas." }, { "author": "randjtw", @@ -8196,6 +8914,7 @@ { "author": "FredBill1", "title": "comfyui-fb-utils", + "id": "fb-utils", "reference": "https://github.com/FredBill1/comfyui-fb-utils", "files": [ "https://github.com/FredBill1/comfyui-fb-utils" @@ -8205,7 +8924,8 @@ }, { "author": "jeffy5", - "title": "comfyui-fb-utils", + "title": "Faceless Node for ComfyUI", + "id": "faceless", "reference": "https://github.com/jeffy5/comfyui-faceless-node", "files": [ "https://github.com/jeffy5/comfyui-faceless-node" @@ -8246,17 +8966,6 @@ "install_type": "git-clone", "description": "Photoshop type functions and adjustment layers: 30 blend modes, Selective Color, Blend If, Color Balance, Solid Color Images, Black and White, Hue/Saturation, Levels, and RGB Splitting and Merging." }, - { - "author": "Shinsplat", - "title": "ComfyUI-Shinsplat", - "id": "shinsplat", - "reference": "https://github.com/Shinsplat/ComfyUI-Shinsplat", - "files": [ - "https://github.com/Shinsplat/ComfyUI-Shinsplat" - ], - "install_type": "git-clone", - "description": "Nodes: Clip Text Encode (Shinsplat), Clip Text Encode SDXL (Shinsplat), Lora Loader (Shinsplat)." - }, { "author": "da2el-ai", "title": "D2 Steps", @@ -8290,6 +8999,27 @@ "install_type": "git-clone", "description": "Transceiver is a python library that swiftly exchanges fundamental data structures, specifically numpy arrays, between processes, optimizing AI inference tasks that utilize ComfyUI." }, + { + "author": "nat-chan", + "title": "ComfyUI-graphToPrompt", + "id": "graph2prompt", + "reference": "https://github.com/nat-chan/ComfyUI-graphToPrompt", + "files": [ + "https://github.com/nat-chan/ComfyUI-graphToPrompt" + ], + "install_type": "git-clone", + "description": "workflow.json -> workflow_api.json" + }, + { + "author": "nat-chan", + "title": "comfyui-paint", + "reference": "https://github.com/nat-chan/comfyui-paint", + "files": [ + "https://github.com/nat-chan/comfyui-paint" + ], + "install_type": "git-clone", + "description": "comfyui-paint" + }, { "author": "web3nomad", "title": "ComfyUI Invisible Watermark", @@ -8346,6 +9076,7 @@ { "author": "sugarkwork", "title": "comfyui_cohere", + "id": "cohere", "reference": "https://github.com/sugarkwork/comfyui_cohere", "files": [ "https://github.com/sugarkwork/comfyui_cohere" @@ -8356,6 +9087,7 @@ { "author": "alessandrozonta", "title": "Bounding Box Crop Node for ComfyUI", + "id": "bbox-crop", "reference": "https://github.com/alessandrozonta/ComfyUI-CenterNode", "files": [ "https://github.com/alessandrozonta/ComfyUI-CenterNode" @@ -8363,9 +9095,32 @@ "install_type": "git-clone", "description": "This extension contains a custom node for ComfyUI. The node, called 'Bounding Box Crop', is designed to compute the top-left coordinates of a cropped bounding box based on input coordinates and dimensions of the final cropped image. It does so computing the center of the cropping area and then computing where the top-left coordinates would be." }, + { + "author": "alessandrozonta", + "title": "Save Layers Node for ComfyUI", + "id": "layers", + "reference": "https://github.com/alessandrozonta/ComfyUI-Layers", + "files": [ + "https://github.com/alessandrozonta/ComfyUI-Layers" + ], + "install_type": "git-clone", + "description": "This custom node for ComfyUI allows you to create layers of an image based on input masks and save them into a PSD file." + }, + { + "author": "alessandrozonta", + "title": "OpenPose Node", + "id": "openpose-alessandrozonta", + "reference": "https://github.com/alessandrozonta/ComfyUI-OpenPose", + "files": [ + "https://github.com/alessandrozonta/ComfyUI-OpenPose" + ], + "install_type": "git-clone", + "description": "This extension contains a custom node for ComfyUI. The node, called 'Bounding Box Crop', is designed to compute the top-left coordinates of a cropped bounding box based on input coordinates and dimensions of the final cropped image. It does so computing the center of the cropping area and then computing where the top-left coordinates would be." + }, { "author": "curiousjp", "title": "ComfyUI-MaskBatchPermutations", + "id": "maskbatch-permutations", "reference": "https://github.com/curiousjp/ComfyUI-MaskBatchPermutations", "files": [ "https://github.com/curiousjp/ComfyUI-MaskBatchPermutations" @@ -8376,6 +9131,7 @@ { "author": "BAIS1C", "title": "ComfyUI_RSS_Feed_Reader", + "id": "rssfeed", "reference": "https://github.com/BAIS1C/ComfyUI_RSS_Feed_Reader", "files": [ "https://github.com/BAIS1C/ComfyUI_RSS_Feed_Reader" @@ -8391,7 +9147,7 @@ "https://github.com/runtime44/comfyui_r44_nodes" ], "install_type": "git-clone", - "description": "Nodes: Runtime44Upscaler, Runtime44ColorMatch, Runtime44DynamicKSampler, Runtime44ImageOverlay, Runtime44ImageResizer, Runtime44ImageToNoise, Runtime44MaskSampler, Runtime44TiledMaskSampler, Runtime44IterativeUpscaleFactor, Runtime44ImageEnhance" + "description": "Nodes: Runtime44Upscaler, Runtime44ColorMatch, Runtime44DynamicKSampler, Runtime44ImageOverlay, Runtime44ImageResizer, Runtime44ImageToNoise, Runtime44MaskSampler, Runtime44TiledMaskSampler, Runtime44IterativeUpscaleFactor, Runtime44ImageEnhance, Runtime44FilmGrain" }, { "author": "osiworx", @@ -8403,16 +9159,6 @@ "install_type": "git-clone", "description": "Nodes:Use Prompt Quill in Comfyui" }, - { - "author": "AIFSH", - "title": "ComfyUI-FishSpeech", - "reference": "https://github.com/AIFSH/ComfyUI-FishSpeech", - "files": [ - "https://github.com/AIFSH/ComfyUI-FishSpeech" - ], - "install_type": "git-clone", - "description": "a custom comfyui node for [a/fish-speech](https://github.com/fishaudio/fish-speech.git)" - }, { "author": "philz1337x", "title": "✨ Clarity AI - Creative Image Upscaler and Enhancer for ComfyUI", @@ -8459,6 +9205,7 @@ { "author": "githubYiheng", "title": "ComfyUI_GetFileNameFromURL", + "id": "getfilename-from-url", "reference": "https://github.com/githubYiheng/ComfyUI_GetFileNameFromURL", "files": [ "https://github.com/githubYiheng/ComfyUI_GetFileNameFromURL" @@ -8466,6 +9213,50 @@ "install_type": "git-clone", "description": "GetFileNameFromURL is a ComfyUI custom node that extracts the filename from a URL. It can handle various URLs and is capable of handling redirects." }, + { + "author": "githubYiheng", + "title": "comfyui_kmeans_filter", + "id": "kmeans-filter", + "reference": "https://github.com/githubYiheng/comfyui_kmeans_filter", + "files": [ + "https://github.com/githubYiheng/comfyui_kmeans_filter" + ], + "install_type": "git-clone", + "description": "Nodes:Apply Kmeans Filter" + }, + { + "author": "githubYiheng", + "title": "ComfyUI_Change_IMAGE_BOREDER", + "id": "change-image-border", + "reference": "https://github.com/githubYiheng/ComfyUI_Change_IMAGE_BOREDER", + "files": [ + "https://github.com/githubYiheng/ComfyUI_Change_IMAGE_BOREDER" + ], + "install_type": "git-clone", + "description": "Nodes:Change Image Border" + }, + { + "author": "githubYiheng", + "title": "comfyui_meanshift_filter", + "id": "meanshift-filter", + "reference": "https://github.com/githubYiheng/comfyui_meanshift_filter", + "files": [ + "https://github.com/githubYiheng/comfyui_meanshift_filter" + ], + "install_type": "git-clone", + "description": "Nodes:Apply Meanshift Filter" + }, + { + "author": "githubYiheng", + "title": "comfyui_private_postprocessor", + "id": "githubyiheng-private-postprocessor", + "reference": "https://github.com/githubYiheng/comfyui_private_postprocessor", + "files": [ + "https://github.com/githubYiheng/comfyui_private_postprocessor" + ], + "install_type": "git-clone", + "description": "Nodes:Private ImageCPostprocessor" + }, { "author": "Fihade", "title": "IC-Light-ComfyUI-Node", @@ -8498,20 +9289,1219 @@ "install_type": "git-clone", "description": "Nodes:SizeFromArray" }, + { + "author": "Suplex", + "title": "Suplex Misc ComfyUI Nodes", + "id": "suplex", + "reference": "https://github.com/saftle/suplex_comfy_nodes", + "files": [ + "https://github.com/saftle/suplex_comfy_nodes" + ], + "install_type": "git-clone", + "description": "Misc Nodes: ControlNet Selector Node, Load Optional ControlNet Model" + }, + { + "author": "mephisto83", + "title": "petty-paint-comfyui-node", + "id": "petty-paint", + "reference": "https://github.com/mephisto83/petty-paint-comfyui-node", + "files": [ + "https://github.com/mephisto83/petty-paint-comfyui-node" + ], + "install_type": "git-clone", + "description": "An integration between comfy ui and petty paint" + }, + { + "author": "fsdymy1024", + "title": "ComfyUI_fsdymy", + "id": "fsdymy", + "reference": "https://github.com/fsdymy1024/ComfyUI_fsdymy", + "files": [ + "https://github.com/fsdymy1024/ComfyUI_fsdymy" + ], + "install_type": "git-clone", + "description": "Nodes:Save Image Without Metadata" + }, + { + "author": "ray", + "title": "Light Gradient for ComfyUI", + "id": "light-gradient", + "reference": "https://github.com/huagetai/ComfyUI_LightGradient", + "files": [ + "https://github.com/huagetai/ComfyUI_LightGradient" + ], + "install_type": "git-clone", + "description": "Nodes:Image Gradient,Mask Gradient" + }, + { + "author": "ray", + "title": "comfyui's gaffer(ComfyUI native implementation of IC-Light. )", + "id": "gaffer", + "reference": "https://github.com/huagetai/ComfyUI-Gaffer", + "files": [ + "https://github.com/huagetai/ComfyUI-Gaffer" + ], + "install_type": "git-clone", + "description": "Nodes:Load ICLight Model,Apply ICLight,Simple Light Source,Calculate Normal Map" + }, + { + "author": "YFG", + "title": "😸 YFG Comical Nodes", + "id": "comical", + "reference": "https://github.com/gonzalu/ComfyUI_YFG_Comical", + "files": [ + "https://github.com/gonzalu/ComfyUI_YFG_Comical" + ], + "install_type": "git-clone", + "description": "Image Historgram Generator - Outputs a set of images displaying the Histogram of the input image. Nodes: img2histograms, img2histogramsSelf" + }, + { + "author": "ruiqutech", + "title": "RuiquNodes for ComfyUI", + "id": "RuiquNodes", + "reference": "https://github.com/ruiqutech/ComfyUI-RuiquNodes", + "files": [ + "https://github.com/ruiqutech/ComfyUI-RuiquNodes" + ], + "install_type": "git-clone", + "description": "Nodes of EvaluateMultiple1, EvaluateMultiple3...\nSupport the execution of any fragment of Python code, generating multiple outputs from multiple inputs." + }, + { + "author": "teward", + "title": "ComfyUI-Helper-Nodes", + "id": "helper-nodes", + "reference": "https://github.com/teward/ComfyUI-Helper-Nodes", + "files": [ + "https://github.com/teward/ComfyUI-Helper-Nodes" + ], + "install_type": "git-clone", + "description": "Nodes: HelperNodes_MultilineStringLiteral, HelperNodes_StringLiteral, HelperNodes_Steps, HelperNodes_CfgScale, HelperNodes_WidthHeight, HelperNodes_SchedulerSelector, HelperNodes_SamplerSelector, ..." + }, + { + "author": "fmatray", + "title": "ComfyUI_BattlemapGrid", + "id": "battlemap-grid", + "reference": "https://github.com/fmatray/ComfyUI_BattlemapGrid", + "files": [ + "https://github.com/fmatray/ComfyUI_BattlemapGrid" + ], + "install_type": "git-clone", + "description": "Nodes for ComfyUI in order to generate battelmaps" + }, + { + "author": "christian-byrne", + "title": "img2txt-comfyui-nodes", + "id": "img2txt-nodes", + "reference": "https://github.com/christian-byrne/img2txt-comfyui-nodes", + "files": [ + "https://github.com/christian-byrne/img2txt-comfyui-nodes" + ], + "install_type": "git-clone", + "description": "Nodes:img2txt BLIP/Llava Multimodel Tagger" + }, + { + "author": "christian-byrne", + "title": "img2colors-comfyui-node", + "id": "img2colors-nodes", + "reference": "https://github.com/christian-byrne/img2colors-comfyui-node", + "files": [ + "https://github.com/christian-byrne/img2colors-comfyui-node" + ], + "install_type": "git-clone", + "description": "Nodes:Img2Color - Color Palette Extractor" + }, + { + "author": "christian-byrne", + "title": "Node - Size Matcher", + "id": "sizematcher", + "reference": "https://github.com/christian-byrne/size-match-compositing-nodes", + "files": [ + "https://github.com/christian-byrne/size-match-compositing-nodes" + ], + "install_type": "git-clone", + "description": "Takes two images and matches their sizes using various methods, detailed below." + }, + { + "author": "oztrkoguz", + "title": "ComfyUI StoryCreater", + "id": "storycreater", + "reference": "https://github.com/oztrkoguz/ComfyUI_StoryCreator", + "files": [ + "https://github.com/oztrkoguz/ComfyUI_StoryCreator" + ], + "install_type": "git-clone", + "description": "Nodes:story_sampler_simple, text2, kosmos2_sampler.\nI created a dataset for generating short stories [a/Short-Story](https://huggingface.co/datasets/oztrkoguz/Short-Story) and used it to fine-tune my own model using Phi-3." + }, + { + "author": "GraftingRayman", + "title": "GraftingRayman", + "id": "graftingrayman", + "reference": "https://github.com/GraftingRayman/ComfyUI_GraftingRayman", + "files": [ + "https://github.com/GraftingRayman/ComfyUI_GraftingRayman" + ], + "install_type": "git-clone", + "description": "Image Manipulation Nodes" + }, + { + "author": "royceschultz", + "title": "ComfyUI-Notifications", + "reference": "https://github.com/royceschultz/ComfyUI-Notifications", + "files": [ + "https://github.com/royceschultz/ComfyUI-Notifications" + ], + "install_type": "git-clone", + "description": "Send notifications when a workflow completes." + }, + { + "author": "katalist-ai", + "title": "comfyUI-nsfw-detection", + "id": "nsfw-detection", + "reference": "https://github.com/katalist-ai/comfyUI-nsfw-detection", + "files": [ + "https://github.com/katalist-ai/comfyUI-nsfw-detection" + ], + "install_type": "git-clone", + "description": "Nodes: NudenetDetector" + }, + { + "author": "kaanyalova", + "title": "Extended Image Formats for ComfyUI", + "id": "extended-image-format", + "reference": "https://github.com/kaanyalova/ComfyUI_ExtendedImageFormats", + "files": [ + "https://github.com/kaanyalova/ComfyUI_ExtendedImageFormats" + ], + "install_type": "git-clone", + "description": "Adds a custom node for saving images in webp, jpeg, avif, jxl (no metadata) and supports loading workflows from saved images" + }, + { + "author": "badayvedat", + "title": "ComfyUI-fal-Connector", + "id": "fal", + "reference": "https://github.com/badayvedat/ComfyUI-fal-Connector", + "files": [ + "https://github.com/badayvedat/ComfyUI-fal-Connector" + ], + "install_type": "git-clone", + "description": "The ComfyUI-fal-Connector is a tool designed to provide an integration between ComfyUI and fal. This extension allows users to execute their ComfyUI workflows directly on [a/fal.ai](https://fal.ai/). This enables users to leverage the computational power and resources provided by fal.ai for running their ComfyUI workflows." + }, + { + "author": "TheMistoAI", + "title": "Anyline", + "id": "anyline", + "reference": "https://github.com/TheMistoAI/ComfyUI-Anyline", + "files": [ + "https://github.com/TheMistoAI/ComfyUI-Anyline" + ], + "install_type": "git-clone", + "description": "A Fast, Accurate, and Detailed Line Detection Preprocessor.\nAnyline is a ControlNet line preprocessor that accurately extracts object edges, image details, and textual content from most images. Users can input any type of image to quickly obtain line drawings with clear edges, sufficient detail preservation, and high fidelity text, which are then used as input for conditional generation in Stable Diffusion." + }, + { + "author": "mbrostami", + "title": "ComfyUI-TITrain", + "id": "titrain", + "reference": "https://github.com/mbrostami/ComfyUI-TITrain", + "files": [ + "https://github.com/mbrostami/ComfyUI-TITrain" + ], + "install_type": "git-clone", + "description": "Nodes:TextualInversionTrainingSDXL, TextualInversionTraining" + }, + { + "author": "ArcherFMY", + "title": "Diffusion360_ComfyUI", + "id": "diffusion360", + "reference": "https://github.com/ArcherFMY/Diffusion360_ComfyUI", + "files": [ + "https://github.com/ArcherFMY/Diffusion360_ComfyUI" + ], + "install_type": "git-clone", + "description": "ComfyUI plugin of [a/SD-T2I-360PanoImage](https://github.com/ArcherFMY/SD-T2I-360PanoImage).\nbase t2i-pipeline for generating 512*1024 panorama image from text input" + }, + { + "author": "Makeezi", + "title": "ComfyUI-promptLAB", + "id": "promptlab", + "reference": "https://github.com/Makeezi/ComfyUI-promptLAB", + "files": [ + "https://github.com/Makeezi/ComfyUI-promptLAB" + ], + "install_type": "git-clone", + "description": "connection nodes for api requests, fully supports promptLAB" + }, + { + "author": "portu-sim", + "title": "comfyui_bmab", + "id": "bmab", + "reference": "https://github.com/portu-sim/comfyui_bmab", + "files": [ + "https://github.com/portu-sim/comfyui_bmab" + ], + "install_type": "git-clone", + "description": "BMAB for ComfyUI\n[w/comfyui-bmab is changed to comfyui_bmab. Remove 'custom_nodes/comyui-bmab' in your directory and then reinstall this.]" + }, + { + "author": "griptape-ai", + "title": "ComfyUI Griptape Nodes", + "id": "griptape", + "reference": "https://github.com/griptape-ai/ComfyUI-Griptape", + "files": [ + "https://github.com/griptape-ai/ComfyUI-Griptape" + ], + "install_type": "git-clone", + "description": "This repo creates a series of nodes that enable you to utilize the [a/Griptape Python Framework](https://github.com/griptape-ai/griptape/) with ComfyUI, integrating AI into your workflow. This repo creates a series of nodes that enable you to utilize the Griptape Python Framework with ComfyUI, integrating AI into your workflow." + }, + { + "author": "cavinHuang", + "title": "comfyui-nodes-docs", + "id": "nodedocs", + "reference": "https://github.com/CavinHuang/comfyui-nodes-docs", + "files": [ + "https://github.com/CavinHuang/comfyui-nodes-docs" + ], + "install_type": "git-clone", + "description": "This is a plugin for displaying documentation for each comfyui node. " + }, + { + "author": "icesun963", + "title": "HFDownLoad Node for ComfyUI", + "id": "HFDownLoad-ic", + "reference": "https://github.com/icesun963/ComfyUI_HFDownLoad", + "files": [ + "https://github.com/icesun963/ComfyUI_HFDownLoad" + ], + "install_type": "git-clone", + "description": "Download the model from huggingface and put it in any directory." + }, + { + "author": "conquestace", + "title": "Image Uploader", + "id": "image-uploader", + "reference": "https://github.com/conquestace/ComfyUI-ImageUploader", + "files": [ + "https://github.com/conquestace/ComfyUI-ImageUploader" + ], + "install_type": "git-clone", + "description": "Upload images automatically to image hosting sites." + }, + { + "author": "chandlergis", + "title": "ComfyUI-IMG_Query", + "id": "img-query", + "reference": "https://github.com/chandlergis/ComfyUI-IMG_Query", + "files": [ + "https://github.com/chandlergis/ComfyUI-IMG_Query" + ], + "install_type": "git-clone", + "description": "Nodes:ImageRequestNode" + }, + { + "author": "Isaac Emesowum", + "title": "Isaac's Nodes", + "id": "isaac", + "reference": "https://github.com/iemesowum/ComfyUI_IsaacNodes", + "files": [ + "https://github.com/iemesowum/ComfyUI_IsaacNodes" + ], + "install_type": "git-clone", + "description": "This extension offers automatic drums extraction from audio files, as well as a few helper nodes to support my audio synchronization AnimateDiff workflows." + }, + { + "author": "fexploit", + "title": "ComfyUI-AutoTrimBG", + "id": "autotrimbg", + "reference": "https://github.com/fexploit/ComfyUI-AutoTrimBG", + "files": [ + "https://github.com/fexploit/ComfyUI-AutoTrimBG" + ], + "install_type": "git-clone", + "description": "ComfyUI-AutoCropBgTrim is a powerful tool designed to automatically clean up the background of your images. This tool trims unnecessary spaces and pixels, leaving only the main subject of the image. It generates both a mask and an image output, making it easy to focus on the essential elements. Perfect for enhancing your photos and preparing them for professional use." + }, + { + "author": "fexploit", + "title": "ComfyUI-AutoLabel", + "id": "autolabel", + "reference": "https://github.com/fexploit/ComfyUI-AutoLabel", + "files": [ + "https://github.com/fexploit/ComfyUI-AutoLabel" + ], + "install_type": "git-clone", + "description": "ComfyUI-AutoLabel is a custom node for ComfyUI that uses BLIP (Bootstrapping Language-Image Pre-training) to generate detailed descriptions of the main object in an image. This node leverages the power of BLIP to provide accurate and context-aware captions for images." + }, + { + "author": "fexploit", + "title": "ComfyUI-Classifier", + "id": "classifier", + "reference": "https://github.com/fexploit/ComfyUI-Classifier", + "files": [ + "https://github.com/fexploit/ComfyUI-Classifier" + ], + "install_type": "git-clone", + "description": "ComfyUI-Classifier is a custom node for ComfyUI that uses a zero-shot classification model to classify text inputs based on a set of candidate labels. This node leverages the power of Hugging Face Transformers to provide accurate and flexible text classification." + }, + { + "author": "linshier", + "title": "comfyui-remote-tools", + "id": "remote-tools", + "reference": "https://github.com/linshier/comfyui-remote-tools", + "files": [ + "https://github.com/linshier/comfyui-remote-tools" + ], + "install_type": "git-clone", + "description": "Node:SendBase64ToRemote. To connect to another ComfyUI server." + }, + { + "author": "Fantaxico", + "title": "ComfyUI-GCP-Storage", + "id": "gcp-storage", + "reference": "https://github.com/Fantaxico/ComfyUI-GCP-Storage", + "files": [ + "https://github.com/Fantaxico/ComfyUI-GCP-Storage" + ], + "install_type": "git-clone", + "description": "Node:GCP Storage Node. Support google-cloud-storage." + }, + { + "author": "daniabib", + "title": "ComfyUI ProPainter Nodes", + "id": "propainter", + "reference": "https://github.com/daniabib/ComfyUI_ProPainter_Nodes", + "files": [ + "https://github.com/daniabib/ComfyUI_ProPainter_Nodes" + ], + "install_type": "git-clone", + "description": "ComfyUI custom node implementation of [a/ProPainter](https://github.com/sczhou/ProPainter) framework for video inpainting." + }, + { + "author": "iFREEGROUP", + "title": "comfyui-undistort", + "id": "undistort", + "reference": "https://github.com/iFREEGROUP/comfyui-undistort", + "files": [ + "https://github.com/iFREEGROUP/comfyui-undistort" + ], + "install_type": "git-clone", + "description": "Node:Load Checkerboard Images for Calibrate Camera, Matrix and distortion coefficient to text, Undistort" + }, + { + "author": "Auttasak-L", + "title": "ComfyUI-ImageCropper", + "id": "imagecropper", + "reference": "https://github.com/Auttasak-L/ComfyUI-ImageCropper", + "files": [ + "https://github.com/Auttasak-L/ComfyUI-ImageCropper" + ], + "install_type": "git-clone", + "description": "Nodes:Image cropping tool" + }, + { + "author": "muzi12888", + "title": "PoseKeypoint Mask", + "id": "posekeypoint-mask", + "reference": "https://github.com/muzi12888/ComfyUI-PoseKeypoint-Mask", + "files": [ + "https://github.com/muzi12888/ComfyUI-PoseKeypoint-Mask" + ], + "install_type": "git-clone", + "description": "Convert PoseKeypoint to mask, please refer to the example workflow for usage instructions." + }, + { + "author": "muzi12888", + "title": "m9-prompts-comfyui", + "id": "m9-prompts", + "reference": "https://github.com/MarcusNyne/m9-prompts-comfyui", + "files": [ + "https://github.com/MarcusNyne/m9-prompts-comfyui" + ], + "install_type": "git-clone", + "description": "Two custom nodes are included for modifying a prompt to create prompt variations.\nScramblePrompts [m9]: Reorder prompts, remove prompts, modify weights\nTweakWeights [m9]: Modify the weights of prompts matching keywords" + }, + { + "author": "xuhongming251", + "title": "ComfyUI-GPEN", + "id": "gpen", + "reference": "https://github.com/xuhongming251/ComfyUI-GPEN", + "files": [ + "https://github.com/xuhongming251/ComfyUI-GPEN" + ], + "install_type": "git-clone", + "description": "Nodes:FaceEnhancement. Based on modelscope pipeline." + }, + { + "author": "xuhongming251", + "title": "ComfyUI-MuseTalkUtils", + "id": "musetalk-utils", + "reference": "https://github.com/xuhongming251/ComfyUI-MuseTalkUtils", + "files": [ + "https://github.com/xuhongming251/ComfyUI-MuseTalkUtils" + ], + "install_type": "git-clone", + "description": "MuseTalk ComfyUI Preprocess and Postprocess Nodes" + }, + { + "author": "Thomas Ward", + "title": "TW-CUI-Util", + "id": "tw-cui-util", + "reference": "https://github.com/TW-CUI/TW-CUI-Util", + "files": [ + "https://github.com/TW-CUI/TW-CUI-Util" + ], + "install_type": "git-clone", + "description": "A collection of custom nodes to help with saving images, providing generation parameters, static literal nodes, and other useful nodes." + }, + { + "author": "lks-ai", + "title": "ComfyUI AnyNode: Any Node you ask for", + "id": "anynode", + "reference": "https://github.com/lks-ai/anynode", + "files": [ + "https://github.com/lks-ai/anynode" + ], + "install_type": "git-clone", + "description": "Nodes: AnyNode. Nodes that can be anything you ask. Auto-Generate functional nodes using LLMs. Create impossible workflows. API Compatibility: (OpenAI, LocalLLMs, Gemini)." + }, + { + "author": "lks-ai", + "title": "ComfyUI Stable Audio Open 1.0 Sampler", + "id": "stableaudiosampler", + "reference": "https://github.com/lks-ai/ComfyUI-StableAudioSampler", + "files": [ + "https://github.com/lks-ai/ComfyUI-StableAudioSampler" + ], + "install_type": "git-clone", + "description": "Nodes: StableAudioSampler. Wraps the new Stable Audio Open Model in the sampler that dropped Jun 5th. See Github for Features" + }, + { + "author": "SayanoAI", + "title": "Comfy-RVC", + "id": "sayano-rvc", + "reference": "https://github.com/SayanoAI/Comfy-RVC", + "files": [ + "https://github.com/SayanoAI/Comfy-RVC" + ], + "install_type": "git-clone", + "description": "ComfyUI custom nodes for RVC related inference and image generation" + }, + { + "author": "nirbhay-faaya", + "title": "ImgProcessing_ComfyUI", + "id": "imgprocessing", + "reference": "https://github.com/nirbhay-faaya/ImgProcessing_ComfyUI", + "files": [ + "https://github.com/nirbhay-faaya/ImgProcessing_ComfyUI" + ], + "install_type": "git-clone", + "description": "Custom Image processing ComfyUI Nodes" + }, + { + "author": "larsupb", + "title": "LoRA Power-Merger ComfyUI", + "id": "lora-powermerger", + "reference": "https://github.com/larsupb/LoRA-Merger-ComfyUI", + "files": [ + "https://github.com/larsupb/LoRA-Merger-ComfyUI" + ], + "install_type": "git-clone", + "description": "An extension for merging LoRAs. Offers a wide range of LoRA merge techniques (including dare) and XY plots. XY plots require efficiency nodes." + }, + { + "author": "Mason-McGough", + "title": "Mosaica", + "id": "mosaica", + "reference": "https://github.com/Mason-McGough/ComfyUI-Mosaica", + "files": [ + "https://github.com/Mason-McGough/ComfyUI-Mosaica" + ], + "install_type": "git-clone", + "description": "Create colorful mosaic images in ComfyUI by computing label images and applying lookup tables." + }, + { + "author": "cuongloveit", + "title": "comfy_http_request", + "reference": "https://github.com/cuongloveit/comfy_http_request", + "files": [ + "https://github.com/cuongloveit/comfy_http_request" + ], + "install_type": "git-clone", + "description": "Nodes:Send Http Request. You can use this node to save full size images through the websocket." + }, + { + "author": "Ron-Digital", + "title": "ComfyUI-SceneGenerator", + "id": "scenegenerator", + "reference": "https://github.com/Ron-Digital/ComfyUI-SceneGenerator", + "files": [ + "https://github.com/Ron-Digital/ComfyUI-SceneGenerator" + ], + "install_type": "git-clone", + "description": "ComfyUI-SceneGenerator is a ComfyUI plugin used to generate scene preview photos from JSON files. This plugin creates scenes based on the provided JSON configuration and produces two different image outputs: one containing only the products and the other containing both the products and the props." + }, + { + "author": "xliry", + "title": "ComfyUI_SendDiscord", + "id": "senddiscord", + "reference": "https://github.com/xliry/ComfyUI_SendDiscord", + "files": [ + "https://github.com/xliry/ComfyUI_SendDiscord" + ], + "install_type": "git-clone", + "description": "Nodes:Send Video to Discord" + }, + { + "author": "xliry", + "title": "color2rgb", + "reference": "https://github.com/vxinhao/color2rgb", + "files": [ + "https://github.com/vxinhao/color2rgb/raw/main/color2rgb.py" + ], + "install_type": "copy", + "description": "Nodes:color2RGB" + }, + { + "author": "moyi7712", + "title": "ComfyUI_Seamless_Patten", + "id": "seamless-pattern", + "reference": "https://github.com/moyi7712/ComfyUI_Seamless_Patten", + "files": [ + "https://github.com/moyi7712/ComfyUI_Seamless_Patten" + ], + "install_type": "git-clone", + "description": "It make any text2image create seamless patten" + }, + { + "author": "nirex0", + "title": "ComfyUI_pytorch_openpose", + "id": "pytorch-openpose", + "reference": "https://github.com/nirex0/ComfyUI_pytorch_openpose", + "files": [ + "https://github.com/nirex0/ComfyUI_pytorch_openpose" + ], + "install_type": "git-clone", + "description": "All Credits go to the original Repo: [a/Hzzone/pytorch-openpose](https://github.com/Hzzone/pytorch-openpose)." + }, + { + "author": "AshMartian", + "title": "Dir Gir", + "id": "dir-gir", + "reference": "https://github.com/AshMartian/ComfyUI-DirGir", + "files": [ + "https://github.com/AshMartian/ComfyUI-DirGir" + ], + "install_type": "git-clone", + "description": "A collection of ComfyUI directory automation utility nodes. Directory Get It Right adds a GUI directory browser, and smart directory loop/iteration node that supports regex and file extension filtering." + }, + { + "author": "SozeInc", + "title": "ComfyUI-Mobile", + "id": "comfyui-mobile", + "reference": "https://github.com/SozeInc/ComfyUI-Mobile", + "files": [ + "https://github.com/SozeInc/ComfyUI-Mobile" + ], + "install_type": "git-clone", + "description": "Nodes: Ultimate Concat (Mobile), Send Notification (Mobile), Settings Launcher (Mobile), Settings Launcher Outputs (Mobile)" + }, + { + "author": "audioscavenger", + "title": "ComfyUI Thumbnails", + "id": "thumbnails", + "reference": "https://github.com/audioscavenger/ComfyUI-Thumbnails", + "files": [ + "https://github.com/audioscavenger/ComfyUI-Thumbnails" + ], + "install_type": "git-clone", + "description": "Load Image thumbnails for ComfyUI" + }, + { + "author": "goktug", + "title": "Save Image Plus for ComfyUI", + "id": "saveimage-plus", + "reference": "https://github.com/Goktug/comfyui-saveimage-plus", + "files": [ + "https://github.com/Goktug/comfyui-saveimage-plus" + ], + "install_type": "git-clone", + "description": "Save Image Plus is a custom node for ComfyUI that allows you to save images in JPEG and WEBP formats with optional metadata embedding." + }, + { + "author": "wujm424606", + "title": "ComfyUi-Ollama-YN", + "id": "ollama-YN", + "reference": "https://github.com/wujm424606/ComfyUi-Ollama-YN", + "files": [ + "https://github.com/wujm424606/ComfyUi-Ollama-YN" + ], + "install_type": "git-clone", + "description": "Custom ComfyUI Nodes for interacting with [a/Ollama](https://ollama.com/) using the [a/ollama python client](https://github.com/ollama/ollama-python).\n Meanwhile it will provide better prompt descriptor for stable diffusion." + }, + { + "author": "tmagara", + "title": "ComfyUI-Prediction-Boost", + "id": "prediction-boost", + "reference": "https://github.com/tmagara/ComfyUI-Prediction-Boost", + "files": [ + "https://github.com/tmagara/ComfyUI-Prediction-Boost" + ], + "install_type": "git-clone", + "description": "prediction boost custom node for ComfyUI" + }, + { + "author": "chesnokovivan", + "title": "ComfyUI-Novakid", + "id": "novakid", + "reference": "https://github.com/chesnokovivan/ComfyUI-Novakid", + "files": [ + "https://github.com/chesnokovivan/ComfyUI-Novakid" + ], + "install_type": "git-clone", + "description": "ComfyUI: Novakid. A node." + }, + { + "author": "Jin Liu", + "title": "ComfyUI-Photopea", + "id": "photopea", + "reference": "https://github.com/coolzilj/ComfyUI-Photopea", + "files": [ + "https://github.com/coolzilj/ComfyUI-Photopea" + ], + "install_type": "git-clone", + "description": "Edit images in the Photopea editor directly within ComfyUI." + }, + { + "author": "bitaffinity", + "title": "ComfyUI_HF_Inference", + "id": "hf-inference", + "reference": "https://github.com/bitaffinity/ComfyUI_HF_Inference", + "files": [ + "https://github.com/bitaffinity/ComfyUI_HF_Inference" + ], + "install_type": "git-clone", + "description": "Unofficial support for Hugging Face's hosted inference." + }, + { + "author": "claussteinmassl", + "title": "CS Transform Node for ComfyUI", + "id": "cs-transform", + "reference": "https://github.com/claussteinmassl/ComfyUI-CS-CustomNodes", + "files": [ + "https://github.com/claussteinmassl/ComfyUI-CS-CustomNodes" + ], + "install_type": "git-clone", + "description": "The CS Transform node is a custom node for ComfyUI that applies a series of transformations to an input image and mask. The transformations include scaling, rotation, and translation, all centered around a specified pivot point. The node ensures that the transformed image is properly accommodated within a canvas, which can be expanded if needed." + }, + { + "author": "MariusKM", + "title": "ComfyUI-BadmanNodes", + "id": "badman", + "reference": "https://github.com/MariusKM/ComfyUI-BadmanNodes", + "files": [ + "https://github.com/MariusKM/ComfyUI-BadmanNodes" + ], + "install_type": "git-clone", + "description": "Nodes:Badman_Blend, Badman_HexGenerator, Badman_String, Badman_Concat_String, Badman_Print, BadmanIO, BadmanIntUtil" + }, + { + "author": "TMElyralab", + "title": "Comfyui-MusePose", + "id": "musepose", + "reference": "https://github.com/TMElyralab/Comfyui-MusePose", + "files": [ + "https://github.com/TMElyralab/Comfyui-MusePose" + ], + "install_type": "git-clone", + "description": "[a/MusePose](https://github.com/TMElyralab/MusePose) is an image-to-video generation framework for virtual human under control signal such as pose.\nNOTE: You need to download weigths manually from: [a/https://huggingface.co/TMElyralab/MusePose](https://huggingface.co/TMElyralab/MusePose).[w/The repository name has changed. If you are not receiving updates, please delete the existing node and reinstall it.]" + }, + { + "author": "PnthrLeo", + "title": "comfyUI-image-search", + "id": "image-search", + "reference": "https://github.com/PnthrLeo/comfyUI-image-search", + "files": [ + "https://github.com/PnthrLeo/comfyUI-image-search" + ], + "install_type": "git-clone", + "description": "Nodes:Close Images Searcher" + }, + { + "author": "l20richo", + "title": "ComfyUI-Azure-Blob-Storage", + "id": "azure-blob-storage", + "reference": "https://github.com/l20richo/ComfyUI-Azure-Blob-Storage", + "files": [ + "https://github.com/l20richo/ComfyUI-Azure-Blob-Storage" + ], + "install_type": "git-clone", + "description": "ComfyUI-Azure-Blob-Storage seamlessly integrates with [a/Azure Blob Storage](https://azure.microsoft.com/en-us/products/storage/blobs/) in ComfyUI. This open-source project provides custom nodes for effortless loading and saving of images, videos, and checkpoint models directly from Azure blob containers within the ComfyUI graph interface." + }, + { + "author": "AARG-FAN", + "title": "Image-vector-for-ComfyUI", + "id": "image-vector", + "reference": "https://github.com/AARG-FAN/Image-Raster-for-ComfyUI", + "files": [ + "https://github.com/AARG-FAN/Image-Raster-for-ComfyUI" + ], + "install_type": "git-clone", + "description": "a wrap-up of ComfyUI nodes for converting pixels to raster, sent out to [a/Vtracer](https://github.com/visioncortex/vtracer)!" + }, + { + "author": "Smirnov75", + "title": "ComfyUI-mxToolkit", + "id": "mxtoolkit", + "reference": "https://github.com/Smirnov75/ComfyUI-mxToolkit", + "files": [ + "https://github.com/Smirnov75/ComfyUI-mxToolkit" + ], + "install_type": "git-clone", + "description": "A set of useful nodes for convenient use of ComfyUI, including: Seed randomization before the generation process starts, with saving of the last used values and the ability to automatically interrupt the current generation; A function to pause the generation process; Slider nodes for convenient control of input parameters; An alternative version of the standard Reroute node." + }, + { + "author": "humgate", + "title": "simplecomfy", + "reference": "https://github.com/humgate/simplecomfy", + "files": [ + "https://github.com/humgate/simplecomfy" + ], + "install_type": "git-clone", + "description": "Simple JS application based on ComfyUI which takes prompt and style picture from user and runs hardcoded workflow inference returning generated image to user." + }, + { + "author": "vanche1212", + "title": "ZMG PLUGIN", + "id": "zmg", + "reference": "https://github.com/vanche1212/ComfyUI-ZMG-Nodes", + "files": [ + "https://github.com/vanche1212/ComfyUI-ZMG-Nodes" + ], + "install_type": "git-clone", + "description": "Nodes:ApiRequestNode, LoadVideoNode, JsonParserNode, OllamaRequestNode, OldPhotoColorizationNode." + }, + { + "author": "hben35096", + "title": "ComfyUI-ToolBox", + "id": "hben-toolbox", + "reference": "https://github.com/hben35096/ComfyUI-ToolBox", + "files": [ + "https://github.com/hben35096/ComfyUI-ToolBox" + ], + "install_type": "git-clone", + "description": "Nodes:commonly_node." + }, + { + "author": "tiankuan93", + "title": "V-Express: Conditional Dropout for Progressive Training of Portrait Video Generation", + "id": "v-express", + "reference": "https://github.com/tiankuan93/ComfyUI-V-Express", + "files": [ + "https://github.com/tiankuan93/ComfyUI-V-Express" + ], + "install_type": "git-clone", + "description": "[Original] In the field of portrait video generation, the use of single images to generate portrait videos has become increasingly prevalent. A common approach involves leveraging generative models to enhance adapters for controlled generation. However, control signals can vary in strength, including text, audio, image reference, pose, depth map, etc. Among these, weaker conditions often struggle to be effective due to interference from stronger conditions, posing a challenge in balancing these conditions. In our work on portrait video generation, we identified audio signals as particularly weak, often overshadowed by stronger signals such as pose and original image. However, direct training with weak signals often leads to difficulties in convergence. To address this, we propose V-Express, a simple method that balances different control signals through a series of progressive drop operations. Our method gradually enables effective control by weak conditions, thereby achieving generation capabilities that simultaneously take into account pose, input image, and audio.\nNOTE: You need to downdload [a/model_ckpts](https://huggingface.co/tk93/V-Express/tree/main) manually." + }, + { + "author": "CMonk", + "title": "Stable Projectorz Bridge", + "id": "projectorz", + "reference": "https://github.com/tianlang0704/ComfyUI-StableProjectorzBridge", + "files": [ + "https://github.com/tianlang0704/ComfyUI-StableProjectorzBridge" + ], + "install_type": "git-clone", + "description": "This custom nodes enables Stable Projectorz to work with ComfyUI Directly." + }, + { + "author": "Scorpinaus", + "title": "Loaders for Diffusers-format checkpoints", + "id": "diffusersloader", + "reference": "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader", + "files": [ + "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader" + ], + "install_type": "git-clone", + "description": "This node pack allows loading of CLIP, MODEL, VAE aspects for both SD1.5 and SDXL checkpoints that is converted to diffusers format." + }, + { + "author": "chakib-belgaid", + "title": "ComfyUI Style Plugin", + "id": "style-plugin", + "reference": "https://github.com/chakib-belgaid/Comfyui_Prompt_styler", + "files": [ + "https://github.com/chakib-belgaid/Comfyui_Prompt_styler" + ], + "install_type": "git-clone", + "description": "This is a simple plugin for ComfyUI that allows you to import A1111 CSV styles into ComfyUI prompts." + }, + { + "author": "chakib-belgaid", + "title": "ComfyUI-autosize", + "id": "autosize", + "reference": "https://github.com/chakib-belgaid/ComfyUI-autosize", + "files": [ + "https://github.com/chakib-belgaid/ComfyUI-autosize" + ], + "install_type": "git-clone", + "description": "A ComfyUI utility plugin designed to optimize the latent space for generating high-quality results. It approximates the closest size model for better generation results." + }, + { + "author": "ThereforeGames", + "title": "ComfyUI-Unprompted", + "id": "unprompted", + "reference": "https://github.com/ThereforeGames/ComfyUI-Unprompted", + "files": [ + "https://github.com/ThereforeGames/ComfyUI-Unprompted" + ], + "install_type": "git-clone", + "description": "This is a ComfyUI node that processes your input text with the [a/Unprompted templating language](https://github.com/ThereforeGames/unprompted). Early alpha release.\n" + }, + { + "author": "Tool Of North america", + "title": "Easy automatic (square) image cropper using Yolo", + "id": "tooldigital", + "reference": "https://github.com/tooldigital/ComfyUI-Yolo-Cropper", + "files": [ + "https://github.com/tooldigital/ComfyUI-Yolo-Cropper" + ], + "install_type": "git-clone", + "description": "A very simple and easy to use node to automaticaaly create (square) image crops and masks using YoloV8. This can be very useful when using controlnet and ip adapters" + }, + { + "author": "luandev", + "title": "ComfyUI CrewAI", + "id": "crewai", + "reference": "https://github.com/luandev/ComfyUI-CrewAI", + "files": [ + "https://github.com/luandev/ComfyUI-CrewAI" + ], + "install_type": "git-clone", + "description": "ComfyUI-CrewAI aims to integrate Crew AI's multi-agent collaboration framework into the ComfyUI environment. By combining the strengths of Crew AI's role-based, collaborative AI agent system with ComfyUI's intuitive interface, we will create a robust platform for managing and executing complex AI tasks seamlessly" + }, + { + "author": "chandlergis", + "title": "ComfyUI_EmojiOverlay", + "id": "emoji-overlay", + "reference": "https://github.com/chandlergis/ComfyUI_EmojiOverlay", + "files": [ + "https://github.com/chandlergis/ComfyUI_EmojiOverlay" + ], + "install_type": "git-clone", + "description": "Nodes:Image Emoji Overlay" + }, + { + "author": "JayLyu", + "title": "ComfyUI_BaiKong_Node", + "id": "baikong", + "reference": "https://github.com/JayLyu/ComfyUI_BaiKong_Node", + "files": [ + "https://github.com/JayLyu/ComfyUI_BaiKong_Node" + ], + "install_type": "git-clone", + "description": "Nodes:BK Img To Color, BK Color Selector" + }, + { + "author": "risunobushi", + "title": "comfyUI_FrequencySeparation_RGB-HSV", + "id": "freq-sep", + "reference": "https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV", + "files": [ + "https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV" + ], + "install_type": "git-clone", + "description": "A collection of simple nodes for Frequency Separation / Frequency Recombine with RGB and HSV methods" + }, + { + "author": "zohac", + "title": "ComfyUI_ZC_DrawShape", + "id": "drawshape", + "reference": "https://github.com/zohac/ComfyUI_ZC_DrawShape", + "files": [ + "https://github.com/zohac/ComfyUI_ZC_DrawShape" + ], + "install_type": "git-clone", + "description": "Nodes:ZC DrawShape Node" + }, + { + "author": "DataCTE", + "title": "Prompt Injection Node for ComfyUI", + "id": "prompt-injection", + "reference": "https://github.com/DataCTE/prompt_injection", + "files": [ + "https://github.com/DataCTE/prompt_injection" + ], + "install_type": "git-clone", + "description": "This custom node for ComfyUI allows you to inject specific prompts at specific blocks of the Stable Diffusion UNet, providing fine-grained control over the generated image. It is based on the concept that the content/subject understanding of the model is primarily contained within the MID0 and MID1 blocks, as demonstrated in the B-Lora (Content Style implicit separation) paper. Features.\nInject different prompts into specific UNet blocks Three different node variations for flexible workflow integration Customize the learning rate of specific blocks to focus on content, lighting, style, or other aspects Potential for developing a 'Mix of Experts' approach by swapping blocks on-the-fly based on prompt content" + }, + { + "author": "FrankChieng", + "title": "ComfyUI_llm_easyanimiate", + "id": "llm-easyanimate", + "nodename_pattern": "^FrankChiengEasyAnimate", + "reference": "https://github.com/frankchieng/ComfyUI_llm_easyanimiate", + "files": [ + "https://github.com/frankchieng/ComfyUI_llm_easyanimiate" + ], + "install_type": "git-clone", + "description": "implementation easyanimate with llama3-8b-6bit instruction LLM generation prompt help" + }, + { + "author": "nuanarchy", + "title": "ComfyUI-NuA-FlashFace", + "id": "nua-flashface", + "reference": "https://github.com/nuanarchy/ComfyUI-NuA-FlashFace", + "files": [ + "https://github.com/nuanarchy/ComfyUI-NuA-FlashFace" + ], + "install_type": "git-clone", + "description": "ComfyUI implementation of [a/FlashFace: Human Image Personalization with High-fidelity Identity Preservation](https://github.com/ali-vilab/FlashFace)\nNOTE: You need to downalod models manually." + }, + { + "author": "nuanarchy", + "title": "ComfyUI-NuA-BIRD", + "id": "nua-bird", + "reference": "https://github.com/nuanarchy/ComfyUI-NuA-BIRD", + "files": [ + "https://github.com/nuanarchy/ComfyUI-NuA-BIRD" + ], + "install_type": "git-clone", + "description": "ComfyUI implementation of '[a/Blind Image Restoration via Fast Diffusion Inversion](https://github.com/hamadichihaoui/BIRD)' Original [a/article](https://arxiv.org/abs/2405.19572)" + }, + { + "author": "denfrost", + "title": "Den_ComfyUI_Workflows", + "id": "den", + "reference": "https://github.com/denfrost/Den_ComfyUI_Workflow", + "files": [ + "https://github.com/denfrost/Den_ComfyUI_Workflow" + ], + "install_type": "git-clone", + "description": "Custom nodes make easy Advanced Workflows. Focus on Image/Video and ControlNet efficiency and performances. Manipulation of Latent Space, Automatic pipeline with a bit efforts." + }, + { + "author": "marduk191", + "title": "marduk191 workflow settings", + "id": "marnodes", + "reference": "https://github.com/marduk191/comfyui-marnodes", + "files": [ + "https://github.com/marduk191/comfyui-marnodes" + ], + "install_type": "git-clone", + "description": "A node to set workflow settings." + }, + { + "author": "haohaocreates", + "title": "ComfyUI-HH-Image-Selector", + "id": "hh-image-selector", + "reference": "https://github.com/haohaocreates/ComfyUI-HH-Image-Selector", + "files": [ + "https://github.com/haohaocreates/ComfyUI-HH-Image-Selector" + ], + "install_type": "git-clone", + "description": "comfuio custom node that returns an image from a batch based on selected criteria such as RGB value, brightness, etc (credits to chris goringe's custom nodes tutorial )." + }, + { + "author": "exdysa", + "title": "comfyui-selector", + "reference": "https://github.com/exdysa/comfyui-selector", + "files": [ + "https://github.com/exdysa/comfyui-selector" + ], + "install_type": "git-clone", + "description": "Nodes:Selector. Quick and dirty parameter generator node for ComfyUI." + }, + { + "author": "Jin Liu", + "title": "ComfyUI-LJNodes", + "id": "ComfyUI-LJNodes", + "reference": "https://github.com/coolzilj/ComfyUI-LJNodes", + "files": [ + "https://github.com/coolzilj/ComfyUI-LJNodes" + ], + "install_type": "git-clone", + "description": "A variety of custom nodes to enhance ComfyUI for a buttery smooth experience." + }, + { + "author": "GavChap", + "title": "ComfyUI-SD3LatentSelectRes", + "id": "sd3latent-select-res", + "reference": "https://github.com/GavChap/ComfyUI-SD3LatentSelectRes", + "files": [ + "https://github.com/GavChap/ComfyUI-SD3LatentSelectRes" + ], + "install_type": "git-clone", + "description": "You'll get a new node called SD3 Latent Select Resolution, you can pick the x and y sizes from a list." + }, + { + "author": "BenNarum", + "title": "SigmaWaveFormNodes", + "id": "sigmawaveform", + "reference": "https://github.com/BenNarum/SigmaWaveFormNode", + "files": [ + "https://github.com/BenNarum/SigmaWaveFormNode" + ], + "install_type": "git-clone", + "description": "A set of tools for generating and altering sigmas in ComfyUI." + }, + { + "author": "shobhitic", + "title": "PlusMinusTextClip - Single node for Positive and Negative Prompts", + "id": "plusminustextclip", + "reference": "https://github.com/shobhitic/ComfyUI-PlusMinusTextClip", + "files": [ + "https://github.com/shobhitic/ComfyUI-PlusMinusTextClip" + ], + "install_type": "git-clone", + "description": "This adds a node that has both the positive and negative prompts as input in one node. You can just add one node and be done with both Positive and Negative prompts, in place of adding two different nodes for them." + }, + { + "author": "Late Night Labs", + "title": "LNL Frame Selector", + "id": "lnlframeselector", + "reference": "https://github.com/latenightlabs/ComfyUI-LNL", + "files": [ + "https://github.com/latenightlabs/ComfyUI-LNL" + ], + "install_type": "git-clone", + "description": "Frame Selector & Sequence Selection Node for ComfyUI." + }, + { + "author": "Michael Standen", + "title": "Ollama Prompt Encode", + "id": "ollamapromptencode", + "reference": "https://github.com/ScreamingHawk/comfyui-ollama-prompt-encode", + "files": [ + "https://github.com/ScreamingHawk/comfyui-ollama-prompt-encode" + ], + "install_type": "git-clone", + "description": "A prompt generator and CLIP encoder using AI provided by Ollama." + }, + { + "author": "toxicwind", + "title": "TTools for ComfyUI", + "id": "ttools", + "reference": "https://github.com/toxicwind/ComfyUI-TTools", + "files": [ + "https://github.com/toxicwind/ComfyUI-TTools" + ], + "install_type": "git-clone", + "description": "Text Randomization and Formatting, JSON Extraction and Processing, SD3 Resolution Solver" + }, + { + "author": "Yanick112", + "title": "ComfyUI-ToSVG", + "id": "tosvg", + "reference": "https://github.com/Yanick112/ComfyUI-ToSVG", + "files": [ + "https://github.com/Yanick112/ComfyUI-ToSVG" + ], + "install_type": "git-clone", + "description": "This project converts raster images into SVG format using the [a/VTracer](https://github.com/visioncortex/vtracer) library. It's a handy tool for designers and developers who need to work with vector graphics programmatically." + }, + { + "author": "dicksondickson", + "title": "ComfyUI-Dickson-Nodes", + "id": "dicksonnodes", + "reference": "https://github.com/dicksondickson/ComfyUI-Dickson-Nodes", + "files": [ + "https://github.com/dicksondickson/ComfyUI-Dickson-Nodes" + ], + "install_type": "git-clone", + "description": "Custom nodes for ComfyUI by DicksonDickson." + }, + { + "author": "juehackr", + "title": "comfyui_fk_server", + "id": "fk-server", + "reference": "https://github.com/juehackr/comfyui_fk_server", + "files": [ + "https://github.com/juehackr/comfyui_fk_server" + ], + "install_type": "git-clone", + "description": "🤗🤗🤗Comfyui Universal Translation Plugin (no longer requires adding various nodes, directly add translation function on the existing nodes), allowing Comfyui to support Chinese input and automatic translation for any long text input box, while adding error translation function (calling Baidu Translate), achieving translation freedom!" + }, + { + "author": "G-370", + "title": "ComfyUI-SD3-Powerlab", + "id": "sd3-powerlab", + "reference": "https://github.com/G-370/ComfyUI-SD3-Powerlab", + "files": [ + "https://github.com/G-370/ComfyUI-SD3-Powerlab" + ], + "install_type": "git-clone", + "description": "Nodes:Render SD3 Attention, SD3 Attention To Image, SD3 Image Into Attention." + }, + { + "author": "TylerZoro", + "title": "SD3-Scaling", + "id": "sd3-scaling", + "reference": "https://github.com/TylerZoro/SD3-Scaling", + "files": [ + "https://github.com/TylerZoro/SD3-Scaling" + ], + "install_type": "git-clone", + "description": "Tools for scaling images and latents appropriate to SD3 in ComfyUI." + }, + { + "author": "baicai99", + "title": "ComfyUI-FrameSkipping", + "id": "FrameSkipping", + "reference": "https://github.com/baicai99/ComfyUI-FrameSkipping", + "files": [ + "https://github.com/baicai99/ComfyUI-FrameSkipping" + ], + "install_type": "git-clone", + "description": "Used to process video redrawing, frame skipping, frame ending early, etc." + }, + { + "author": "SuperMasterBlasterLaser", + "title": "ComfyUI_YOLO_Classifiers", + "id": "yolo-classifier", + "reference": "https://github.com/SuperMasterBlasterLaser/ComfyUI_YOLO_Classifiers", + "files": [ + "https://github.com/SuperMasterBlasterLaser/ComfyUI_YOLO_Classifiers" + ], + "install_type": "git-clone", + "description": "Nodes:YOLO Classifier Model Loader, YOLO Classify." + }, + { + "author": "SamKhoze", + "title": "DeepFuze", + "id": "deepfuze", + "reference": "https://github.com/SamKhoze/ComfyUI-DeepFuze", + "files": [ + "https://github.com/SamKhoze/ComfyUI-DeepFuze" + ], + "install_type": "git-clone", + "description": "DeepFuze is a state-of-the-art deep learning tool that seamlessly integrates with ComfyUI to revolutionize facial transformations, lipsyncing, video generation, voice cloning, face swapping, and lipsync translation. Leveraging advanced algorithms, DeepFuze enables users to combine audio and video with unparalleled realism, ensuring perfectly synchronized facial movements. This innovative solution is ideal for content creators, animators, developers, and anyone seeking to elevate their video editing projects with sophisticated AI-driven features." + }, + { + "author": "superyoman", + "title": "comfyui_lumaAPI", + "id": "luma", + "reference": "https://github.com/superyoman/comfyui_lumaAPI", + "files": [ + "https://github.com/superyoman/comfyui_lumaAPI" + ], + "install_type": "git-clone", + "description": "Unofficial Luma API-ComfyUI version.[w/WARN: This project is for learning purpose only!]" + }, + { + "author": "chris-the-wiz", + "title": "EmbeddingsCurveEditor_ComfyUI", + "id": "embeddings-curve-editor", + "reference": "https://github.com/chris-the-wiz/EmbeddingsCurveEditor_ComfyUI", + "files": [ + "https://github.com/chris-the-wiz/EmbeddingsCurveEditor_ComfyUI" + ], + "install_type": "git-clone", + "description": "Edit embeddings with a curve. Actually should work on any 1D input tensor. Tested with IPAdapter-Plus." + }, - - - - - - - - - + + { "author": "Ser-Hilary", "title": "SDXL_sizing", @@ -8674,6 +10664,7 @@ { "author": "nicolai256", "title": "comfyUI_Nodes_nicolai256", + "id": "nicoali256", "reference": "https://github.com/nicolai256/comfyUI_Nodes_nicolai256", "files": [ "https://github.com/nicolai256/comfyUI_Nodes_nicolai256/raw/main/yugioh-presets.py" @@ -8684,6 +10675,7 @@ { "author": "Onierous", "title": "QRNG_Node_ComfyUI", + "id": "qrng", "reference": "https://github.com/Onierous/QRNG_Node_ComfyUI", "files": [ "https://github.com/Onierous/QRNG_Node_ComfyUI/raw/main/qrng_node.py" @@ -8704,6 +10696,7 @@ { "author": "alkemann", "title": "alkemann nodes", + "id": "alkemann", "reference": "https://gist.github.com/alkemann/7361b8eb966f29c8238fd323409efb68", "files": [ "https://gist.github.com/alkemann/7361b8eb966f29c8238fd323409efb68/raw/f9605be0b38d38d3e3a2988f89248ff557010076/alkemann.py" @@ -8714,6 +10707,7 @@ { "author": "catscandrive", "title": "Image loader with subfolders", + "id": "imgsubfolders", "reference": "https://github.com/catscandrive/comfyui-imagesubfolders", "files": [ "https://github.com/catscandrive/comfyui-imagesubfolders/raw/main/loadImageWithSubfolders.py" @@ -8724,6 +10718,7 @@ { "author": "Smuzzies", "title": "Chatbox Overlay node for ComfyUI", + "id": "chatbox-overlay", "reference": "https://github.com/Smuzzies/comfyui_chatbox_overlay", "files": [ "https://github.com/Smuzzies/comfyui_chatbox_overlay/raw/main/chatbox_overlay.py" @@ -8734,6 +10729,7 @@ { "author": "CaptainGrock", "title": "ComfyUIInvisibleWatermark", + "id": "invisible-watermark-grock", "reference": "https://github.com/CaptainGrock/ComfyUIInvisibleWatermark", "files": [ "https://github.com/CaptainGrock/ComfyUIInvisibleWatermark/raw/main/Invisible%20Watermark.py" @@ -8744,6 +10740,7 @@ { "author": "fearnworks", "title": "Fearnworks Custom Nodes", + "id": "fearnworks", "reference": "https://github.com/fearnworks/ComfyUI_FearnworksNodes", "files": [ "https://github.com/fearnworks/ComfyUI_FearnworksNodes/raw/main/fw_nodes.py" @@ -8754,6 +10751,7 @@ { "author": "LZC", "title": "Hayo comfyui nodes", + "id": "lzcnodes", "reference": "https://github.com/1shadow1/hayo_comfyui_nodes", "files": [ "https://github.com/1shadow1/hayo_comfyui_nodes/raw/main/LZCNodes.py" @@ -8776,6 +10774,7 @@ { "author": "underclockeddev", "title": "Preview Subselection Node for ComfyUI", + "id": "preview-subselection", "reference": "https://github.com/underclockeddev/ComfyUI-PreviewSubselection-Node", "files": [ "https://github.com/underclockeddev/ComfyUI-PreviewSubselection-Node/raw/master/preview_subselection.py" @@ -8783,20 +10782,10 @@ "install_type": "copy", "description": "A node which takes in x, y, width, height, total width, and total height, in order to accurately represent the area of an image which is covered by area-based conditioning." }, - { - "author": "AshMartian", - "title": "Dir Gir", - "reference": "https://github.com/AshMartian/ComfyUI-DirGir", - "files": [ - "https://github.com/AshMartian/ComfyUI-DirGir/raw/main/dir_picker.py", - "https://github.com/AshMartian/ComfyUI-DirGir/raw/main/dir_loop.py" - ], - "install_type": "copy", - "description": "A collection of ComfyUI directory automation utility nodes. Directory Get It Right adds a GUI directory browser, and smart directory loop/iteration node that supports regex and file extension filtering." - }, { "author": "underclockeddev", "title": "BrevImage", + "id": "brevimage", "reference": "https://github.com/bkunbargi/BrevImage", "files": [ "https://github.com/bkunbargi/BrevImage/raw/main/BrevLoadImage.py" @@ -8807,6 +10796,7 @@ { "author": "jw782cn", "title": "ComfyUI-Catcat", + "id": "catcat", "reference": "https://github.com/jw782cn/ComfyUI-Catcat", "files": [ "https://github.com/jw782cn/ComfyUI-Catcat" @@ -8815,20 +10805,56 @@ "description": "Extension to show random cat GIFs while queueing prompt." }, { - "author": "xliry", - "title": "ComfyUI_SendDiscord", - "reference": "https://github.com/xliry/ComfyUI_SendDiscord", + "author": "barckley75", + "title": "comfyUI_DaVinciResolve", + "reference": "https://github.com/barckley75/comfyUI_DaVinciResolve", "files": [ - "https://github.com/xliry/ComfyUI_SendDiscord/raw/main/SendDiscord.py" + "https://github.com/barckley75/comfyUI_DaVinciResolve/raw/main/custom_nodes/node_text_to_speech.py", + "https://github.com/barckley75/comfyUI_DaVinciResolve/raw/main/custom_nodes/nodes_phy_3_contitioning.py", + "https://github.com/barckley75/comfyUI_DaVinciResolve/raw/main/custom_nodes/save_audio_to_davinci.py", + "https://github.com/barckley75/comfyUI_DaVinciResolve/raw/main/custom_nodes/save_image_to_davinci.py" ], "install_type": "copy", - "description": "Nodes:Send Video to Discord" + "description": "Nodes:TextToSpeech, phy_3_conditioning, SaveAudioToDaVinci, SaveImageToDaVinci.\nNOTE:In order to use DaVinci node you must have DaVinci Resolve Studio connected to the API. For more information check the help seciton in DaVinci Resolve Studio HELP>DOCUMENTATION>DEVELOPER. It will open a folder, search for scripting and the for README.txt file, the API documentation." }, + { + "author": "DannyStone1999", + "title": "ComfyUI-Depth2Mask", + "reference": "https://github.com/DannyStone1999/ComfyUI-Depth2Mask", + "files": [ + "https://github.com/DannyStone1999/ComfyUI-Depth2Mask/raw/main/Depth2Mask.py" + ], + "install_type": "copy", + "description": "Nodes:Depth2Mask" + }, + { + "author": "Limbicnation", + "title": "ComfyUIDepthEstimation", + "reference": "https://github.com/Limbicnation/ComfyUIDepthEstimation", + "files": [ + "https://github.com/Limbicnation/ComfyUIDepthEstimation/raw/main/depth_estimation_node.py" + ], + "pip": ["transformers"], + "install_type": "copy", + "description": "A custom depth estimation node for ComfyUI using transformer models. It integrates depth estimation with automatic gamma correction, contrast adjustment, and edge detection, based on the [a/TransformDepth](https://github.com/Limbicnation/TransformDepth) repository." + }, + { + "author": "seghier", + "title": "ComfyUI_LibreTranslate", + "reference": "https://github.com/seghier/ComfyUI_LibreTranslate", + "files": [ + "https://github.com/seghier/ComfyUI_LibreTranslate/raw/main/translate_node.py" + ], + "install_type": "copy", + "description": "Use LibreTranslation in ComfyUI [a/https://github.com/LibreTranslate/LibreTranslate](https://github.com/LibreTranslate/LibreTranslate)" + }, + { "author": "theally", "title": "TheAlly's Custom Nodes", + "id": "ally", "reference": "https://civitai.com/models/19625?modelVersionId=23296", "files": [ "https://civitai.com/api/download/models/25114", @@ -8845,6 +10871,7 @@ { "author": "xss", "title": "Custom Nodes by xss", + "id": "xss", "reference": "https://civitai.com/models/24869/comfyui-custom-nodes-by-xss", "files": [ "https://civitai.com/api/download/models/32717", @@ -8863,6 +10890,7 @@ { "author": "aimingfail", "title": "Image2Halftone Node for ComfyUI", + "id": "img2halftone", "reference": "https://civitai.com/models/143293/image2halftone-node-for-comfyui", "files": [ "https://civitai.com/api/download/models/158997" diff --git a/extension-node-map.json b/extension-node-map.json index 3504d78b..1e9ef905 100644 --- a/extension-node-map.json +++ b/extension-node-map.json @@ -31,8 +31,7 @@ ], "https://github.com/1038lab/ComfyUI-GPT2P": [ [ - "GPT2PNode", - "ShowText_GPT2P" + "GPT2PNode" ], { "title_aux": "ComfyUI-GPT2P" @@ -92,6 +91,16 @@ "title_aux": "Comfyui-ergouzi-Nodes" } ], + "https://github.com/11dogzi/Comfyui-ergouzi-samplers": [ + [ + "EGBYZZCYQ", + "EGCYQJB", + "EGCYQJBCJ" + ], + { + "title_aux": "Comfyui-ergouzi-samplers" + } + ], "https://github.com/1mckw/Comfyui-Gelbooru": [ [ "Gelbooru (ID)", @@ -126,12 +135,19 @@ "GPT4VCaptioner", "Image Load with Metadata", "SAMIN String Attribute Selector", + "SANMIN Adapt Coordinates", + "SANMIN AdjustTransparency", + "SANMIN BlurMaskArea", "SANMIN ChineseToCharacter", "SANMIN ClothingWildcards", "SANMIN ConvertToEnglish", + "SANMIN EditWildcards", + "SANMIN Float", "SANMIN LoadPathImagesPreview", + "SANMIN SCALE AND FILL BLACK", "SANMIN SanmiSaveImageToLocal", "SANMIN SimpleWildcards", + "SANMIN Upscale And Original Size", "Samin Counter", "Samin Load Image Batch" ], @@ -198,6 +214,24 @@ "title_aux": "ComfyUI-PixelOE" } ], + "https://github.com/AARG-FAN/Image-Raster-for-ComfyUI": [ + [ + "AIraster" + ], + { + "title_aux": "Image-vector-for-ComfyUI" + } + ], + "https://github.com/AIFSH/ComfyUI-3d-photo-inpainting": [ + [ + "LoadImagePath", + "PreViewVideo", + "TreeDNode" + ], + { + "title_aux": "ComfyUI-3d-photo-inpainting" + } + ], "https://github.com/AIFSH/ComfyUI-FishSpeech": [ [ "FishSpeech_INFER", @@ -223,6 +257,17 @@ "title_aux": "ComfyUI-GPT_SoVITS" } ], + "https://github.com/AIFSH/ComfyUI-Hallo": [ + [ + "HalloNode", + "LoadAudioPath", + "LoadImagePath", + "PreViewVideo" + ], + { + "title_aux": "ComfyUI-Hallo" + } + ], "https://github.com/AIFSH/ComfyUI-IP_LAP": [ [ "CombineAudioVideo", @@ -234,6 +279,23 @@ "title_aux": "ComfyUI-IP_LAP" } ], + "https://github.com/AIFSH/ComfyUI-Live2DViewer": [ + [ + "Live2DViewer", + "LoadAudio" + ], + { + "title_aux": "ComfyUI-Live2DViewer" + } + ], + "https://github.com/AIFSH/ComfyUI-MimicBrush": [ + [ + "MimicBrushNode" + ], + { + "title_aux": "ComfyUI-MimicBrush" + } + ], "https://github.com/AIFSH/ComfyUI-MuseTalk_FSH": [ [ "CombineAudioVideo", @@ -268,6 +330,18 @@ "title_aux": "ComfyUI-UVR5" } ], + "https://github.com/AIFSH/ComfyUI-UniAnimate": [ + [ + "LoadImagePath", + "LoadVideo", + "PoseAlignNode", + "PreViewVideo", + "UniAnimateNode" + ], + { + "title_aux": "ComfyUI-UniAnimate" + } + ], "https://github.com/AIFSH/ComfyUI-WhisperX": [ [ "LoadAudio", @@ -290,6 +364,19 @@ "title_aux": "ComfyUI-XTTS" } ], + "https://github.com/AIFSH/ComfyUI_V-Express": [ + [ + "CombineAudioVideo", + "LoadAudio", + "LoadImagePath", + "LoadVideo", + "PreViewVideo", + "VExpress" + ], + { + "title_aux": "ComfyUI_V-Express" + } + ], "https://github.com/AIGCTeam/ComfyUI_kkTranslator_nodes": [ [ "LoadMarianMTCheckPoint", @@ -324,6 +411,14 @@ "title_aux": "ComfyUI-CUP" } ], + "https://github.com/AIGODLIKE/ComfyUI-ToonCrafter": [ + [ + "ToonCrafterNode" + ], + { + "title_aux": "ComfyUI-ToonCrafter" + } + ], "https://github.com/AInseven/ComfyUI-fastblend": [ [ "FillDarkMask", @@ -358,10 +453,17 @@ [ "> Clear Text", "> Float to Int", + "> Get Mean Color", "> Int", "> Int to Text", + "> Light Source Mask", "> Load Image", "> Load Image From Folder", + "> Mask Curves", + "> NIKSampler", + "> Noise From Image", + "> Normal Map Lighting", + "> RGB Color", "> Resolution by Aspect Ratio", "> Rotate Image", "> Save Image", @@ -416,6 +518,7 @@ "IntToString-badger", "IntToStringAdvanced-badger", "LoadImageAdvanced-badger", + "LoadImagesFromDirListAdvanced-badger", "SegmentToMaskByPoint-badger", "SimpleBoolean-badger", "StringToFizz-badger", @@ -452,10 +555,19 @@ "https://github.com/Acly/comfyui-tooling-nodes": [ [ "ETN_ApplyMaskToImage", + "ETN_AttentionMask", + "ETN_BackgroundRegion", "ETN_CropImage", + "ETN_DefineRegion", + "ETN_ExtractImageTile", + "ETN_ExtractMaskTile", + "ETN_GenerateTileMask", + "ETN_ListRegionMasks", "ETN_LoadImageBase64", "ETN_LoadMaskBase64", - "ETN_SendImageWebSocket" + "ETN_MergeImageTile", + "ETN_SendImageWebSocket", + "ETN_TileLayout" ], { "title_aux": "ComfyUI Nodes for External Tooling" @@ -475,12 +587,30 @@ "title_aux": "ComfyUI-Aimidi-nodes" } ], + "https://github.com/AlekPet/ComfyUI_Custom_Nodes_AlekPet": [ + [ + "ArgosTranslateCLIPTextEncodeNode", + "ArgosTranslateTextNode", + "DeepTranslatorCLIPTextEncodeNode", + "DeepTranslatorTextNode", + "GoogleTranslateCLIPTextEncodeNode", + "GoogleTranslateTextNode", + "PainterNode", + "PoseNode", + "PreviewTextNode" + ], + { + "title_aux": "AlekPet/ComfyUI_Custom_Nodes_AlekPet" + } + ], "https://github.com/Alysondao/Comfyui-Yolov8-JSON": [ [ "Apply Yolov8 Model", "Apply Yolov8 Model Seg", + "Draw Labelme Json", "Load Yolov8 Model", - "Load Yolov8 Model From Path" + "Load Yolov8 Model From Path", + "Save Labelme Json" ], { "title_aux": "Comfyui-Yolov8-JSON" @@ -496,6 +626,14 @@ "title_aux": "Jovimetrix Composition Nodes" } ], + "https://github.com/AonekoSS/ComfyUI-LoRA-Tuner": [ + [ + "LoraTuner" + ], + { + "title_aux": "ComfyUI-LoRA-Tuner" + } + ], "https://github.com/AonekoSS/ComfyUI-SimpleCounter": [ [ "Simple Counter" @@ -504,15 +642,19 @@ "title_aux": "ComfyUI-SimpleCounter" } ], - "https://github.com/AppleBotzz/ComfyUI_LLMVISION": [ + "https://github.com/ArcherFMY/Diffusion360_ComfyUI": [ [ - "CLAUDE_CHAT", - "CLAUDE_VISION", - "GPT4_CHAT", - "GPT4_VISION" + "Diffusion360LoaderImage2Pano", + "Diffusion360LoaderText2Pano", + "Diffusion360Sampler", + "Diffusion360SamplerImage2Pano", + "Diffusion360SamplerText2Pano", + "InputImage", + "InputText", + "VAEDecodeTiledBlended" ], { - "title_aux": "ComfyUI_LLMVISION" + "title_aux": "Diffusion360_ComfyUI" } ], "https://github.com/ArdeniusAI/CPlus_Ardenius": [ @@ -559,6 +701,16 @@ "title_aux": "AnimateDiff" } ], + "https://github.com/AshMartian/ComfyUI-DirGir": [ + [ + "Dir_Gir_Looper", + "Dir_Gir_Picker", + "Gir_Image_Nabber" + ], + { + "title_aux": "Dir Gir" + } + ], "https://github.com/AuroBit/ComfyUI-AnimateAnyone-reproduction": [ [ "AnimateAnyone" @@ -567,6 +719,16 @@ "title_aux": "ComfyUI-AnimateAnyone-reproduction" } ], + "https://github.com/AustinMroz/ComfyUI-DynamicOversampling": [ + [ + "DynamicSampler", + "MeasuredSampler", + "ResolveMaskPromise" + ], + { + "title_aux": "DynamicOversampling" + } + ], "https://github.com/AustinMroz/ComfyUI-SpliceTools": [ [ "LogSigmas", @@ -579,6 +741,14 @@ "title_aux": "SpliceTools" } ], + "https://github.com/Auttasak-L/ComfyUI-ImageCropper": [ + [ + "ImageCropper" + ], + { + "title_aux": "ComfyUI-ImageCropper" + } + ], "https://github.com/BAIS1C/ComfyUI_RSS_Feed_Reader": [ [ "RSSFeedNode" @@ -654,6 +824,19 @@ "title_aux": "bsz-cui-extras" } ], + "https://github.com/BenNarum/SigmaWaveFormNode": [ + [ + "AttenuatorNode", + "FourierFilterNode", + "PhaseLockedLoopNode", + "SigmaWaveFormNode", + "SigmaWaveFormNodeAdvanced", + "SigmaWaveFormNodeSimple" + ], + { + "title_aux": "SigmaWaveFormNodes" + } + ], "https://github.com/BennyKok/comfyui-deploy": [ [ "ComfyDeployWebscoketImageInput", @@ -666,6 +849,7 @@ "ComfyUIDeployExternalLora", "ComfyUIDeployExternalNumber", "ComfyUIDeployExternalNumberInt", + "ComfyUIDeployExternalNumberSlider", "ComfyUIDeployExternalText", "ComfyUIDeployExternalVid", "ComfyUIDeployExternalVideo" @@ -995,6 +1179,14 @@ "title_aux": "Comfy Couple" } ], + "https://github.com/DannyStone1999/ComfyUI-Depth2Mask/raw/main/Depth2Mask.py": [ + [ + "Depth2Mask" + ], + { + "title_aux": "ComfyUI-Depth2Mask" + } + ], "https://github.com/DarKDinDoN/comfyui-checkpoint-automatic-config": [ [ "CheckpointAutomaticConfig", @@ -1004,6 +1196,17 @@ "title_aux": "ComfyUI Checkpoint Automatic Config" } ], + "https://github.com/DataCTE/prompt_injection": [ + [ + "AdvancedPromptInjection", + "PromptInjection", + "SVDPromptInjection", + "SimplePromptInjection" + ], + { + "title_aux": "Prompt Injection Node for ComfyUI" + } + ], "https://github.com/Derfuu/Derfuu_ComfyUI_ModdedNodes": [ [], { @@ -1107,11 +1310,21 @@ [ "Automatic CFG", "Automatic CFG - Advanced", + "Automatic CFG - Attention modifiers", + "Automatic CFG - Attention modifiers tester", + "Automatic CFG - Custom attentions", + "Automatic CFG - Excellent attention", "Automatic CFG - Negative", "Automatic CFG - Post rescale only", + "Automatic CFG - Preset Loader", "Automatic CFG - Unpatch function", "Automatic CFG - Warp Drive", - "SAG delayed activation" + "SAG delayed activation", + "Temperature separate settings CLIP SDXL", + "Temperature settings CLIP", + "Temperature settings SD 1.5", + "Temperature settings SDXL", + "Zero Uncond CFG - standalone patch (incompatible with the others)" ], { "title_aux": "ComfyUI-AutomaticCFG" @@ -1125,6 +1338,23 @@ "title_aux": "LoadLoraWithTags" } ], + "https://github.com/Extraltodeus/Stable-Diffusion-temperature-settings": [ + [ + "CLIP Temperature", + "Unet Temperature" + ], + { + "title_aux": "Stable-Diffusion-temperature-settings" + } + ], + "https://github.com/Extraltodeus/Uncond-Zero-for-ComfyUI": [ + [ + "Uncond Zero" + ], + { + "title_aux": "Uncond-Zero-for-ComfyUI" + } + ], "https://github.com/Extraltodeus/Vector_Sculptor_ComfyUI": [ [ "CLIP Vector Sculptor text encode", @@ -1148,6 +1378,7 @@ "https://github.com/Extraltodeus/sigmas_tools_and_the_golden_scheduler": [ [ "Aligned Scheduler", + "Gaussian Tail Scheduler", "Get sigmas as float", "Graph sigmas", "Manual scheduler", @@ -1167,7 +1398,6 @@ [ "AMT VFI", "CAIN VFI", - "EISAI VFI", "FILM VFI", "FLAVR VFI", "GMFSS Fortuna VFI", @@ -1348,6 +1578,7 @@ "AnimalPosePreprocessor", "AnimeFace_SemSegPreprocessor", "AnimeLineArtPreprocessor", + "AnyLineArtPreprocessor_aux", "BAE-NormalMapPreprocessor", "BinaryPreprocessor", "CannyEdgePreprocessor", @@ -1357,6 +1588,7 @@ "DWPreprocessor", "DensePosePreprocessor", "DepthAnythingPreprocessor", + "DepthAnythingV2Preprocessor", "DiffusionEdge_Preprocessor", "FacialPartColoringFromPoseKps", "FakeScribblePreprocessor", @@ -1376,6 +1608,9 @@ "MediaPipe-FaceMeshPreprocessor", "MeshGraphormer+ImpactDetector-DepthMapPreprocessor", "MeshGraphormer-DepthMapPreprocessor", + "Metric3D-DepthMapPreprocessor", + "Metric3D-NormalMapPreprocessor", + "Metric_DepthAnythingV2Preprocessor", "MiDaS-DepthMapPreprocessor", "MiDaS-NormalMapPreprocessor", "OneFormer-ADE20K-SemSegPreprocessor", @@ -1396,6 +1631,7 @@ "TilePreprocessor", "UniFormer-SemSegPreprocessor", "Unimatch_OptFlowPreprocessor", + "UpperBodyTrackingFromPoseKps", "Zoe-DepthMapPreprocessor", "Zoe_DepthAnythingPreprocessor" ], @@ -1455,6 +1691,14 @@ "title_aux": "ComfyUI's ControlNet Auxiliary Preprocessors" } ], + "https://github.com/Fantaxico/ComfyUI-GCP-Storage": [ + [ + "GCPStorageNode" + ], + { + "title_aux": "ComfyUI-GCP-Storage" + } + ], "https://github.com/Feidorian/feidorian-ComfyNodes": [ [], { @@ -1568,6 +1812,18 @@ "title_aux": "NX_PromptStyler" } ], + "https://github.com/G-370/ComfyUI-SD3-Powerlab": [ + [ + "G370SD3PowerLab_AttentionToImage", + "G370SD3PowerLab_ImageIntoAttention", + "G370SD3PowerLab_ImageIntoLayer", + "G370SD3PowerLab_LayerToImage", + "G370SD3PowerLab_RenderAttention" + ], + { + "title_aux": "ComfyUI-SD3-Powerlab" + } + ], "https://github.com/GMapeSplat/ComfyUI_ezXY": [ [ "ConcatenateString", @@ -1603,6 +1859,14 @@ "title_aux": "ComfyUI-GTSuya-Nodes" } ], + "https://github.com/GavChap/ComfyUI-SD3LatentSelectRes": [ + [ + "SD3LatentSelectRes" + ], + { + "title_aux": "ComfyUI-SD3LatentSelectRes" + } + ], "https://github.com/GentlemanHu/ComfyUI-SunoAI": [ [ "GentlemanHu_SunoAI", @@ -1612,6 +1876,14 @@ "title_aux": "ComfyUI Suno API" } ], + "https://github.com/Goktug/comfyui-saveimage-plus": [ + [ + "SaveImagePlus" + ], + { + "title_aux": "Save Image Plus for ComfyUI" + } + ], "https://github.com/Gourieff/comfyui-reactor-node": [ [ "ImageRGBA2RGB", @@ -1630,12 +1902,37 @@ "title_aux": "ReActor Node for ComfyUI" } ], + "https://github.com/GraftingRayman/ComfyUI_GraftingRayman": [ + [ + "GR Flip Tile Random Inverted", + "GR Flip Tile Random Red Ring", + "GR Image Details Displayer", + "GR Image Details Saver", + "GR Image Resize", + "GR Image Resize Methods", + "GR Image Size", + "GR Image/Depth Mask", + "GR Mask Create", + "GR Mask Create Random", + "GR Mask Resize", + "GR Multi Mask Create", + "GR Prompt Selector", + "GR Prompt Selector Multi", + "GR Stack Image", + "GR Text Overlay", + "GR Tile and Border Image", + "GR Tile and Border Image Random Flip" + ], + { + "title_aux": "GraftingRayman" + } + ], "https://github.com/Guillaume-Fgt/ComfyUI_StableCascadeLatentRatio": [ [ "StableCascadeLatentRatio" ], { - "title_aux": "ComfyUI-ScenarioPrompt" + "title_aux": "ComfyUI_StableCascadeLatentRatio" } ], "https://github.com/HAL41/ComfyUI-aichemy-nodes": [ @@ -1740,13 +2037,16 @@ "IG Cross Fade Images", "IG Explorer", "IG Float", + "IG Float List", "IG Folder", "IG Int", + "IG Interpolate", "IG Load Image", "IG Load Images", "IG Multiply", "IG Path Join", "IG String", + "IG String List", "IG ZFill" ], { @@ -1757,17 +2057,6 @@ "title_aux": "IG Interpolation Nodes" } ], - "https://github.com/IKHOR/ComfyUI-IKHOR-Jam-Nodes": [ - [ - "LoadBatchFromS3", - "LoadFromS3", - "SaveBatchToS3", - "SaveToS3" - ], - { - "title_aux": "ikhor-nodes" - } - ], "https://github.com/ITurchenko/ComfyUI-SizeFromArray": [ [ "SizeFromArray" @@ -1940,6 +2229,7 @@ "JNodes_BooleanSelectorWithString", "JNodes_BreakMediaInfo", "JNodes_CheckpointSelectorWithString", + "JNodes_CreateStereoscopicImageFromDepth", "JNodes_GetOutputDirectory", "JNodes_GetParameterFromList", "JNodes_GetParameterGlobal", @@ -1965,6 +2255,7 @@ "JNodes_SearchAndReplace", "JNodes_SearchAndReplaceFromFile", "JNodes_SearchAndReplaceFromList", + "JNodes_SelectRandomFileFromDirectory", "JNodes_SetNegativePromptInMetaData", "JNodes_SetPositivePromptInMetaData", "JNodes_SplitAndJoin", @@ -1980,6 +2271,16 @@ "title_aux": "ComfyUI-JNodes" } ], + "https://github.com/JayLyu/ComfyUI_BaiKong_Node": [ + [ + "BK_ColorSelector", + "BK_GradientImage", + "BK_Img2Color" + ], + { + "title_aux": "ComfyUI_BaiKong_Node" + } + ], "https://github.com/JcandZero/ComfyUI_GLM4Node": [ [ "GLM3_turbo_CHAT", @@ -2101,6 +2402,9 @@ "ACN_SparseCtrlMergedLoaderAdvanced", "ACN_SparseCtrlRGBPreprocessor", "ACN_SparseCtrlSpreadMethodNode", + "ACN_SparseCtrlWeightExtras", + "ACN_TimestepKeyframeFromStrengthList", + "ACN_TimestepKeyframeInterpolation", "ControlNetLoaderAdvanced", "CustomControlNetWeights", "CustomT2IAdapterWeights", @@ -2148,6 +2452,7 @@ "ADE_ApplyAnimateDiffModel", "ADE_ApplyAnimateDiffModelSimple", "ADE_ApplyAnimateDiffModelWithCameraCtrl", + "ADE_ApplyAnimateDiffModelWithPIA", "ADE_ApplyAnimateLCMI2VModel", "ADE_AttachLoraHookToCLIP", "ADE_AttachLoraHookToConditioning", @@ -2167,6 +2472,9 @@ "ADE_CustomCFGKeyframe", "ADE_EmptyLatentImageLarge", "ADE_InjectI2VIntoAnimateDiffModel", + "ADE_InjectPIAIntoAnimateDiffModel", + "ADE_InputPIA_Multival", + "ADE_InputPIA_PaperPresets", "ADE_IterationOptsDefault", "ADE_IterationOptsFreeInit", "ADE_LoadAnimateDiffModel", @@ -2178,12 +2486,16 @@ "ADE_LoraHookKeyframe", "ADE_LoraHookKeyframeFromStrengthList", "ADE_LoraHookKeyframeInterpolation", - "ADE_MaskedLoadLora", + "ADE_MultivalConvertToMask", "ADE_MultivalDynamic", + "ADE_MultivalDynamicFloatInput", "ADE_MultivalScaledMask", "ADE_NoiseLayerAdd", "ADE_NoiseLayerAddWeighted", "ADE_NoiseLayerReplace", + "ADE_NoisedImageInjectOptions", + "ADE_NoisedImageInjection", + "ADE_PIA_AnimateDiffKeyframe", "ADE_PairedConditioningSetMask", "ADE_PairedConditioningSetMaskAndCombine", "ADE_PairedConditioningSetUnmaskedAndCombine", @@ -2344,7 +2656,7 @@ "Image Remove Background (rembg)" ], { - "title_aux": "Rembg Background Removal Node for ComfyUI" + "title_aux": "Rembg Background Removal Node for ComfyUI (Better)" } ], "https://github.com/LonicaMewinsky/ComfyUI-MakeFrame": [ @@ -2383,79 +2695,6 @@ "title_aux": "Anime Character Segmentation node for comfyui" } ], - "https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes": [ - [ - "AIO_Preprocessor", - "AnimalPosePreprocessor", - "AnimeFace_SemSegPreprocessor", - "AnimeLineArtPreprocessor", - "BAE-NormalMapPreprocessor", - "BinaryPreprocessor", - "CannyEdgePreprocessor", - "ColorPreprocessor", - "DWPreprocessor", - "DensePosePreprocessor", - "DepthAnythingPreprocessor", - "DiffusionEdge_Preprocessor", - "FacialPartColoringFromPoseKps", - "FakeScribblePreprocessor", - "HEDPreprocessor", - "HintImageEnchance", - "ImageGenResolutionFromImage", - "ImageGenResolutionFromLatent", - "ImageIntensityDetector", - "ImageLuminanceDetector", - "InpaintPreprocessor", - "LayeredDiffusionApply", - "LayeredDiffusionCondApply", - "LayeredDiffusionCondJointApply", - "LayeredDiffusionDecode", - "LayeredDiffusionDecodeRGBA", - "LayeredDiffusionDecodeSplit", - "LayeredDiffusionDiffApply", - "LayeredDiffusionJointApply", - "LeReS-DepthMapPreprocessor", - "LineArtPreprocessor", - "LineartStandardPreprocessor", - "M-LSDPreprocessor", - "Manga2Anime_LineArt_Preprocessor", - "MaskOptFlow", - "MediaPipe-FaceMeshPreprocessor", - "MeshGraphormer-DepthMapPreprocessor", - "MiDaS-DepthMapPreprocessor", - "MiDaS-NormalMapPreprocessor", - "ModelMergeBlockNumber", - "ModelMergeSDXL", - "ModelMergeSDXLDetailedTransformers", - "ModelMergeSDXLTransformers", - "ModelSamplerTonemapNoiseTest", - "OneFormer-ADE20K-SemSegPreprocessor", - "OneFormer-COCO-SemSegPreprocessor", - "OpenposePreprocessor", - "PiDiNetPreprocessor", - "PixelPerfectResolution", - "PromptExpansion", - "ReferenceOnlySimple", - "RescaleClassifierFreeGuidanceTest", - "SAMPreprocessor", - "SavePoseKpsAsJsonFile", - "ScribblePreprocessor", - "Scribble_XDoG_Preprocessor", - "SemSegPreprocessor", - "ShufflePreprocessor", - "TEEDPreprocessor", - "TilePreprocessor", - "TonemapNoiseWithRescaleCFG", - "UniFormer-SemSegPreprocessor", - "Unimatch_OptFlowPreprocessor", - "Zoe-DepthMapPreprocessor", - "Zoe_DepthAnythingPreprocessor" - ], - { - "author": "tstandley", - "title_aux": "ComfyUI Nodes for Inference.Core" - } - ], "https://github.com/M1kep/ComfyLiterals": [ [ "Checkpoint", @@ -2555,6 +2794,14 @@ "title_aux": "ComfyUI-mnemic-nodes" } ], + "https://github.com/Makeezi/ComfyUI-promptLAB": [ + [ + "PromptLAB" + ], + { + "title_aux": "ComfyUI-promptLAB" + } + ], "https://github.com/Mamaaaamooooo/batchImg-rembg-ComfyUI-nodes": [ [ "Image Remove Background (rembg)" @@ -2576,6 +2823,46 @@ "title_aux": "ComfyI2I" } ], + "https://github.com/MaraScott/ComfyUI_MaraScott_Nodes": [ + [ + "MaraScottAnyBusNode", + "MaraScottAnyBus_v2", + "MaraScottDisplayInfoNode", + "MaraScottDisplayInfo_v1", + "MaraScottPasteInpaintingByMask_v1", + "MaraScottPromptFromImage_v1", + "MaraScottSetInpaintingByMask_v1", + "MaraScottUpscalerRefinerNode_v2", + "MaraScottUpscalerRefinerNode_v3", + "MaraScott_Kijai_TokenCounter_v1" + ], + { + "title_aux": "\ud83d\udc30 MaraScott Nodes" + } + ], + "https://github.com/MarcusNyne/m9-prompts-comfyui": [ + [ + "ScramblePrompts_m9", + "TweakWeights_m9" + ], + { + "title_aux": "m9-prompts-comfyui" + } + ], + "https://github.com/MariusKM/ComfyUI-BadmanNodes": [ + [ + "BadmanIO", + "BadmanIntUtil", + "Badman_Blend", + "Badman_Concat_String", + "Badman_HexGenerator", + "Badman_Print", + "Badman_String" + ], + { + "title_aux": "ComfyUI-BadmanNodes" + } + ], "https://github.com/MarkoCa1/ComfyUI-Text": [ [ "CombinationText", @@ -2584,7 +2871,7 @@ "ShowText" ], { - "title_aux": "ComfyUI_Text" + "title_aux": "ComfyUI-Text" } ], "https://github.com/MarkoCa1/ComfyUI_Segment_Mask": [ @@ -2595,6 +2882,19 @@ "title_aux": "ComfyUI_Segment_Mask" } ], + "https://github.com/Mason-McGough/ComfyUI-Mosaica": [ + [ + "ApplyLUTToLabelImage", + "KMeans", + "LoadLUTFromMatplotlib", + "MeanShift", + "RandomLUT", + "Watershed" + ], + { + "title_aux": "Mosaica" + } + ], "https://github.com/Miosp/ComfyUI-FBCNN": [ [ "JPEG artifacts removal FBCNN" @@ -2619,6 +2919,7 @@ "AnimeCosplayDir", "AspectRatioCondition", "Colors", + "CombinedCrop", "ConnectFloat", "ConnectImage", "ConnectInteger", @@ -2628,16 +2929,22 @@ "DoubleClipTextEncode", "EmbeddingLoader", "FilmCharDir", + "FuseImages", + "FuseImages2", "HashText", "HueSatLum", "HueShift", "ImageDimensions", + "ImageOverlayResized", "ImageResizeLong", + "ImageZigzag", "IndoorBackgrounds", "IndoorDir", "IntEvaluate", "IntFloatDict", "IntStringDict", + "JsonSearch", + "KillWorkflow", "LandscapeBackgrounds", "LandscapeDir", "MakeupStylesDir", @@ -2648,11 +2955,20 @@ "PhotomontageB", "PhotomontageC", "PostSamplerCrop", + "PresetLoad", + "PresetRemove", + "PresetSave", + "PromptSwitcher", + "RandomString", "SDXLEmptyLatent", + "SavePrompt", "SaveWithMetaData", "SaveWithMetaData2", + "SearchReplace", "SimplePrompts", "SpecificStylesDir", + "SplitImages", + "StringJoin", "TimeStamp", "TricolorComposition", "WorkflowSettings", @@ -2660,7 +2976,8 @@ "X_In_a_Dress", "X_In_a_Suit", "X_In_a_Suit)", - "ZoomCrop" + "ZoomCrop", + "imageborder" ], { "title_aux": "Node Pack mostly for manipulating strings and integers" @@ -2969,6 +3286,14 @@ "title_aux": "pfaeff-comfyui" } ], + "https://github.com/PnthrLeo/comfyUI-image-search": [ + [ + "CloseImagesSearcher" + ], + { + "title_aux": "comfyUI-image-search" + } + ], "https://github.com/Pos13/comfyui-cyclist": [ [ "CyclistCompare", @@ -3055,6 +3380,14 @@ "title_aux": "Advanced Latent Control" } ], + "https://github.com/Ron-Digital/ComfyUI-SceneGenerator": [ + [ + "Scene Generator" + ], + { + "title_aux": "ComfyUI-SceneGenerator" + } + ], "https://github.com/Ryuukeisyou/comfyui_face_parsing": [ [ "BBoxListItemSelect(FaceParsing)", @@ -3158,6 +3491,43 @@ "title_aux": "ComfyUI A1111-like Prompt Custom Node Solution" } ], + "https://github.com/SamKhoze/ComfyUI-DeepFuze": [ + [ + "DeepFuzeAdavance", + "DeepFuzeFaceSwap", + "DeepfuzePreview", + "LLM_node", + "PlayBackAudio", + "SaveVideo [n-suite]", + "TTS_generation" + ], + { + "title_aux": "DeepFuze" + } + ], + "https://github.com/SayanoAI/Comfy-RVC": [ + [ + "AudioBatchValueNode", + "AudioTranscriptionNode", + "DownloadAudio", + "ImageRepeatInterleavedNode", + "LatentRepeatInterleavedNode", + "LoadAudio", + "LoadHubertModel", + "LoadPitchExtractionParams", + "LoadRVCModelNode", + "LoadWhisperModelNode", + "MergeAudioNode", + "MergeImageBatches", + "MergeLatentBatches", + "PreviewAudio", + "RVCNode", + "UVR5Node" + ], + { + "title_aux": "Comfy-RVC" + } + ], "https://github.com/Scholar01/ComfyUI-Keyframe": [ [ "KeyframeApply", @@ -3168,6 +3538,37 @@ "title_aux": "SComfyUI-Keyframe" } ], + "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader": [ + [ + "CombinedDiffusersLoader", + "CombinedDiffusersSD15Loader", + "CombinedDiffusersSDXLLoader", + "DiffusersClipLoader", + "DiffusersUNETLoader", + "DiffusersVAELoader", + "SD15CLIPLoader", + "SD15UNETLoader", + "SD15VAELoader", + "SDXLCLIPLoader", + "SDXLUNETLoader", + "SDXLVAELoader" + ], + { + "title_aux": "Loaders for Diffusers-format checkpoints" + } + ], + "https://github.com/ScreamingHawk/comfyui-ollama-prompt-encode": [ + [ + "OllamaCLIPTextEncode" + ], + { + "author": "Michael Standen", + "description": "Use AI to generate prompts and perform CLIP text encoding", + "nickname": "Ollama Prompt Encode", + "title": "Ollama Prompt Encode", + "title_aux": "Ollama Prompt Encode" + } + ], "https://github.com/SeaArtLab/ComfyUI-Long-CLIP": [ [ "SeaArtLongClip", @@ -3443,22 +3844,13 @@ "Round Float to String", "SaveImageToFolder", "Select ControlNet", + "Select Model 20", "Simple Load Image Batch" ], { "title_aux": "Eagleshadow Custom Nodes" } ], - "https://github.com/Shinsplat/ComfyUI-Shinsplat": [ - [ - "Clip Text Encode (Shinsplat)", - "Clip Text Encode SDXL (Shinsplat)", - "Lora Loader (Shinsplat)" - ], - { - "title_aux": "ComfyUI-Shinsplat" - } - ], "https://github.com/ShmuelRonen/ComfyUI-SVDResizer": [ [ "SVDRsizer" @@ -3467,6 +3859,22 @@ "title_aux": "ComfyUI-SVDResizer" } ], + "https://github.com/ShmuelRonen/ComfyUI_Gemini_Flash": [ + [ + "Gemini_Flash" + ], + { + "title_aux": "ComfyUI_Gemini_Flash" + } + ], + "https://github.com/ShmuelRonen/ComfyUI_wav2lip": [ + [ + "Wav2Lip" + ], + { + "title_aux": "Wav2Lip Node for ComfyUI" + } + ], "https://github.com/Shraknard/ComfyUI-Remover": [ [ "Remover" @@ -3488,6 +3896,17 @@ "title_aux": "Lazy Pony Prompter" } ], + "https://github.com/Smirnov75/ComfyUI-mxToolkit": [ + [ + "mxSeed", + "mxSlider", + "mxSlider2D", + "mxStop" + ], + { + "title_aux": "ComfyUI-mxToolkit" + } + ], "https://github.com/Smuzzies/comfyui_chatbox_overlay/raw/main/chatbox_overlay.py": [ [ "Chatbox Overlay" @@ -3537,6 +3956,17 @@ "title_aux": "MBM's Music Visualizer" } ], + "https://github.com/SozeInc/ComfyUI-Mobile": [ + [ + "Mobile_Settings_Launcher_Data", + "Send Notification (Mobile)", + "Settings Launcher (Mobile)", + "Ultimate Concat (Mobile)" + ], + { + "title_aux": "ComfyUI-Mobile" + } + ], "https://github.com/SpaceKendo/ComfyUI-svd_txt2vid": [ [ "SVD_txt2vid_ConditioningwithLatent" @@ -3547,10 +3977,13 @@ ], "https://github.com/Stability-AI/ComfyUI-SAI_API": [ [ + "Stability Conservative Upscale", "Stability Control Skech", "Stability Control Structure", "Stability Creative Upscale", + "Stability Erase", "Stability Image Core", + "Stability Image Ultra", "Stability Inpainting", "Stability Outpainting", "Stability Remove Background", @@ -3579,6 +4012,14 @@ "title_aux": "ComfyUI_OOTDiffusion_CXH" } ], + "https://github.com/StartHua/ComfyUI_PCDMs": [ + [ + "PCDMS_CXH" + ], + { + "title_aux": "ComfyUI_PCDMs" + } + ], "https://github.com/StartHua/ComfyUI_Seg_VITON": [ [ "segformer_agnostic", @@ -3613,12 +4054,22 @@ "Image Batch Manager (SuperBeasts.AI)", "Make Resized Mask Batch (SuperBeasts.AI)", "Mask Batch Manager (SuperBeasts.AI)", - "Pixel Deflicker (SuperBeasts.AI)" + "Pixel Deflicker (SuperBeasts.AI)", + "String List Manager (SuperBeasts.AI)" ], { "title_aux": "ComfyUI-SuperBeasts" } ], + "https://github.com/SuperMasterBlasterLaser/ComfyUI_YOLO_Classifiers": [ + [ + "YOLO Classifier Model Loader", + "YOLO Classify" + ], + { + "title_aux": "ComfyUI_YOLO_Classifiers" + } + ], "https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes": [ [ "CR 8 Channel In", @@ -3920,6 +4371,24 @@ "title_aux": "comfyUI_TJ_NormalLighting" } ], + "https://github.com/TMElyralab/Comfyui-MusePose": [ + [ + "filenamestring", + "musepose", + "museposealign" + ], + { + "title_aux": "Comfyui-MusePose" + } + ], + "https://github.com/TRI3D-LC/ComfyUI-MiroBoard": [ + [ + "add-image-miro-board" + ], + { + "title_aux": "ComfyUI-MiroBoard" + } + ], "https://github.com/TRI3D-LC/tri3d-comfyui-nodes": [ [ "get_histogram_limits", @@ -3931,10 +4400,13 @@ "tri3d-adjust-neck", "tri3d-atr-parse", "tri3d-atr-parse-batch", + "tri3d-clear-memory", "tri3d-clipdrop-bgremove-api", + "tri3d-clipdrop-bgreplace-api", "tri3d-composite-image-splitter", "tri3d-dwpose", "tri3d-extract-hand", + "tri3d-extract-masks-batch", "tri3d-extract-parts-batch", "tri3d-extract-parts-batch2", "tri3d-extract-parts-mask-batch", @@ -3970,6 +4442,24 @@ "title_aux": "tri3d-comfyui-nodes" } ], + "https://github.com/TW-CUI/TW-CUI-Util": [ + [ + "TWCUI_Util_CommonSDXLResolutions", + "TWCUI_Util_FloatLiteral", + "TWCUI_Util_GenerationParameters", + "TWCUI_Util_GenerationPrompts", + "TWCUI_Util_IntLiteral", + "TWCUI_Util_ModelVAELORALoader", + "TWCUI_Util_ModelVAELoader", + "TWCUI_Util_MultilineStringLiteral", + "TWCUI_Util_SaveImage", + "TWCUI_Util_SaveImageAdvanced", + "TWCUI_Util_StringLiteral" + ], + { + "title_aux": "TW-CUI-Util" + } + ], "https://github.com/TaiTair/comfyui-simswap": [ [ "Simswap", @@ -4006,6 +4496,15 @@ "title_aux": "ComfyUI String Tools" } ], + "https://github.com/Taremin/webui-monaco-prompt": [ + [ + "WebuiMonacoPromptFind", + "WebuiMonacoPromptReplace" + ], + { + "title_aux": "WebUI Monaco Prompt" + } + ], "https://github.com/TeaCrab/ComfyUI-TeaNodes": [ [ "TC_ColorFill", @@ -4082,10 +4581,27 @@ "title_aux": "comfyui-upscale-by-model" } ], + "https://github.com/TheMistoAI/ComfyUI-Anyline": [ + [ + "AnyLinePreprocessor" + ], + { + "title_aux": "Anyline" + } + ], + "https://github.com/ThereforeGames/ComfyUI-Unprompted": [ + [ + "Unprompted" + ], + { + "title_aux": "ComfyUI-Unprompted" + } + ], "https://github.com/TinyTerra/ComfyUI_tinyterraNodes": [ [ "ttN KSampler_v2", "ttN advPlot range", + "ttN advPlot string", "ttN advanced xyPlot", "ttN compareInput", "ttN concat", @@ -4118,13 +4634,14 @@ "ttN text", "ttN text3BOX_3WAYconcat", "ttN text7BOX_concat", + "ttN textCycleLine", "ttN textDebug", "ttN tinyLoader", "ttN xyPlot" ], { "author": "tinyterra", - "description": "This extension offers various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.", + "description": "This extension offers extensive xyPlot, various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.", "nickname": "\ud83c\udf0f", "nodename_pattern": "^ttN ", "title": "tinyterraNodes", @@ -4202,6 +4719,14 @@ "title_aux": "ComfyUI Neural Network Latent Upscale" } ], + "https://github.com/TylerZoro/SD3-Scaling": [ + [ + "SD3ImageScaleToTotalPixels" + ], + { + "title_aux": "SD3-Scaling" + } + ], "https://github.com/Umikaze-job/select_folder_path_easy": [ [ "SelectFolderPathEasy" @@ -4476,6 +5001,7 @@ "Text Dictionary To Text", "Text Dictionary Update", "Text File History Loader", + "Text Find", "Text Find and Replace", "Text Find and Replace Input", "Text Find and Replace by Dictionary", @@ -4485,12 +5011,14 @@ "Text List to Text", "Text Load Line From File", "Text Multiline", + "Text Multiline (Code Compatible)", "Text Parse A1111 Embeddings", "Text Parse Noodle Soup Prompts", "Text Parse Tokens", "Text Random Line", "Text Random Prompt", "Text Shuffle", + "Text Sort", "Text String", "Text String Truncate", "Text to Conditioning", @@ -4630,6 +5158,15 @@ "title_aux": "ComfyUI-TacoNodes" } ], + "https://github.com/Yanick112/ComfyUI-ToSVG": [ + [ + "ConvertRasterToVector", + "SaveSVG" + ], + { + "title_aux": "ComfyUI-ToSVG" + } + ], "https://github.com/YinBailiang/MergeBlockWeighted_fo_ComfyUI": [ [ "MergeBlockWeighted" @@ -4648,6 +5185,14 @@ "title_aux": "APISR IN COMFYUI" } ], + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Animated-optical-illusions": [ + [ + "AOI_Processing_Zho" + ], + { + "title_aux": "ComfyUI-Animated-optical-illusions" + } + ], "https://github.com/ZHO-ZHO-ZHO/ComfyUI-ArtGallery": [ [ "ArtGallery_Zho", @@ -4766,6 +5311,16 @@ "title_aux": "ComfyUI-Q-Align" } ], + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-2": [ + [ + "Qwen2_Chat_Zho", + "Qwen2_ModelLoader_Zho", + "Qwen2_Zho" + ], + { + "title_aux": "ComfyUI-Qwen-2" + } + ], "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-VL-API": [ [ "QWenVL_API_S_Multi_Zho", @@ -4869,6 +5424,14 @@ "title_aux": "ComfyUI-AudioScheduler" } ], + "https://github.com/aburahamu/ComfyUI-IsNiceParts": [ + [ + "NiceHand" + ], + { + "title_aux": "ComfyUI-IsNiceParts" + } + ], "https://github.com/aburahamu/ComfyUI-RequestsPoster": [ [ "GetImageFromSD3byI2I", @@ -4883,6 +5446,7 @@ ], "https://github.com/abyz22/image_control": [ [ + "abyz22_AddPrompt", "abyz22_Convertpipe", "abyz22_Editpipe", "abyz22_FirstNonNull", @@ -4892,7 +5456,9 @@ "abyz22_ImpactWildcardEncode_GetPrompt", "abyz22_Ksampler", "abyz22_Padding Image", + "abyz22_RandomMask", "abyz22_RemoveControlnet", + "abyz22_ResizeOpenpose", "abyz22_SaveImage", "abyz22_SetQueue", "abyz22_ToBasicPipe", @@ -4900,6 +5466,7 @@ "abyz22_blend_onecolor", "abyz22_blendimages", "abyz22_bypass", + "abyz22_censoring", "abyz22_drawmask", "abyz22_lamaInpaint", "abyz22_lamaPreprocessor", @@ -4984,12 +5551,30 @@ "title_aux": "ComfyUI-styles-all" } ], + "https://github.com/ai-liam/comfyui-liam": [ + [ + "AiStoreAzureGPTLiam", + "GetBetterDepthImage", + "LiamLibFillImage", + "LiamLibImageToGray", + "LiamLibLoadImage", + "LiamLibSaveImg", + "LiamLibSaveText", + "OllamaApiTNodeLiam", + "PreviewReliefImage", + "SpeechRecognitionLiam", + "SpeechSynthesisLiam" + ], + { + "title_aux": "LiamUtil" + } + ], "https://github.com/ai-liam/comfyui_liam_util": [ [ "LiamLoadImage" ], { - "title_aux": "LiamUtil" + "title_aux": "LiamUtil (single node)" } ], "https://github.com/aianimation55/ComfyUI-FatLabels": [ @@ -5016,6 +5601,24 @@ "title_aux": "Bounding Box Crop Node for ComfyUI" } ], + "https://github.com/alessandrozonta/ComfyUI-Layers": [ + [ + "LayersSaver - Save Layer", + "LayersSaver - Save Layer From Images" + ], + { + "title_aux": "Save Layers Node for ComfyUI" + } + ], + "https://github.com/alessandrozonta/ComfyUI-OpenPose": [ + [ + "OpenPose - Get poses" + ], + { + "author": "joe", + "title_aux": "OpenPose Node" + } + ], "https://github.com/alexopus/ComfyUI-Image-Saver": [ [ "Cfg Literal (Image Saver)", @@ -5024,7 +5627,10 @@ "Image Saver", "Int Literal (Image Saver)", "Sampler Selector (Image Saver)", + "Scheduler Selector (Comfy) (Image Saver)", "Scheduler Selector (Image Saver)", + "SchedulerComfyToString (Image Saver)", + "SchedulerToString (Image Saver)", "Seed Generator (Image Saver)", "String Literal (Image Saver)", "Width/Height Literal (Image Saver)" @@ -5033,12 +5639,13 @@ "title_aux": "ComfyUI Image Saver" } ], - "https://github.com/alisson-anjos/ComfyUI-LLaVA-Describer": [ + "https://github.com/alisson-anjos/ComfyUI-Ollama-Describer": [ [ - "LLaVaDescriber" + "LLaVaDescriber", + "OllamaDescriber" ], { - "title_aux": "ComfyUI-LLaVA-Describer" + "title_aux": "ComfyUI-Ollama-Describer" } ], "https://github.com/alpertunga-bile/prompt-generator-comfyui": [ @@ -5230,6 +5837,7 @@ "LoRAScheduler", "PCApplySettings", "PCPromptFromSchedule", + "PCScheduleAddMasks", "PCScheduleSettings", "PCSplitSampling", "PCWrapGuider", @@ -5267,6 +5875,18 @@ "title_aux": "Core ML Suite for ComfyUI" } ], + "https://github.com/audioscavenger/ComfyUI-Thumbnails": [ + [ + "LoadImageThumbnails" + ], + { + "author": "AudioscavengeR", + "description": "Load Image thumbnails and show input subfolders.", + "nickname": "ComfyUI Thumbnails", + "title": "ComfyUI Thumbnails", + "title_aux": "ComfyUI Thumbnails" + } + ], "https://github.com/audioscavenger/save-image-extended-comfyui": [ [ "SaveImageExtended" @@ -5307,7 +5927,10 @@ "Bedrock - Claude", "Bedrock - Claude Multimodal", "Bedrock - SDXL", - "Bedrock - Titan Image", + "Bedrock - Titan Inpainting", + "Bedrock - Titan Outpainting", + "Bedrock - Titan Text to Image", + "Bedrock - Titan Variation", "Image From S3", "Image From URL", "Image To S3", @@ -5331,6 +5954,15 @@ "title_aux": "ComfyUI-ClipScore-Nodes" } ], + "https://github.com/badayvedat/ComfyUI-fal-Connector": [ + [ + "RemoteCheckpointLoader_fal", + "RemoteLoraLoader_fal" + ], + { + "title_aux": "ComfyUI-fal-Connector" + } + ], "https://github.com/badjeff/comfyui_lora_tag_loader": [ [ "LoraTagLoader" @@ -5339,15 +5971,38 @@ "title_aux": "LoRA Tag Loader for ComfyUI" } ], + "https://github.com/baicai99/ComfyUI-FrameSkipping": [ + [ + "FrameSelector", + "FrameSkipping", + "FrameTruncating", + "IntOperationsNode", + "MaskFrameSkipping", + "MaskGenerator", + "MaskSelector" + ], + { + "title_aux": "ComfyUI-FrameSkipping" + } + ], "https://github.com/banodoco/steerable-motion": [ [ "BatchCreativeInterpolation", - "IpaConfiguration" + "IpaConfiguration", + "RemoveAndInterpolateFrames" ], { "title_aux": "Steerable Motion" } ], + "https://github.com/barckley75/comfyUI_DaVinciResolve/raw/main/custom_nodes/node_text_to_speech.py": [ + [ + "TextToSpeech" + ], + { + "title_aux": "comfyUI_DaVinciResolve" + } + ], "https://github.com/bash-j/mikey_nodes": [ [ "AddMetaData", @@ -5380,6 +6035,8 @@ "Mikey Sampler Base Only Advanced", "Mikey Sampler Tiled", "Mikey Sampler Tiled Base Only", + "MikeyLatentTileSampler", + "MikeyLatentTileSamplerCustom", "MikeySamplerTiledAdvanced", "MikeySamplerTiledAdvancedBaseOnly", "MosaicExpandImage", @@ -5393,6 +6050,7 @@ "Range Integer", "Ratio Advanced", "Resize Image for SDXL", + "SD3TextConditioningWithOptionsOnePrompt", "SRFloatPromptInput", "SRIntPromptInput", "SRStringPromptInput", @@ -5409,6 +6067,7 @@ "TextCombinations", "TextCombinations3", "TextConcat", + "TextPadderMikey", "TextPreserve", "Upscale Tile Calculator", "Wildcard Processor", @@ -5433,15 +6092,6 @@ "title_aux": "ComfyUI_NAIDGenerator" } ], - "https://github.com/biegert/ComfyUI-CLIPSeg/raw/main/custom_nodes/clipseg.py": [ - [ - "CLIPSeg", - "CombineSegMasks" - ], - { - "title_aux": "CLIPSeg" - } - ], "https://github.com/bilal-arikan/ComfyUI_TextAssets": [ [ "LoadTextAsset" @@ -5450,6 +6100,21 @@ "title_aux": "ComfyUI_TextAssets" } ], + "https://github.com/bitaffinity/ComfyUI_HF_Inference": [ + [ + "Classification", + "FeatureExtraction", + "Generation", + "ObjectDetection", + "QuestionAnswering", + "Segmentation", + "TextToImage", + "Translation" + ], + { + "title_aux": "ComfyUI_HF_Inference" + } + ], "https://github.com/bkunbargi/BrevImage/raw/main/BrevLoadImage.py": [ [ "BrevImage" @@ -5484,10 +6149,14 @@ "SamplerSonarDPMPPSDE", "SamplerSonarEuler", "SamplerSonarEulerA", + "SonarCompositeNoise", "SonarCustomNoise", "SonarGuidanceConfig", + "SonarGuidedNoise", "SonarModulatedNoise", - "SonarRepeatedNoise" + "SonarRandomNoise", + "SonarRepeatedNoise", + "SonarScheduledNoise" ], { "title_aux": "ComfyUI-sonar" @@ -5692,6 +6361,7 @@ ], "https://github.com/bobmagicii/comfykit-custom-nodes": [ [ + "LoraThree", "LoraWithMeta", "TypecasterImage", "TypecasterLatent" @@ -5713,11 +6383,8 @@ "CLIPTextEncodeSDXL-Multi-IO", "CLIPTextEncodeSDXL-Pipe", "Empty Latent Image from Aspect-Ratio", - "Random Find and Replace", - "VAE Decode Pipe", - "VAE Decode Tiled Pipe", - "VAE Encode Pipe", - "VAE Encode Tiled Pipe" + "Interval Sampler", + "Random Find and Replace" ], { "title_aux": "braintacles-nodes" @@ -5866,6 +6533,7 @@ "ImageDirIterator", "Modelscopet2v", "Modelscopev2v", + "TextFileLineIterator", "VidDirIterator" ], { @@ -5880,6 +6548,39 @@ "title_aux": "ComfyUI LLaVA Captioner" } ], + "https://github.com/chakib-belgaid/ComfyUI-autosize": [ + [ + "CustomAutoSize", + "SDXLAutoSize" + ], + { + "title_aux": "ComfyUI-autosize" + } + ], + "https://github.com/chakib-belgaid/Comfyui_Prompt_styler": [ + [ + "Prompt_Styler" + ], + { + "title_aux": "ComfyUI Style Plugin" + } + ], + "https://github.com/chandlergis/ComfyUI-IMG_Query": [ + [ + "ImageRequestNode" + ], + { + "title_aux": "ComfyUI-IMG_Query" + } + ], + "https://github.com/chandlergis/ComfyUI_EmojiOverlay": [ + [ + "Image Emoji Overlay" + ], + { + "title_aux": "ComfyUI_EmojiOverlay" + } + ], "https://github.com/chaojie/ComfyUI-AniPortrait": [ [ "AniPortraitLoader", @@ -6320,6 +7021,14 @@ "title_aux": "Chaosaiart-Nodes" } ], + "https://github.com/chesnokovivan/ComfyUI-Novakid": [ + [ + "Novakid Styler" + ], + { + "title_aux": "ComfyUI-Novakid" + } + ], "https://github.com/chflame163/ComfyUI_FaceSimilarity": [ [ "Face Similarity" @@ -6330,6 +7039,7 @@ ], "https://github.com/chflame163/ComfyUI_LayerStyle": [ [ + "LayerColor: AutoAdjust", "LayerColor: AutoBrightness", "LayerColor: Brightness & Contrast", "LayerColor: Color of Shadow & Highlight", @@ -6344,9 +7054,11 @@ "LayerColor: Levels", "LayerColor: RGB", "LayerColor: YUV", + "LayerFilter: AddGrain", "LayerFilter: ChannelShake", "LayerFilter: ColorMap", "LayerFilter: Film", + "LayerFilter: FilmV2", "LayerFilter: GaussianBlur", "LayerFilter: HDREffects", "LayerFilter: LightLeak", @@ -6358,22 +7070,27 @@ "LayerMask: BiRefNetUltra", "LayerMask: BlendIf Mask", "LayerMask: CreateGradientMask", + "LayerMask: ImageToMask", "LayerMask: MaskBoxDetect", + "LayerMask: MaskByColor", "LayerMask: MaskByDifferent", "LayerMask: MaskEdgeShrink", "LayerMask: MaskEdgeUltraDetail", "LayerMask: MaskEdgeUltraDetail V2", "LayerMask: MaskGradient", + "LayerMask: MaskGrain", "LayerMask: MaskGrow", "LayerMask: MaskInvert", "LayerMask: MaskMotionBlur", "LayerMask: MaskPreview", "LayerMask: MaskStroke", + "LayerMask: MediapipeFacialSegment", "LayerMask: PersonMaskUltra", "LayerMask: PersonMaskUltra V2", "LayerMask: PixelSpread", "LayerMask: RemBgUltra", "LayerMask: RmBgUltra V2", + "LayerMask: SegformerB2ClothesUltra", "LayerMask: SegmentAnythingUltra", "LayerMask: SegmentAnythingUltra V2", "LayerMask: Shadow & Highlight Mask", @@ -6392,14 +7109,19 @@ "LayerStyle: OuterGlow V2", "LayerStyle: Stroke", "LayerStyle: Stroke V2", + "LayerUtility: AddBlindWaterMark", + "LayerUtility: BatchSelector", "LayerUtility: Boolean", "LayerUtility: BooleanOperator", + "LayerUtility: BooleanOperatorV2", "LayerUtility: ColorImage", "LayerUtility: ColorImage V2", "LayerUtility: ColorPicker", + "LayerUtility: CreateQRCode", "LayerUtility: CropBoxResolve", "LayerUtility: CropByMask", "LayerUtility: CropByMask V2", + "LayerUtility: DecodeQRCode", "LayerUtility: ExtendCanvas", "LayerUtility: ExtendCanvasV2", "LayerUtility: Float", @@ -6408,6 +7130,8 @@ "LayerUtility: GetImageSize", "LayerUtility: GradientImage", "LayerUtility: GradientImage V2", + "LayerUtility: HLFrequencyDetailRestore", + "LayerUtility: If", "LayerUtility: ImageAutoCrop", "LayerUtility: ImageAutoCrop V2", "LayerUtility: ImageBlend", @@ -6431,23 +7155,34 @@ "LayerUtility: LaMa", "LayerUtility: LayerImageTransform", "LayerUtility: LayerMaskTransform", + "LayerUtility: LoadPSD", "LayerUtility: NumberCalculator", + "LayerUtility: NumberCalculatorV2", "LayerUtility: PrintInfo", "LayerUtility: PromptEmbellish", "LayerUtility: PromptTagger", + "LayerUtility: PurgeVRAM", "LayerUtility: QWenImage2Prompt", + "LayerUtility: RGB Value", "LayerUtility: RestoreCropBox", + "LayerUtility: SD3NegativeConditioning", + "LayerUtility: SaveImagePlus", + "LayerUtility: Seed", + "LayerUtility: ShowBlindWaterMark", "LayerUtility: SimpleTextImage", + "LayerUtility: String", + "LayerUtility: StringCondition", + "LayerUtility: SwitchCase", "LayerUtility: TextBox", "LayerUtility: TextImage", "LayerUtility: TextJoin", "LayerUtility: XY to Percent" ], { - "author": "Chris Freilich", - "description": "This extension provides a blend modes node with 30 blend modes.", - "nickname": "Virtuoso Pack - Blend Nodes", - "title": "Virtuoso Pack - Blend Modes", + "author": "chflame", + "description": "A set of nodes for ComfyUI that can composite layer and mask to achieve Photoshop like functionality.", + "nickname": "LayerStyle", + "title": "LayerStyle", "title_aux": "ComfyUI Layer Style" } ], @@ -6507,6 +7242,14 @@ "title_aux": "Comfy-Topaz" } ], + "https://github.com/chris-the-wiz/EmbeddingsCurveEditor_ComfyUI": [ + [ + "Embeddings Curve Editor" + ], + { + "title_aux": "EmbeddingsCurveEditor_ComfyUI" + } + ], "https://github.com/chrisfreilich/virtuoso-nodes": [ [ "BlackAndWhite", @@ -6571,6 +7314,27 @@ "title_aux": "Use Everywhere (UE Nodes)" } ], + "https://github.com/christian-byrne/img2colors-comfyui-node": [ + [ + "bmy_Img2ColorNode" + ], + { + "author": "christian-byrne", + "description": "", + "nickname": "img2color", + "title": "Img2Color Node - Detect and describe color palettes in images", + "title_aux": "img2colors-comfyui-node" + } + ], + "https://github.com/christian-byrne/size-match-compositing-nodes": [ + [ + "Composite Alpha Layer", + "Size Match Images/Masks" + ], + { + "title_aux": "Node - Size Matcher" + } + ], "https://github.com/city96/ComfyUI_ColorMod": [ [ "CV2Tonemap", @@ -6612,11 +7376,20 @@ "DiTCondLabelSelect", "DitCheckpointLoader", "ExtraVAELoader", + "HYDiTCheckpointLoader", + "HYDiTSrcSizeCond", + "HYDiTTextEncode", + "HYDiTTextEncodeSimple", + "HYDiTTextEncoderLoader", + "MiaoBiCLIPLoader", + "MiaoBiDiffusersLoader", "PixArtCheckpointLoader", + "PixArtCheckpointLoaderSimple", "PixArtControlNetCond", "PixArtLoraLoader", "PixArtResolutionCond", "PixArtResolutionSelect", + "PixArtT5FromSD3CLIP", "PixArtT5TextEncode", "T5TextEncode", "T5v11Loader" @@ -6680,6 +7453,14 @@ "title_aux": "comfy-nodes" } ], + "https://github.com/claussteinmassl/ComfyUI-CS-CustomNodes": [ + [ + "CS Transform" + ], + { + "title_aux": "CS Transform Node for ComfyUI" + } + ], "https://github.com/comfyanonymous/ComfyUI": [ [ "AddNoise", @@ -6696,6 +7477,7 @@ "CLIPSetLastLayer", "CLIPTextEncode", "CLIPTextEncodeControlnet", + "CLIPTextEncodeSD3", "CLIPTextEncodeSDXL", "CLIPTextEncodeSDXLRefiner", "CLIPVisionEncode", @@ -6724,7 +7506,9 @@ "DualCFGGuider", "DualCLIPLoader", "EmptyImage", + "EmptyLatentAudio", "EmptyLatentImage", + "EmptySD3LatentImage", "ExponentialScheduler", "FeatherMask", "FlipSigmas", @@ -6776,6 +7560,7 @@ "LatentSubtract", "LatentUpscale", "LatentUpscaleBy", + "LoadAudio", "LoadImage", "LoadImageMask", "LoadLatent", @@ -6791,7 +7576,9 @@ "ModelMergeSimple", "ModelMergeSubtract", "ModelSamplingContinuousEDM", + "ModelSamplingContinuousV", "ModelSamplingDiscrete", + "ModelSamplingSD3", "ModelSamplingStableCascade", "Morphology", "PatchModelAddDownscale", @@ -6824,6 +7611,7 @@ "SamplerLMS", "SaveAnimatedPNG", "SaveAnimatedWEBP", + "SaveAudio", "SaveImage", "SaveImageWebsocket", "SaveLatent", @@ -6843,14 +7631,17 @@ "StyleModelLoader", "ThresholdMask", "TomePatchModel", + "TripleCLIPLoader", "UNETLoader", "UNetCrossAttentionMultiply", "UNetSelfAttentionMultiply", "UNetTemporalAttentionMultiply", "UpscaleModelLoader", "VAEDecode", + "VAEDecodeAudio", "VAEDecodeTiled", "VAEEncode", + "VAEEncodeAudio", "VAEEncodeForInpaint", "VAEEncodeTiled", "VAELoader", @@ -6858,6 +7649,7 @@ "VPScheduler", "VideoLinearCFGGuidance", "VideoTriangleCFGGuidance", + "WebcamCapture", "unCLIPCheckpointLoader", "unCLIPConditioning" ], @@ -6865,6 +7657,16 @@ "title_aux": "ComfyUI" } ], + "https://github.com/comfyanonymous/ComfyUI_TensorRT": [ + [ + "DYNAMIC_TRT_MODEL_CONVERSION", + "STATIC_TRT_MODEL_CONVERSION", + "TensorRTLoader" + ], + { + "title_aux": "TensorRT Node for ComfyUI" + } + ], "https://github.com/comfyanonymous/ComfyUI_experiments": [ [ "ModelMergeBlockNumber", @@ -6890,6 +7692,18 @@ "title_aux": "ConCarneNode" } ], + "https://github.com/conquestace/ComfyUI-ImageUploader": [ + [ + "ImageUploader" + ], + { + "author": "ConquestAce", + "description": "Upload to temporary websites with API.", + "nickname": "Image Uploader", + "title": "Image Uploader", + "title_aux": "Image Uploader" + } + ], "https://github.com/coreyryanhanson/ComfyQR": [ [ "comfy-qr-by-image-size", @@ -6950,9 +7764,12 @@ ], "https://github.com/cubiq/ComfyUI_FaceAnalysis": [ [ + "FaceAlign", "FaceAnalysisModels", "FaceBoundingBox", - "FaceEmbedDistance" + "FaceEmbedDistance", + "FaceSegmentation", + "FaceWarp" ], { "title_aux": "Face Analysis for ComfyUI" @@ -6968,6 +7785,7 @@ "IPAdapterCombineParams", "IPAdapterCombineWeights", "IPAdapterEmbeds", + "IPAdapterEmbedsBatch", "IPAdapterEncoder", "IPAdapterFaceID", "IPAdapterFromParams", @@ -7019,6 +7837,7 @@ ], "https://github.com/cubiq/ComfyUI_essentials": [ [ + "ApplyCLIPSeg+", "BatchCount+", "CLIPTextEncodeSDXL+", "ConditioningCombineMultiple+", @@ -7030,6 +7849,7 @@ "ImageApplyLUT+", "ImageBatchMultiple+", "ImageCASharpening+", + "ImageColorMatch+", "ImageCompositeFromMaskBatch+", "ImageCrop+", "ImageDesaturate+", @@ -7037,17 +7857,24 @@ "ImageExpandBatch+", "ImageFlip+", "ImageFromBatch+", + "ImageHistogramMatch+", "ImageListToBatch+", "ImagePosterize+", + "ImageRandomTransform+", + "ImageRemoveAlpha+", "ImageRemoveBackground+", "ImageResize+", "ImageSeamCarving+", + "ImageTile+", + "ImageToDevice+", "KSamplerVariationsStochastic+", "KSamplerVariationsWithNoise+", + "LoadCLIPSegModels+", "MaskBatch+", "MaskBlur+", "MaskBoundingBox+", "MaskExpandBatch+", + "MaskFix+", "MaskFlip+", "MaskFromBatch+", "MaskFromColor+", @@ -7057,10 +7884,10 @@ "MaskPreview+", "MaskSmooth+", "ModelCompile+", - "NoiseFromImage~", "PixelOEPixelize+", "RemBGSession+", "RemoveLatentMask+", + "SD3NegativeConditioning+", "SDXLEmptyLatentSizePicker+", "SimpleMath+", "TransitionMask+" @@ -7072,6 +7899,7 @@ "https://github.com/cubiq/PuLID_ComfyUI": [ [ "ApplyPulid", + "ApplyPulidAdvanced", "PulidEvaClipLoader", "PulidInsightFaceLoader", "PulidModelLoader" @@ -7080,9 +7908,19 @@ "title_aux": "PuLID_ComfyUI" } ], + "https://github.com/cuongloveit/comfy_http_request": [ + [ + "Send Http Request", + "Send Http request" + ], + { + "title_aux": "comfy_http_request" + } + ], "https://github.com/curiousjp/ComfyUI-MaskBatchPermutations": [ [ "CombinatorialDetailer", + "FlattenAgainstOriginal", "PermuteMaskBatch" ], { @@ -7127,14 +7965,22 @@ ], "https://github.com/dagthomas/comfyui_dagthomas": [ [ - "CSL", - "CSVPromptGenerator", + "PGSD3LatentGenerator", "PromptGenerator" ], { "title_aux": "SDXL Auto Prompter" } ], + "https://github.com/daniabib/ComfyUI_ProPainter_Nodes": [ + [ + "ProPainterInpaint", + "ProPainterOutpaint" + ], + { + "title_aux": "ComfyUI ProPainter Nodes" + } + ], "https://github.com/daniel-lewis-ab/ComfyUI-Llama": [ [ "Call LLM Advanced", @@ -7181,22 +8027,6 @@ "title_aux": "DarkPrompts" } ], - "https://github.com/davask/ComfyUI_MaraScott_Nodes": [ - [ - "MaraScottAnyBusNode", - "MaraScottDisplayInfoNode", - "MaraScottUpscalerRefinerNode_v2", - "MarasitAnyBusNode", - "MarasitBusNode", - "MarasitDisplayInfoNode", - "MarasitUniversalBusNode", - "MarasitUpscalerRefinerNode", - "MarasitUpscalerRefinerNode_v2" - ], - { - "title_aux": "\ud83d\udc30 MaraScott Nodes" - } - ], "https://github.com/dave-palt/comfyui_DSP_imagehelpers": [ [ "dsp-imagehelpers-concat" @@ -7214,19 +8044,23 @@ "title_aux": "KSampler GPU" } ], - "https://github.com/daxcay/ComfyUI-DRMN": [ + "https://github.com/daxcay/ComfyUI-DataSet": [ [ - "DRMN_CaptionVisualizer", - "DRMN_SearchAndReplace", - "DRMN_TXTFileSaver", - "DRMN_TagManipulatorByImageNames" + "DATASET_CaptionVisualizer", + "DATASET_OpenAIChat", + "DATASET_OpenAIChatImage", + "DATASET_SearchAndReplace", + "DATASET_TXTFileLoader", + "DATASET_TXTFileSaver", + "DATASET_TagManipulatorByImageNames", + "DATASET_xCopy" ], { "author": "Daxton Caylor", - "description": "Data Research And Manipulators Nodes for Model Trainers, Artists, Designers and Animators.", - "nickname": "ComfyUI-DRMN", - "title": "ComfyUI-DRMN", - "title_aux": "ComfyUI-DRMN" + "description": "Data Research, Preparation And Manipulators Nodes for Model Trainers, Artists, Designers and Animators.", + "nickname": "ComfyUI-DataSet", + "title": "ComfyUI-DataSet", + "title_aux": "ComfyUI-DataSet" } ], "https://github.com/daxcay/ComfyUI-JDCN": [ @@ -7243,14 +8077,18 @@ "JDCN_BatchLatentLoadFromDir", "JDCN_BatchLatentLoadFromList", "JDCN_BatchSaveLatent", + "JDCN_BoolInt", + "JDCN_EnableDisable", "JDCN_FileMover", "JDCN_ImageSaver", "JDCN_ListToString", "JDCN_ReBatch", "JDCN_SeamlessExperience", + "JDCN_ShowAny", "JDCN_SplitString", "JDCN_StringManipulator", "JDCN_StringToList", + "JDCN_SwapInputs", "JDCN_TXTFileSaver", "JDCN_VHSFileMover" ], @@ -7272,11 +8110,11 @@ ], "https://github.com/dchatel/comfyui_facetools": [ [ - "AlignFaces", + "BiSeNetMask", "CropFaces", "DetectFaces", - "FaceDetails", "GenderFaceFilter", + "JonathandinuMask", "MergeWarps", "OrderedFaceFilter", "WarpFacesBack" @@ -7285,6 +8123,40 @@ "title_aux": "comfyui_facetools" } ], + "https://github.com/denfrost/Den_ComfyUI_Workflow": [ + [ + "Den_BatchIndex_AS", + "Den_CropImage_AS", + "Den_Eval_AS", + "Den_FaceRestoreCFWithModel", + "Den_GPTLoaderSimple_llama", + "Den_GPTSampler_llama", + "Den_ImageMixMasked_As", + "Den_ImageToLatentSpace", + "Den_ImageToMask_AS", + "Den_Int2Any_AS", + "Den_LatentAdd_AS", + "Den_LatentMixMasked_As", + "Den_LatentMix_AS", + "Den_LatentToImages_AS", + "Den_LoadLatent_AS", + "Den_MapRange_AS", + "Den_MaskToImage_AS", + "Den_Math_AS", + "Den_NoiseImage_AS", + "Den_Number2Float_AS", + "Den_Number2Int_AS", + "Den_Number_AS", + "Den_SVD_img2vid", + "Den_SaveLatent_AS", + "Den_TextToImage_AS", + "Den_TextWildcardList_AS", + "Increment_AS" + ], + { + "title_aux": "Den_ComfyUI_Workflows" + } + ], "https://github.com/deroberon/StableZero123-comfyui": [ [ "SDZero ImageSplit", @@ -7338,6 +8210,20 @@ "title_aux": "ComfyUI Frame Maker" } ], + "https://github.com/dicksondickson/ComfyUI-Dickson-Nodes": [ + [ + "DicksonColorMatch", + "TTPlanet_Tile_Preprocessor_GF", + "TTPlanet_Tile_Preprocessor_Simple", + "TTPlanet_Tile_Preprocessor_cufoff" + ], + { + "description": "This is a set of custom nodes that I've either written myself or adapted from other authors for my own convenience. Currently includes color matching node forked from StableSR and TTPlanet's controlnet preprocessor. https://github.com/dicksondickson", + "nickname": "Dickson Nodes", + "title": "Dickson Nodes", + "title_aux": "ComfyUI-Dickson-Nodes" + } + ], "https://github.com/digitaljohn/comfyui-propost": [ [ "ProPostApplyLUT", @@ -7403,6 +8289,7 @@ ], "https://github.com/djbielejeski/a-person-mask-generator": [ [ + "APersonFaceLandmarkMaskGenerator", "APersonMaskGenerator" ], { @@ -7563,6 +8450,7 @@ ], "https://github.com/edenartlab/eden_comfy_pipelines": [ [ + "Animation_RGB_Mask", "CLIP_Interrogator", "ConvertToGrayscale", "Eden_Bool", @@ -7570,7 +8458,11 @@ "Eden_DebugPrint", "Eden_Float", "Eden_Int", + "Eden_Lora_Loader", "Eden_String", + "FolderScanner", + "GetRandomFile", + "Get_Prefixed_Imgs", "HistogramMatching", "IMG_blender", "IMG_padder", @@ -7578,15 +8470,22 @@ "IMG_scaler", "IMG_unpadder", "If ANY execute A else B", + "ImageDescriptionNode", "LatentTypeConversion", + "Linear_Combine_IP_Embeds", + "LoadImagesByFilename", "LoadRandomImage", + "Load_Embeddings_From_Folder", "MaskFromRGB", "MaskFromRGB_KMeans", + "Random_Style_Mixture", "SaveImageAdvanced", - "VAEDecode_to_folder" + "SavePosEmbeds", + "VAEDecode_to_folder", + "VideoFrameSelector" ], { - "title_aux": "eden_comfy_pipelines" + "title_aux": "Various custom nodes by Eden.art" } ], "https://github.com/evanspearman/ComfyMath": [ @@ -7647,6 +8546,25 @@ "title_aux": "ComfyMath" } ], + "https://github.com/exdysa/comfyui-selector": [ + [ + "Fork", + "ForkClip", + "Recourse", + "Recourse+/-", + "RecourseCkpt", + "RecourseImage", + "Selector", + "Unite" + ], + { + "author": "\"\u02f6\ud835\udfa2\u292c\u2ad2\u2d56s\u143c\u02f6\"", + "description": "\"Selector & Recourse. Presets & failsafes. Work flow.\"", + "nickname": "\"Selector\"", + "title": "\"Selector\"", + "title_aux": "comfyui-selector" + } + ], "https://github.com/fearnworks/ComfyUI_FearnworksNodes/raw/main/fw_nodes.py": [ [ "Count Files in Directory (FW)", @@ -7694,6 +8612,30 @@ "title_aux": "fexli-util-node-comfyui" } ], + "https://github.com/fexploit/ComfyUI-AutoLabel": [ + [ + "AutoLabel" + ], + { + "title_aux": "ComfyUI-AutoLabel" + } + ], + "https://github.com/fexploit/ComfyUI-AutoTrimBG": [ + [ + "RonLayers/TrimBg: RonLayersTrimBgUltraV2" + ], + { + "title_aux": "ComfyUI-AutoTrimBG" + } + ], + "https://github.com/fexploit/ComfyUI-Classifier": [ + [ + "ClassifierNode" + ], + { + "title_aux": "ComfyUI-Classifier" + } + ], "https://github.com/filipemeneses/comfy_pixelization": [ [ "Pixelization" @@ -7711,14 +8653,24 @@ "FL_CodeNode", "FL_DirectoryCrawl", "FL_Glitch", + "FL_HalftonePattern", "FL_HexagonalPattern", "FL_ImageCaptionSaver", + "FL_ImageCollage", "FL_ImageDimensionDisplay", "FL_ImageDurationSync", + "FL_ImageNotes", "FL_ImagePixelator", "FL_ImageRandomizer", + "FL_InfiniteZoom", + "FL_NFTGenerator", + "FL_PaperDrawn", + "FL_PixelArtShader", "FL_PixelSort", - "FL_Ripple" + "FL_PromptSelector", + "FL_RandomNumber", + "FL_Ripple", + "FL_Shadertoy" ], { "title_aux": "ComfyUI_Fill-Nodes" @@ -7847,6 +8799,17 @@ "title_aux": "As_ComfyUI_CustomNodes" } ], + "https://github.com/fmatray/ComfyUI_BattlemapGrid": [ + [ + "Battlemap Grid", + "Compass", + "Map Generator", + "Map Generator(Outdoors)" + ], + { + "title_aux": "ComfyUI_BattlemapGrid" + } + ], "https://github.com/fofr/ComfyUI-HyperSDXL1StepUnetScheduler": [ [ "HyperSDXL1StepUnetScheduler" @@ -7904,7 +8867,6 @@ [ "AniPortrait_Audio2Video", "AniPortrait_Audio_Path", - "AniPortrait_Generate_Ref_Pose", "AniPortrait_LoadVideoPath", "AniPortrait_Pose_Gen_Video", "AniPortrait_Ref_Image_Path", @@ -7924,6 +8886,22 @@ "title_aux": "ComfyUI_MagicClothing" } ], + "https://github.com/frankchieng/ComfyUI_llm_easyanimiate": [ + [], + { + "nodename_pattern": "^FrankChiengEasyAnimate", + "title_aux": "ComfyUI_llm_easyanimiate" + } + ], + "https://github.com/fsdymy1024/ComfyUI_fsdymy": [ + [ + "Preview Image Without Metadata", + "Save Image Without Metadata" + ], + { + "title_aux": "ComfyUI_fsdymy" + } + ], "https://github.com/gemell1/ComfyUI_GMIC": [ [ "GmicCliWrapper", @@ -7981,15 +8959,211 @@ "SAIStringRegexSearchMatch", "SAIStringRegexSearchReplace", "SaltAIStableVideoDiffusion", + "SaltBatchCropDataExtractor", + "SaltCLIPSegLoader", + "SaltCLIPSegMasking", + "SaltCropImageLocation", + "SaltDisplayAny", + "SaltImagePasteCrop", "SaltInfo", "SaltInput", + "SaltLoadImageZip", + "SaltMaskCropRegion", + "SaltMasksToImages", "SaltOutput", + "SaltRGBAFromMask", "ScheduledImageAdjust" ], { "title_aux": "SaltAI-Open-Resources" } ], + "https://github.com/get-salt-AI/SaltAI_Language_Toolkit": [ + [ + "AddTool", + "ChangeSystemMessage", + "ClearMemory", + "ConversableAgentCreator", + "ConversableAgentCreatorAdvanced", + "ConvertAgentAsTool", + "ConvertAgentToLlamaindex", + "CreateTavilySearchTool", + "Example", + "GenerateReply", + "GroupChat", + "GroupChatAdvanced", + "GroupChatManagerCreator", + "LLMCSVReader", + "LLMChat", + "LLMChatBot", + "LLMChatEngine", + "LLMChatMessageConcat", + "LLMChatMessages", + "LLMChatMessagesAdv", + "LLMComplete", + "LLMCustomNodeComposer", + "LLMDirectoryReader", + "LLMDocumentListAppend", + "LLMDocxReader", + "LLMEpubReader", + "LLMFlatReader", + "LLMHTMLTagReader", + "LLMHWPReader", + "LLMHtmlComposer", + "LLMHtmlRepair", + "LLMIPYNBReader", + "LLMImageCaptionReader", + "LLMImageTabularChartReader", + "LLMImageTextReader", + "LLMImageVisionLLMReader", + "LLMInputToDocuments", + "LLMJsonComposer", + "LLMJsonRepair", + "LLMLLaVANextImageEvaluator", + "LLMLLaVANextModelLoader", + "LLMMarkdownComposer", + "LLMMarkdownReader", + "LLMMarkdownRepair", + "LLMMboxReader", + "LLMMultiModalImageEvaluation", + "LLMNotionReader", + "LLMOpenAIModel", + "LLMOpenAIModelOpts", + "LLMPDFReader", + "LLMPagedCSVReader", + "LLMPandasCSVReader", + "LLMParquetDatasetSearcher", + "LLMPostProcessDocuments", + "LLMPptxReader", + "LLMPyMuPDFReader", + "LLMQueryEngine", + "LLMQueryEngineAdv", + "LLMQueryEngineAsTool", + "LLMRTFReader", + "LLMRegexCreator", + "LLMRegexRepair", + "LLMRssReaderNode", + "LLMSaltWebCrawler", + "LLMScaleSERPSearch", + "LLMSemanticSplitterNodeParser", + "LLMSentenceSplitterNodeCreator", + "LLMServiceContextAdv", + "LLMServiceContextDefault", + "LLMSimpleWebPageReader", + "LLMSimpleWebPageReaderAdv", + "LLMSummaryIndex", + "LLMTavilyResearch", + "LLMTrafilaturaWebReader", + "LLMTrafilaturaWebReaderAdv", + "LLMTreeIndex", + "LLMUnstructuredReader", + "LLMVectorStoreIndex", + "LLMVectorStoreIndexAdv", + "LLMVideoAudioReader", + "LLMXMLReader", + "LLMYamlComposer", + "LLMYamlRepair", + "SaltJSONQueryEngine", + "SendMessage", + "SimpleChat" + ], + { + "title_aux": "SaltAI Language Toolkit" + } + ], + "https://github.com/get-salt-AI/SaltAI_LlamaIndex": [ + [ + "AddTool", + "ChangeSystemMessage", + "ClearMemory", + "ConversableAgentCreator", + "ConversableAgentCreatorAdvanced", + "ConvertAgentAsTool", + "ConvertAgentToLlamaindex", + "CreateTavilySearchTool", + "Example", + "GenerateReply", + "GroupChat", + "GroupChatAdvanced", + "GroupChatManagerCreator", + "LLMCSVReader", + "LLMChat", + "LLMChatBot", + "LLMChatEngine", + "LLMChatMessageConcat", + "LLMChatMessages", + "LLMChatMessagesAdv", + "LLMComplete", + "LLMCustomNodeComposer", + "LLMDirectoryReader", + "LLMDocumentListAppend", + "LLMDocxReader", + "LLMEpubReader", + "LLMFlatReader", + "LLMHTMLTagReader", + "LLMHWPReader", + "LLMHtmlComposer", + "LLMHtmlRepair", + "LLMIPYNBReader", + "LLMImageCaptionReader", + "LLMImageTabularChartReader", + "LLMImageTextReader", + "LLMImageVisionLLMReader", + "LLMInputToDocuments", + "LLMJsonComposer", + "LLMJsonRepair", + "LLMLLaVANextImageEvaluator", + "LLMLLaVANextModelLoader", + "LLMMarkdownComposer", + "LLMMarkdownReader", + "LLMMarkdownRepair", + "LLMMboxReader", + "LLMMultiModalImageEvaluation", + "LLMNotionReader", + "LLMOpenAIModel", + "LLMOpenAIModelOpts", + "LLMPDFReader", + "LLMPagedCSVReader", + "LLMPandasCSVReader", + "LLMParquetDatasetSearcher", + "LLMPostProcessDocuments", + "LLMPptxReader", + "LLMPyMuPDFReader", + "LLMQueryEngine", + "LLMQueryEngineAdv", + "LLMQueryEngineAsTool", + "LLMRTFReader", + "LLMRegexCreator", + "LLMRegexRepair", + "LLMRssReaderNode", + "LLMSaltWebCrawler", + "LLMScaleSERPSearch", + "LLMSemanticSplitterNodeParser", + "LLMSentenceSplitterNodeCreator", + "LLMServiceContextAdv", + "LLMServiceContextDefault", + "LLMSimpleWebPageReader", + "LLMSimpleWebPageReaderAdv", + "LLMSummaryIndex", + "LLMTavilyResearch", + "LLMTrafilaturaWebReader", + "LLMTrafilaturaWebReaderAdv", + "LLMTreeIndex", + "LLMUnstructuredReader", + "LLMVectorStoreIndex", + "LLMVectorStoreIndexAdv", + "LLMVideoAudioReader", + "LLMXMLReader", + "LLMYamlComposer", + "LLMYamlRepair", + "SaltJSONQueryEngine", + "SendMessage", + "SimpleChat" + ], + { + "title_aux": "SaltAI_LlamaIndex" + } + ], "https://github.com/giriss/comfy-image-saver": [ [ "Cfg Literal", @@ -8006,6 +9180,14 @@ "title_aux": "Save Image with Generation Metadata" } ], + "https://github.com/githubYiheng/ComfyUI_Change_IMAGE_BOREDER": [ + [ + "ChangeImageBorder" + ], + { + "title_aux": "ComfyUI_Change_IMAGE_BOREDER" + } + ], "https://github.com/githubYiheng/ComfyUI_GetFileNameFromURL": [ [ "GetFileNameFromURL" @@ -8014,6 +9196,31 @@ "title_aux": "ComfyUI_GetFileNameFromURL" } ], + "https://github.com/githubYiheng/comfyui_kmeans_filter": [ + [ + "ImageKmeansFilter" + ], + { + "title_aux": "comfyui_kmeans_filter" + } + ], + "https://github.com/githubYiheng/comfyui_meanshift_filter": [ + [ + "ImageMeanshiftFilter" + ], + { + "title_aux": "comfyui_meanshift_filter" + } + ], + "https://github.com/githubYiheng/comfyui_private_postprocessor": [ + [ + "ImageCPostprocessor", + "PrivateImageMask" + ], + { + "title_aux": "comfyui_private_postprocessor" + } + ], "https://github.com/glibsonoran/Plush-for-ComfyUI": [ [ "AdvPromptEnhancer", @@ -8032,6 +9239,8 @@ [ "GlifConsistencyDecoder", "GlifPatchConsistencyDecoderTiled", + "GlifVariable", + "HFHubEmbeddingLoader", "HFHubLoraLoader", "ImageToMultipleOf", "SDXLAspectRatio" @@ -8094,6 +9303,8 @@ "LLMPromptGenerator", "LLMSampler", "LLava Loader Simple", + "LLavaOptionalMemoryFreeAdvanced", + "LLavaOptionalMemoryFreeSimple", "LLavaPromptGenerator", "LLavaSamplerAdvanced", "LLavaSamplerSimple", @@ -8114,6 +9325,85 @@ "title_aux": "VLM_nodes" } ], + "https://github.com/gonzalu/ComfyUI_YFG_Comical": [ + [ + "Image10Switcher_node", + "Image15Switcher_node", + "Image20Switcher_node", + "Image3Switcher_node", + "Image5Switcher_node", + "MonoClip_node", + "PixelArt_node", + "VAEDecodePreview_node", + "image2contrastMask_node", + "image2imbgg_node", + "image_halftone", + "image_histograms_node", + "image_histograms_node_compact", + "images_side_by_side", + "imgbbLoader_node", + "smartCheckpointLoader_node", + "storeURL_node", + "textMaskOverlay_node" + ], + { + "author": "YFG", + "description": "This extension loads a model checkpoint file and extracts the model state dictionary or the entire model, treating all checkpoints as if they are in the root directory.", + "nickname": "\ud83e\udde0 YFG Smart Checkpoint Loader", + "title": "YFG Smart Checkpoint Loader", + "title_aux": "\ud83d\ude38 YFG Comical Nodes" + } + ], + "https://github.com/griptape-ai/ComfyUI-Griptape": [ + [ + "AudioTranscriptionTask", + "Calculator", + "CreateAgent", + "DateTime", + "EnvironmentConfig", + "ExpandAgent", + "ImageQueryTask", + "MergeTexts", + "ParallelImageQueryTask", + "PromptImageGenerationTask", + "PromptImageVariationTask", + "PromptTask", + "Rule", + "RunAgent", + "TextSummaryTask", + "ToolList", + "ToolTask", + "ToolkitTask", + "WebScraper", + "gtAudioTranscriptionClient", + "gtUIAmazonBedrockStableDiffusionImageGenerationDriver", + "gtUIAmazonBedrockStructureConfig", + "gtUIAmazonBedrockTitanImageGenerationDriver", + "gtUIAnthropicStructureConfig", + "gtUICLIPTextEncode", + "gtUIFetchImage", + "gtUIFileManager", + "gtUIGoogleStructureConfig", + "gtUIInputNode", + "gtUIKnowledgeBaseTool", + "gtUILeonardoImageGenerationDriver", + "gtUILoadAudio", + "gtUIOpenAiAudioTranscriptionDriver", + "gtUIOpenAiImageGenerationDriver", + "gtUIOpenAiStructureConfig", + "gtUIOutputImageNode", + "gtUIOutputStringNode", + "gtUITextToClipEncode", + "gtUIWebSearch" + ], + { + "author": "Jason Schleifer", + "description": "This extension offers various nodes that allow you to work with LLMs using the Griptape Python Framework (https://griptape.ai)", + "nickname": "ComfyUI-Griptape", + "title": "ComfyUI Griptape Nodes", + "title_aux": "ComfyUI Griptape Nodes" + } + ], "https://github.com/guill/abracadabra-comfyui": [ [ "AbracadabraNode", @@ -8142,8 +9432,17 @@ "title_aux": "ComfyUI-Image-Matting" } ], + "https://github.com/haohaocreates/ComfyUI-HH-Image-Selector": [ + [ + "Image Selector" + ], + { + "title_aux": "ComfyUI-HH-Image-Selector" + } + ], "https://github.com/hay86/ComfyUI_AceNodes": [ [ + "ACE_AnyInputSwitchBool", "ACE_AudioLoad", "ACE_AudioPlay", "ACE_AudioSave", @@ -8151,12 +9450,14 @@ "ACE_Float", "ACE_ImageColorFix", "ACE_ImageConstrain", + "ACE_ImageFaceCrop", "ACE_ImageGetSize", "ACE_ImageLoadFromCloud", "ACE_ImageQA", "ACE_ImageRemoveBackground", "ACE_ImageSaveToCloud", "ACE_Integer", + "ACE_MaskBlur", "ACE_Seed", "ACE_Text", "ACE_TextConcatenate", @@ -8201,22 +9502,40 @@ "https://github.com/hay86/ComfyUI_OpenVoice": [ [ "D_OpenVoice_STS", - "D_OpenVoice_TTS" + "D_OpenVoice_TTS", + "D_OpenVoice_TTS_V2" ], { "title_aux": "ComfyUI OpenVoice" } ], + "https://github.com/hben35096/ComfyUI-ToolBox": [ + [ + "AutoDLDownload", + "FolderDeleter", + "FolderViewe" + ], + { + "title_aux": "ComfyUI-ToolBox" + } + ], "https://github.com/heshengtao/comfyui_LLM_party": [ [ + "About_us", "CLIPTextEncode_party", + "Dingding", + "Dingding_tool", "KSampler_party", "LLM", + "LLM_api_loader", "LLM_local", + "LLM_local_loader", + "LLavaLoader", "VAEDecode_party", "accuweather_tool", "api_tool", "arxiv_tool", + "bing_tool", "check_web_tool", "classify_function", "classify_function_plus", @@ -8226,26 +9545,42 @@ "ebd_tool", "end_dialog", "end_workflow", + "feishu", + "feishu_tool", "file_combine", "file_combine_plus", + "get_string", + "github_tool", "google_tool", "interpreter_tool", + "keyword_tool", "load_embeddings", + "load_excel", "load_file", "load_file_folder", + "load_keyword", + "load_name", "load_persona", "load_url", "load_wikipedia", "new_interpreter_tool", + "omost_decode", + "omost_setting", + "openai_tts", + "play_audio", "show_text_party", "start_dialog", "start_workflow", "string_logic", + "substring", "time_tool", "tool_combine", "tool_combine_plus", "weather_tool", "wikipedia_tool", + "work_wechat", + "work_wechat_tool", + "workflow_tool", "workflow_transfer" ], { @@ -8304,6 +9639,37 @@ "title_aux": "ComfyUI-ModelDownloader" } ], + "https://github.com/huagetai/ComfyUI-Gaffer": [ + [ + "ApplyICLight", + "CalculateNormalMap", + "GrayScaler", + "ICLightModelLoader", + "LightSource" + ], + { + "title_aux": "comfyui's gaffer(ComfyUI native implementation of IC-Light. )" + } + ], + "https://github.com/huagetai/ComfyUI_LightGradient": [ + [ + "ImageGradient", + "MaskGradient" + ], + { + "title_aux": "Light Gradient for ComfyUI" + } + ], + "https://github.com/huchenlei/ComfyUI-IC-Light-Native": [ + [ + "ICLightApplyMaskGrey", + "ICLightAppply", + "VAEEncodeArgMax" + ], + { + "title_aux": "ComfyUI-IC-Light-Native" + } + ], "https://github.com/huchenlei/ComfyUI-layerdiffuse": [ [ "LayeredDiffusionApply", @@ -8327,6 +9693,31 @@ "title_aux": "ComfyUI_DanTagGen" } ], + "https://github.com/huchenlei/ComfyUI_densediffusion": [ + [ + "DenseDiffusionAddCondNode", + "DenseDiffusionApplyNode" + ], + { + "title_aux": "ComfyUI DenseDiffusion" + } + ], + "https://github.com/huchenlei/ComfyUI_omost": [ + [ + "OmostDenseDiffusionLayoutNode", + "OmostGreedyBagsTextEmbeddingNode", + "OmostLLMChatNode", + "OmostLLMHTTPServerNode", + "OmostLLMLoaderNode", + "OmostLayoutCondNode", + "OmostLoadCanvasConditioningNode", + "OmostLoadCanvasPythonCodeNode", + "OmostRenderCanvasConditioningNode" + ], + { + "title_aux": "ComfyUI_omost" + } + ], "https://github.com/hughescr/ComfyUI-OpenPose-Keypoint-Extractor": [ [ "Openpose Keypoint Extractor" @@ -8367,6 +9758,24 @@ "title_aux": "Eagle PNGInfo" } ], + "https://github.com/iFREEGROUP/comfyui-undistort": [ + [ + "IG_LoadCheckerboardImageForCalibrateCamera", + "IG_MatrixAndDistCoefToText", + "IG_Undistort" + ], + { + "title_aux": "comfyui-undistort" + } + ], + "https://github.com/icesun963/ComfyUI_HFDownLoad": [ + [ + "HFDownLoad_Tool" + ], + { + "title_aux": "HFDownLoad Node for ComfyUI" + } + ], "https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words": [ [ "FusionText", @@ -8385,6 +9794,29 @@ "title_aux": "ComfyUI-Lora-Auto-Trigger-Words" } ], + "https://github.com/iemesowum/ComfyUI_IsaacNodes": [ + [ + "I_BinaryAmplitudeGate", + "I_UnmixAudio", + "I_WeightsListToWeights" + ], + { + "author": "Isaac Emesowum", + "description": "This extension offers automatic drums extraction from audio files, as well as a few helper nodes to support my audio synchronization AnimateDiff workflows.", + "nickname": "Isaac's Nodes", + "title": "Isaac's Nodes", + "title_aux": "Isaac's Nodes" + } + ], + "https://github.com/if-ai/ComfyUI-IF_AI_HFDownloaderNode": [ + [ + "IF_HFDownload", + "IF_HFDownloadNode" + ], + { + "title_aux": "ComfyUI-IF_AI_HFDownloaderNode" + } + ], "https://github.com/if-ai/ComfyUI-IF_AI_WishperSpeechNode": [ [ "IF_WhisperSpeech" @@ -8487,7 +9919,6 @@ "YoloSEGdetectionNode", "YoloSegNode", "color_drop", - "my unique name", "xy_Tiling_KSampler" ], { @@ -8651,13 +10082,19 @@ "FacelessFaceRestore", "FacelessFaceSwap", "FacelessLoadFrames", + "FacelessLoadImageUrl", "FacelessLoadVideo", + "FacelessLoadVideoUrl", + "FacelessMergeVideos", + "FacelessRemoveBackground", "FacelessSaveVideo", + "FacelessUploadVideo", "FacelessVideoFaceRestore", - "FacelessVideoFaceSwap" + "FacelessVideoFaceSwap", + "FacelessVideoRemoveBackground" ], { - "title_aux": "comfyui-fb-utils" + "title_aux": "Faceless Node for ComfyUI" } ], "https://github.com/jesenzhang/ComfyUI_StreamDiffusion": [ @@ -8736,13 +10173,15 @@ "title_aux": "ComfyUI-JaRue" } ], - "https://github.com/jtydhr88/ComfyUI-InstantMesh": [ + "https://github.com/jtydhr88/ComfyUI-LayerDivider": [ [ - "InstantMeshLoader", - "InstantMeshRun" + "LayerDivider - Color Base", + "LayerDivider - Divide Layer", + "LayerDivider - Load SAM Mask Generator", + "LayerDivider - Segment Mask" ], { - "title_aux": "ComfyUI-InstantMesh" + "title_aux": "ComfyUI LayerDivider" } ], "https://github.com/ka-puna/comfyui-yanc": [ @@ -8758,6 +10197,14 @@ "title_aux": "comfyui-yanc" } ], + "https://github.com/kaanyalova/ComfyUI_ExtendedImageFormats": [ + [ + "ExtendedSaveImage" + ], + { + "title_aux": "Extended Image Formats for ComfyUI" + } + ], "https://github.com/kadirnar/ComfyUI-Transformers": [ [ "DepthEstimationPipeline", @@ -8769,6 +10216,18 @@ "title_aux": "ComfyUI-Transformers" } ], + "https://github.com/kadirnar/ComfyUI-YOLO": [ + [ + "BBoxToXYWH", + "ConvertToDict", + "LoadUltralytics", + "UltralyticsInference", + "UltralyticsVisualization" + ], + { + "title_aux": "ComfyUI-YOLO" + } + ], "https://github.com/kale4eat/ComfyUI-path-util": [ [ "path_util_PathAbspath", @@ -8883,6 +10342,14 @@ "title_aux": "ComfyUI-text-file-util" } ], + "https://github.com/katalist-ai/comfyUI-nsfw-detection": [ + [ + "NudenetDetector" + ], + { + "title_aux": "comfyUI-nsfw-detection" + } + ], "https://github.com/kealiu/ComfyUI-S3-Tools": [ [ "Load Image From S3", @@ -8995,6 +10462,15 @@ "title_aux": "ComfyUI-DDColor" } ], + "https://github.com/kijai/ComfyUI-DepthAnythingV2": [ + [ + "DepthAnything_V2", + "DownloadAndLoadDepthAnythingV2Model" + ], + { + "title_aux": "ComfyUI-DepthAnythingV2" + } + ], "https://github.com/kijai/ComfyUI-DiffusionLight": [ [ "chrome_ball_to_envmap", @@ -9006,9 +10482,14 @@ ], "https://github.com/kijai/ComfyUI-DynamiCrafterWrapper": [ [ + "DownloadAndLoadCLIPModel", + "DownloadAndLoadCLIPVisionModel", + "DownloadAndLoadDynamiCrafterModel", "DynamiCrafterBatchInterpolation", "DynamiCrafterI2V", - "DynamiCrafterModelLoader" + "DynamiCrafterModelLoader", + "ToonCrafterDecode", + "ToonCrafterInterpolation" ], { "title_aux": "ComfyUI-DynamiCrafterWrapper" @@ -9035,6 +10516,20 @@ "title_aux": "Geowizard depth and normal estimation in ComfyUI" } ], + "https://github.com/kijai/ComfyUI-IC-Light": [ + [ + "BackgroundScaler", + "CalculateNormalsFromImages", + "DetailTransfer", + "ICLightConditioning", + "LightSource", + "LoadAndApplyICLightUnet", + "LoadHDRImage" + ], + { + "title_aux": "ComfyUI-IC-Light" + } + ], "https://github.com/kijai/ComfyUI-KJNodes": [ [ "AddLabel", @@ -9047,6 +10542,7 @@ "BboxToInt", "BboxVisualize", "CameraPoseVisualizer", + "CheckpointPerturbWeights", "ColorMatch", "ColorToMask", "CondPassThrough", @@ -9059,15 +10555,19 @@ "CreateFadeMask", "CreateFadeMaskAdvanced", "CreateFluidMask", + "CreateGradientFromCoords", "CreateGradientMask", "CreateInstanceDiffusionTracking", "CreateMagicMask", + "CreateShapeImageOnPath", "CreateShapeMask", "CreateShapeMaskOnPath", "CreateTextMask", + "CreateTextOnPath", "CreateVoronoiMask", "CrossFadeImages", "CustomSigmas", + "DownloadAndLoadCLIPSeg", "DrawInstanceDiffusionTracking", "DummyLatentOut", "EmptyLatentImagePresets", @@ -9080,21 +10580,27 @@ "GenerateNoise", "GetImageRangeFromBatch", "GetImageSizeAndCount", + "GetImagesFromBatchIndexed", "GetLatentsFromBatchIndexed", "GetMaskSizeAndCount", + "GradientToFloat", "GrowMaskWithBlur", "INTConstant", + "ImageAddMulti", "ImageAndMaskPreview", "ImageBatchMulti", "ImageBatchRepeatInterleaving", "ImageBatchTestPattern", "ImageConcanate", + "ImageConcatMulti", "ImageGrabPIL", "ImageGridComposite2x2", "ImageGridComposite3x3", "ImageNormalize_Neg1_To_1", "ImagePadForOutpaintMasked", + "ImagePadForOutpaintTargetSize", "ImagePass", + "ImageResizeKJ", "ImageTransformByNormalizedAmplitude", "ImageUpscaleWithModelBatched", "InjectNoiseToLatent", @@ -9104,11 +10610,12 @@ "Intrinsic_lora_sampling", "JoinStringMulti", "JoinStrings", - "LoadICLightUnet", + "LoadAndResizeImage", "LoadResAdapterNormalization", "MaskBatchMulti", "MaskOrImageToWeight", "MergeImageChannels", + "ModelPassThrough", "NormalizedAmplitudeToFloatList", "NormalizedAmplitudeToMask", "OffsetMask", @@ -9160,6 +10667,9 @@ "ColorizeDepthmap", "MarigoldDepthEstimation", "MarigoldDepthEstimationVideo", + "MarigoldDepthEstimation_v2", + "MarigoldDepthEstimation_v2_video", + "MarigoldModelLoader", "RemapDepth", "SaveImageOpenEXR" ], @@ -9176,6 +10686,7 @@ "SUPIR_first_stage", "SUPIR_model_loader", "SUPIR_model_loader_v2", + "SUPIR_model_loader_v2_clip", "SUPIR_sample", "SUPIR_tiles" ], @@ -9183,14 +10694,6 @@ "title_aux": "ComfyUI-SUPIR" } ], - "https://github.com/kijai/ComfyUI-SVD": [ - [ - "SVDimg2vid" - ], - { - "title_aux": "ComfyUI-SVD" - } - ], "https://github.com/kijai/ComfyUI-depth-fm": [ [ "Depth_fm" @@ -9342,6 +10845,18 @@ "title_aux": "abg-comfyui" } ], + "https://github.com/l20richo/ComfyUI-Azure-Blob-Storage": [ + [ + "DownloadFileBLOB", + "LoadImageBLOB", + "SaveImageBLOB", + "SaveVideoFilesBLOB", + "UploadFileBLOB" + ], + { + "title_aux": "ComfyUI-Azure-Blob-Storage" + } + ], "https://github.com/laksjdjf/Batch-Condition-ComfyUI": [ [ "Batch String", @@ -9369,14 +10884,6 @@ "title_aux": "LoRTnoC-ComfyUI" } ], - "https://github.com/laksjdjf/attention-couple-ComfyUI": [ - [ - "Attention couple" - ], - { - "title_aux": "attention-couple-ComfyUI" - } - ], "https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI": [ [ "CDTuner", @@ -9387,6 +10894,19 @@ "title_aux": "cd-tuner_negpip-ComfyUI" } ], + "https://github.com/laksjdjf/cgem156-ComfyUI": [ + [ + "GradualLatentSampler", + "LCMSamplerRCFG", + "LoadAestheticShadow", + "PredictAesthetic", + "TCDSampler", + "TextScheduler" + ], + { + "title_aux": "cgem156-ComfyUI\ud83c\udf4c" + } + ], "https://github.com/laksjdjf/pfg-ComfyUI": [ [ "PFG" @@ -9395,6 +10915,31 @@ "title_aux": "pfg-ComfyUI" } ], + "https://github.com/larsupb/LoRA-Merger-ComfyUI": [ + [ + "PM LoRA Apply", + "PM LoRA Loader", + "PM LoRA Merger", + "PM LoRA Resizer", + "PM LoRA SVD Merger", + "PM LoRA Save", + "XY: PM LoRA Modes", + "XY: PM LoRA SVD Rank", + "XY: PM LoRA Strengths" + ], + { + "title_aux": "LoRA Power-Merger ComfyUI" + } + ], + "https://github.com/latenightlabs/ComfyUI-LNL": [ + [ + "LNL_FrameSelector", + "LNL_FrameSelectorV2" + ], + { + "title_aux": "LNL Frame Selector" + } + ], "https://github.com/leoleelxh/ComfyUI-LLMs": [ [ "\ud83d\uddbc\ufe0f LLMs_Vison_Ali", @@ -9407,16 +10952,14 @@ "title_aux": "ComfyUI-LLMs" } ], - "https://github.com/lilly1987/ComfyUI_node_Lilly": [ + "https://github.com/linshier/comfyui-remote-tools": [ [ - "CheckpointLoaderSimpleText", - "LoraLoaderText", - "LoraLoaderTextRandom", - "Random_Sampler", - "VAELoaderDecode" + "LoadBase64(js)", + "LoadBase64FromRemote", + "SendBase64ToRemote" ], { - "title_aux": "simple wildcard for ComfyUI" + "title_aux": "comfyui-remote-tools" } ], "https://github.com/liusida/ComfyUI-AutoCropFaces": [ @@ -9427,6 +10970,14 @@ "title_aux": "ComfyUI-AutoCropFaces" } ], + "https://github.com/liusida/ComfyUI-B-LoRA": [ + [ + "LoadBLoRA" + ], + { + "title_aux": "ComfyUI-B-LoRA" + } + ], "https://github.com/liusida/ComfyUI-Debug": [ [ "DebugInspectorNode", @@ -9437,15 +10988,66 @@ "title_aux": "ComfyUI-Debug" } ], + "https://github.com/liusida/ComfyUI-Login": [ + [ + "LoadImageIncognito" + ], + { + "title_aux": "ComfyUI-Login" + } + ], + "https://github.com/liusida/ComfyUI-SD3-nodes": [ + [ + "SD3EmptyLatent", + "SD3LoadCLIPs", + "SD3LoadCheckpoint" + ], + { + "title_aux": "ComfyUI-SD3-nodes" + } + ], "https://github.com/ljleb/comfy-mecha": [ [ "Blocks Mecha Hyper", - "Custom Code Mecha Recipe", + "Float Mecha Hyper", + "Lora Mecha Recipe", "Mecha Merger", + "Mecha Recipe List", "Model Mecha Recipe" ], { - "title_aux": "comfy-mecha" + "title_aux": "Mecha Merge Node Pack" + } + ], + "https://github.com/lks-ai/ComfyUI-StableAudioSampler": [ + [ + "StableAudioConditioning", + "StableAudioLoadModel", + "StableAudioPrompt", + "StableAudioSampler" + ], + { + "author": "lks-ai", + "description": "A Simple integration of Stable Audio Diffusion with knobs and stuff!", + "nickname": "stableaudio", + "title": "StableAudioSampler", + "title_aux": "ComfyUI Stable Audio Open 1.0 Sampler" + } + ], + "https://github.com/lks-ai/anynode": [ + [ + "AnyNode", + "AnyNodeCodeViewer", + "AnyNodeExport", + "AnyNodeGemini", + "AnyNodeLocal" + ], + { + "author": "newsbubbles", + "description": "This single node uses an LLM to generate a functionality based on your request. You can make the node do anything.", + "nickname": "AnyNode", + "title": "AnyNode v0.1", + "title_aux": "ComfyUI AnyNode: Any Node you ask for" } ], "https://github.com/lldacing/comfyui-easyapi-nodes": [ @@ -9468,7 +11070,9 @@ "MaskImageToBase64", "MaskToBase64", "MaskToBase64Image", + "SDBaseVerNumber", "SamAutoMaskSEGS", + "ShowBoolean", "ShowFloat", "ShowInt", "ShowNumber", @@ -9557,10 +11161,15 @@ "https://github.com/longgui0318/comfyui-magic-clothing": [ [ "Add Magic Clothing Attention", + "Change Pipeline Dtype And Device", "Change Pixel Value Normalization", - "LOAD OMS", + "Diffusers Model Makeup &MC", + "Diffusers Scheduler Loader &MC", + "Load Magic Clothing Adapter", "Load Magic Clothing Model", - "RUN OMS" + "Load Magic Clothing Pipeline", + "Load Magic Clothing Pipeline With Path", + "RUN Magic Clothing Diffusers Model" ], { "title_aux": "comfyui-magic-clothing" @@ -9570,11 +11179,17 @@ [ "Image Adaptive Crop M&R", "Image Adaptive Crop With Mask", + "Image Change DType", "Image Change Device", "Image Resolution Adaptive With X", "Image Resolution Limit With 8K", + "Load Image With Name", + "Mask Change DType", "Mask Change Device", "Mask Selection Of Masks", + "Model Change Device", + "Model Change Device Repeaters", + "Output Image To Input", "Split Masks" ], { @@ -9584,10 +11199,15 @@ "https://github.com/longgui0318/comfyui-oms-diffusion": [ [ "Add Magic Clothing Attention", + "Change Pipeline Dtype And Device", "Change Pixel Value Normalization", - "LOAD OMS", + "Diffusers Model Makeup &MC", + "Diffusers Scheduler Loader &MC", + "Load Magic Clothing Adapter", "Load Magic Clothing Model", - "RUN OMS" + "Load Magic Clothing Pipeline", + "Load Magic Clothing Pipeline With Path", + "RUN Magic Clothing Diffusers Model" ], { "title_aux": "comfyui-oms-diffusion" @@ -9601,9 +11221,21 @@ "title_aux": "Wildcards" } ], + "https://github.com/lquesada/ComfyUI-Inpaint-CropAndStitch": [ + [ + "InpaintCrop", + "InpaintExtendOutpaint", + "InpaintResize", + "InpaintStitch" + ], + { + "title_aux": "ComfyUI-Inpaint-CropAndStitch" + } + ], "https://github.com/lquesada/ComfyUI-Prompt-Combinator": [ [ "PromptCombinator", + "PromptCombinatorExportGallery", "PromptCombinatorMerger" ], { @@ -9670,6 +11302,7 @@ "ImpactControlNetApplySEGS", "ImpactControlNetClearSEGS", "ImpactConvertDataType", + "ImpactCount_Elts_in_SEGS", "ImpactDecomposeSEGS", "ImpactDilateMask", "ImpactDilateMaskInSEGS", @@ -9831,8 +11464,12 @@ "ChangeLatentBatchSize //Inspire", "CheckpointLoaderSimpleShared //Inspire", "ColorMapToMasks //Inspire", + "ColorMaskToDepthMask //Inspire", "Color_Preprocessor_Provider_for_SEGS //Inspire", + "CompositeNoise //Inspire", "ConcatConditioningsWithMultiplier //Inspire", + "ConditioningStretch //Inspire", + "ConditioningUpscale //Inspire", "DWPreprocessor_Provider_for_SEGS //Inspire", "FakeScribblePreprocessor_Provider_for_SEGS //Inspire", "FloatRange //Inspire", @@ -9871,7 +11508,10 @@ "OpenPose_Preprocessor_Provider_for_SEGS //Inspire", "PromptBuilder //Inspire", "PromptExtractor //Inspire", + "RGB_HexToHSV //Inspire", "RandomGeneratorForList //Inspire", + "RandomNoise //Inspire", + "RegionalCFG //Inspire", "RegionalConditioningColorMask //Inspire", "RegionalConditioningSimple //Inspire", "RegionalIPAdapterColorMask //Inspire", @@ -9909,6 +11549,21 @@ "title_aux": "ComfyUI Inspire Pack" } ], + "https://github.com/luandev/ComfyUI-CrewAI": [ + [ + "\ud83d\udcceCrewAI Agent", + "\ud83d\udcceCrewAI Agent List", + "\ud83d\udcceCrewAI Crew", + "\ud83d\udcceCrewAI LLM Chat GPT", + "\ud83d\udcceCrewAI LLM Hugging Face", + "\ud83d\udcceCrewAI LLM OpenAI", + "\ud83d\udcceCrewAI Task", + "\ud83d\udcceCrewAI Task List" + ], + { + "title_aux": "ComfyUI CrewAI" + } + ], "https://github.com/m-sokes/ComfyUI-Sokes-Nodes": [ [ "Custom Date Format | sokes \ud83e\uddac", @@ -9949,6 +11604,20 @@ "title_aux": "ComfyUI-SubjectStyle-CSV" } ], + "https://github.com/marduk191/comfyui-marnodes": [ + [ + "marduk191_5_text_string", + "marduk191_5way_text_switch", + "marduk191_workflow_settings" + ], + { + "author": "\u02f6marduk191", + "description": "A node to set workflow settings.", + "nickname": "marduk191 workflow settings", + "title": "marduk191 workflow settings", + "title_aux": "marduk191 workflow settings" + } + ], "https://github.com/marhensa/sdxl-recommended-res-calc": [ [ "RecommendedResCalc" @@ -10005,6 +11674,15 @@ "title_aux": "ComfyUI-HF" } ], + "https://github.com/mbrostami/ComfyUI-TITrain": [ + [ + "TextualInversionTraining", + "TextualInversionTrainingSDXL" + ], + { + "title_aux": "ComfyUI-TITrain" + } + ], "https://github.com/mcmonkeyprojects/sd-dynamic-thresholding": [ [ "DynamicThresholdingFull", @@ -10107,6 +11785,48 @@ "title_aux": "MTB Nodes" } ], + "https://github.com/mephisto83/petty-paint-comfyui-node": [ + [ + "PettyImageImageColorToMask", + "PettyPaintAppend", + "PettyPaintApplyLoRAStack", + "PettyPaintBlurs", + "PettyPaintComponent", + "PettyPaintConditioningSetMaskAndCombine", + "PettyPaintConvert", + "PettyPaintCountFiles", + "PettyPaintEnsureDirectory", + "PettyPaintExec", + "PettyPaintFakeConvert", + "PettyPaintFileExists", + "PettyPaintImageColorsToMasks", + "PettyPaintImageCompositeMasked", + "PettyPaintImagePlacement", + "PettyPaintImageSave", + "PettyPaintImageStore", + "PettyPaintImageToMask", + "PettyPaintImagesToMasks", + "PettyPaintJsonMap", + "PettyPaintJsonRead", + "PettyPaintJsonReadArray", + "PettyPaintLoRAStack", + "PettyPaintLoadImage", + "PettyPaintLoadImages", + "PettyPaintMap", + "PettyPaintMasksToImages", + "PettyPaintNot", + "PettyPaintPassThroughNode", + "PettyPaintProcessor", + "PettyPaintRemoveAddText", + "PettyPaintSDTurboScheduler", + "PettyPaintText", + "PettyPaintTexts_to_Conditioning", + "PettyPaintToJson" + ], + { + "title_aux": "petty-paint-comfyui-node" + } + ], "https://github.com/meshmesh-io/ComfyUI-MeshMesh": [ [ "ColorPicker", @@ -10174,6 +11894,7 @@ "CreateCircleMask", "CreateMaskWithCanvas", "CreateNestedPNGMask", + "CreateSimpleMask", "CreateTillingPNGMask", "CreateWatermarkRemovalMask", "EightBooleanTrigger", @@ -10191,6 +11912,7 @@ "IntSubtraction", "IntToFloatMultiplication", "LogicNot", + "NoneToZero", "NumeralToString", "OneFloat", "PngColorMasksToMaskList", @@ -10201,6 +11923,9 @@ "PngRectanglesToMaskList", "RandomNestedLayouts", "RandomTillingLayouts", + "SN74HC1G86", + "SN74HC86", + "SN74LVC1G125", "SeedGenerator", "SingleBooleanTrigger", "SixBooleanTrigger", @@ -10226,6 +11951,17 @@ "title_aux": "Preset Dimensions" } ], + "https://github.com/moyi7712/ComfyUI_Seamless_Patten": [ + [ + "SeamlessApply", + "SeamlessKSampler", + "SeamlessKSamplerAdvanced", + "SeamlessVae" + ], + { + "title_aux": "ComfyUI_Seamless_Patten" + } + ], "https://github.com/mpiquero7164/ComfyUI-SaveImgPrompt": [ [ "Save IMG Prompt" @@ -10234,6 +11970,15 @@ "title_aux": "SaveImgPrompt" } ], + "https://github.com/muzi12888/ComfyUI-PoseKeypoint-Mask": [ + [ + "Image Brightness", + "Openpose Keypoint Mask" + ], + { + "title_aux": "PoseKeypoint Mask" + } + ], "https://github.com/nagolinc/ComfyUI_FastVAEDecorder_SDXL": [ [ "FastLatentToImage" @@ -10242,6 +11987,14 @@ "title_aux": "ComfyUI_FastVAEDecorder_SDXL" } ], + "https://github.com/nagolinc/comfyui_openai_node": [ + [ + "OpenAINode" + ], + { + "title_aux": "comfyui_openai_node" + } + ], "https://github.com/natto-maki/ComfyUI-NegiTools": [ [ "NegiTools_CompositeImages", @@ -10268,7 +12021,8 @@ ], "https://github.com/nickve28/ComfyUI-Nich-Utils": [ [ - "Image from Dir Selector (Nich)" + "Image from Dir Selector (Nich)", + "Select Text with Regular Expression (Nich)" ], { "title_aux": "ComfyUI Nich Utils" @@ -10291,15 +12045,37 @@ "title_aux": "comfyui-NDI" } ], + "https://github.com/nirbhay-faaya/ImgProcessing_ComfyUI": [ + [ + "ImageConcat", + "ImageCropMultEight", + "ImageCut", + "LightingPreprocessor" + ], + { + "title_aux": "ImgProcessing_ComfyUI" + } + ], + "https://github.com/nirex0/ComfyUI_pytorch_openpose": [ + [ + "pytorch_openpose" + ], + { + "title_aux": "ComfyUI_pytorch_openpose" + } + ], "https://github.com/nkchocoai/ComfyUI-Dart": [ [ "DanbooruTagsTransformerBanTagsFromRegex", "DanbooruTagsTransformerComposePrompt", + "DanbooruTagsTransformerComposePromptV2", "DanbooruTagsTransformerDecode", "DanbooruTagsTransformerDecodeBySplitedParts", "DanbooruTagsTransformerGenerate", "DanbooruTagsTransformerGenerateAdvanced", "DanbooruTagsTransformerGenerationConfig", + "DanbooruTagsTransformerGetAspectRatio", + "DanbooruTagsTransformerLoader", "DanbooruTagsTransformerRearrangedByAnimagine", "DanbooruTagsTransformerRemoveTagToken" ], @@ -10418,17 +12194,42 @@ "title_aux": "ntdviet/comfyui-ext" } ], + "https://github.com/nuanarchy/ComfyUI-NuA-BIRD": [ + [ + "Bird_Deblurring_NuA", + "Bird_Denoising_NuA", + "Bird_Inpainting_NuA", + "Bird_Loader_NuA", + "Bird_Non_Uniform_Deblurring_NuA", + "Bird_Super_Resolution_NuA" + ], + { + "title_aux": "ComfyUI-NuA-BIRD" + } + ], + "https://github.com/nuanarchy/ComfyUI-NuA-FlashFace": [ + [ + "FlashFace_Loader_NuA", + "FlashFace_Sampler_NuA" + ], + { + "title_aux": "ComfyUI-NuA-FlashFace" + } + ], "https://github.com/nullquant/ComfyUI-BrushNet": [ [ "BlendInpaint", "BrushNet", "BrushNetLoader", + "CutForInpaint", "PowerPaint", - "PowerPaintCLIPLoader" + "PowerPaintCLIPLoader", + "RAUNet", + "Terminal" ], { "author": "nullquant", - "description": "This repository contains an custom nodes for inpaint using BrushNet and PowerPaint models", + "description": "These are custom nodes for ComfyUI native implementation of BrushNet, PowerPaint and RAUNet models", "nickname": "BrushName nodes", "title": "BrushNet", "title_aux": "BrushNet" @@ -10544,6 +12345,18 @@ "title_aux": "ComfyUI-TrollSuite" } ], + "https://github.com/oztrkoguz/ComfyUI_StoryCreator": [ + [ + "Kosmos2SamplerSimple2", + "KosmosLoader2", + "StoryLoader", + "StorySamplerSimple", + "Write2" + ], + { + "title_aux": "ComfyUI StoryCreater" + } + ], "https://github.com/palant/extended-saveimage-comfyui": [ [ "SaveImageExtended" @@ -10630,6 +12443,75 @@ "title_aux": "ComfyUI-TemporaryLoader" } ], + "https://github.com/portu-sim/comfyui_bmab": [ + [ + "BMAB Alpha Composit", + "BMAB Basic", + "BMAB Blend", + "BMAB Clip Text Encoder SDXL", + "BMAB Conditioning To Bind", + "BMAB Context", + "BMAB ControlNet", + "BMAB ControlNet IPAdapter", + "BMAB ControlNet Openpose", + "BMAB Crop", + "BMAB Detail Anything", + "BMAB Detect And Mask", + "BMAB Detection Crop", + "BMAB Detector", + "BMAB Edge", + "BMAB Extractor", + "BMAB Face Detailer", + "BMAB Google Gemini Prompt", + "BMAB Import Integrator", + "BMAB Integrator", + "BMAB KSampler", + "BMAB KSamplerHiresFix", + "BMAB KSamplerHiresFixWithUpscaler", + "BMAB KSamplerKohyaDeepShrink", + "BMAB Lama Inpaint", + "BMAB LoRA Loader", + "BMAB Load Image", + "BMAB Load Output Image", + "BMAB Masks To Images", + "BMAB Model To Bind", + "BMAB Noise Generator", + "BMAB Openpose Hand Detailer", + "BMAB Person Detailer", + "BMAB Preview Text", + "BMAB Prompt", + "BMAB Remove Background", + "BMAB Resize By Person", + "BMAB Resize By Ratio", + "BMAB Resize and Fill", + "BMAB SD-WebUI API BMAB Extension", + "BMAB SD-WebUI API ControlNet", + "BMAB SD-WebUI API I2I", + "BMAB SD-WebUI API Server", + "BMAB SD-WebUI API T2I", + "BMAB SD-WebUI API T2I Hires.Fix", + "BMAB Save Image", + "BMAB SeedGenerator", + "BMAB Segment Anything", + "BMAB Simple Hand Detailer", + "BMAB Subframe Hand Detailer", + "BMAB Text", + "BMAB Upscale With Model", + "BMAB Upscaler", + "BMAB Watermark" + ], + { + "title_aux": "comfyui_bmab" + } + ], + "https://github.com/prodogape/ComfyUI-EasyOCR": [ + [ + "Apply EasyOCR" + ], + { + "title_aux": "ComfyUI-EasyOCR" + } + ], "https://github.com/prodogape/ComfyUI-Minio": [ [ "Load Image From Minio", @@ -10640,6 +12522,14 @@ "title_aux": "Comfyui-Minio" } ], + "https://github.com/prodogape/ComfyUI-OmDet": [ + [ + "Apply OmDet" + ], + { + "title_aux": "ComfyUI-OmDet" + } + ], "https://github.com/pythongosssss/ComfyUI-Custom-Scripts": [ [ "CheckpointLoader|pysssss", @@ -10654,7 +12544,8 @@ "ReroutePrimitive|pysssss", "SaveText|pysssss", "ShowText|pysssss", - "StringFunction|pysssss" + "StringFunction|pysssss", + "SystemNotification|pysssss" ], { "title_aux": "pythongosssss/ComfyUI-Custom-Scripts" @@ -10736,6 +12627,7 @@ ], "https://github.com/receyuki/comfyui-prompt-reader-node": [ [ + "SDAnyConverter", "SDBatchLoader", "SDLoraLoader", "SDLoraSelector", @@ -10748,7 +12640,7 @@ ], { "author": "receyuki", - "description": "ComfyUI node version of the SD Prompt Reader", + "description": "The ultimate solution for managing image metadata and multi-tool compatibility. ComfyUI node version of the SD Prompt Reader", "nickname": "SD Prompt Reader", "title": "SD Prompt Reader", "title_aux": "SD Prompt Reader" @@ -10758,12 +12650,18 @@ [ "AvoidErasePrediction", "CFGPrediction", + "CharacteristicGuidancePrediction", "CombinePredictions", "ConditionedPrediction", + "EarlyMiddleLatePrediction", + "InterpolatePredictions", + "LogSigmas", "PerpNegPrediction", "SamplerCustomPrediction", "ScalePrediction", "ScaledGuidancePrediction", + "SelectSigmas", + "SplitAtSigma", "SwitchPredictions" ], { @@ -10801,7 +12699,6 @@ [ "RL_Crop_Resize", "RL_Crop_Resize_Batch", - "RL_Depth16", "RL_Finetune_Analyze", "RL_Finetune_Analyze_Batch", "RL_Finetune_Variable", @@ -10821,6 +12718,17 @@ "title_aux": "comfyui-ricklove" } ], + "https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": [ + [ + "FrequencyCombination", + "FrequencyCombinationHSV", + "FrequencySeparation", + "FrequencySeparationHSV" + ], + { + "title_aux": "comfyUI_FrequencySeparation_RGB-HSV" + } + ], "https://github.com/rklaffehn/rk-comfy-nodes": [ [ "RK_CivitAIAddHashes", @@ -10854,6 +12762,17 @@ "title_aux": "ComfyUI-Tara-LLM-Integration" } ], + "https://github.com/royceschultz/ComfyUI-Notifications": [ + [ + "Notif-PlaySound", + "Notif-SystemNotification", + "Notif-UnifiedNotification", + "Notif-Webhook" + ], + { + "title_aux": "ComfyUI-Notifications" + } + ], "https://github.com/royceschultz/ComfyUI-TranscriptionTools": [ [ "TT-AudioSink", @@ -10878,10 +12797,42 @@ "title_aux": "RUI-Nodes" } ], + "https://github.com/ruiqutech/ComfyUI-RuiquNodes": [ + [ + "EvaluateListMultiple1", + "EvaluateListMultiple3", + "EvaluateListMultiple6", + "EvaluateListMultiple9", + "EvaluateMultiple1", + "EvaluateMultiple3", + "EvaluateMultiple6", + "EvaluateMultiple9", + "ImageDilate", + "ImageErode", + "ListPath", + "MaskDilate", + "MaskErode", + "PreviewMask", + "RangeSplit", + "SaveMask", + "StringAsAny", + "StringConcat1", + "StringConcat3", + "StringConcat6", + "StringConcat9", + "StringPathStem", + "TermsToList", + "VAEDecodeSave" + ], + { + "title_aux": "RuiquNodes for ComfyUI" + } + ], "https://github.com/runtime44/comfyui_r44_nodes": [ [ "Runtime44ColorMatch", "Runtime44DynamicKSampler", + "Runtime44FilmGrain", "Runtime44ImageEnhance", "Runtime44ImageOverlay", "Runtime44ImageResizer", @@ -10903,6 +12854,17 @@ "title_aux": "comfy_meh" } ], + "https://github.com/saftle/suplex_comfy_nodes": [ + [ + "ControlNet Selector", + "ControlNetOptionalLoader", + "DiffusersSelector", + "SaveImageJPGNoMeta" + ], + { + "title_aux": "Suplex Misc ComfyUI Nodes" + } + ], "https://github.com/sdfxai/SDFXBridgeForComfyUI": [ [ "SDFXClipTextEncode" @@ -10932,6 +12894,14 @@ "title_aux": "SRL's nodes" } ], + "https://github.com/seghier/ComfyUI_LibreTranslate/raw/main/translate_node.py": [ + [ + "LibreTranslate" + ], + { + "title_aux": "ComfyUI_LibreTranslate" + } + ], "https://github.com/sergekatzmann/ComfyUI_Nimbus-Pack": [ [ "AdjustAndRoundDimensions", @@ -10962,17 +12932,25 @@ "title_aux": "Consistency Decoder" } ], + "https://github.com/shadowcz007/comfyui-edit-mask": [ + [ + "EditMask" + ], + { + "title_aux": "comfyui-edit-mask" + } + ], "https://github.com/shadowcz007/comfyui-mixlab-nodes": [ [ "3DImage", "AppInfo", "ApplyVisualStylePrompting_", "AreaToMask", + "AudioPlay", "CenterImage", - "CharacterInText", - "ChatGPTOpenAI", "CkptNames_", "Color", + "ComparingTwoFrames_", "CompositeImages_", "DynamicDelayProcessor", "EmbeddingPrompt", @@ -10983,7 +12961,6 @@ "FloatingVideo", "Font", "GLIGENTextBoxApply_Advanced", - "GamePal", "GetImageSize_", "GradientImage", "GridDisplayAndSave", @@ -10991,7 +12968,7 @@ "GridOutput", "ImageColorTransfer", "ImageCropByAlpha", - "ImageListReplace_", + "ImageListToBatch_", "ImagesPrompt_", "IncrementingListNode_", "IntNumber", @@ -11001,8 +12978,6 @@ "LoadImagesFromPath", "LoadImagesFromURL", "LoadImagesToBatch", - "LoadTripoSRModel_", - "LoadVideoAndSegment_", "LoraNames_", "LoraPrompt", "MaskListMerge_", @@ -11022,11 +12997,9 @@ "SamplerNames_", "SaveImageAndMetadata_", "SaveImageToLocal", - "SaveTripoSRMesh", "ScreenShare", "Seed_", "ShowLayer", - "ShowTextForGPT", "SmoothMask", "SpeechRecognition", "SpeechSynthesis", @@ -11041,19 +13014,25 @@ "TESTNODE_TOKEN", "TextImage", "TextInput_", - "TextSplitByDelimiter", "TextToNumber", "TransparentImage", - "TripoSRSampler_", "VAEDecodeConsistencyDecoder", - "VAEEncodeForInpaint_Frames", - "VAELoaderConsistencyDecoder", - "VideoCombine_Adv" + "VAELoaderConsistencyDecoder" ], { "title_aux": "comfyui-mixlab-nodes" } ], + "https://github.com/shadowcz007/comfyui-sound-lab": [ + [ + "AudioPlay", + "Musicgen_", + "StableAudio_" + ], + { + "title_aux": "comfyui-sound-lab" + } + ], "https://github.com/shadowcz007/comfyui-ultralytics-yolo": [ [ "DetectByLabel" @@ -11122,6 +13101,14 @@ "title_aux": "ComfyUI-send-Eagle(slim)" } ], + "https://github.com/shobhitic/ComfyUI-PlusMinusTextClip": [ + [ + "PlusMinusTextClip" + ], + { + "title_aux": "PlusMinusTextClip - Single node for Positive and Negative Prompts" + } + ], "https://github.com/shockz0rz/ComfyUI_InterpolateEverything": [ [ "OpenposePreprocessorInterpolate" @@ -11171,6 +13158,8 @@ ], "https://github.com/sipherxyz/comfyui-art-venture": [ [ + "AV_AwsBedrockClaudeApi", + "AV_AwsBedrockMistralApi", "AV_CheckpointMerge", "AV_CheckpointModelsToParametersPipe", "AV_CheckpointSave", @@ -11183,6 +13172,7 @@ "AV_ControlNetPreprocessor", "AV_LLMApiConfig", "AV_LLMChat", + "AV_LLMCompletion", "AV_LLMMessage", "AV_LoraListLoader", "AV_LoraListStacker", @@ -11264,6 +13254,9 @@ ], "https://github.com/smthemex/ComfyUI_ChatGLM_API": [ [ + "Glm_4_9b_Chat", + "Glm_4v_9b", + "Glm_Lcoal_Or_Repo", "ZhipuaiApi_Character", "ZhipuaiApi_Txt", "ZhipuaiApi_img" @@ -11272,10 +13265,38 @@ "title_aux": "ComfyUI_ChatGLM_API" } ], + "https://github.com/smthemex/ComfyUI_CustomNet": [ + [ + "CustomNet_Plus" + ], + { + "title_aux": "ComfyUI_CustomNet" + } + ], + "https://github.com/smthemex/ComfyUI_HiDiffusion_Pro": [ + [ + "HI_Diffusers_Model_Loader", + "Hi_Sampler" + ], + { + "title_aux": "ComfyUI_HiDiffusion_Pro" + } + ], + "https://github.com/smthemex/ComfyUI_ID_Animator": [ + [ + "ID_Animator", + "ID_Repo_Choice" + ], + { + "title_aux": "ComfyUI_ID_Animator" + } + ], "https://github.com/smthemex/ComfyUI_Llama3_8B": [ [ - "ChatQA_1p5_8B", - "Meta_Llama3_8B" + "ChatQA_1p5_8b", + "Local_Or_Repo_Choice", + "Meta_Llama3_8B", + "MiniCPM_Llama3_V25" ], { "title_aux": "ComfyUI_Llama3_8B" @@ -11305,6 +13326,41 @@ "title_aux": "ComfyUI_Pipeline_Tool" } ], + "https://github.com/smthemex/ComfyUI_Pops": [ + [ + "Imgae_To_Path", + "Pops_Controlnet_Sampler", + "Pops_Ipadapter_Sampler", + "Pops_Mean_Sampler", + "Pops_Prior_Embedding", + "Pops_Repo_Choice", + "Pops_Unet_Sampler" + ], + { + "title_aux": "ComfyUI_Pops" + } + ], + "https://github.com/smthemex/ComfyUI_StableAudio_Open": [ + [ + "StableAudio_Open", + "Use_LocalModel_Or_Repo" + ], + { + "title_aux": "ComfyUI_StableAudio_Open" + } + ], + "https://github.com/smthemex/ComfyUI_StoryDiffusion": [ + [ + "Character_Batch", + "Comic_Type", + "Pre_Translate_prompt", + "Storydiffusion_Img2Img", + "Storydiffusion_Text2Img" + ], + { + "title_aux": "ComfyUI_StoryDiffusion" + } + ], "https://github.com/space-nuko/ComfyUI-Disco-Diffusion": [ [ "DiscoDiffusion_DiscoDiffusion", @@ -11350,6 +13406,7 @@ ], "https://github.com/spacepxl/ComfyUI-Image-Filters": [ [ + "AdainFilterLatent", "AdainImage", "AdainLatent", "AlphaClean", @@ -11360,6 +13417,7 @@ "BatchNormalizeImage", "BatchNormalizeLatent", "BetterFilmGrain", + "BilateralFilterImage", "BlurImageFast", "BlurMaskFast", "ClampOutliers", @@ -11369,7 +13427,10 @@ "DilateErodeMask", "EnhanceDetail", "ExposureAdjust", + "FrequencyCombine", + "FrequencySeparate", "GuidedFilterAlpha", + "GuidedFilterImage", "ImageConstant", "ImageConstantHSV", "InstructPixToPixConditioningAdvanced", @@ -11377,15 +13438,19 @@ "Keyer", "LatentNormalizeShuffle", "LatentStats", + "MedianFilterImage", "NormalMapSimple", "OffsetLatentImage", "PrintSigmas", "RelightSimple", "RemapRange", + "RestoreDetail", + "SharpenFilterLatent", "ShuffleChannels", "Tonemap", "UnJitterImage", - "UnTonemap" + "UnTonemap", + "VisualizeLatents" ], { "title_aux": "ComfyUI-Image-Filters" @@ -11404,6 +13469,20 @@ "title_aux": "ComfyUI-RAVE" } ], + "https://github.com/spacepxl/ComfyUI-StyleGan": [ + [ + "BatchAverageStyleGANLatents", + "BlendStyleGANLatents", + "GenerateStyleGANLatent", + "LoadStyleGAN", + "StyleGANInversion", + "StyleGANLatentFromBatch", + "StyleGANSampler" + ], + { + "title_aux": "ComfyUI-StyleGan" + } + ], "https://github.com/spinagon/ComfyUI-seam-carving": [ [ "SeamCarving" @@ -11484,6 +13563,18 @@ "title_aux": "ComfyUI Ollama" } ], + "https://github.com/storyicon/comfyui_musev_evolved": [ + [ + "AnimationZoom (comfyui_musev_evolved)", + "ImageSelector (comfyui_musev_evolved)", + "MuseVImg2Vid V1 (comfyui_musev_evolved)", + "MuseVPredictor V1 (comfyui_musev_evolved)" + ], + { + "author": "infguo", + "title_aux": "ComfyUI MuseV Evolved" + } + ], "https://github.com/storyicon/comfyui_segment_anything": [ [ "GroundingDinoModelLoader (segment anything)", @@ -11534,12 +13625,24 @@ "https://github.com/sugarkwork/comfyui_tag_fillter": [ [ "TagFilter", - "TagRemover" + "TagMerger", + "TagRemover", + "TagReplace", + "TagSwitcher" ], { "title_aux": "comfyui_tag_filter" } ], + "https://github.com/superyoman/comfyui_lumaAPI": [ + [ + "LUMA_API_YoC", + "LUMA_API_result_YoC" + ], + { + "title_aux": "comfyui_lumaAPI" + } + ], "https://github.com/syllebra/bilbox-comfyui": [ [ "BilboXLut", @@ -11653,6 +13756,26 @@ "title_aux": "ComfyUI Browser" } ], + "https://github.com/teward/ComfyUI-Helper-Nodes": [ + [ + "HelperNodes_CfgScale", + "HelperNodes_CheckpointSelector", + "HelperNodes_MultilineStringLiteral", + "HelperNodes_Prompt", + "HelperNodes_SDXLCommonResolutions", + "HelperNodes_SamplerSelector", + "HelperNodes_SaveImage", + "HelperNodes_SchedulerSelector", + "HelperNodes_SeedSelector", + "HelperNodes_Steps", + "HelperNodes_StringLiteral", + "HelperNodes_VAESelector", + "HelperNodes_WidthHeight" + ], + { + "title_aux": "ComfyUI-Helper-Nodes" + } + ], "https://github.com/theUpsider/ComfyUI-Logic": [ [ "Bool", @@ -11695,6 +13818,55 @@ "title_aux": "ComfyUI Stable Video Diffusion" } ], + "https://github.com/tiankuan93/ComfyUI-V-Express": [ + [ + "Load_Audio_Path", + "Load_Audio_Path_From_Video", + "Load_Image_Path", + "Load_Kps_Path", + "Load_Kps_Path_From_Video", + "Load_Video_Path", + "VEINTConstant", + "VEPreview_Video", + "VEStringConstant", + "V_Express_Loader", + "V_Express_Sampler" + ], + { + "title_aux": "V-Express: Conditional Dropout for Progressive Training of Portrait Video Generation" + } + ], + "https://github.com/tianlang0704/ComfyUI-StableProjectorzBridge": [ + [ + "ProjectorzControlnetInput", + "ProjectorzControlnetParameter", + "ProjectorzInitInput", + "ProjectorzOutput", + "ProjectorzParameter", + "ProjectorzStringToFloat", + "ProjectorzStringToInt" + ], + { + "title_aux": "Stable Projectorz Bridge" + } + ], + "https://github.com/time-river/ComfyUI-CLIPSeg/raw/main/custom_nodes/clipseg.py": [ + [ + "CLIPSeg", + "CombineSegMasks" + ], + { + "title_aux": "CLIPSeg" + } + ], + "https://github.com/tmagara/ComfyUI-Prediction-Boost": [ + [ + "PredictionBoost" + ], + { + "title_aux": "ComfyUI-Prediction-Boost" + } + ], "https://github.com/tocubed/ComfyUI-AudioReactor": [ [ "AudioFrameTransformBeats", @@ -11706,6 +13878,24 @@ "title_aux": "ComfyUI-AudioReactor" } ], + "https://github.com/tooldigital/ComfyUI-Yolo-Cropper": [ + [ + "ToolYoloCropper" + ], + { + "title_aux": "Easy automatic (square) image cropper using Yolo" + } + ], + "https://github.com/toxicwind/ComfyUI-TTools": [ + [ + "TTools Extract JSON", + "TTools Randomize And Format String", + "TTools SD3 Resolution Solver" + ], + { + "title_aux": "TTools for ComfyUI" + } + ], "https://github.com/toyxyz/ComfyUI_toyxyz_test_nodes": [ [ "CaptureWebcam", @@ -11729,6 +13919,12 @@ "quadmoonINTConditionalOperation", "quadmoonKSampler", "quadmoonKSamplerAdvanced", + "quadmoonLoadConfigs", + "quadmoonModelLoader", + "quadmoonSaveNeg", + "quadmoonSavePrompt", + "quadmoonSmartNeg", + "quadmoonSmartPrompt", "quadmoonThebutton" ], { @@ -11741,7 +13937,6 @@ ], "https://github.com/trojblue/trNodes": [ [ - "JpgConvertNode", "trColorCorrection", "trLayering", "trRouter", @@ -11785,6 +13980,7 @@ ], "https://github.com/ttulttul/ComfyUI-Tensor-Operations": [ [ + "Fast Image to Noise", "Image Match Normalize", "Latent Match Normalize" ], @@ -11812,7 +14008,7 @@ ], "https://github.com/turkyden/ComfyUI-Comic": [ [ - "Image To Comic" + "ImageToComic" ], { "title_aux": "ComfyUI-Comic" @@ -11820,7 +14016,7 @@ ], "https://github.com/turkyden/ComfyUI-Sticker": [ [ - "Image To Sticker" + "ImageToSticker" ], { "title_aux": "ComfyUI-Sticker" @@ -11829,18 +14025,14 @@ "https://github.com/tusharbhutt/Endless-Nodes": [ [ "ESS Aesthetic Scoring", - "ESS Aesthetic Scoring Auto", "ESS Combo Parameterizer", "ESS Combo Parameterizer & Prompts", - "ESS Eight Input Random", "ESS Eight Input Text Switch", "ESS Float to Integer", "ESS Float to Number", "ESS Float to String", "ESS Float to X", - "ESS Global Envoy", "ESS Image Reward", - "ESS Image Reward Auto", "ESS Image Saver with JSON", "ESS Integer to Float", "ESS Integer to Number", @@ -11853,7 +14045,6 @@ "ESS Parameterizer", "ESS Parameterizer & Prompts", "ESS Six Float Output", - "ESS Six Input Random", "ESS Six Input Text Switch", "ESS Six Integer IO Switch", "ESS Six Integer IO Widget", @@ -11920,6 +14111,22 @@ "title_aux": "unwdef-nodes" } ], + "https://github.com/vanche1212/ComfyUI-ZMG-Nodes": [ + [ + "VC_Load_Video_Path_Unified_Output", + "VC_Load_Video_Upload_Unified_Output", + "VC_Video_Combine_Unified_Output", + "Waveform2Audio", + "\ud83d\ude0bAPI Request Node", + "\ud83d\ude0bJSON Parser Node", + "\ud83d\ude0bOld Photo Colorization Node", + "\ud83d\ude0bOllama Request Node", + "\ud83d\ude0bSave Image Unified Output" + ], + { + "title_aux": "ZMG PLUGIN" + } + ], "https://github.com/vanillacode314/SimpleWildcardsComfyUI": [ [ "SimpleConcat", @@ -11965,6 +14172,14 @@ "title_aux": "ComfyUI-BiRefNet" } ], + "https://github.com/viperyl/ComfyUI-RGT": [ + [ + "RGT_Upscale" + ], + { + "title_aux": "ComfyUI-RGT" + } + ], "https://github.com/vivax3794/ComfyUI-Vivax-Nodes": [ [ "Any String", @@ -11998,6 +14213,14 @@ "title_aux": "Kandinsky 2.2 ComfyUI Plugin" } ], + "https://github.com/vxinhao/color2rgb/raw/main/color2rgb.py": [ + [ + "color2RGB" + ], + { + "title_aux": "color2rgb" + } + ], "https://github.com/wallish77/wlsh_nodes": [ [ "Alternating KSampler (WLSH)", @@ -12148,6 +14371,17 @@ "title_aux": "SDXLResolutionPresets" } ], + "https://github.com/wujm424606/ComfyUi-Ollama-YN": [ + [ + "OllamaGenerate", + "OllamaGenerateAdvance", + "OllamaSpecialGenerateAdvance", + "OllamaVision" + ], + { + "title_aux": "ComfyUi-Ollama-YN" + } + ], "https://github.com/wutipong/ComfyUI-TextUtils": [ [ "Text Utils - Join N-Elements of String List", @@ -12224,7 +14458,7 @@ "title_aux": "hd-nodes-comfyui" } ], - "https://github.com/xliry/ComfyUI_SendDiscord/raw/main/SendDiscord.py": [ + "https://github.com/xliry/ComfyUI_SendDiscord": [ [ "SendDiscord" ], @@ -12232,6 +14466,26 @@ "title_aux": "ComfyUI_SendDiscord" } ], + "https://github.com/xuhongming251/ComfyUI-GPEN": [ + [ + "FaceEnhancement" + ], + { + "title_aux": "ComfyUI-GPEN" + } + ], + "https://github.com/xuhongming251/ComfyUI-MuseTalkUtils": [ + [ + "MuseTalkPostprocess", + "MuseTalkPreprocess", + "MuseTalkTrain", + "MuseTalkTrainPreprocess", + "MuseTalkUncropMask" + ], + { + "title_aux": "ComfyUI-MuseTalkUtils" + } + ], "https://github.com/yffyhk/comfyui_auto_danbooru": [ [ "GetDanbooru", @@ -12262,7 +14516,10 @@ "easy XYPlot", "easy XYPlotAdvanced", "easy a1111Loader", + "easy applyBrushNet", "easy applyFooocusInpaint", + "easy applyInpaint", + "easy applyPowerPaint", "easy boolean", "easy cascadeKSampler", "easy cascadeLoader", @@ -12275,11 +14532,11 @@ "easy controlnetLoader", "easy controlnetLoaderADV", "easy controlnetNames", + "easy controlnetStack", "easy convertAnything", "easy detailerFix", "easy dynamiCrafterLoader", "easy float", - "easy fooocusInpaintLoader", "easy fullCascadeKSampler", "easy fullLoader", "easy fullkSampler", @@ -12288,13 +14545,16 @@ "easy humanSegmentation", "easy icLightApply", "easy if", + "easy imageBatchToImageList", "easy imageChooser", "easy imageColorMatch", "easy imageConcat", "easy imageCount", "easy imageCropFromMask", + "easy imageDetailTransfer", "easy imageInsetCrop", "easy imageInterrogator", + "easy imageListToImageBatch", "easy imagePixelPerfect", "easy imageRatio", "easy imageRemBg", @@ -12355,6 +14615,7 @@ "easy preSamplingLayerDiffusionADDTL", "easy preSamplingNoiseIn", "easy preSamplingSdTurbo", + "easy prompt", "easy promptConcat", "easy promptLine", "easy promptList", @@ -12591,11 +14852,17 @@ "ColorCorrectOfUtils", "ConcatTextOfUtils", "ImageBatchOneOrMore", + "ImageCompositeMaskedWithSwitch", "ImageConcanateOfUtils", "IntAndIntAddOffsetLiteral", "IntMultipleAddLiteral", + "LoadImageMaskWithSwitch", + "LoadImageMaskWithoutListDir", "LoadImageWithSwitch", - "ModifyTextGender" + "LoadImageWithoutListDir", + "MaskFastGrow", + "ModifyTextGender", + "SplitMask" ], { "title_aux": "zhangp365/Some Utils for ComfyUI" @@ -12644,9 +14911,23 @@ "title_aux": "EasyCaptureNode for ComfyUI" } ], + "https://github.com/zohac/ComfyUI_ZC_DrawShape": [ + [ + "ZcDrawShape" + ], + { + "author": "Zohac", + "description": "nodes for artists, designers and animators.", + "nickname": "Zc DrawShape", + "title": "Zc DrawShape", + "title_aux": "ComfyUI_ZC_DrawShape" + } + ], "https://github.com/zombieyang/sd-ppp": [ [ "Get Image From Photoshop Layer", + "Image Times Opacity", + "Mask Times Opacity", "Send Images To Photoshop" ], { diff --git a/git_helper.py b/git_helper.py index 37f7d265..38dd24f7 100644 --- a/git_helper.py +++ b/git_helper.py @@ -336,7 +336,7 @@ def restore_pip_snapshot(pips, options): non_local_url = [] for k, v in pips.items(): if v == "": - non_url.append(v) + non_url.append(k) else: if v.startswith('file:'): local_url.append(v) diff --git a/github-stats.json b/github-stats.json index dc6272f1..6f977f97 100644 --- a/github-stats.json +++ b/github-stats.json @@ -1,3238 +1,4827 @@ { - "https://github.com/ltdrdata/ComfyUI-Manager": { - "stars": 3717, - "last_update": "2024-05-08 17:06:46" - }, - "https://github.com/ltdrdata/ComfyUI-Impact-Pack": { - "stars": 1229, - "last_update": "2024-05-08 17:02:07" - }, - "https://github.com/ltdrdata/ComfyUI-Inspire-Pack": { - "stars": 240, - "last_update": "2024-05-08 18:19:00" - }, - "https://github.com/comfyanonymous/ComfyUI_experiments": { - "stars": 125, - "last_update": "2023-09-13 06:28:20" - }, - "https://github.com/Stability-AI/stability-ComfyUI-nodes": { - "stars": 170, - "last_update": "2023-08-18 19:03:06" - }, - "https://github.com/Fannovel16/comfyui_controlnet_aux": { - "stars": 1320, - "last_update": "2024-05-07 05:02:45" - }, - "https://github.com/Fannovel16/ComfyUI-Frame-Interpolation": { - "stars": 291, - "last_update": "2024-05-07 03:30:35" - }, - "https://github.com/Fannovel16/ComfyUI-Loopchain": { - "stars": 25, - "last_update": "2023-12-15 14:25:35" - }, - "https://github.com/Fannovel16/ComfyUI-MotionDiff": { - "stars": 133, - "last_update": "2024-05-05 08:46:25" - }, - "https://github.com/Fannovel16/ComfyUI-Video-Matting": { - "stars": 120, - "last_update": "2024-04-29 09:19:33" - }, - "https://github.com/BlenderNeko/ComfyUI_Cutoff": { - "stars": 309, - "last_update": "2024-04-08 22:34:21" - }, - "https://github.com/BlenderNeko/ComfyUI_ADV_CLIP_emb": { - "stars": 243, - "last_update": "2024-04-08 22:18:59" - }, - "https://github.com/BlenderNeko/ComfyUI_Noise": { - "stars": 192, - "last_update": "2024-04-19 13:09:18" - }, - "https://github.com/BlenderNeko/ComfyUI_TiledKSampler": { - "stars": 258, - "last_update": "2024-04-08 22:15:55" - }, - "https://github.com/BlenderNeko/ComfyUI_SeeCoder": { - "stars": 35, - "last_update": "2023-09-11 10:09:22" - }, - "https://github.com/jags111/efficiency-nodes-comfyui": { - "stars": 590, - "last_update": "2024-04-11 15:08:50" - }, - "https://github.com/jags111/ComfyUI_Jags_VectorMagic": { - "stars": 42, - "last_update": "2024-02-03 04:00:30" - }, - "https://github.com/jags111/ComfyUI_Jags_Audiotools": { - "stars": 23, - "last_update": "2023-12-27 16:47:20" - }, - "https://github.com/Derfuu/Derfuu_ComfyUI_ModdedNodes": { - "stars": 252, - "last_update": "2024-04-29 10:46:24" - }, - "https://github.com/paulo-coronado/comfy_clip_blip_node": { - "stars": 25, - "last_update": "2023-09-27 00:33:21" - }, - "https://github.com/WASasquatch/was-node-suite-comfyui": { - "stars": 827, - "last_update": "2024-05-04 16:31:49" - }, - "https://github.com/WASasquatch/ComfyUI_Preset_Merger": { - "stars": 20, - "last_update": "2023-08-23 04:57:58" - }, - "https://github.com/WASasquatch/PPF_Noise_ComfyUI": { - "stars": 19, - "last_update": "2023-10-01 03:36:57" - }, - "https://github.com/WASasquatch/PowerNoiseSuite": { - "stars": 48, - "last_update": "2023-09-19 17:04:01" - }, - "https://github.com/WASasquatch/FreeU_Advanced": { - "stars": 93, - "last_update": "2024-03-05 15:36:38" - }, - "https://github.com/WASasquatch/ASTERR": { - "stars": 9, - "last_update": "2023-09-30 01:11:46" - }, - "https://github.com/WASasquatch/WAS_Extras": { - "stars": 22, - "last_update": "2023-11-20 17:14:58" - }, - "https://github.com/get-salt-AI/SaltAI": { - "stars": 42, - "last_update": "2024-05-03 18:02:30" - }, - "https://github.com/omar92/ComfyUI-QualityOfLifeSuit_Omar92": { - "stars": 102, - "last_update": "2024-02-13 05:05:31" - }, - "https://github.com/lilly1987/ComfyUI_node_Lilly": { - "stars": 49, - "last_update": "2023-11-24 20:13:20" - }, - "https://github.com/sylym/comfy_vid2vid": { - "stars": 57, - "last_update": "2023-08-29 08:07:35" - }, - "https://github.com/EllangoK/ComfyUI-post-processing-nodes": { - "stars": 139, - "last_update": "2024-02-07 01:59:01" - }, - "https://github.com/LEv145/images-grid-comfy-plugin": { - "stars": 114, - "last_update": "2024-02-23 08:22:13" - }, - "https://github.com/diontimmer/ComfyUI-Vextra-Nodes": { - "stars": 57, - "last_update": "2024-02-14 18:07:29" - }, - "https://github.com/CYBERLOOM-INC/ComfyUI-nodes-hnmr": { - "stars": 3, - "last_update": "2024-01-01 20:01:25" - }, - "https://github.com/BadCafeCode/masquerade-nodes-comfyui": { - "stars": 272, - "last_update": "2024-02-26 04:23:37" - }, - "https://github.com/guoyk93/yk-node-suite-comfyui": { - "stars": 10, - "last_update": "2023-03-28 16:19:46" - }, - "https://github.com/Jcd1230/rembg-comfyui-node": { - "stars": 106, - "last_update": "2023-04-03 00:12:22" - }, - "https://github.com/YinBailiang/MergeBlockWeighted_fo_ComfyUI": { - "stars": 14, - "last_update": "2023-05-23 19:57:46" - }, - "https://github.com/trojblue/trNodes": { - "stars": 8, - "last_update": "2024-03-17 00:16:43" - }, - "https://github.com/szhublox/ambw_comfyui": { - "stars": 11, - "last_update": "2024-01-09 14:14:18" - }, - "https://github.com/city96/ComfyUI_NetDist": { - "stars": 185, - "last_update": "2024-02-15 17:34:51" - }, - "https://github.com/city96/SD-Latent-Interposer": { - "stars": 149, - "last_update": "2024-03-20 21:55:09" - }, - "https://github.com/city96/SD-Advanced-Noise": { - "stars": 16, - "last_update": "2023-08-14 15:17:54" - }, - "https://github.com/city96/SD-Latent-Upscaler": { - "stars": 99, - "last_update": "2023-11-27 00:26:14" - }, - "https://github.com/city96/ComfyUI_DiT": { - "stars": 2, - "last_update": "2023-09-06 17:15:54" - }, - "https://github.com/city96/ComfyUI_ColorMod": { - "stars": 26, - "last_update": "2024-04-09 03:35:11" - }, - "https://github.com/city96/ComfyUI_ExtraModels": { - "stars": 137, - "last_update": "2024-05-08 11:21:07" - }, - "https://github.com/Kaharos94/ComfyUI-Saveaswebp": { - "stars": 28, - "last_update": "2023-11-11 19:53:48" - }, - "https://github.com/SLAPaper/ComfyUI-Image-Selector": { - "stars": 47, - "last_update": "2024-01-10 10:02:25" - }, - "https://github.com/flyingshutter/As_ComfyUI_CustomNodes": { - "stars": 6, - "last_update": "2024-02-29 02:08:28" - }, - "https://github.com/Zuellni/ComfyUI-Custom-Nodes": { - "stars": 43, - "last_update": "2023-09-19 12:11:26" - }, - "https://github.com/Zuellni/ComfyUI-ExLlama": { - "stars": 85, - "last_update": "2024-05-04 07:13:01" - }, - "https://github.com/Zuellni/ComfyUI-PickScore-Nodes": { - "stars": 21, - "last_update": "2024-04-22 13:30:47" - }, - "https://github.com/AlekPet/ComfyUI_Custom_Nodes_AlekPet": { - "stars": 577, - "last_update": "2024-04-17 09:44:09" - }, - "https://github.com/pythongosssss/ComfyUI-WD14-Tagger": { - "stars": 335, - "last_update": "2024-04-04 01:15:12" - }, - "https://github.com/pythongosssss/ComfyUI-Custom-Scripts": { - "stars": 1159, - "last_update": "2024-05-09 02:15:21" - }, - "https://github.com/strimmlarn/ComfyUI_Strimmlarns_aesthetic_score": { - "stars": 22, - "last_update": "2024-03-01 23:00:05" - }, - "https://github.com/TinyTerra/ComfyUI_tinyterraNodes": { - "stars": 273, - "last_update": "2024-05-09 08:41:24" - }, - "https://github.com/Jordach/comfy-plasma": { - "stars": 43, - "last_update": "2023-07-31 00:57:50" - }, - "https://github.com/bvhari/ComfyUI_ImageProcessing": { - "stars": 16, - "last_update": "2023-05-25 10:49:24" - }, - "https://github.com/bvhari/ComfyUI_LatentToRGB": { - "stars": 11, - "last_update": "2023-05-20 06:50:37" - }, - "https://github.com/bvhari/ComfyUI_PerpWeight": { - "stars": 10, - "last_update": "2024-03-25 07:05:23" - }, - "https://github.com/ssitu/ComfyUI_UltimateSDUpscale": { - "stars": 555, - "last_update": "2024-05-07 18:56:07" - }, - "https://github.com/ssitu/ComfyUI_restart_sampling": { - "stars": 66, - "last_update": "2024-05-07 22:02:07" - }, - "https://github.com/ssitu/ComfyUI_roop": { - "stars": 58, - "last_update": "2023-09-05 16:18:48" - }, - "https://github.com/ssitu/ComfyUI_fabric": { - "stars": 74, - "last_update": "2024-05-06 18:11:12" - }, - "https://github.com/space-nuko/ComfyUI-Disco-Diffusion": { - "stars": 42, - "last_update": "2023-09-12 07:35:52" - }, - "https://github.com/space-nuko/ComfyUI-OpenPose-Editor": { - "stars": 136, - "last_update": "2024-01-05 17:45:55" - }, - "https://github.com/space-nuko/nui-suite": { - "stars": 10, - "last_update": "2023-06-04 22:08:46" - }, - "https://github.com/Nourepide/ComfyUI-Allor": { - "stars": 156, - "last_update": "2024-03-21 07:40:20" - }, - "https://github.com/melMass/comfy_mtb": { - "stars": 295, - "last_update": "2024-05-07 21:45:23" - }, - "https://github.com/xXAdonesXx/NodeGPT": { - "stars": 310, - "last_update": "2024-02-01 23:20:08" - }, - "https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes": { - "stars": 408, - "last_update": "2024-04-19 21:02:12" - }, - "https://github.com/bmad4ever/ComfyUI-Bmad-DirtyUndoRedo": { - "stars": 50, - "last_update": "2023-11-29 14:41:23" - }, - "https://github.com/bmad4ever/comfyui_bmad_nodes": { - "stars": 39, - "last_update": "2024-04-07 19:57:43" - }, - "https://github.com/bmad4ever/comfyui_ab_samplercustom": { - "stars": 4, - "last_update": "2023-11-06 17:45:57" - }, - "https://github.com/bmad4ever/comfyui_lists_cartesian_product": { - "stars": 2, - "last_update": "2023-12-22 00:54:35" - }, - "https://github.com/bmad4ever/comfyui_wfc_like": { - "stars": 3, - "last_update": "2024-03-19 23:02:45" - }, - "https://github.com/bmad4ever/comfyui_quilting": { - "stars": 2, - "last_update": "2024-03-04 22:48:03" - }, - "https://github.com/FizzleDorf/ComfyUI_FizzNodes": { - "stars": 284, - "last_update": "2024-04-24 04:23:42" - }, - "https://github.com/FizzleDorf/ComfyUI-AIT": { - "stars": 42, - "last_update": "2023-11-08 14:03:03" - }, - "https://github.com/filipemeneses/comfy_pixelization": { - "stars": 25, - "last_update": "2024-02-01 04:09:13" - }, - "https://github.com/shiimizu/ComfyUI_smZNodes": { - "stars": 128, - "last_update": "2024-05-03 02:51:04" - }, - "https://github.com/shiimizu/ComfyUI-TiledDiffusion": { - "stars": 172, - "last_update": "2024-04-11 21:32:24" - }, - "https://github.com/ZaneA/ComfyUI-ImageReward": { - "stars": 22, - "last_update": "2024-02-04 23:38:10" - }, - "https://github.com/SeargeDP/SeargeSDXL": { - "stars": 709, - "last_update": "2024-04-10 14:29:50" - }, - "https://github.com/cubiq/ComfyUI_SimpleMath": { - "stars": 10, - "last_update": "2023-09-26 06:31:44" - }, - "https://github.com/cubiq/ComfyUI_IPAdapter_plus": { - "stars": 2557, - "last_update": "2024-05-08 14:10:24" - }, - "https://github.com/cubiq/ComfyUI_InstantID": { - "stars": 760, - "last_update": "2024-05-08 14:56:00" - }, - "https://github.com/cubiq/ComfyUI_FaceAnalysis": { - "stars": 133, - "last_update": "2024-05-06 22:53:00" - }, - "https://github.com/shockz0rz/ComfyUI_InterpolateEverything": { - "stars": 21, - "last_update": "2023-12-23 04:13:06" - }, - "https://github.com/shockz0rz/comfy-easy-grids": { - "stars": 10, - "last_update": "2024-01-01 02:40:59" - }, - "https://github.com/yolanother/DTAIComfyPromptAgent": { - "stars": 5, - "last_update": "2023-07-15 15:19:30" - }, - "https://github.com/yolanother/DTAIImageToTextNode": { - "stars": 14, - "last_update": "2024-01-25 02:53:22" - }, - "https://github.com/yolanother/DTAIComfyLoaders": { - "stars": 1, - "last_update": "2023-12-25 04:37:43" - }, - "https://github.com/yolanother/DTAIComfyImageSubmit": { - "stars": 1, - "last_update": "2023-12-25 04:37:20" - }, - "https://github.com/yolanother/DTAIComfyQRCodes": { - "stars": 2, - "last_update": "2023-12-25 04:38:00" - }, - "https://github.com/yolanother/DTAIComfyVariables": { - "stars": 7, - "last_update": "2023-12-25 04:37:03" - }, - "https://github.com/sipherxyz/comfyui-art-venture": { - "stars": 68, - "last_update": "2024-05-02 23:31:34" - }, - "https://github.com/SOELexicon/ComfyUI-LexMSDBNodes": { - "stars": 4, - "last_update": "2023-07-21 11:22:18" - }, - "https://github.com/pants007/comfy-pants": { - "stars": 2, - "last_update": "2023-08-13 12:02:23" - }, - "https://github.com/evanspearman/ComfyMath": { - "stars": 41, - "last_update": "2023-08-27 03:29:04" - }, - "https://github.com/civitai/comfy-nodes": { - "stars": 77, - "last_update": "2024-02-29 12:23:11" - }, - "https://github.com/andersxa/comfyui-PromptAttention": { - "stars": 19, - "last_update": "2023-09-22 22:48:52" - }, - "https://github.com/ArtVentureX/comfyui-animatediff": { - "stars": 599, - "last_update": "2024-01-06 09:18:52" - }, - "https://github.com/twri/sdxl_prompt_styler": { - "stars": 554, - "last_update": "2024-03-24 18:55:24" - }, - "https://github.com/wolfden/ComfyUi_PromptStylers": { - "stars": 55, - "last_update": "2023-10-22 21:34:59" - }, - "https://github.com/wolfden/ComfyUi_String_Function_Tree": { - "stars": 7, - "last_update": "2023-10-22 22:12:55" - }, - "https://github.com/daxthin/DZ-FaceDetailer": { - "stars": 89, - "last_update": "2023-12-16 17:31:44" - }, - "https://github.com/asagi4/comfyui-prompt-control": { - "stars": 144, - "last_update": "2024-05-05 16:02:52" - }, - "https://github.com/asagi4/ComfyUI-CADS": { - "stars": 27, - "last_update": "2024-04-08 15:52:29" - }, - "https://github.com/asagi4/comfyui-utility-nodes": { - "stars": 7, - "last_update": "2024-03-10 16:04:01" - }, - "https://github.com/jamesWalker55/comfyui-p2ldgan": { - "stars": 12, - "last_update": "2023-08-11 20:15:26" - }, - "https://github.com/jamesWalker55/comfyui-various": { - "stars": 24, - "last_update": "2024-03-10 06:45:45" - }, - "https://github.com/adieyal/comfyui-dynamicprompts": { - "stars": 163, - "last_update": "2024-02-05 06:55:50" - }, - "https://github.com/mihaiiancu/ComfyUI_Inpaint": { - "stars": 9, - "last_update": "2023-07-30 22:32:41" - }, - "https://github.com/kwaroran/abg-comfyui": { - "stars": 20, - "last_update": "2023-08-03 08:57:52" - }, - "https://github.com/bash-j/mikey_nodes": { - "stars": 70, - "last_update": "2024-05-05 23:32:05" - }, - "https://github.com/failfa-st/failfast-comfyui-extensions": { - "stars": 113, - "last_update": "2024-02-25 09:56:19" - }, - "https://github.com/Pfaeff/pfaeff-comfyui": { - "stars": 18, - "last_update": "2023-08-19 19:28:36" - }, - "https://github.com/wallish77/wlsh_nodes": { - "stars": 74, - "last_update": "2024-03-28 23:02:54" - }, - "https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet": { - "stars": 360, - "last_update": "2024-04-04 19:49:52" - }, - "https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved": { - "stars": 2049, - "last_update": "2024-05-08 21:25:33" - }, - "https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite": { - "stars": 328, - "last_update": "2024-04-20 18:24:00" - }, - "https://github.com/Gourieff/comfyui-reactor-node": { - "stars": 914, - "last_update": "2024-05-07 19:13:48" - }, - "https://github.com/imb101/ComfyUI-FaceSwap": { - "stars": 28, - "last_update": "2023-08-04 23:54:24" - }, - "https://github.com/Chaoses-Ib/ComfyUI_Ib_CustomNodes": { - "stars": 11, - "last_update": "2024-04-05 11:14:24" - }, - "https://github.com/AIrjen/OneButtonPrompt": { - "stars": 666, - "last_update": "2024-05-04 07:25:31" - }, - "https://github.com/coreyryanhanson/ComfyQR": { - "stars": 38, - "last_update": "2024-03-20 20:10:27" - }, - "https://github.com/coreyryanhanson/ComfyQR-scanning-nodes": { - "stars": 8, - "last_update": "2023-10-15 03:19:16" - }, - "https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": { - "stars": 154, - "last_update": "2024-01-07 03:29:57" - }, - "https://github.com/hylarucoder/ComfyUI-Eagle-PNGInfo": { - "stars": 6, - "last_update": "2023-12-10 13:57:48" - }, - "https://github.com/theUpsider/ComfyUI-Styles_CSV_Loader": { - "stars": 25, - "last_update": "2023-10-23 14:55:53" - }, - "https://github.com/M1kep/Comfy_KepListStuff": { - "stars": 24, - "last_update": "2023-10-30 01:30:09" - }, - "https://github.com/M1kep/ComfyLiterals": { - "stars": 8, - "last_update": "2023-11-20 01:08:21" - }, - "https://github.com/M1kep/KepPromptLang": { - "stars": 4, - "last_update": "2023-11-19 08:27:04" - }, - "https://github.com/M1kep/Comfy_KepMatteAnything": { - "stars": 9, - "last_update": "2023-09-27 01:16:51" - }, - "https://github.com/M1kep/Comfy_KepKitchenSink": { - "stars": 0, - "last_update": "2023-09-25 05:58:26" - }, - "https://github.com/M1kep/ComfyUI-OtherVAEs": { - "stars": 1, - "last_update": "2023-10-29 03:21:34" - }, - "https://github.com/M1kep/ComfyUI-KepOpenAI": { - "stars": 24, - "last_update": "2023-11-08 22:43:37" - }, - "https://github.com/uarefans/ComfyUI-Fans": { - "stars": 12, - "last_update": "2023-08-15 18:42:40" - }, - "https://github.com/NicholasMcCarthy/ComfyUI_TravelSuite": { - "stars": 13, - "last_update": "2024-02-02 11:09:18" - }, - "https://github.com/ManglerFTW/ComfyI2I": { - "stars": 131, - "last_update": "2023-11-03 11:09:53" - }, - "https://github.com/theUpsider/ComfyUI-Logic": { - "stars": 81, - "last_update": "2023-12-12 20:29:49" - }, - "https://github.com/mpiquero7164/ComfyUI-SaveImgPrompt": { - "stars": 14, - "last_update": "2023-08-14 11:27:09" - }, - "https://github.com/m-sokes/ComfyUI-Sokes-Nodes": { - "stars": 1, - "last_update": "2023-08-16 11:33:14" - }, - "https://github.com/Extraltodeus/noise_latent_perlinpinpin": { - "stars": 18, - "last_update": "2023-08-21 22:04:31" - }, - "https://github.com/Extraltodeus/LoadLoraWithTags": { - "stars": 30, - "last_update": "2023-10-28 15:51:44" - }, - "https://github.com/Extraltodeus/sigmas_tools_and_the_golden_scheduler": { - "stars": 38, - "last_update": "2024-05-07 16:18:48" - }, - "https://github.com/Extraltodeus/ComfyUI-AutomaticCFG": { - "stars": 192, - "last_update": "2024-05-07 16:17:50" - }, - "https://github.com/Extraltodeus/Vector_Sculptor_ComfyUI": { - "stars": 69, - "last_update": "2024-04-04 20:20:54" - }, - "https://github.com/JPS-GER/ComfyUI_JPS-Nodes": { - "stars": 27, - "last_update": "2024-04-21 09:44:11" - }, - "https://github.com/hustille/ComfyUI_hus_utils": { - "stars": 5, - "last_update": "2023-08-16 15:44:24" - }, - "https://github.com/hustille/ComfyUI_Fooocus_KSampler": { - "stars": 57, - "last_update": "2023-09-10 01:51:24" - }, - "https://github.com/badjeff/comfyui_lora_tag_loader": { - "stars": 38, - "last_update": "2024-02-12 07:46:02" - }, - "https://github.com/rgthree/rgthree-comfy": { - "stars": 555, - "last_update": "2024-05-07 02:30:40" - }, - "https://github.com/AIGODLIKE/AIGODLIKE-COMFYUI-TRANSLATION": { - "stars": 750, - "last_update": "2024-05-09 06:35:41" - }, - "https://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Studio": { - "stars": 188, - "last_update": "2024-04-03 03:59:31" - }, - "https://github.com/AIGODLIKE/ComfyUI-CUP": { - "stars": 1, - "last_update": "2024-03-22 07:26:43" - }, - "https://github.com/syllebra/bilbox-comfyui": { - "stars": 72, - "last_update": "2024-04-03 22:58:07" - }, - "https://github.com/giriss/comfy-image-saver": { - "stars": 120, - "last_update": "2023-11-16 10:39:05" - }, - "https://github.com/shingo1228/ComfyUI-send-eagle-slim": { - "stars": 19, - "last_update": "2024-04-11 17:41:50" - }, - "https://github.com/shingo1228/ComfyUI-SDXL-EmptyLatentImage": { - "stars": 24, - "last_update": "2023-08-17 07:51:02" - }, - "https://github.com/laksjdjf/pfg-ComfyUI": { - "stars": 9, - "last_update": "2023-07-12 06:33:40" - }, - "https://github.com/laksjdjf/attention-couple-ComfyUI": { - "stars": 54, - "last_update": "2024-03-25 03:38:55" - }, - "https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI": { - "stars": 17, - "last_update": "2023-11-23 02:06:20" - }, - "https://github.com/laksjdjf/LCMSampler-ComfyUI": { - "stars": 14, - "last_update": "2023-11-08 11:07:04" - }, - "https://github.com/laksjdjf/LoRTnoC-ComfyUI": { - "stars": 10, - "last_update": "2024-03-07 12:27:44" - }, - "https://github.com/laksjdjf/Batch-Condition-ComfyUI": { - "stars": 1, - "last_update": "2024-03-09 12:22:07" - }, - "https://github.com/alsritter/asymmetric-tiling-comfyui": { - "stars": 14, - "last_update": "2023-08-18 16:32:27" - }, - "https://github.com/meap158/ComfyUI-GPU-temperature-protection": { - "stars": 3, - "last_update": "2023-10-07 09:45:25" - }, - "https://github.com/meap158/ComfyUI-Prompt-Expansion": { - "stars": 57, - "last_update": "2023-09-17 00:00:31" - }, - "https://github.com/meap158/ComfyUI-Background-Replacement": { - "stars": 31, - "last_update": "2023-12-17 14:05:08" - }, - "https://github.com/TeaCrab/ComfyUI-TeaNodes": { - "stars": 4, - "last_update": "2024-04-26 01:35:01" - }, - "https://github.com/nagolinc/ComfyUI_FastVAEDecorder_SDXL": { - "stars": 2, - "last_update": "2023-07-27 20:15:00" - }, - "https://github.com/bradsec/ComfyUI_ResolutionSelector": { - "stars": 7, - "last_update": "2023-08-19 06:52:19" - }, - "https://github.com/kohya-ss/ControlNet-LLLite-ComfyUI": { - "stars": 131, - "last_update": "2024-05-05 09:31:39" - }, - "https://github.com/jjkramhoeft/ComfyUI-Jjk-Nodes": { - "stars": 4, - "last_update": "2023-08-19 19:17:07" - }, - "https://github.com/dagthomas/comfyui_dagthomas": { - "stars": 54, - "last_update": "2024-05-04 16:10:21" - }, - "https://github.com/marhensa/sdxl-recommended-res-calc": { - "stars": 50, - "last_update": "2024-03-15 05:43:38" - }, - "https://github.com/Nuked88/ComfyUI-N-Nodes": { - "stars": 152, - "last_update": "2024-03-16 11:27:55" - }, - "https://github.com/Nuked88/ComfyUI-N-Sidebar": { - "stars": 305, - "last_update": "2024-04-27 07:19:24" - }, - "https://github.com/richinsley/Comfy-LFO": { - "stars": 4, - "last_update": "2023-08-23 23:08:16" - }, - "https://github.com/Beinsezii/bsz-cui-extras": { - "stars": 19, - "last_update": "2024-05-07 22:06:18" - }, - "https://github.com/youyegit/tdxh_node_comfyui": { - "stars": 2, - "last_update": "2023-09-21 08:40:50" - }, - "https://github.com/Sxela/ComfyWarp": { - "stars": 20, - "last_update": "2023-11-04 10:45:11" - }, - "https://github.com/skfoo/ComfyUI-Coziness": { - "stars": 18, - "last_update": "2024-02-23 18:59:41" - }, - "https://github.com/YOUR-WORST-TACO/ComfyUI-TacoNodes": { - "stars": 13, - "last_update": "2023-08-30 16:06:45" - }, - "https://github.com/Lerc/canvas_tab": { - "stars": 122, - "last_update": "2024-01-25 22:09:37" - }, - "https://github.com/Ttl/ComfyUi_NNLatentUpscale": { - "stars": 144, - "last_update": "2023-08-28 13:56:20" - }, - "https://github.com/spro/comfyui-mirror": { - "stars": 4, - "last_update": "2023-08-28 02:37:52" - }, - "https://github.com/Tropfchen/ComfyUI-Embedding_Picker": { - "stars": 20, - "last_update": "2024-01-06 14:15:12" - }, - "https://github.com/Acly/comfyui-tooling-nodes": { - "stars": 179, - "last_update": "2024-03-04 08:52:39" - }, - "https://github.com/Acly/comfyui-inpaint-nodes": { - "stars": 309, - "last_update": "2024-04-24 04:17:56" - }, - "https://github.com/picturesonpictures/comfy_PoP": { - "stars": 11, - "last_update": "2024-02-01 03:04:42" - }, - "https://github.com/alt-key-project/comfyui-dream-project": { - "stars": 65, - "last_update": "2023-12-21 19:36:51" - }, - "https://github.com/alt-key-project/comfyui-dream-video-batches": { - "stars": 47, - "last_update": "2023-12-03 10:31:55" - }, - "https://github.com/seanlynch/comfyui-optical-flow": { - "stars": 20, - "last_update": "2023-10-20 21:22:17" - }, - "https://github.com/ealkanat/comfyui_easy_padding": { - "stars": 10, - "last_update": "2023-09-26 14:56:04" - }, - "https://github.com/ArtBot2023/CharacterFaceSwap": { - "stars": 50, - "last_update": "2023-10-25 04:29:40" - }, - "https://github.com/mav-rik/facerestore_cf": { - "stars": 135, - "last_update": "2024-03-19 21:36:31" - }, - "https://github.com/braintacles/braintacles-comfyui-nodes": { - "stars": 1, - "last_update": "2023-09-06 12:12:32" - }, - "https://github.com/hayden-fr/ComfyUI-Model-Manager": { - "stars": 20, - "last_update": "2024-04-21 07:42:28" - }, - "https://github.com/hayden-fr/ComfyUI-Image-Browsing": { - "stars": 2, - "last_update": "2023-09-07 14:06:12" - }, - "https://github.com/ali1234/comfyui-job-iterator": { - "stars": 47, - "last_update": "2023-09-10 23:42:15" - }, - "https://github.com/jmkl/ComfyUI-ricing": { - "stars": 9, - "last_update": "2023-09-11 03:33:34" - }, - "https://github.com/budihartono/comfyui_otonx_nodes": { - "stars": 1, - "last_update": "2023-11-08 14:26:20" - }, - "https://github.com/ramyma/A8R8_ComfyUI_nodes": { - "stars": 4, - "last_update": "2023-09-13 02:56:53" - }, - "https://github.com/spinagon/ComfyUI-seamless-tiling": { - "stars": 62, - "last_update": "2024-01-29 03:45:40" - }, - "https://github.com/tusharbhutt/Endless-Nodes": { - "stars": 21, - "last_update": "2023-10-21 23:02:19" - }, - "https://github.com/spacepxl/ComfyUI-HQ-Image-Save": { - "stars": 23, - "last_update": "2024-05-01 21:05:26" - }, - "https://github.com/spacepxl/ComfyUI-Image-Filters": { - "stars": 52, - "last_update": "2024-04-25 23:07:26" - }, - "https://github.com/spacepxl/ComfyUI-RAVE": { - "stars": 77, - "last_update": "2024-01-28 09:08:08" - }, - "https://github.com/phineas-pta/comfyui-auto-nodes-layout": { - "stars": 15, - "last_update": "2023-09-21 14:49:12" - }, - "https://github.com/receyuki/comfyui-prompt-reader-node": { - "stars": 167, - "last_update": "2024-04-08 18:19:54" - }, - "https://github.com/rklaffehn/rk-comfy-nodes": { - "stars": 2, - "last_update": "2024-01-23 17:12:45" - }, - "https://github.com/cubiq/ComfyUI_essentials": { - "stars": 231, - "last_update": "2024-04-29 14:50:30" - }, - "https://github.com/Clybius/ComfyUI-Latent-Modifiers": { - "stars": 40, - "last_update": "2024-01-02 21:57:58" - }, - "https://github.com/Clybius/ComfyUI-Extra-Samplers": { - "stars": 41, - "last_update": "2024-04-18 04:28:09" - }, - "https://github.com/mcmonkeyprojects/sd-dynamic-thresholding": { - "stars": 1019, - "last_update": "2024-04-21 14:51:14" - }, - "https://github.com/Tropfchen/ComfyUI-yaResolutionSelector": { - "stars": 5, - "last_update": "2024-04-25 19:22:54" - }, - "https://github.com/chrisgoringe/cg-noise": { - "stars": 22, - "last_update": "2024-02-02 23:38:25" - }, - "https://github.com/chrisgoringe/cg-image-picker": { - "stars": 139, - "last_update": "2024-04-22 14:41:30" - }, - "https://github.com/chrisgoringe/cg-use-everywhere": { - "stars": 282, - "last_update": "2024-05-05 04:17:49" - }, - "https://github.com/chrisgoringe/cg-prompt-info": { - "stars": 24, - "last_update": "2024-04-10 01:08:34" - }, - "https://github.com/TGu-97/ComfyUI-TGu-utils": { - "stars": 1, - "last_update": "2023-09-25 04:06:55" - }, - "https://github.com/seanlynch/srl-nodes": { - "stars": 3, - "last_update": "2023-10-22 22:35:41" - }, - "https://github.com/alpertunga-bile/prompt-generator-comfyui": { - "stars": 54, - "last_update": "2024-05-04 14:00:29" - }, - "https://github.com/mlinmg/ComfyUI-LaMA-Preprocessor": { - "stars": 64, - "last_update": "2024-04-12 12:59:58" - }, - "https://github.com/kijai/ComfyUI-KJNodes": { - "stars": 226, - "last_update": "2024-05-09 00:02:54" - }, - "https://github.com/kijai/ComfyUI-CCSR": { - "stars": 114, - "last_update": "2024-03-18 10:10:20" - }, - "https://github.com/kijai/ComfyUI-SVD": { - "stars": 150, - "last_update": "2023-11-25 10:16:57" - }, - "https://github.com/kijai/ComfyUI-Marigold": { - "stars": 339, - "last_update": "2024-04-08 08:33:04" - }, - "https://github.com/kijai/ComfyUI-Geowizard": { - "stars": 74, - "last_update": "2024-04-07 12:46:47" - }, - "https://github.com/kijai/ComfyUI-depth-fm": { - "stars": 44, - "last_update": "2024-04-24 22:53:30" - }, - "https://github.com/kijai/ComfyUI-DDColor": { - "stars": 70, - "last_update": "2024-01-18 08:05:17" - }, - "https://github.com/kijai/ComfyUI-ADMotionDirector": { - "stars": 105, - "last_update": "2024-03-27 19:38:20" - }, - "https://github.com/kijai/ComfyUI-moondream": { - "stars": 68, - "last_update": "2024-03-11 00:50:24" - }, - "https://github.com/kijai/ComfyUI-SUPIR": { - "stars": 968, - "last_update": "2024-04-23 10:04:12" - }, - "https://github.com/kijai/ComfyUI-DynamiCrafterWrapper": { - "stars": 200, - "last_update": "2024-04-18 11:22:03" - }, - "https://github.com/hhhzzyang/Comfyui_Lama": { - "stars": 32, - "last_update": "2024-04-15 09:44:58" - }, - "https://github.com/thedyze/save-image-extended-comfyui": { - "stars": 60, - "last_update": "2024-05-04 17:53:11" - }, - "https://github.com/SOELexicon/ComfyUI-LexTools": { - "stars": 18, - "last_update": "2024-03-15 17:45:41" - }, - "https://github.com/mikkel/ComfyUI-text-overlay": { - "stars": 23, - "last_update": "2023-10-05 03:05:03" - }, - "https://github.com/avatechai/avatar-graph-comfyui": { - "stars": 193, - "last_update": "2024-02-06 08:56:30" - }, - "https://github.com/TRI3D-LC/tri3d-comfyui-nodes": { - "stars": 11, - "last_update": "2024-05-09 04:11:03" - }, - "https://github.com/storyicon/comfyui_segment_anything": { - "stars": 427, - "last_update": "2024-04-29 15:07:42" - }, - "https://github.com/a1lazydog/ComfyUI-AudioScheduler": { - "stars": 86, - "last_update": "2024-05-06 16:53:15" - }, - "https://github.com/whatbirdisthat/cyberdolphin": { - "stars": 14, - "last_update": "2023-11-11 23:35:44" - }, - "https://github.com/chrish-slingshot/CrasHUtils": { - "stars": 11, - "last_update": "2024-04-19 22:22:24" - }, - "https://github.com/spinagon/ComfyUI-seam-carving": { - "stars": 12, - "last_update": "2023-10-13 07:24:05" - }, - "https://github.com/YMC-GitHub/ymc-node-suite-comfyui": { - "stars": 14, - "last_update": "2023-12-27 14:18:04" - }, - "https://github.com/chibiace/ComfyUI-Chibi-Nodes": { - "stars": 23, - "last_update": "2024-04-09 09:23:35" - }, - "https://github.com/DigitalIO/ComfyUI-stable-wildcards": { - "stars": 19, - "last_update": "2023-12-18 23:42:52" - }, - "https://github.com/THtianhao/ComfyUI-Portrait-Maker": { - "stars": 160, - "last_update": "2024-03-07 06:45:14" - }, - "https://github.com/THtianhao/ComfyUI-FaceChain": { - "stars": 75, - "last_update": "2024-04-12 03:48:33" - }, - "https://github.com/zer0TF/cute-comfy": { - "stars": 27, - "last_update": "2024-01-04 04:20:46" - }, - "https://github.com/chflame163/ComfyUI_MSSpeech_TTS": { - "stars": 16, - "last_update": "2024-02-20 01:27:38" - }, - "https://github.com/chflame163/ComfyUI_WordCloud": { - "stars": 53, - "last_update": "2024-02-27 12:47:52" - }, - "https://github.com/chflame163/ComfyUI_LayerStyle": { - "stars": 458, - "last_update": "2024-05-07 07:34:37" - }, - "https://github.com/chflame163/ComfyUI_FaceSimilarity": { - "stars": 3, - "last_update": "2024-03-22 05:35:23" - }, - "https://github.com/drustan-hawk/primitive-types": { - "stars": 5, - "last_update": "2023-10-20 16:33:23" - }, - "https://github.com/shadowcz007/comfyui-mixlab-nodes": { - "stars": 722, - "last_update": "2024-05-09 01:55:37" - }, - "https://github.com/shadowcz007/comfyui-ultralytics-yolo": { - "stars": 13, - "last_update": "2024-04-23 02:35:25" - }, - "https://github.com/shadowcz007/comfyui-consistency-decoder": { - "stars": 1, - "last_update": "2024-02-02 01:46:54" - }, - "https://github.com/shadowcz007/comfyui-Image-reward": { - "stars": 12, - "last_update": "2024-03-25 05:41:04" - }, - "https://github.com/ostris/ostris_nodes_comfyui": { - "stars": 19, - "last_update": "2023-11-26 21:41:27" - }, "https://github.com/0xbitches/ComfyUI-LCM": { - "stars": 241, - "last_update": "2023-11-11 21:24:33" - }, - "https://github.com/aszc-dev/ComfyUI-CoreMLSuite": { - "stars": 78, - "last_update": "2023-12-01 00:09:15" - }, - "https://github.com/taabata/LCM_Inpaint-Outpaint_Comfy": { - "stars": 215, - "last_update": "2024-04-07 21:32:38" - }, - "https://github.com/noxinias/ComfyUI_NoxinNodes": { - "stars": 5, - "last_update": "2023-11-01 00:11:28" - }, - "https://github.com/GMapeSplat/ComfyUI_ezXY": { - "stars": 17, - "last_update": "2023-11-30 00:32:24" - }, - "https://github.com/kinfolk0117/ComfyUI_SimpleTiles": { - "stars": 22, - "last_update": "2024-01-29 19:27:12" - }, - "https://github.com/kinfolk0117/ComfyUI_GradientDeepShrink": { - "stars": 21, - "last_update": "2023-12-01 20:13:00" - }, - "https://github.com/kinfolk0117/ComfyUI_Pilgram": { - "stars": 6, - "last_update": "2024-01-07 14:49:46" - }, - "https://github.com/Fictiverse/ComfyUI_Fictiverse": { - "stars": 7, - "last_update": "2024-04-29 03:36:52" - }, - "https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words": { - "stars": 72, - "last_update": "2024-04-09 20:35:52" - }, - "https://github.com/aianimation55/ComfyUI-FatLabels": { - "stars": 4, - "last_update": "2023-10-31 14:25:23" - }, - "https://github.com/noembryo/ComfyUI-noEmbryo": { - "stars": 11, - "last_update": "2024-03-22 17:52:32" - }, - "https://github.com/mikkel/comfyui-mask-boundingbox": { - "stars": 22, - "last_update": "2024-03-07 08:11:06" - }, - "https://github.com/ParmanBabra/ComfyUI-Malefish-Custom-Scripts": { - "stars": 0, - "last_update": "2023-11-03 04:16:28" - }, - "https://github.com/matan1905/ComfyUI-Serving-Toolkit": { - "stars": 32, - "last_update": "2024-02-28 18:30:35" - }, - "https://github.com/PCMonsterx/ComfyUI-CSV-Loader": { - "stars": 10, - "last_update": "2023-11-06 06:34:25" - }, - "https://github.com/Trung0246/ComfyUI-0246": { - "stars": 85, - "last_update": "2024-04-04 02:30:39" - }, - "https://github.com/fexli/fexli-util-node-comfyui": { - "stars": 3, - "last_update": "2024-02-20 09:14:55" - }, - "https://github.com/AbyssYuan0/ComfyUI_BadgerTools": { - "stars": 6, - "last_update": "2024-04-25 05:10:53" - }, - "https://github.com/palant/image-resize-comfyui": { - "stars": 45, - "last_update": "2024-01-18 20:59:55" - }, - "https://github.com/palant/integrated-nodes-comfyui": { - "stars": 29, - "last_update": "2023-12-27 22:52:00" - }, - "https://github.com/palant/extended-saveimage-comfyui": { - "stars": 8, - "last_update": "2024-03-27 14:08:21" - }, - "https://github.com/whmc76/ComfyUI-Openpose-Editor-Plus": { - "stars": 13, - "last_update": "2024-01-06 18:32:07" - }, - "https://github.com/martijnat/comfyui-previewlatent": { - "stars": 28, - "last_update": "2024-02-15 05:52:28" - }, - "https://github.com/banodoco/steerable-motion": { - "stars": 594, - "last_update": "2024-05-09 09:42:02" - }, - "https://github.com/gemell1/ComfyUI_GMIC": { - "stars": 5, - "last_update": "2024-03-25 13:14:16" - }, - "https://github.com/LonicaMewinsky/ComfyUI-MakeFrame": { - "stars": 23, - "last_update": "2023-11-27 14:47:20" - }, - "https://github.com/TheBarret/ZSuite": { - "stars": 6, - "last_update": "2023-12-06 12:47:18" - }, - "https://github.com/romeobuilderotti/ComfyUI-PNG-Metadata": { - "stars": 3, - "last_update": "2024-01-04 17:52:44" - }, - "https://github.com/ka-puna/comfyui-yanc": { - "stars": 5, - "last_update": "2023-12-10 21:29:12" - }, - "https://github.com/Amorano/Jovimetrix": { - "stars": 120, - "last_update": "2024-05-06 04:40:30" - }, - "https://github.com/Umikaze-job/select_folder_path_easy": { - "stars": 4, - "last_update": "2023-11-18 14:59:56" - }, - "https://github.com/Niutonian/ComfyUi-NoodleWebcam": { - "stars": 27, - "last_update": "2023-11-20 11:25:01" - }, - "https://github.com/Feidorian/feidorian-ComfyNodes": { - "stars": 5, - "last_update": "2024-01-03 09:01:58" - }, - "https://github.com/wutipong/ComfyUI-TextUtils": { - "stars": 1, - "last_update": "2023-11-20 21:32:07" - }, - "https://github.com/natto-maki/ComfyUI-NegiTools": { - "stars": 21, - "last_update": "2024-02-02 07:50:01" - }, - "https://github.com/LonicaMewinsky/ComfyUI-RawSaver": { - "stars": 1, - "last_update": "2023-11-21 14:34:54" - }, - "https://github.com/jojkaart/ComfyUI-sampler-lcm-alternative": { - "stars": 88, - "last_update": "2024-04-07 00:30:45" - }, - "https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes": { - "stars": 6, - "last_update": "2023-12-10 01:20:36" - }, - "https://github.com/oyvindg/ComfyUI-TrollSuite": { - "stars": 0, - "last_update": "2023-11-21 01:46:07" - }, - "https://github.com/drago87/ComfyUI_Dragos_Nodes": { - "stars": 3, - "last_update": "2023-11-24 19:04:31" - }, - "https://github.com/ansonkao/comfyui-geometry": { - "stars": 7, - "last_update": "2023-11-30 02:45:49" - }, - "https://github.com/bronkula/comfyui-fitsize": { - "stars": 26, - "last_update": "2023-12-03 12:32:49" - }, - "https://github.com/toyxyz/ComfyUI_toyxyz_test_nodes": { - "stars": 409, - "last_update": "2024-04-27 10:15:08" - }, - "https://github.com/thecooltechguy/ComfyUI-Stable-Video-Diffusion": { - "stars": 266, - "last_update": "2023-11-24 06:14:27" - }, - "https://github.com/thecooltechguy/ComfyUI-ComfyRun": { - "stars": 75, - "last_update": "2023-12-27 18:16:34" - }, - "https://github.com/thecooltechguy/ComfyUI-MagicAnimate": { - "stars": 189, - "last_update": "2024-01-09 19:24:47" - }, - "https://github.com/thecooltechguy/ComfyUI-ComfyWorkflows": { - "stars": 27, - "last_update": "2024-03-11 09:48:04" - }, - "https://github.com/Danand/ComfyUI-ComfyCouple": { - "stars": 16, - "last_update": "2024-05-07 23:06:53" - }, - "https://github.com/42lux/ComfyUI-safety-checker": { - "stars": 15, - "last_update": "2024-03-15 18:39:38" - }, - "https://github.com/sergekatzmann/ComfyUI_Nimbus-Pack": { - "stars": 2, - "last_update": "2024-04-06 15:42:48" - }, - "https://github.com/komojini/ComfyUI_SDXL_DreamBooth_LoRA_CustomNodes": { - "stars": 3, - "last_update": "2023-12-15 23:36:59" - }, - "https://github.com/komojini/komojini-comfyui-nodes": { - "stars": 56, - "last_update": "2024-02-10 14:58:22" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-APISR": { - "stars": 281, - "last_update": "2024-04-17 19:59:18" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Text_Image-Composite": { - "stars": 62, - "last_update": "2024-04-17 20:02:42" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Gemini": { - "stars": 529, - "last_update": "2024-04-17 19:57:55" - }, - "https://github.com/ZHO-ZHO-ZHO/comfyui-portrait-master-zh-cn": { - "stars": 1387, - "last_update": "2024-04-17 19:57:18" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Q-Align": { - "stars": 2, - "last_update": "2024-01-03 15:22:13" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID": { - "stars": 1115, - "last_update": "2024-04-17 20:02:02" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO": { - "stars": 716, - "last_update": "2024-04-17 20:01:40" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-VL-API": { - "stars": 169, - "last_update": "2024-04-17 19:58:21" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-SVD-ZHO": { - "stars": 80, - "last_update": "2024-04-17 20:04:09" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-SegMoE": { - "stars": 71, - "last_update": "2024-04-17 20:03:27" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-YoloWorld-EfficientSAM": { - "stars": 376, - "last_update": "2024-04-30 01:42:11" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PixArt-alpha-Diffusers": { - "stars": 38, - "last_update": "2024-04-17 20:03:46" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-BRIA_AI-RMBG": { - "stars": 491, - "last_update": "2024-04-17 20:00:02" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM": { - "stars": 60, - "last_update": "2024-04-17 20:00:46" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-BiRefNet-ZHO": { - "stars": 106, - "last_update": "2024-04-17 19:59:42" - }, - "https://github.com/kenjiqq/qq-nodes-comfyui": { - "stars": 20, - "last_update": "2024-02-23 01:57:06" - }, - "https://github.com/80sVectorz/ComfyUI-Static-Primitives": { - "stars": 9, - "last_update": "2023-12-11 11:06:16" - }, - "https://github.com/AbdullahAlfaraj/Comfy-Photoshop-SD": { - "stars": 156, - "last_update": "2023-12-12 12:23:04" - }, - "https://github.com/zhuanqianfish/ComfyUI-EasyNode": { - "stars": 54, - "last_update": "2024-04-04 00:20:08" - }, - "https://github.com/discopixel-studio/comfyui-discopixel": { - "stars": 7, - "last_update": "2023-11-30 02:45:49" - }, - "https://github.com/zcfrank1st/Comfyui-Yolov8": { - "stars": 15, - "last_update": "2024-02-25 06:28:49" - }, - "https://github.com/SoftMeng/ComfyUI_Mexx_Styler": { - "stars": 15, - "last_update": "2024-04-06 06:49:01" - }, - "https://github.com/SoftMeng/ComfyUI_Mexx_Poster": { - "stars": 15, - "last_update": "2023-12-05 09:44:42" - }, - "https://github.com/wmatson/easy-comfy-nodes": { - "stars": 10, - "last_update": "2024-04-03 15:31:07" - }, - "https://github.com/DrJKL/ComfyUI-Anchors": { - "stars": 4, - "last_update": "2024-03-20 22:40:29" - }, - "https://github.com/vanillacode314/SimpleWildcardsComfyUI": { - "stars": 3, - "last_update": "2024-04-09 01:57:14" - }, - "https://github.com/WebDev9000/WebDev9000-Nodes": { - "stars": 1, - "last_update": "2023-12-01 02:23:18" - }, - "https://github.com/Scholar01/ComfyUI-Keyframe": { - "stars": 9, - "last_update": "2024-02-01 16:57:40" - }, - "https://github.com/Haoming02/comfyui-diffusion-cg": { - "stars": 41, - "last_update": "2024-05-08 04:00:04" - }, - "https://github.com/Haoming02/comfyui-prompt-format": { - "stars": 27, - "last_update": "2023-12-11 13:44:03" - }, - "https://github.com/Haoming02/comfyui-clear-screen": { - "stars": 1, - "last_update": "2023-12-12 08:16:28" - }, - "https://github.com/Haoming02/comfyui-menu-anchor": { - "stars": 3, - "last_update": "2024-01-26 03:54:55" - }, - "https://github.com/Haoming02/comfyui-tab-handler": { - "stars": 3, - "last_update": "2023-12-14 08:24:49" - }, - "https://github.com/Haoming02/comfyui-floodgate": { - "stars": 24, - "last_update": "2024-01-31 09:08:14" - }, - "https://github.com/bedovyy/ComfyUI_NAIDGenerator": { - "stars": 16, - "last_update": "2024-03-13 09:36:48" - }, - "https://github.com/Off-Live/ComfyUI-off-suite": { - "stars": 0, - "last_update": "2024-04-19 07:13:08" - }, - "https://github.com/ningxiaoxiao/comfyui-NDI": { - "stars": 33, - "last_update": "2024-03-07 02:08:05" - }, - "https://github.com/subtleGradient/TinkerBot-tech-for-ComfyUI-Touchpad": { - "stars": 13, - "last_update": "2024-01-14 20:01:01" - }, - "https://github.com/zcfrank1st/comfyui_visual_anagrams": { - "stars": 5, - "last_update": "2023-12-05 12:31:26" - }, - "https://github.com/Electrofried/ComfyUI-OpenAINode": { - "stars": 16, - "last_update": "2023-12-05 21:34:23" - }, - "https://github.com/AustinMroz/ComfyUI-SpliceTools": { - "stars": 7, - "last_update": "2024-04-21 07:59:14" - }, - "https://github.com/11cafe/comfyui-workspace-manager": { - "stars": 673, - "last_update": "2024-05-07 12:23:21" - }, - "https://github.com/knuknX/ComfyUI-Image-Tools": { - "stars": 2, - "last_update": "2024-01-01 03:30:49" - }, - "https://github.com/jtrue/ComfyUI-JaRue": { - "stars": 6, - "last_update": "2023-12-25 17:55:50" - }, - "https://github.com/filliptm/ComfyUI_Fill-Nodes": { - "stars": 38, - "last_update": "2024-05-07 15:15:45" - }, - "https://github.com/zfkun/ComfyUI_zfkun": { - "stars": 11, - "last_update": "2024-01-21 06:21:35" - }, - "https://github.com/zcfrank1st/Comfyui-Toolbox": { - "stars": 2, - "last_update": "2023-12-13 11:36:14" - }, - "https://github.com/talesofai/comfyui-browser": { - "stars": 372, - "last_update": "2024-05-05 03:46:04" - }, - "https://github.com/yolain/ComfyUI-Easy-Use": { - "stars": 370, - "last_update": "2024-05-09 08:10:17" - }, - "https://github.com/bruefire/ComfyUI-SeqImageLoader": { - "stars": 25, - "last_update": "2024-04-06 18:12:44" - }, - "https://github.com/modusCell/ComfyUI-dimension-node-modusCell": { - "stars": 0, - "last_update": "2023-12-13 21:01:18" - }, - "https://github.com/aria1th/ComfyUI-LogicUtils": { - "stars": 14, - "last_update": "2023-12-24 09:07:07" - }, - "https://github.com/MitoshiroPJ/comfyui_slothful_attention": { - "stars": 5, - "last_update": "2023-12-16 09:10:38" - }, - "https://github.com/brianfitzgerald/style_aligned_comfy": { - "stars": 232, - "last_update": "2024-03-12 03:42:07" - }, - "https://github.com/deroberon/demofusion-comfyui": { - "stars": 80, - "last_update": "2023-12-19 22:54:02" - }, - "https://github.com/deroberon/StableZero123-comfyui": { - "stars": 124, - "last_update": "2024-01-15 10:38:27" - }, - "https://github.com/glifxyz/ComfyUI-GlifNodes": { - "stars": 6, - "last_update": "2024-04-16 16:27:56" - }, - "https://github.com/concarne000/ConCarneNode": { - "stars": 4, - "last_update": "2024-04-02 23:10:42" - }, - "https://github.com/aegis72/aegisflow_utility_nodes": { - "stars": 21, - "last_update": "2024-03-06 14:04:56" - }, - "https://github.com/aegis72/comfyui-styles-all": { - "stars": 23, - "last_update": "2024-04-18 04:30:06" - }, - "https://github.com/glibsonoran/Plush-for-ComfyUI": { - "stars": 93, - "last_update": "2024-04-29 21:57:49" - }, - "https://github.com/vienteck/ComfyUI-Chat-GPT-Integration": { - "stars": 24, - "last_update": "2024-04-10 23:47:22" - }, - "https://github.com/MNeMoNiCuZ/ComfyUI-mnemic-nodes": { - "stars": 17, - "last_update": "2024-05-02 11:13:16" - }, - "https://github.com/AI2lab/comfyUI-tool-2lab": { - "stars": 3, - "last_update": "2024-04-24 09:16:07" - }, - "https://github.com/SpaceKendo/ComfyUI-svd_txt2vid": { - "stars": 6, - "last_update": "2023-12-15 21:07:36" - }, - "https://github.com/NimaNzrii/comfyui-popup_preview": { - "stars": 30, - "last_update": "2024-01-07 12:21:43" - }, - "https://github.com/NimaNzrii/comfyui-photoshop": { - "stars": 65, - "last_update": "2024-05-08 15:13:41" - }, - "https://github.com/rui40000/RUI-Nodes": { - "stars": 13, - "last_update": "2023-12-15 07:37:43" - }, - "https://github.com/dmarx/ComfyUI-Keyframed": { - "stars": 73, - "last_update": "2023-12-30 00:37:20" - }, - "https://github.com/dmarx/ComfyUI-AudioReactive": { - "stars": 10, - "last_update": "2024-01-03 08:27:32" - }, - "https://github.com/TripleHeadedMonkey/ComfyUI_MileHighStyler": { - "stars": 14, - "last_update": "2023-12-16 19:21:57" - }, - "https://github.com/BennyKok/comfyui-deploy": { - "stars": 581, - "last_update": "2024-05-09 06:27:03" - }, - "https://github.com/florestefano1975/comfyui-portrait-master": { - "stars": 690, - "last_update": "2024-05-02 10:01:11" - }, - "https://github.com/florestefano1975/comfyui-prompt-composer": { - "stars": 197, - "last_update": "2024-04-18 16:19:36" - }, - "https://github.com/mozman/ComfyUI_mozman_nodes": { - "stars": 0, - "last_update": "2023-12-18 06:07:50" - }, - "https://github.com/rcsaquino/comfyui-custom-nodes": { - "stars": 1, - "last_update": "2023-12-18 17:18:21" - }, - "https://github.com/rcfcu2000/zhihuige-nodes-comfyui": { - "stars": 0, - "last_update": "2024-01-11 08:41:17" - }, - "https://github.com/IDGallagher/ComfyUI-IG-Nodes": { - "stars": 0, - "last_update": "2024-04-15 15:09:48" - }, - "https://github.com/violet-chen/comfyui-psd2png": { - "stars": 7, - "last_update": "2024-01-18 05:00:49" - }, - "https://github.com/lldacing/comfyui-easyapi-nodes": { - "stars": 19, - "last_update": "2024-05-07 10:11:16" - }, - "https://github.com/CosmicLaca/ComfyUI_Primere_Nodes": { - "stars": 59, - "last_update": "2024-05-01 08:26:32" - }, - "https://github.com/RenderRift/ComfyUI-RenderRiftNodes": { - "stars": 6, - "last_update": "2023-12-31 11:14:29" - }, - "https://github.com/OpenArt-AI/ComfyUI-Assistant": { - "stars": 12, - "last_update": "2024-01-24 21:44:12" - }, - "https://github.com/ttulttul/ComfyUI-Iterative-Mixer": { - "stars": 94, - "last_update": "2024-04-09 00:15:26" - }, - "https://github.com/ttulttul/ComfyUI-Tensor-Operations": { - "stars": 4, - "last_update": "2024-02-07 21:22:45" - }, - "https://github.com/jitcoder/lora-info": { - "stars": 26, - "last_update": "2024-04-30 17:19:25" - }, - "https://github.com/ceruleandeep/ComfyUI-LLaVA-Captioner": { - "stars": 64, - "last_update": "2024-03-04 10:07:53" - }, - "https://github.com/styler00dollar/ComfyUI-sudo-latent-upscale": { - "stars": 21, - "last_update": "2024-05-03 02:53:03" - }, - "https://github.com/styler00dollar/ComfyUI-deepcache": { - "stars": 5, - "last_update": "2023-12-26 17:53:44" - }, - "https://github.com/NotHarroweD/Harronode": { - "stars": 5, - "last_update": "2023-12-31 06:00:14" - }, - "https://github.com/Limitex/ComfyUI-Calculation": { - "stars": 0, - "last_update": "2023-12-27 17:50:16" - }, - "https://github.com/Limitex/ComfyUI-Diffusers": { - "stars": 98, - "last_update": "2024-03-08 11:07:01" - }, - "https://github.com/edenartlab/eden_comfy_pipelines": { - "stars": 32, - "last_update": "2024-04-26 20:32:01" - }, - "https://github.com/pkpkTech/ComfyUI-SaveAVIF": { - "stars": 1, - "last_update": "2023-12-27 01:33:08" - }, - "https://github.com/pkpkTech/ComfyUI-ngrok": { - "stars": 1, - "last_update": "2024-01-23 18:52:25" - }, - "https://github.com/pkpkTech/ComfyUI-TemporaryLoader": { - "stars": 1, - "last_update": "2024-02-10 20:52:21" - }, - "https://github.com/pkpkTech/ComfyUI-SaveQueues": { - "stars": 1, - "last_update": "2024-02-17 14:26:26" - }, - "https://github.com/crystian/ComfyUI-Crystools": { - "stars": 385, - "last_update": "2024-05-04 01:51:37" - }, - "https://github.com/crystian/ComfyUI-Crystools-save": { - "stars": 22, - "last_update": "2024-01-28 14:37:54" - }, - "https://github.com/Kangkang625/ComfyUI-paint-by-example": { - "stars": 13, - "last_update": "2024-01-29 02:37:38" - }, - "https://github.com/54rt1n/ComfyUI-DareMerge": { - "stars": 30, - "last_update": "2024-01-29 23:23:01" - }, - "https://github.com/an90ray/ComfyUI_RErouter_CustomNodes": { - "stars": 0, - "last_update": "2023-12-30 01:42:04" - }, - "https://github.com/jesenzhang/ComfyUI_StreamDiffusion": { - "stars": 95, - "last_update": "2023-12-29 09:41:48" - }, - "https://github.com/ai-liam/comfyui_liam_util": { - "stars": 2, - "last_update": "2023-12-29 04:44:00" - }, - "https://github.com/Ryuukeisyou/comfyui_face_parsing": { - "stars": 27, - "last_update": "2024-02-17 11:00:34" - }, - "https://github.com/tocubed/ComfyUI-AudioReactor": { - "stars": 6, - "last_update": "2024-01-02 07:51:03" - }, - "https://github.com/ntc-ai/ComfyUI-DARE-LoRA-Merge": { - "stars": 19, - "last_update": "2024-01-05 03:38:18" - }, - "https://github.com/wwwins/ComfyUI-Simple-Aspect-Ratio": { - "stars": 1, - "last_update": "2024-01-02 04:07:20" - }, - "https://github.com/ownimage/ComfyUI-ownimage": { - "stars": 0, - "last_update": "2024-01-01 16:36:42" - }, - "https://github.com/Millyarde/Pomfy": { - "stars": 7, - "last_update": "2024-01-13 08:01:42" - }, - "https://github.com/Ryuukeisyou/comfyui_io_helpers": { - "stars": 0, - "last_update": "2024-03-04 13:20:38" - }, - "https://github.com/flowtyone/ComfyUI-Flowty-LDSR": { - "stars": 148, - "last_update": "2024-03-24 19:03:45" - }, - "https://github.com/flowtyone/ComfyUI-Flowty-TripoSR": { - "stars": 324, - "last_update": "2024-03-19 10:49:59" - }, - "https://github.com/flowtyone/ComfyUI-Flowty-CRM": { - "stars": 111, - "last_update": "2024-04-03 23:47:03" - }, - "https://github.com/massao000/ComfyUI_aspect_ratios": { - "stars": 3, - "last_update": "2024-01-05 09:36:52" - }, - "https://github.com/siliconflow/onediff_comfy_nodes": { - "stars": 9, - "last_update": "2024-04-28 08:22:53" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-ArtGallery": { - "stars": 295, - "last_update": "2024-05-07 05:13:49" - }, - "https://github.com/hinablue/ComfyUI_3dPoseEditor": { - "stars": 94, - "last_update": "2024-01-04 14:41:18" - }, - "https://github.com/chaojie/ComfyUI-AniPortrait": { - "stars": 218, - "last_update": "2024-04-02 03:06:43" - }, - "https://github.com/chaojie/ComfyUI-Img2Img-Turbo": { - "stars": 35, - "last_update": "2024-03-27 01:10:14" - }, - "https://github.com/chaojie/ComfyUI-Champ": { - "stars": 17, - "last_update": "2024-04-02 02:46:02" - }, - "https://github.com/chaojie/ComfyUI-Open-Sora": { - "stars": 79, - "last_update": "2024-03-26 05:54:18" - }, - "https://github.com/chaojie/ComfyUI-Trajectory": { - "stars": 5, - "last_update": "2024-03-14 14:41:18" - }, - "https://github.com/chaojie/ComfyUI-dust3r": { - "stars": 13, - "last_update": "2024-04-23 01:47:18" - }, - "https://github.com/chaojie/ComfyUI-Gemma": { - "stars": 5, - "last_update": "2024-02-24 10:02:51" - }, - "https://github.com/chaojie/ComfyUI-DynamiCrafter": { - "stars": 90, - "last_update": "2024-03-16 19:08:28" - }, - "https://github.com/chaojie/ComfyUI-Panda3d": { - "stars": 11, - "last_update": "2024-03-05 06:37:32" - }, - "https://github.com/chaojie/ComfyUI-Pymunk": { - "stars": 16, - "last_update": "2024-01-31 15:36:36" - }, - "https://github.com/chaojie/ComfyUI-MotionCtrl": { - "stars": 119, - "last_update": "2024-01-08 14:18:40" - }, - "https://github.com/chaojie/ComfyUI-Motion-Vector-Extractor": { - "stars": 0, - "last_update": "2024-01-20 16:51:06" - }, - "https://github.com/chaojie/ComfyUI-MotionCtrl-SVD": { - "stars": 75, - "last_update": "2024-01-16 09:41:07" - }, - "https://github.com/chaojie/ComfyUI-DragAnything": { - "stars": 60, - "last_update": "2024-03-19 03:37:48" - }, - "https://github.com/chaojie/ComfyUI-DragNUWA": { - "stars": 346, - "last_update": "2024-03-14 06:56:41" - }, - "https://github.com/chaojie/ComfyUI-Moore-AnimateAnyone": { - "stars": 195, - "last_update": "2024-02-24 13:48:57" - }, - "https://github.com/chaojie/ComfyUI-I2VGEN-XL": { - "stars": 27, - "last_update": "2024-01-19 09:02:08" - }, - "https://github.com/chaojie/ComfyUI-LightGlue": { - "stars": 48, - "last_update": "2024-01-20 16:53:51" - }, - "https://github.com/chaojie/ComfyUI-RAFT": { - "stars": 23, - "last_update": "2024-01-29 08:08:13" - }, - "https://github.com/alexopus/ComfyUI-Image-Saver": { - "stars": 20, - "last_update": "2024-04-19 23:26:02" - }, - "https://github.com/kft334/Knodes": { - "stars": 2, - "last_update": "2024-01-14 04:23:09" - }, - "https://github.com/MrForExample/ComfyUI-3D-Pack": { - "stars": 1447, - "last_update": "2024-04-13 17:45:06" - }, - "https://github.com/MrForExample/ComfyUI-AnimateAnyone-Evolved": { - "stars": 407, - "last_update": "2024-02-02 14:19:37" - }, - "https://github.com/Hangover3832/ComfyUI-Hangover-Nodes": { - "stars": 25, - "last_update": "2024-04-06 11:02:44" - }, - "https://github.com/Hangover3832/ComfyUI-Hangover-Moondream": { - "stars": 32, - "last_update": "2024-05-07 15:00:31" - }, - "https://github.com/Hangover3832/ComfyUI-Hangover-Recognize_Anything": { - "stars": 10, - "last_update": "2024-04-04 11:58:20" - }, - "https://github.com/tzwm/comfyui-profiler": { - "stars": 33, - "last_update": "2024-01-12 07:38:40" - }, - "https://github.com/daniel-lewis-ab/ComfyUI-Llama": { - "stars": 23, - "last_update": "2024-04-02 06:33:08" - }, - "https://github.com/daniel-lewis-ab/ComfyUI-TTS": { - "stars": 10, - "last_update": "2024-04-02 06:32:21" - }, - "https://github.com/djbielejeski/a-person-mask-generator": { - "stars": 197, - "last_update": "2024-02-16 16:26:02" - }, - "https://github.com/smagnetize/kb-comfyui-nodes": { - "stars": 0, - "last_update": "2024-01-06 17:04:40" - }, - "https://github.com/ginlov/segment_to_mask_comfyui": { - "stars": 1, - "last_update": "2024-01-07 14:03:21" - }, - "https://github.com/glowcone/comfyui-base64-to-image": { - "stars": 5, - "last_update": "2024-01-09 08:33:02" - }, - "https://github.com/AInseven/ComfyUI-fastblend": { - "stars": 86, - "last_update": "2024-04-03 11:50:44" - }, - "https://github.com/HebelHuber/comfyui-enhanced-save-node": { - "stars": 0, - "last_update": "2024-01-12 14:34:55" - }, - "https://github.com/LarryJane491/Lora-Training-in-Comfy": { - "stars": 194, - "last_update": "2024-03-03 17:16:51" - }, - "https://github.com/LarryJane491/Image-Captioning-in-ComfyUI": { - "stars": 21, - "last_update": "2024-03-08 19:59:00" - }, - "https://github.com/Layer-norm/comfyui-lama-remover": { - "stars": 43, - "last_update": "2024-01-13 04:58:58" - }, - "https://github.com/Taremin/comfyui-prompt-extranetworks": { - "stars": 2, - "last_update": "2024-01-27 05:51:35" - }, - "https://github.com/Taremin/comfyui-string-tools": { - "stars": 1, - "last_update": "2024-02-16 16:28:32" - }, - "https://github.com/Taremin/webui-monaco-prompt": { - "stars": 24, - "last_update": "2024-01-21 06:45:42" - }, - "https://github.com/foxtrot-roger/comfyui-rf-nodes": { - "stars": 1, - "last_update": "2024-01-26 16:40:43" - }, - "https://github.com/abyz22/image_control": { - "stars": 2, - "last_update": "2024-02-18 23:17:53" - }, - "https://github.com/HAL41/ComfyUI-aichemy-nodes": { - "stars": 4, - "last_update": "2024-01-15 22:25:46" - }, - "https://github.com/nkchocoai/ComfyUI-SizeFromPresets": { - "stars": 3, - "last_update": "2024-04-29 07:53:22" - }, - "https://github.com/nkchocoai/ComfyUI-PromptUtilities": { - "stars": 6, - "last_update": "2024-02-21 14:47:42" - }, - "https://github.com/nkchocoai/ComfyUI-TextOnSegs": { - "stars": 3, - "last_update": "2024-02-12 06:05:47" - }, - "https://github.com/nkchocoai/ComfyUI-SaveImageWithMetaData": { - "stars": 2, - "last_update": "2024-04-16 13:28:45" - }, - "https://github.com/nkchocoai/ComfyUI-Dart": { - "stars": 15, - "last_update": "2024-03-24 07:26:03" - }, - "https://github.com/JaredTherriault/ComfyUI-JNodes": { - "stars": 7, - "last_update": "2024-05-08 03:39:42" - }, - "https://github.com/prozacgod/comfyui-pzc-multiworkspace": { - "stars": 6, - "last_update": "2024-01-16 23:08:26" - }, - "https://github.com/Siberpone/lazy-pony-prompter": { - "stars": 17, - "last_update": "2024-03-30 05:31:25" - }, - "https://github.com/dave-palt/comfyui_DSP_imagehelpers": { - "stars": 0, - "last_update": "2024-01-18 04:59:26" - }, - "https://github.com/Inzaniak/comfyui-ranbooru": { - "stars": 6, - "last_update": "2024-05-01 07:07:42" - }, - "https://github.com/Miosp/ComfyUI-FBCNN": { - "stars": 3, - "last_update": "2024-01-19 21:30:27" - }, - "https://github.com/JcandZero/ComfyUI_GLM4Node": { - "stars": 22, - "last_update": "2024-02-21 01:48:08" - }, - "https://github.com/darkpixel/darkprompts": { - "stars": 4, - "last_update": "2024-04-15 16:40:05" - }, - "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus": { - "stars": 134, - "last_update": "2024-04-17 09:02:51" - }, - "https://github.com/QaisMalkawi/ComfyUI-QaisHelper": { - "stars": 2, - "last_update": "2024-01-22 10:39:27" - }, - "https://github.com/longgui0318/comfyui-mask-util": { - "stars": 4, - "last_update": "2024-04-25 17:36:58" - }, - "https://github.com/longgui0318/comfyui-llm-assistant": { - "stars": 5, - "last_update": "2024-05-06 01:34:45" - }, - "https://github.com/longgui0318/comfyui-oms-diffusion": { - "stars": 15, - "last_update": "2024-04-28 03:29:42" - }, - "https://github.com/DimaChaichan/LAizypainter-Exporter-ComfyUI": { - "stars": 7, - "last_update": "2024-02-08 13:57:21" - }, - "https://github.com/adriflex/ComfyUI_Blender_Texdiff": { - "stars": 1, - "last_update": "2024-01-26 10:25:05" - }, - "https://github.com/Shraknard/ComfyUI-Remover": { - "stars": 4, - "last_update": "2024-01-23 23:14:23" - }, - "https://github.com/FlyingFireCo/tiled_ksampler": { - "stars": 56, - "last_update": "2023-08-13 23:05:26" - }, - "https://github.com/Nlar/ComfyUI_CartoonSegmentation": { - "stars": 8, - "last_update": "2024-01-25 23:17:51" - }, - "https://github.com/godspede/ComfyUI_Substring": { - "stars": 0, - "last_update": "2024-01-26 06:28:40" - }, - "https://github.com/gokayfem/ComfyUI_VLM_nodes": { - "stars": 208, - "last_update": "2024-04-23 23:50:30" - }, - "https://github.com/gokayfem/ComfyUI-Dream-Interpreter": { - "stars": 59, - "last_update": "2024-04-03 23:51:44" - }, - "https://github.com/gokayfem/ComfyUI-Depth-Visualization": { - "stars": 45, - "last_update": "2024-03-24 04:03:08" - }, - "https://github.com/gokayfem/ComfyUI-Texture-Simple": { - "stars": 28, - "last_update": "2024-03-24 22:20:21" - }, - "https://github.com/Hiero207/ComfyUI-Hiero-Nodes": { - "stars": 1, - "last_update": "2024-04-04 05:12:57" - }, - "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes": { - "stars": 1, - "last_update": "2024-01-26 08:38:39" - }, - "https://github.com/yuvraj108c/ComfyUI-Whisper": { - "stars": 35, - "last_update": "2024-02-05 08:32:57" - }, - "https://github.com/blepping/ComfyUI-bleh": { - "stars": 26, - "last_update": "2024-05-07 19:26:33" - }, - "https://github.com/blepping/ComfyUI-sonar": { - "stars": 25, - "last_update": "2024-05-06 22:51:23" - }, - "https://github.com/JerryOrbachJr/ComfyUI-RandomSize": { - "stars": 2, - "last_update": "2024-02-14 20:36:01" - }, - "https://github.com/jamal-alkharrat/ComfyUI_rotate_image": { - "stars": 0, - "last_update": "2024-01-27 15:25:00" - }, - "https://github.com/mape/ComfyUI-mape-Helpers": { - "stars": 101, - "last_update": "2024-02-07 16:58:47" - }, - "https://github.com/zhongpei/Comfyui_image2prompt": { - "stars": 193, - "last_update": "2024-04-29 02:19:11" - }, - "https://github.com/zhongpei/ComfyUI-InstructIR": { - "stars": 56, - "last_update": "2024-02-01 06:40:40" - }, - "https://github.com/Loewen-Hob/rembg-comfyui-node-better": { - "stars": 25, - "last_update": "2024-01-29 16:03:36" - }, - "https://github.com/HaydenReeve/ComfyUI-Better-Strings": { - "stars": 0, - "last_update": "2024-04-04 17:27:11" - }, - "https://github.com/StartHua/ComfyUI_Seg_VITON": { - "stars": 149, - "last_update": "2024-05-04 14:01:04" - }, - "https://github.com/StartHua/Comfyui_joytag": { - "stars": 9, - "last_update": "2024-02-12 04:13:41" - }, - "https://github.com/StartHua/Comfyui_segformer_b2_clothes": { - "stars": 27, - "last_update": "2024-04-30 09:42:27" - }, - "https://github.com/StartHua/ComfyUI_OOTDiffusion_CXH": { - "stars": 84, - "last_update": "2024-03-04 09:33:57" - }, - "https://github.com/ricklove/comfyui-ricklove": { - "stars": 0, - "last_update": "2024-02-01 02:50:59" - }, - "https://github.com/nosiu/comfyui-instantId-faceswap": { - "stars": 151, - "last_update": "2024-02-25 13:58:50" - }, - "https://github.com/LyazS/comfyui-anime-seg": { - "stars": 4, - "last_update": "2024-04-16 08:27:12" - }, - "https://github.com/Chan-0312/ComfyUI-IPAnimate": { - "stars": 58, - "last_update": "2024-02-01 09:17:58" - }, - "https://github.com/Chan-0312/ComfyUI-EasyDeforum": { - "stars": 6, - "last_update": "2024-03-14 02:14:56" - }, - "https://github.com/trumanwong/ComfyUI-NSFW-Detection": { - "stars": 10, - "last_update": "2024-02-04 08:49:11" - }, - "https://github.com/TemryL/ComfyS3": { - "stars": 10, - "last_update": "2024-02-08 16:59:15" - }, - "https://github.com/yffyhk/comfyui_auto_danbooru": { - "stars": 0, - "last_update": "2024-02-04 08:09:57" - }, - "https://github.com/dfl/comfyui-clip-with-break": { - "stars": 7, - "last_update": "2024-02-05 17:48:33" - }, - "https://github.com/dfl/comfyui-tcd-scheduler": { - "stars": 71, - "last_update": "2024-04-08 20:15:29" - }, - "https://github.com/MarkoCa1/ComfyUI_Segment_Mask": { - "stars": 11, - "last_update": "2024-04-20 07:29:00" - }, - "https://github.com/antrobot1234/antrobots-comfyUI-nodepack": { - "stars": 8, - "last_update": "2024-03-06 22:34:12" - }, - "https://github.com/bilal-arikan/ComfyUI_TextAssets": { - "stars": 2, - "last_update": "2024-02-06 00:30:11" - }, - "https://github.com/kadirnar/ComfyUI-Transformers": { - "stars": 14, - "last_update": "2024-02-06 15:43:43" - }, - "https://github.com/digitaljohn/comfyui-propost": { - "stars": 96, - "last_update": "2024-02-11 10:08:19" - }, - "https://github.com/DonBaronFactory/ComfyUI-Cre8it-Nodes": { - "stars": 0, - "last_update": "2024-02-25 12:35:13" - }, - "https://github.com/XmYx/deforum-comfy-nodes": { - "stars": 90, - "last_update": "2024-04-11 00:45:00" - }, - "https://github.com/adbrasi/ComfyUI-TrashNodes-DownloadHuggingface": { - "stars": 4, - "last_update": "2024-02-08 21:25:17" - }, - "https://github.com/mbrostami/ComfyUI-HF": { - "stars": 8, - "last_update": "2024-02-11 00:03:26" - }, - "https://github.com/Billius-AI/ComfyUI-Path-Helper": { - "stars": 11, - "last_update": "2024-02-26 10:48:42" - }, - "https://github.com/Franck-Demongin/NX_PromptStyler": { - "stars": 4, - "last_update": "2024-02-19 10:14:56" - }, - "https://github.com/xiaoxiaodesha/hd_node": { - "stars": 7, - "last_update": "2024-02-18 05:23:57" - }, - "https://github.com/ShmuelRonen/ComfyUI-SVDResizer": { - "stars": 1, - "last_update": "2024-03-08 15:16:10" - }, - "https://github.com/redhottensors/ComfyUI-Prediction": { - "stars": 8, - "last_update": "2024-04-06 02:11:59" - }, - "https://github.com/Mamaaaamooooo/batchImg-rembg-ComfyUI-nodes": { - "stars": 11, - "last_update": "2024-04-02 12:00:48" - }, - "https://github.com/jordoh/ComfyUI-Deepface": { - "stars": 9, - "last_update": "2024-03-23 14:37:34" - }, - "https://github.com/yuvraj108c/ComfyUI-Pronodes": { - "stars": 0, - "last_update": "2024-03-22 18:22:13" - }, - "https://github.com/yuvraj108c/ComfyUI-Vsgan": { - "stars": 2, - "last_update": "2024-03-08 10:11:28" - }, - "https://github.com/mirabarukaso/ComfyUI_Mira": { - "stars": 13, - "last_update": "2024-05-06 14:57:16" + "stars": 246, + "last_update": "2023-11-11 21:24:33", + "author_account_age_days": 526 }, "https://github.com/1038lab/ComfyUI-GPT2P": { "stars": 3, - "last_update": "2024-02-21 04:45:27" + "last_update": "2024-06-10 16:56:29", + "author_account_age_days": 447 }, - "https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes": { - "stars": 7, - "last_update": "2024-04-05 05:11:51" - }, - "https://github.com/klinter007/klinter_nodes": { - "stars": 3, - "last_update": "2024-05-02 14:41:48" - }, - "https://github.com/Ludobico/ComfyUI-ScenarioPrompt": { - "stars": 12, - "last_update": "2024-03-26 01:28:07" - }, - "https://github.com/logtd/ComfyUI-InstanceDiffusion": { - "stars": 61, - "last_update": "2024-05-06 22:03:06" - }, - "https://github.com/logtd/ComfyUI-TrackingNodes": { - "stars": 9, - "last_update": "2024-02-24 04:43:16" - }, - "https://github.com/logtd/ComfyUI-InversedNoise": { - "stars": 5, - "last_update": "2024-03-31 19:11:53" - }, - "https://github.com/logtd/ComfyUI-RefSampling": { - "stars": 4, - "last_update": "2024-03-31 02:11:14" - }, - "https://github.com/logtd/ComfyUI-FLATTEN": { - "stars": 56, - "last_update": "2024-04-10 01:46:26" - }, - "https://github.com/Big-Idea-Technology/ComfyUI_Image_Text_Overlay": { - "stars": 5, - "last_update": "2024-04-19 14:21:28" - }, - "https://github.com/Big-Idea-Technology/ComfyUI_LLM_Node": { - "stars": 42, - "last_update": "2024-04-30 12:39:17" - }, - "https://github.com/Guillaume-Fgt/ComfyUI_StableCascadeLatentRatio": { - "stars": 3, - "last_update": "2024-02-26 09:37:16" - }, - "https://github.com/AuroBit/ComfyUI-OOTDiffusion": { - "stars": 299, - "last_update": "2024-03-26 02:44:57" - }, - "https://github.com/AuroBit/ComfyUI-AnimateAnyone-reproduction": { - "stars": 34, - "last_update": "2024-02-29 10:19:36" - }, - "https://github.com/czcz1024/Comfyui-FaceCompare": { - "stars": 0, - "last_update": "2024-02-23 09:08:32" - }, - "https://github.com/TheBill2001/comfyui-upscale-by-model": { - "stars": 0, - "last_update": "2024-02-24 00:49:19" - }, - "https://github.com/leoleelxh/ComfyUI-LLMs": { - "stars": 6, - "last_update": "2024-03-07 07:34:10" - }, - "https://github.com/hughescr/ComfyUI-OpenPose-Keypoint-Extractor": { - "stars": 6, - "last_update": "2024-02-24 21:41:24" - }, - "https://github.com/jkrauss82/ultools-comfyui": { - "stars": 4, - "last_update": "2024-03-31 08:27:34" - }, - "https://github.com/hiforce/comfyui-hiforce-plugin": { - "stars": 2, - "last_update": "2024-02-29 09:35:31" - }, - "https://github.com/RomanKuschanow/ComfyUI-Advanced-Latent-Control": { - "stars": 15, - "last_update": "2024-05-05 09:22:26" - }, - "https://github.com/guill/abracadabra-comfyui": { - "stars": 1, - "last_update": "2024-02-26 04:25:21" - }, - "https://github.com/cerspense/ComfyUI_cspnodes": { - "stars": 24, - "last_update": "2024-05-05 04:56:48" - }, - "https://github.com/qwixiwp/queuetools": { - "stars": 0, - "last_update": "2024-02-26 19:21:00" - }, - "https://github.com/Chan-0312/ComfyUI-Prompt-Preview": { - "stars": 13, - "last_update": "2024-02-27 11:30:38" - }, - "https://github.com/Munkyfoot/ComfyUI-TextOverlay": { - "stars": 0, - "last_update": "2024-02-27 22:56:42" - }, - "https://github.com/holchan/ComfyUI-ModelDownloader": { - "stars": 2, - "last_update": "2024-03-02 05:43:41" - }, - "https://github.com/Alysondao/Comfyui-Yolov8-JSON": { - "stars": 9, - "last_update": "2024-04-16 08:29:55" - }, - "https://github.com/CC-BryanOttho/ComfyUI_API_Manager": { - "stars": 6, - "last_update": "2024-02-27 23:31:45" - }, - "https://github.com/maracman/ComfyUI-SubjectStyle-CSV": { - "stars": 3, - "last_update": "2024-02-29 19:40:01" - }, - "https://github.com/438443467/ComfyUI-GPT4V-Image-Captioner": { - "stars": 15, - "last_update": "2024-05-09 08:47:13" - }, - "https://github.com/uetuluk/comfyui-webcam-node": { - "stars": 1, - "last_update": "2024-03-01 07:25:27" - }, - "https://github.com/huchenlei/ComfyUI-layerdiffuse": { - "stars": 1132, - "last_update": "2024-03-09 21:16:31" - }, - "https://github.com/huchenlei/ComfyUI_DanTagGen": { - "stars": 46, - "last_update": "2024-04-28 15:36:22" - }, - "https://github.com/nathannlu/ComfyUI-Pets": { - "stars": 33, - "last_update": "2024-03-31 23:55:42" - }, - "https://github.com/nathannlu/ComfyUI-Cloud": { - "stars": 118, - "last_update": "2024-04-03 00:59:21" + "https://github.com/11cafe/comfyui-workspace-manager": { + "stars": 775, + "last_update": "2024-06-18 17:20:37", + "author_account_age_days": 199 }, "https://github.com/11dogzi/Comfyui-ergouzi-Nodes": { - "stars": 10, - "last_update": "2024-03-12 02:03:09" - }, - "https://github.com/BXYMartin/ComfyUI-InstantIDUtils": { - "stars": 3, - "last_update": "2024-03-04 16:42:02" - }, - "https://github.com/cdb-boop/comfyui-image-round": { - "stars": 0, - "last_update": "2024-03-07 07:35:43" - }, - "https://github.com/cdb-boop/ComfyUI-Bringing-Old-Photos-Back-to-Life": { - "stars": 13, - "last_update": "2024-04-18 18:49:15" - }, - "https://github.com/atmaranto/ComfyUI-SaveAsScript": { "stars": 17, - "last_update": "2024-05-04 11:12:35" + "last_update": "2024-05-23 00:08:39", + "author_account_age_days": 120 }, - "https://github.com/meshmesh-io/mm-comfyui-megamask": { - "stars": 0, - "last_update": "2024-03-07 23:59:12" - }, - "https://github.com/meshmesh-io/mm-comfyui-loopback": { - "stars": 1, - "last_update": "2024-03-07 19:46:37" - }, - "https://github.com/meshmesh-io/ComfyUI-MeshMesh": { - "stars": 0, - "last_update": "2024-03-12 17:19:32" - }, - "https://github.com/cozymantis/human-parser-comfyui-node": { - "stars": 34, - "last_update": "2024-04-02 20:04:32" - }, - "https://github.com/cozymantis/pose-generator-comfyui-node": { - "stars": 17, - "last_update": "2024-04-30 17:40:24" - }, - "https://github.com/cozymantis/cozy-utils-comfyui-nodes": { - "stars": 3, - "last_update": "2024-03-13 11:25:27" - }, - "https://github.com/vivax3794/ComfyUI-Vivax-Nodes": { - "stars": 3, - "last_update": "2024-03-17 22:02:48" - }, - "https://github.com/victorchall/comfyui_webcamcapture": { - "stars": 2, - "last_update": "2024-03-06 18:33:39" - }, - "https://github.com/ljleb/comfy-mecha": { - "stars": 4, - "last_update": "2024-03-24 21:52:17" - }, - "https://github.com/diStyApps/ComfyUI_FrameMaker": { - "stars": 9, - "last_update": "2024-03-08 09:19:43" - }, - "https://github.com/hackkhai/ComfyUI-Image-Matting": { - "stars": 8, - "last_update": "2024-03-09 06:30:39" - }, - "https://github.com/Pos13/comfyui-cyclist": { + "https://github.com/11dogzi/Comfyui-ergouzi-samplers": { "stars": 15, - "last_update": "2024-04-20 04:13:22" - }, - "https://github.com/ExponentialML/ComfyUI_ModelScopeT2V": { - "stars": 26, - "last_update": "2024-03-09 00:02:47" - }, - "https://github.com/ExponentialML/ComfyUI_Native_DynamiCrafter": { - "stars": 78, - "last_update": "2024-04-02 23:29:14" - }, - "https://github.com/ExponentialML/ComfyUI_VisualStylePrompting": { - "stars": 237, - "last_update": "2024-04-17 22:30:10" - }, - "https://github.com/angeloshredder/StableCascadeResizer": { - "stars": 0, - "last_update": "2024-03-08 22:53:27" - }, - "https://github.com/stavsap/comfyui-ollama": { - "stars": 123, - "last_update": "2024-04-07 20:49:11" - }, - "https://github.com/dchatel/comfyui_facetools": { - "stars": 35, - "last_update": "2024-04-06 11:45:55" - }, - "https://github.com/prodogape/ComfyUI-Minio": { - "stars": 1, - "last_update": "2024-03-09 07:44:51" - }, - "https://github.com/AIGCTeam/ComfyUI_kkTranslator_nodes": { - "stars": 2, - "last_update": "2024-02-22 08:30:33" - }, - "https://github.com/vsevolod-oparin/comfyui-kandinsky22": { - "stars": 5, - "last_update": "2024-03-17 00:05:27" - }, - "https://github.com/Xyem/Xycuno-Oobabooga": { - "stars": 1, - "last_update": "2024-03-12 19:50:18" - }, - "https://github.com/shi3z/ComfyUI_Memeplex_DALLE": { - "stars": 2, - "last_update": "2024-03-13 08:26:09" - }, - "https://github.com/if-ai/ComfyUI-IF_AI_tools": { - "stars": 231, - "last_update": "2024-04-27 09:27:21" - }, - "https://github.com/dmMaze/sketch2manga": { - "stars": 22, - "last_update": "2024-03-14 05:44:16" - }, - "https://github.com/olduvai-jp/ComfyUI-HfLoader": { - "stars": 1, - "last_update": "2024-03-18 04:57:05" - }, - "https://github.com/AiMiDi/ComfyUI-Aimidi-nodes": { - "stars": 0, - "last_update": "2024-03-31 14:14:24" - }, - "https://github.com/ForeignGods/ComfyUI-Mana-Nodes": { - "stars": 160, - "last_update": "2024-04-28 17:33:13" - }, - "https://github.com/madtunebk/ComfyUI-ControlnetAux": { - "stars": 7, - "last_update": "2024-03-16 13:52:32" - }, - "https://github.com/MarkoCa1/ComfyUI-Text": { - "stars": 2, - "last_update": "2024-03-16 06:25:38" - }, - "https://github.com/Shadetail/ComfyUI_Eagleshadow": { - "stars": 0, - "last_update": "2024-04-02 18:09:01" - }, - "https://github.com/ArdeniusAI/CPlus_Ardenius": { - "stars": 0, - "last_update": "2024-03-28 02:21:05" - }, - "https://github.com/Jannchie/ComfyUI-J": { - "stars": 57, - "last_update": "2024-05-08 11:12:17" - }, - "https://github.com/daxcay/ComfyUI-JDCN": { - "stars": 30, - "last_update": "2024-05-06 17:30:27" - }, - "https://github.com/Seedsa/Fooocus_Nodes": { - "stars": 23, - "last_update": "2024-04-13 12:38:56" - }, - "https://github.com/zhangp365/ComfyUI-utils-nodes": { - "stars": 3, - "last_update": "2024-05-09 03:34:19" - }, - "https://github.com/ratulrafsan/Comfyui-SAL-VTON": { - "stars": 38, - "last_update": "2024-03-22 04:31:59" - }, - "https://github.com/Nevysha/ComfyUI-nevysha-top-menu": { - "stars": 4, - "last_update": "2024-03-23 10:48:36" - }, - "https://github.com/alisson-anjos/ComfyUI-LLaVA-Describer": { - "stars": 14, - "last_update": "2024-03-31 15:13:33" - }, - "https://github.com/chaosaiart/Chaosaiart-Nodes": { - "stars": 33, - "last_update": "2024-05-08 13:08:57" - }, - "https://github.com/viperyl/ComfyUI-BiRefNet": { - "stars": 138, - "last_update": "2024-03-25 11:02:49" - }, - "https://github.com/SuperBeastsAI/ComfyUI-SuperBeasts": { - "stars": 78, - "last_update": "2024-05-08 00:32:31" - }, - "https://github.com/IKHOR/ComfyUI-IKHOR-Jam-Nodes": { - "stars": 0, - "last_update": "2024-03-26 16:55:10" - }, - "https://github.com/yuvraj108c/ComfyUI-Depth-Anything-Tensorrt": { - "stars": 44, - "last_update": "2024-05-08 05:12:25" - }, - "https://github.com/hay86/ComfyUI_Dreamtalk": { - "stars": 5, - "last_update": "2024-04-12 09:13:05" - }, - "https://github.com/shinich39/comfyui-load-image-39": { - "stars": 2, - "last_update": "2024-04-27 11:46:50" - }, - "https://github.com/shinich39/comfyui-ramdom-node-39": { - "stars": 2, - "last_update": "2024-04-26 23:38:27" - }, - "https://github.com/wei30172/comfygen": { - "stars": 3, - "last_update": "2024-04-06 16:22:09" - }, - "https://github.com/zombieyang/sd-ppp": { - "stars": 5, - "last_update": "2024-05-08 12:41:53" - }, - "https://github.com/KytraScript/ComfyUI_KytraWebhookHTTP": { - "stars": 3, - "last_update": "2024-03-29 06:08:53" + "last_update": "2024-06-17 11:44:41", + "author_account_age_days": 120 }, "https://github.com/1mckw/Comfyui-Gelbooru": { "stars": 2, - "last_update": "2024-05-07 08:02:12" + "last_update": "2024-05-27 07:45:00", + "author_account_age_days": 685 }, - "https://github.com/NeuralSamurAI/Comfyui-Superprompt-Unofficial": { - "stars": 46, - "last_update": "2024-03-30 22:07:58" + "https://github.com/42lux/ComfyUI-safety-checker": { + "stars": 18, + "last_update": "2024-05-22 22:11:59", + "author_account_age_days": 3693 }, - "https://github.com/MokkaBoss1/ComfyUI_Mokkaboss1": { - "stars": 9, - "last_update": "2024-05-07 17:29:34" + "https://github.com/438443467/ComfyUI-GPT4V-Image-Captioner": { + "stars": 18, + "last_update": "2024-06-13 05:51:56", + "author_account_age_days": 409 }, - "https://github.com/jiaxiangc/ComfyUI-ResAdapter": { - "stars": 257, - "last_update": "2024-04-06 09:25:46" - }, - "https://github.com/ParisNeo/lollms_nodes_suite": { - "stars": 9, - "last_update": "2024-04-15 00:17:38" - }, - "https://github.com/IsItDanOrAi/ComfyUI-Stereopsis": { - "stars": 2, - "last_update": "2024-03-20 21:56:10" - }, - "https://github.com/frankchieng/ComfyUI_Aniportrait": { - "stars": 29, - "last_update": "2024-04-22 05:53:26" - }, - "https://github.com/BlakeOne/ComfyUI-SchedulerMixer": { - "stars": 9, - "last_update": "2024-04-21 17:12:56" - }, - "https://github.com/kale4eat/ComfyUI-path-util": { - "stars": 0, - "last_update": "2024-04-01 01:33:56" - }, - "https://github.com/kale4eat/ComfyUI-string-util": { - "stars": 0, - "last_update": "2024-04-01 01:33:13" - }, - "https://github.com/kale4eat/ComfyUI-text-file-util": { - "stars": 0, - "last_update": "2024-04-01 01:32:04" - }, - "https://github.com/kijai/ComfyUI-APISR": { - "stars": 51, - "last_update": "2024-04-19 16:38:57" - }, - "https://github.com/DrMWeigand/ComfyUI_ColorImageDetection": { - "stars": 0, - "last_update": "2024-04-01 10:47:39" - }, - "https://github.com/comfyanonymous/ComfyUI": { - "stars": 34372, - "last_update": "2024-05-09 09:38:01" - }, - "https://github.com/chaojie/ComfyUI-MuseV": { - "stars": 96, - "last_update": "2024-04-04 02:07:29" - }, - "https://github.com/kijai/ComfyUI-DiffusionLight": { - "stars": 45, - "last_update": "2024-04-02 19:18:34" - }, - "https://github.com/BlakeOne/ComfyUI-CustomScheduler": { - "stars": 8, - "last_update": "2024-04-21 17:11:38" - }, - "https://github.com/bobmagicii/comfykit-custom-nodes": { - "stars": 0, - "last_update": "2024-04-04 16:39:56" - }, - "https://github.com/chaojie/ComfyUI-MuseTalk": { - "stars": 85, - "last_update": "2024-04-05 15:26:14" - }, - "https://github.com/bvhari/ComfyUI_SUNoise": { - "stars": 3, - "last_update": "2024-05-07 15:20:05" - }, - "https://github.com/TJ16th/comfyUI_TJ_NormalLighting": { - "stars": 119, - "last_update": "2024-04-07 12:46:36" - }, - "https://github.com/SoftMeng/ComfyUI_ImageToText": { - "stars": 3, - "last_update": "2024-04-07 07:27:14" - }, - "https://github.com/AppleBotzz/ComfyUI_LLMVISION": { + "https://github.com/54rt1n/ComfyUI-DareMerge": { "stars": 41, - "last_update": "2024-04-05 23:55:41" + "last_update": "2024-05-22 22:20:39", + "author_account_age_days": 4045 }, - "https://github.com/A4P7J1N7M05OT/ComfyUI-PixelOE": { - "stars": 5, - "last_update": "2024-04-20 18:40:33" - }, - "https://github.com/SLAPaper/ComfyUI-dpmpp_2m_alt-Sampler": { - "stars": 3, - "last_update": "2024-04-25 07:58:30" - }, - "https://github.com/yuvraj108c/ComfyUI-PiperTTS": { - "stars": 23, - "last_update": "2024-04-06 17:16:28" - }, - "https://github.com/nickve28/ComfyUI-Nich-Utils": { - "stars": 6, - "last_update": "2024-04-21 09:13:50" - }, - "https://github.com/al-swaiti/ComfyUI-CascadeResolutions": { - "stars": 1, - "last_update": "2024-04-06 16:48:55" - }, - "https://github.com/ronniebasak/ComfyUI-Tara-LLM-Integration": { - "stars": 56, - "last_update": "2024-05-09 06:26:16" - }, - "https://github.com/hay86/ComfyUI_AceNodes": { - "stars": 4, - "last_update": "2024-04-26 07:00:44" - }, - "https://github.com/liusida/ComfyUI-Debug": { - "stars": 5, - "last_update": "2024-04-07 11:33:02" - }, - "https://github.com/jtydhr88/ComfyUI-Workflow-Encrypt": { - "stars": 7, - "last_update": "2024-04-07 02:47:17" - }, - "https://github.com/Zuellni/ComfyUI-ExLlama-Nodes": { - "stars": 85, - "last_update": "2024-05-04 07:13:01" - }, - "https://github.com/chaojie/ComfyUI-Open-Sora-Plan": { - "stars": 45, - "last_update": "2024-04-23 08:01:58" - }, - "https://github.com/SeaArtLab/ComfyUI-Long-CLIP": { - "stars": 39, - "last_update": "2024-04-29 02:27:15" - }, - "https://github.com/tsogzark/ComfyUI-load-image-from-url": { - "stars": 3, - "last_update": "2024-04-16 09:07:22" - }, - "https://github.com/discus0434/comfyui-caching-embeddings": { - "stars": 1, - "last_update": "2024-04-09 03:52:05" - }, - "https://github.com/abdozmantar/ComfyUI-InstaSwap": { - "stars": 38, - "last_update": "2024-05-07 01:04:48" - }, - "https://github.com/chaojie/ComfyUI_StreamingT2V": { - "stars": 20, - "last_update": "2024-04-16 01:07:14" - }, - "https://github.com/AIFSH/ComfyUI-UVR5": { - "stars": 44, - "last_update": "2024-05-07 06:26:35" - }, - "https://github.com/CapsAdmin/ComfyUI-Euler-Smea-Dyn-Sampler": { + "https://github.com/80sVectorz/ComfyUI-Static-Primitives": { "stars": 10, - "last_update": "2024-04-11 06:02:15" - }, - "https://github.com/sdfxai/SDFXBridgeForComfyUI": { - "stars": 2, - "last_update": "2024-04-12 14:09:45" - }, - "https://github.com/smthemex/ComfyUI_ChatGLM_API": { - "stars": 12, - "last_update": "2024-04-27 11:43:52" - }, - "https://github.com/kijai/ComfyUI-ELLA-wrapper": { - "stars": 94, - "last_update": "2024-04-26 06:41:56" - }, - "https://github.com/ExponentialML/ComfyUI_ELLA": { - "stars": 149, - "last_update": "2024-04-27 19:12:14" - }, - "https://github.com/choey/Comfy-Topaz": { - "stars": 13, - "last_update": "2024-04-10 09:05:18" - }, - "https://github.com/ALatentPlace/ComfyUI_yanc": { - "stars": 4, - "last_update": "2024-05-04 11:27:41" - }, - "https://github.com/kijai/ComfyUI-LaVi-Bridge-Wrapper": { - "stars": 16, - "last_update": "2024-04-11 15:56:49" - }, - "https://github.com/logtd/ComfyUI-RAVE_ATTN": { - "stars": 8, - "last_update": "2024-04-10 22:20:21" - }, - "https://github.com/BlakeOne/ComfyUI-NodePresets": { - "stars": 11, - "last_update": "2024-04-21 17:11:04" - }, - "https://github.com/AIFSH/ComfyUI-IP_LAP": { - "stars": 19, - "last_update": "2024-04-30 01:42:53" - }, - "https://github.com/Wicloz/ComfyUI-Simply-Nodes": { - "stars": 1, - "last_update": "2024-04-11 01:32:57" - }, - "https://github.com/wandbrandon/comfyui-pixel": { - "stars": 3, - "last_update": "2024-04-10 22:23:36" - }, - "https://github.com/kale4eat/ComfyUI-speech-dataset-toolkit": { - "stars": 5, - "last_update": "2024-04-25 06:50:39" - }, - "https://github.com/nullquant/ComfyUI-BrushNet": { - "stars": 169, - "last_update": "2024-05-07 16:52:13" - }, - "https://github.com/Koishi-Star/Euler-Smea-Dyn-Sampler": { - "stars": 119, - "last_update": "2024-05-09 05:08:42" - }, - "https://github.com/pamparamm/sd-perturbed-attention": { - "stars": 147, - "last_update": "2024-05-07 21:47:49" - }, - "https://github.com/kijai/ComfyUI-BrushNet-Wrapper": { - "stars": 88, - "last_update": "2024-05-01 16:10:34" - }, - "https://github.com/unwdef/unwdef-nodes-comfyui": { - "stars": 1, - "last_update": "2024-04-15 19:32:36" - }, - "https://github.com/smthemex/ComfyUI_ParlerTTS": { - "stars": 11, - "last_update": "2024-04-24 11:48:21" - }, - "https://github.com/aburahamu/ComfyUI-RequestsPoster": { - "stars": 1, - "last_update": "2024-04-21 02:35:06" - }, - "https://github.com/AIFSH/ComfyUI-GPT_SoVITS": { - "stars": 115, - "last_update": "2024-05-09 03:19:04" - }, - "https://github.com/royceschultz/ComfyUI-TranscriptionTools": { - "stars": 10, - "last_update": "2024-04-22 03:51:58" - }, - "https://github.com/BlakeOne/ComfyUI-NodeDefaults": { - "stars": 1, - "last_update": "2024-04-21 17:10:35" - }, - "https://github.com/liusida/ComfyUI-Login": { - "stars": 19, - "last_update": "2024-05-05 12:36:24" - }, - "https://github.com/Sorcerio/MBM-Music-Visualizer": { - "stars": 10, - "last_update": "2024-04-19 23:35:24" - }, - "https://github.com/traugdor/ComfyUI-quadMoons-nodes": { - "stars": 6, - "last_update": "2024-04-20 01:40:50" - }, - "https://github.com/e7mac/ComfyUI-ShadertoyGL": { - "stars": 2, - "last_update": "2024-04-13 22:29:24" - }, - "https://github.com/turkyden/ComfyUI-Sticker": { - "stars": 0, - "last_update": "2024-04-16 10:00:26" - }, - "https://github.com/kunieone/ComfyUI_alkaid": { - "stars": 0, - "last_update": "2024-04-15 07:49:55" - }, - "https://github.com/jtydhr88/ComfyUI-InstantMesh": { - "stars": 106, - "last_update": "2024-04-17 03:15:10" - }, - "https://github.com/txt2any/ComfyUI-PromptOrganizer": { - "stars": 0, - "last_update": "2024-04-15 21:14:54" - }, - "https://github.com/kealiu/ComfyUI-S3-Tools": { - "stars": 0, - "last_update": "2024-04-14 12:45:49" - }, - "https://github.com/chaojie/ComfyUI-EasyAnimate": { - "stars": 34, - "last_update": "2024-04-16 14:45:13" - }, - "https://github.com/hay86/ComfyUI_OpenVoice": { - "stars": 1, - "last_update": "2024-04-18 12:35:11" - }, - "https://github.com/hay86/ComfyUI_DDColor": { - "stars": 1, - "last_update": "2024-04-17 14:38:22" - }, - "https://github.com/forever22777/comfyui-self-guidance": { - "stars": 4, - "last_update": "2024-04-22 06:40:09" - }, - "https://github.com/smthemex/ComfyUI_Pic2Story": { - "stars": 2, - "last_update": "2024-04-21 11:18:29" - }, - "https://github.com/Hopping-Mad-Games/ComfyUI_LiteLLM": { - "stars": 0, - "last_update": "2024-04-15 23:04:31" - }, - "https://github.com/AonekoSS/ComfyUI-SimpleCounter": { - "stars": 0, - "last_update": "2024-04-25 14:23:23" - }, - "https://github.com/heshengtao/comfyui_LLM_party": { - "stars": 49, - "last_update": "2024-05-08 14:25:50" - }, - "https://github.com/frankchieng/ComfyUI_MagicClothing": { - "stars": 332, - "last_update": "2024-04-28 03:21:51" - }, - "https://github.com/AIFSH/ComfyUI-MuseTalk_FSH": { - "stars": 3, - "last_update": "2024-04-30 08:27:59" - }, - "https://github.com/JettHu/ComfyUI_TGate": { - "stars": 32, - "last_update": "2024-05-06 17:23:28" - }, - "https://github.com/VAST-AI-Research/ComfyUI-Tripo": { - "stars": 44, - "last_update": "2024-04-18 11:37:22" - }, - "https://github.com/Stability-AI/ComfyUI-SAI_API": { - "stars": 31, - "last_update": "2024-04-24 23:40:33" - }, - "https://github.com/chaojie/ComfyUI-CameraCtrl": { - "stars": 11, - "last_update": "2024-04-19 03:46:18" - }, - "https://github.com/sugarkwork/comfyui_tag_fillter": { - "stars": 3, - "last_update": "2024-04-26 02:40:50" - }, - "https://github.com/hay86/ComfyUI_MiniCPM-V": { - "stars": 3, - "last_update": "2024-04-18 13:11:09" - }, - "https://github.com/florestefano1975/ComfyUI-StabilityAI-Suite": { - "stars": 1, - "last_update": "2024-04-21 07:34:21" - }, - "https://github.com/chaojie/ComfyUI-CameraCtrl-Wrapper": { - "stars": 11, - "last_update": "2024-04-19 03:46:18" - }, - "https://github.com/turkyden/ComfyUI-Comic": { - "stars": 1, - "last_update": "2024-04-29 09:44:07" - }, - "https://github.com/Intersection98/ComfyUI_MX_post_processing-nodes": { - "stars": 8, - "last_update": "2024-04-30 03:35:57" - }, - "https://github.com/TencentQQGYLab/ComfyUI-ELLA": { - "stars": 196, - "last_update": "2024-05-07 03:07:38" - }, - "https://github.com/Big-Idea-Technology/ComfyUI-Book-Tools": { - "stars": 10, - "last_update": "2024-04-26 07:53:44" - }, - "https://github.com/kijai/ComfyUI-APISR-KJ": { - "stars": 51, - "last_update": "2024-04-19 16:38:57" - }, - "https://github.com/if-ai/ComfyUI-IF_AI_WishperSpeechNode": { - "stars": 13, - "last_update": "2024-04-19 10:52:02" - }, - "https://github.com/DarKDinDoN/comfyui-checkpoint-automatic-config": { - "stars": 3, - "last_update": "2024-04-30 11:40:19" - }, - "https://github.com/BlakeOne/ComfyUI-NodeReset": { - "stars": 1, - "last_update": "2024-04-21 17:10:35" - }, - "https://github.com/Fannovel16/ComfyUI-MagickWand": { - "stars": 56, - "last_update": "2024-04-28 10:13:50" - }, - "https://github.com/AIFSH/ComfyUI-WhisperX": { - "stars": 11, - "last_update": "2024-05-06 06:25:52" - }, - "https://github.com/MinusZoneAI/ComfyUI-Prompt-MZ": { - "stars": 42, - "last_update": "2024-05-03 04:44:45" - }, - "https://github.com/blueraincoatli/comfyUI_SillyNodes": { - "stars": 2, - "last_update": "2024-04-25 03:11:05" - }, - "https://github.com/chaojie/ComfyUI-LaVIT": { - "stars": 8, - "last_update": "2024-04-24 13:41:02" - }, - "https://github.com/smthemex/ComfyUI_Pipeline_Tool": { - "stars": 5, - "last_update": "2024-05-07 08:59:44" - }, - "https://github.com/ty0x2333/ComfyUI-Dev-Utils": { - "stars": 28, - "last_update": "2024-04-29 15:28:22" - }, - "https://github.com/longgui0318/comfyui-magic-clothing": { - "stars": 15, - "last_update": "2024-04-28 03:29:42" - }, - "https://github.com/huchenlei/ComfyUI-openpose-editor": { - "stars": 5, - "last_update": "2024-04-25 22:45:00" - }, - "https://github.com/lquesada/ComfyUI-Prompt-Combinator": { - "stars": 13, - "last_update": "2024-04-26 19:10:31" - }, - "https://github.com/chaojie/ComfyUI-SimDA": { - "stars": 13, - "last_update": "2024-04-25 03:38:51" - }, - "https://github.com/shinich39/comfyui-local-db": { - "stars": 1, - "last_update": "2024-05-02 00:51:05" - }, - "https://github.com/randjtw/advance-aesthetic-score": { - "stars": 0, - "last_update": "2024-04-25 06:34:10" - }, - "https://github.com/FredBill1/comfyui-fb-utils": { - "stars": 0, - "last_update": "2024-05-05 15:14:45" - }, - "https://github.com/kealiu/ComfyUI-ZeroShot-MTrans": { - "stars": 108, - "last_update": "2024-05-06 09:41:56" - }, - "https://github.com/jeffy5/comfyui-faceless-node": { - "stars": 4, - "last_update": "2024-04-30 07:22:34" - }, - "https://github.com/TaiTair/comfyui-simswap": { - "stars": 2, - "last_update": "2024-04-27 17:29:46" - }, - "https://github.com/fofr/ComfyUI-HyperSDXL1StepUnetScheduler": { - "stars": 9, - "last_update": "2024-04-26 11:16:06" - }, - "https://github.com/daxcay/ComfyUI-DRMN": { - "stars": 4, - "last_update": "2024-05-01 17:06:44" - }, - "https://github.com/chrisfreilich/virtuoso-nodes": { - "stars": 31, - "last_update": "2024-05-07 22:57:00" - }, - "https://github.com/Shinsplat/ComfyUI-Shinsplat": { - "stars": 3, - "last_update": "2024-05-03 14:05:09" - }, - "https://github.com/shinich39/comfyui-load-image-in-seq": { - "stars": 2, - "last_update": "2024-04-27 11:46:50" - }, - "https://github.com/florestefano1975/ComfyUI-HiDiffusion": { - "stars": 100, - "last_update": "2024-05-04 14:01:06" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Phi-3-mini": { - "stars": 132, - "last_update": "2024-04-26 15:03:13" - }, - "https://github.com/blepping/comfyui_jankhidiffusion": { - "stars": 58, - "last_update": "2024-05-07 09:50:09" - }, - "https://github.com/da2el-ai/ComfyUI-d2-steps": { - "stars": 3, - "last_update": "2024-05-04 17:32:40" - }, - "https://github.com/da2el-ai/ComfyUI-d2-size-selector": { - "stars": 0, - "last_update": "2024-05-03 17:29:07" - }, - "https://github.com/nat-chan/comfyui-transceiver": { - "stars": 3, - "last_update": "2024-05-02 07:14:05" - }, - "https://github.com/shirazdesigner/CLIPTextEncodeAndEnhancev4": { - "stars": 0, - "last_update": "2024-04-27 13:25:08" - }, - "https://github.com/JettHu/ComfyUI-TCD": { - "stars": 44, - "last_update": "2024-05-07 08:34:59" - }, - "https://github.com/web3nomad/ComfyUI_Invisible_Watermark": { - "stars": 1, - "last_update": "2024-04-29 14:46:19" - }, - "https://github.com/AIFSH/ComfyUI-RVC": { - "stars": 3, - "last_update": "2024-04-30 09:22:22" - }, - "https://github.com/GentlemanHu/ComfyUI-SunoAI": { - "stars": 7, - "last_update": "2024-04-29 12:36:18" - }, - "https://github.com/kealiu/ComfyUI-Zero123-Porting": { - "stars": 4, - "last_update": "2024-05-08 12:08:32" - }, - "https://github.com/TemryL/ComfyUI-IDM-VTON": { - "stars": 59, - "last_update": "2024-05-08 14:07:23" - }, - "https://github.com/Nestorchik/NStor-ComfyUI-Translation": { - "stars": 1, - "last_update": "2024-05-01 12:24:22" - }, - "https://github.com/jax-explorer/fast_video_comfyui": { - "stars": 0, - "last_update": "2024-04-30 05:02:14" - }, - "https://github.com/sugarkwork/comfyui_cohere": { - "stars": 0, - "last_update": "2024-04-30 01:57:18" - }, - "https://github.com/alessandrozonta/ComfyUI-CenterNode": { - "stars": 2, - "last_update": "2024-05-02 11:17:11" - }, - "https://github.com/yuvraj108c/ComfyUI-Upscaler-Tensorrt": { - "stars": 20, - "last_update": "2024-05-08 08:18:54" - }, - "https://github.com/curiousjp/ComfyUI-MaskBatchPermutations": { - "stars": 1, - "last_update": "2024-05-05 06:06:11" - }, - "https://github.com/BAIS1C/ComfyUI_RSS_Feed_Reader": { - "stars": 2, - "last_update": "2024-05-08 15:19:21" - }, - "https://github.com/osi1880vr/prompt_quill_comfyui": { - "stars": 6, - "last_update": "2024-05-08 09:46:41" - }, - "https://github.com/audioscavenger/save-image-extended-comfyui": { - "stars": 0, - "last_update": "2024-05-08 18:22:16" - }, - "https://github.com/aws-samples/comfyui-llm-node-for-amazon-bedrock": { - "stars": 2, - "last_update": "2024-05-06 02:30:47" - }, - "https://github.com/runtime44/comfyui_r44_nodes": { - "stars": 19, - "last_update": "2024-05-05 12:17:36" - }, - "https://github.com/AIFSH/ComfyUI-FishSpeech": { - "stars": 4, - "last_update": "2024-05-07 07:23:38" - }, - "https://github.com/davask/ComfyUI_MaraScott_Nodes": { - "stars": 30, - "last_update": "2024-05-08 13:01:28" - }, - "https://github.com/philz1337x/ComfyUI-ClarityAI": { - "stars": 23, - "last_update": "2024-05-07 18:37:31" - }, - "https://github.com/chaojie/ComfyUI-Video-Editing-X-Attention": { - "stars": 17, - "last_update": "2024-05-08 00:59:14" - }, - "https://github.com/KoreTeknology/ComfyUI-Universal-Styler": { - "stars": 3, - "last_update": "2024-05-08 21:25:51" - }, - "https://github.com/ZeDarkAdam/ComfyUI-Embeddings-Tools": { - "stars": 0, - "last_update": "2024-05-07 12:44:45" - }, - "https://github.com/AI2lab/comfyUI-DeepSeek-2lab": { - "stars": 1, - "last_update": "2024-05-09 06:24:01" - }, - "https://github.com/liusida/ComfyUI-AutoCropFaces": { - "stars": 2, - "last_update": "2024-05-08 04:36:43" + "last_update": "2024-05-23 11:20:57", + "author_account_age_days": 1465 }, "https://github.com/A4P7J1N7M05OT/ComfyUI-AutoColorGimp": { "stars": 0, - "last_update": "2024-05-08 09:52:21" + "last_update": "2024-05-23 00:26:10", + "author_account_age_days": 467 + }, + "https://github.com/A4P7J1N7M05OT/ComfyUI-PixelOE": { + "stars": 6, + "last_update": "2024-06-02 14:57:59", + "author_account_age_days": 467 + }, + "https://github.com/AARG-FAN/Image-Raster-for-ComfyUI": { + "stars": 62, + "last_update": "2024-06-17 10:00:11", + "author_account_age_days": 494 + }, + "https://github.com/AI2lab/comfyUI-DeepSeek-2lab": { + "stars": 3, + "last_update": "2024-06-06 23:11:12", + "author_account_age_days": 187 + }, + "https://github.com/AIFSH/ComfyUI-3d-photo-inpainting": { + "stars": 1, + "last_update": "2024-06-19 03:34:50", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-FishSpeech": { + "stars": 6, + "last_update": "2024-05-23 01:18:49", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-GPT_SoVITS": { + "stars": 150, + "last_update": "2024-06-14 07:05:01", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-Hallo": { + "stars": 26, + "last_update": "2024-06-17 23:58:36", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-IP_LAP": { + "stars": 23, + "last_update": "2024-06-14 07:05:39", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-Live2DViewer": { + "stars": 2, + "last_update": "2024-06-14 07:04:49", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-MimicBrush": { + "stars": 32, + "last_update": "2024-06-17 22:26:53", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-MuseTalk_FSH": { + "stars": 7, + "last_update": "2024-06-14 07:05:19", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-RVC": { + "stars": 9, + "last_update": "2024-06-14 07:05:25", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-UVR5": { + "stars": 56, + "last_update": "2024-06-14 07:04:43", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-UniAnimate": { + "stars": 3, + "last_update": "2024-06-17 20:59:59", + "author_account_age_days": 226 + }, + "https://github.com/AIFSH/ComfyUI-WhisperX": { + "stars": 20, + "last_update": "2024-06-14 07:05:31", + "author_account_age_days": 226 }, "https://github.com/AIFSH/ComfyUI-XTTS": { - "stars": 3, - "last_update": "2024-05-09 03:18:15" + "stars": 20, + "last_update": "2024-06-14 07:05:07", + "author_account_age_days": 226 }, - "https://github.com/smthemex/ComfyUI_Llama3_8B": { + "https://github.com/AIFSH/ComfyUI_V-Express": { + "stars": 74, + "last_update": "2024-06-14 07:05:13", + "author_account_age_days": 226 + }, + "https://github.com/AIGCTeam/ComfyUI_kkTranslator_nodes": { "stars": 5, - "last_update": "2024-05-08 09:31:25" + "last_update": "2024-05-23 00:13:50", + "author_account_age_days": 205 }, - "https://github.com/chenpx976/ComfyUI-RunRunRun": { + "https://github.com/AIGODLIKE/AIGODLIKE-COMFYUI-TRANSLATION": { + "stars": 928, + "last_update": "2024-06-18 03:10:38", + "author_account_age_days": 496 + }, + "https://github.com/AIGODLIKE/AIGODLIKE-ComfyUI-Studio": { + "stars": 202, + "last_update": "2024-06-05 00:52:46", + "author_account_age_days": 496 + }, + "https://github.com/AIGODLIKE/ComfyUI-CUP": { + "stars": 4, + "last_update": "2024-05-19 02:31:04", + "author_account_age_days": 496 + }, + "https://github.com/AIGODLIKE/ComfyUI-ToonCrafter": { + "stars": 234, + "last_update": "2024-06-18 08:04:40", + "author_account_age_days": 496 + }, + "https://github.com/AInseven/ComfyUI-fastblend": { + "stars": 110, + "last_update": "2024-06-14 07:13:21", + "author_account_age_days": 1677 + }, + "https://github.com/AIrjen/OneButtonPrompt": { + "stars": 733, + "last_update": "2024-06-14 06:59:46", + "author_account_age_days": 437 + }, + "https://github.com/ALatentPlace/ComfyUI_yanc": { + "stars": 17, + "last_update": "2024-06-14 09:04:57", + "author_account_age_days": 1454 + }, + "https://github.com/AbdullahAlfaraj/Comfy-Photoshop-SD": { + "stars": 175, + "last_update": "2024-06-14 07:04:37", + "author_account_age_days": 3662 + }, + "https://github.com/AbyssYuan0/ComfyUI_BadgerTools": { + "stars": 6, + "last_update": "2024-05-22 21:27:48", + "author_account_age_days": 484 + }, + "https://github.com/Acly/comfyui-inpaint-nodes": { + "stars": 417, + "last_update": "2024-06-17 13:51:51", + "author_account_age_days": 3799 + }, + "https://github.com/Acly/comfyui-tooling-nodes": { + "stars": 208, + "last_update": "2024-06-12 15:44:54", + "author_account_age_days": 3799 + }, + "https://github.com/AiMiDi/ComfyUI-Aimidi-nodes": { "stars": 0, - "last_update": "2024-05-08 12:02:17" + "last_update": "2024-05-23 00:15:03", + "author_account_age_days": 1270 }, - "https://github.com/cubiq/PuLID_ComfyUI": { - "stars": 139, - "last_update": "2024-05-09 01:53:03" + "https://github.com/AlekPet/ComfyUI_Custom_Nodes_AlekPet": { + "stars": 646, + "last_update": "2024-06-12 07:56:21", + "author_account_age_days": 2694 }, - "https://github.com/githubYiheng/ComfyUI_GetFileNameFromURL": { + "https://github.com/Alysondao/Comfyui-Yolov8-JSON": { + "stars": 12, + "last_update": "2024-06-17 10:00:48", + "author_account_age_days": 1025 + }, + "https://github.com/Amorano/Jovimetrix": { + "stars": 162, + "last_update": "2024-06-04 15:28:54", + "author_account_age_days": 5207 + }, + "https://github.com/AonekoSS/ComfyUI-LoRA-Tuner": { + "stars": 4, + "last_update": "2024-06-14 08:57:39", + "author_account_age_days": 4086 + }, + "https://github.com/AonekoSS/ComfyUI-SimpleCounter": { + "stars": 1, + "last_update": "2024-05-23 01:11:36", + "author_account_age_days": 4086 + }, + "https://github.com/ArcherFMY/Diffusion360_ComfyUI": { + "stars": 17, + "last_update": "2024-05-28 03:14:17", + "author_account_age_days": 3384 + }, + "https://github.com/ArdeniusAI/CPlus_Ardenius": { "stars": 0, - "last_update": "2024-05-09 08:23:03" + "last_update": "2024-06-14 07:13:26", + "author_account_age_days": 121 + }, + "https://github.com/ArtBot2023/CharacterFaceSwap": { + "stars": 54, + "last_update": "2024-05-22 20:53:09", + "author_account_age_days": 288 + }, + "https://github.com/ArtVentureX/comfyui-animatediff": { + "stars": 632, + "last_update": "2024-05-22 18:16:43", + "author_account_age_days": 400 + }, + "https://github.com/AshMartian/ComfyUI-DirGir": { + "stars": 10, + "last_update": "2024-05-29 22:28:55", + "author_account_age_days": 4581 + }, + "https://github.com/AuroBit/ComfyUI-AnimateAnyone-reproduction": { + "stars": 34, + "last_update": "2024-06-14 09:03:24", + "author_account_age_days": 384 + }, + "https://github.com/AuroBit/ComfyUI-OOTDiffusion": { + "stars": 335, + "last_update": "2024-06-14 08:11:00", + "author_account_age_days": 384 + }, + "https://github.com/AustinMroz/ComfyUI-DynamicOversampling": { + "stars": 0, + "last_update": "2024-06-14 07:06:51", + "author_account_age_days": 4069 + }, + "https://github.com/AustinMroz/ComfyUI-SpliceTools": { + "stars": 7, + "last_update": "2024-06-14 07:07:21", + "author_account_age_days": 4069 + }, + "https://github.com/AustinMroz/ComfyUI-WorkflowCheckpointing": { + "stars": 1, + "last_update": "2024-06-19 07:00:19", + "author_account_age_days": 4069 + }, + "https://github.com/Auttasak-L/ComfyUI-ImageCropper": { + "stars": 1, + "last_update": "2024-05-23 05:04:53", + "author_account_age_days": 2644 + }, + "https://github.com/BAIS1C/ComfyUI_RSS_Feed_Reader": { + "stars": 2, + "last_update": "2024-06-14 07:08:54", + "author_account_age_days": 484 + }, + "https://github.com/BXYMartin/ComfyUI-InstantIDUtils": { + "stars": 3, + "last_update": "2024-05-23 00:08:50", + "author_account_age_days": 2438 + }, + "https://github.com/BadCafeCode/masquerade-nodes-comfyui": { + "stars": 304, + "last_update": "2024-06-19 04:16:54", + "author_account_age_days": 425 + }, + "https://github.com/Beinsezii/bsz-cui-extras": { + "stars": 20, + "last_update": "2024-05-22 20:46:45", + "author_account_age_days": 2221 + }, + "https://github.com/BenNarum/SigmaWaveFormNode": { + "stars": 5, + "last_update": "2024-06-14 14:00:10", + "author_account_age_days": 3067 + }, + "https://github.com/BennyKok/comfyui-deploy": { + "stars": 675, + "last_update": "2024-06-16 00:29:53", + "author_account_age_days": 2990 + }, + "https://github.com/Big-Idea-Technology/ComfyUI-Book-Tools": { + "stars": 15, + "last_update": "2024-06-14 07:06:33", + "author_account_age_days": 866 + }, + "https://github.com/Big-Idea-Technology/ComfyUI_LLM_Node": { + "stars": 49, + "last_update": "2024-06-14 08:08:12", + "author_account_age_days": 866 + }, + "https://github.com/Billius-AI/ComfyUI-Path-Helper": { + "stars": 13, + "last_update": "2024-05-22 23:25:08", + "author_account_age_days": 129 + }, + "https://github.com/BlakeOne/ComfyUI-CustomScheduler": { + "stars": 11, + "last_update": "2024-05-23 00:23:56", + "author_account_age_days": 2527 + }, + "https://github.com/BlakeOne/ComfyUI-NodePresets": { + "stars": 11, + "last_update": "2024-05-23 00:24:07", + "author_account_age_days": 2527 + }, + "https://github.com/BlakeOne/ComfyUI-NodeReset": { + "stars": 1, + "last_update": "2024-05-23 00:24:18", + "author_account_age_days": 2527 + }, + "https://github.com/BlakeOne/ComfyUI-SchedulerMixer": { + "stars": 10, + "last_update": "2024-05-23 00:23:44", + "author_account_age_days": 2527 + }, + "https://github.com/BlenderNeko/ComfyUI_ADV_CLIP_emb": { + "stars": 263, + "last_update": "2024-05-22 14:56:13", + "author_account_age_days": 472 + }, + "https://github.com/BlenderNeko/ComfyUI_Cutoff": { + "stars": 336, + "last_update": "2024-05-22 15:01:45", + "author_account_age_days": 472 + }, + "https://github.com/BlenderNeko/ComfyUI_Noise": { + "stars": 200, + "last_update": "2024-06-10 16:38:48", + "author_account_age_days": 472 + }, + "https://github.com/BlenderNeko/ComfyUI_SeeCoder": { + "stars": 35, + "last_update": "2024-05-22 14:57:04", + "author_account_age_days": 472 + }, + "https://github.com/BlenderNeko/ComfyUI_TiledKSampler": { + "stars": 289, + "last_update": "2024-05-22 14:56:49", + "author_account_age_days": 472 + }, + "https://github.com/CC-BryanOttho/ComfyUI_API_Manager": { + "stars": 10, + "last_update": "2024-06-14 07:13:34", + "author_account_age_days": 479 + }, + "https://github.com/CYBERLOOM-INC/ComfyUI-nodes-hnmr": { + "stars": 4, + "last_update": "2024-05-22 17:55:41", + "author_account_age_days": 244 + }, + "https://github.com/CavinHuang/comfyui-nodes-docs": { + "stars": 58, + "last_update": "2024-06-19 06:36:49", + "author_account_age_days": 2721 + }, + "https://github.com/Chan-0312/ComfyUI-EasyDeforum": { + "stars": 8, + "last_update": "2024-05-22 23:22:14", + "author_account_age_days": 1861 + }, + "https://github.com/Chan-0312/ComfyUI-IPAnimate": { + "stars": 65, + "last_update": "2024-05-22 23:22:03", + "author_account_age_days": 1861 + }, + "https://github.com/Chan-0312/ComfyUI-Prompt-Preview": { + "stars": 16, + "last_update": "2024-06-14 09:01:37", + "author_account_age_days": 1861 + }, + "https://github.com/Chaoses-Ib/ComfyUI_Ib_CustomNodes": { + "stars": 12, + "last_update": "2024-04-05 11:14:24", + "author_account_age_days": 1873 + }, + "https://github.com/Clybius/ComfyUI-Extra-Samplers": { + "stars": 54, + "last_update": "2024-06-14 09:03:17", + "author_account_age_days": 1728 + }, + "https://github.com/Clybius/ComfyUI-Latent-Modifiers": { + "stars": 43, + "last_update": "2024-06-14 09:02:44", + "author_account_age_days": 1728 + }, + "https://github.com/CosmicLaca/ComfyUI_Primere_Nodes": { + "stars": 79, + "last_update": "2024-06-18 16:21:26", + "author_account_age_days": 3650 + }, + "https://github.com/Danand/ComfyUI-ComfyCouple": { + "stars": 21, + "last_update": "2024-06-14 08:09:42", + "author_account_age_days": 4283 + }, + "https://github.com/DarKDinDoN/comfyui-checkpoint-automatic-config": { + "stars": 3, + "last_update": "2024-05-26 08:00:23", + "author_account_age_days": 4434 + }, + "https://github.com/DataCTE/prompt_injection": { + "stars": 57, + "last_update": "2024-06-15 16:06:59", + "author_account_age_days": 772 + }, + "https://github.com/Derfuu/Derfuu_ComfyUI_ModdedNodes": { + "stars": 290, + "last_update": "2024-06-17 21:28:45", + "author_account_age_days": 1769 + }, + "https://github.com/DigitalIO/ComfyUI-stable-wildcards": { + "stars": 19, + "last_update": "2024-05-24 21:15:08", + "author_account_age_days": 4033 + }, + "https://github.com/DimaChaichan/LAizypainter-Exporter-ComfyUI": { + "stars": 7, + "last_update": "2024-05-22 23:14:06", + "author_account_age_days": 3067 + }, + "https://github.com/DonBaronFactory/ComfyUI-Cre8it-Nodes": { + "stars": 0, + "last_update": "2024-05-22 23:24:30", + "author_account_age_days": 3482 + }, + "https://github.com/DrJKL/ComfyUI-Anchors": { + "stars": 4, + "last_update": "2024-06-14 07:12:14", + "author_account_age_days": 4989 + }, + "https://github.com/DrMWeigand/ComfyUI_ColorImageDetection": { + "stars": 1, + "last_update": "2024-05-23 00:25:14", + "author_account_age_days": 1026 + }, + "https://github.com/Electrofried/ComfyUI-OpenAINode": { + "stars": 18, + "last_update": "2024-06-14 09:01:22", + "author_account_age_days": 2615 + }, + "https://github.com/EllangoK/ComfyUI-post-processing-nodes": { + "stars": 144, + "last_update": "2024-05-22 17:54:09", + "author_account_age_days": 2773 + }, + "https://github.com/ExponentialML/ComfyUI_ModelScopeT2V": { + "stars": 25, + "last_update": "2024-05-23 00:12:17", + "author_account_age_days": 1618 + }, + "https://github.com/ExponentialML/ComfyUI_Native_DynamiCrafter": { + "stars": 98, + "last_update": "2024-06-08 02:33:02", + "author_account_age_days": 1618 + }, + "https://github.com/ExponentialML/ComfyUI_VisualStylePrompting": { + "stars": 252, + "last_update": "2024-05-23 00:12:41", + "author_account_age_days": 1618 + }, + "https://github.com/Extraltodeus/ComfyUI-AutomaticCFG": { + "stars": 269, + "last_update": "2024-06-19 05:31:19", + "author_account_age_days": 3144 + }, + "https://github.com/Extraltodeus/LoadLoraWithTags": { + "stars": 37, + "last_update": "2024-06-03 03:04:45", + "author_account_age_days": 3144 + }, + "https://github.com/Extraltodeus/Stable-Diffusion-temperature-settings": { + "stars": 20, + "last_update": "2024-06-18 14:03:50", + "author_account_age_days": 3144 + }, + "https://github.com/Extraltodeus/Uncond-Zero-for-ComfyUI": { + "stars": 0, + "last_update": "2024-06-19 06:41:28", + "author_account_age_days": 3144 + }, + "https://github.com/Extraltodeus/Vector_Sculptor_ComfyUI": { + "stars": 80, + "last_update": "2024-06-03 03:04:03", + "author_account_age_days": 3144 + }, + "https://github.com/Extraltodeus/noise_latent_perlinpinpin": { + "stars": 22, + "last_update": "2024-06-03 03:04:40", + "author_account_age_days": 3144 + }, + "https://github.com/Extraltodeus/sigmas_tools_and_the_golden_scheduler": { + "stars": 43, + "last_update": "2024-06-11 19:48:04", + "author_account_age_days": 3144 + }, + "https://github.com/Fannovel16/ComfyUI-Frame-Interpolation": { + "stars": 335, + "last_update": "2024-05-21 00:52:49", + "author_account_age_days": 3126 + }, + "https://github.com/Fannovel16/ComfyUI-Loopchain": { + "stars": 27, + "last_update": "2023-12-15 14:25:35", + "author_account_age_days": 3126 + }, + "https://github.com/Fannovel16/ComfyUI-MagickWand": { + "stars": 70, + "last_update": "2024-05-20 14:13:55", + "author_account_age_days": 3126 + }, + "https://github.com/Fannovel16/ComfyUI-MotionDiff": { + "stars": 145, + "last_update": "2024-05-21 00:51:03", + "author_account_age_days": 3126 + }, + "https://github.com/Fannovel16/ComfyUI-Video-Matting": { + "stars": 140, + "last_update": "2024-05-21 00:51:54", + "author_account_age_days": 3126 + }, + "https://github.com/Fannovel16/comfyui_controlnet_aux": { + "stars": 1554, + "last_update": "2024-06-18 12:43:54", + "author_account_age_days": 3126 + }, + "https://github.com/Fantaxico/ComfyUI-GCP-Storage": { + "stars": 0, + "last_update": "2024-06-14 09:05:52", + "author_account_age_days": 530 + }, + "https://github.com/Feidorian/feidorian-ComfyNodes": { + "stars": 5, + "last_update": "2024-05-22 21:30:52", + "author_account_age_days": 2750 + }, + "https://github.com/Fictiverse/ComfyUI_Fictiverse": { + "stars": 7, + "last_update": "2024-06-05 19:03:21", + "author_account_age_days": 666 }, "https://github.com/Fihade/IC-Light-ComfyUI-Node": { - "stars": 1, - "last_update": "2024-05-09 07:57:52" + "stars": 5, + "last_update": "2024-05-23 01:20:21", + "author_account_age_days": 2742 }, - "https://github.com/KewkLW/ComfyUI-kewky_tools": { + "https://github.com/FizzleDorf/ComfyUI-AIT": { + "stars": 43, + "last_update": "2024-05-16 23:55:47", + "author_account_age_days": 1974 + }, + "https://github.com/FizzleDorf/ComfyUI_FizzNodes": { + "stars": 310, + "last_update": "2024-06-13 03:43:00", + "author_account_age_days": 1974 + }, + "https://github.com/FlyingFireCo/tiled_ksampler": { + "stars": 56, + "last_update": "2024-05-22 23:15:17", + "author_account_age_days": 627 + }, + "https://github.com/ForeignGods/ComfyUI-Mana-Nodes": { + "stars": 176, + "last_update": "2024-05-29 18:29:05", + "author_account_age_days": 1238 + }, + "https://github.com/Franck-Demongin/NX_PromptStyler": { + "stars": 5, + "last_update": "2024-05-22 23:25:21", + "author_account_age_days": 1766 + }, + "https://github.com/FredBill1/comfyui-fb-utils": { + "stars": 0, + "last_update": "2024-05-23 01:41:02", + "author_account_age_days": 2312 + }, + "https://github.com/G-370/ComfyUI-SD3-Powerlab": { + "stars": 16, + "last_update": "2024-06-19 02:28:26", + "author_account_age_days": 1514 + }, + "https://github.com/GMapeSplat/ComfyUI_ezXY": { + "stars": 22, + "last_update": "2024-05-29 17:43:08", + "author_account_age_days": 1292 + }, + "https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes": { + "stars": 7, + "last_update": "2024-05-22 21:31:52", + "author_account_age_days": 2551 + }, + "https://github.com/GavChap/ComfyUI-SD3LatentSelectRes": { + "stars": 2, + "last_update": "2024-06-17 13:42:14", + "author_account_age_days": 4562 + }, + "https://github.com/GentlemanHu/ComfyUI-SunoAI": { + "stars": 10, + "last_update": "2024-06-14 06:02:29", + "author_account_age_days": 2378 + }, + "https://github.com/Goktug/comfyui-saveimage-plus": { "stars": 1, - "last_update": "2024-05-09 00:16:24" + "last_update": "2024-06-14 07:08:34", + "author_account_age_days": 4926 + }, + "https://github.com/Gourieff/comfyui-reactor-node": { + "stars": 1036, + "last_update": "2024-06-17 04:37:25", + "author_account_age_days": 1114 + }, + "https://github.com/GraftingRayman/ComfyUI_GraftingRayman": { + "stars": 11, + "last_update": "2024-06-19 06:30:09", + "author_account_age_days": 157 + }, + "https://github.com/Guillaume-Fgt/ComfyUI_StableCascadeLatentRatio": { + "stars": 3, + "last_update": "2024-06-14 08:59:42", + "author_account_age_days": 1475 + }, + "https://github.com/HAL41/ComfyUI-aichemy-nodes": { + "stars": 4, + "last_update": "2024-05-22 23:10:19", + "author_account_age_days": 2840 + }, + "https://github.com/Hangover3832/ComfyUI-Hangover-Moondream": { + "stars": 37, + "last_update": "2024-06-14 08:08:20", + "author_account_age_days": 604 + }, + "https://github.com/Hangover3832/ComfyUI-Hangover-Nodes": { + "stars": 33, + "last_update": "2024-06-14 08:08:28", + "author_account_age_days": 604 + }, + "https://github.com/Hangover3832/ComfyUI-Hangover-Recognize_Anything": { + "stars": 14, + "last_update": "2024-06-14 08:10:52", + "author_account_age_days": 604 + }, + "https://github.com/Haoming02/comfyui-clear-screen": { + "stars": 1, + "last_update": "2024-06-14 08:59:35", + "author_account_age_days": 1326 + }, + "https://github.com/Haoming02/comfyui-diffusion-cg": { + "stars": 49, + "last_update": "2024-06-14 07:10:28", + "author_account_age_days": 1326 + }, + "https://github.com/Haoming02/comfyui-floodgate": { + "stars": 25, + "last_update": "2024-06-14 07:11:55", + "author_account_age_days": 1326 + }, + "https://github.com/Haoming02/comfyui-menu-anchor": { + "stars": 3, + "last_update": "2024-06-14 07:10:37", + "author_account_age_days": 1326 + }, + "https://github.com/Haoming02/comfyui-prompt-format": { + "stars": 28, + "last_update": "2024-06-14 07:12:02", + "author_account_age_days": 1326 + }, + "https://github.com/Haoming02/comfyui-tab-handler": { + "stars": 4, + "last_update": "2024-06-14 08:09:45", + "author_account_age_days": 1326 + }, + "https://github.com/HaydenReeve/ComfyUI-Better-Strings": { + "stars": 0, + "last_update": "2024-05-22 23:20:05", + "author_account_age_days": 2236 + }, + "https://github.com/HebelHuber/comfyui-enhanced-save-node": { + "stars": 1, + "last_update": "2024-06-14 08:59:28", + "author_account_age_days": 2318 + }, + "https://github.com/Hiero207/ComfyUI-Hiero-Nodes": { + "stars": 5, + "last_update": "2024-05-22 23:16:16", + "author_account_age_days": 1693 + }, + "https://github.com/Hopping-Mad-Games/ComfyUI_LiteLLM": { + "stars": 2, + "last_update": "2024-06-14 15:45:39", + "author_account_age_days": 183 + }, + "https://github.com/IDGallagher/ComfyUI-IG-Nodes": { + "stars": 0, + "last_update": "2024-06-04 00:24:47", + "author_account_age_days": 5475 }, "https://github.com/ITurchenko/ComfyUI-SizeFromArray": { "stars": 0, - "last_update": "2024-05-09 14:36:26" + "last_update": "2024-05-24 14:09:58", + "author_account_age_days": 3703 + }, + "https://github.com/Intersection98/ComfyUI_MX_post_processing-nodes": { + "stars": 9, + "last_update": "2024-05-23 01:12:46", + "author_account_age_days": 2625 + }, + "https://github.com/Inzaniak/comfyui-ranbooru": { + "stars": 7, + "last_update": "2024-05-22 23:12:23", + "author_account_age_days": 3904 + }, + "https://github.com/IsItDanOrAi/ComfyUI-Stereopsis": { + "stars": 2, + "last_update": "2024-05-23 00:22:46", + "author_account_age_days": 106 + }, + "https://github.com/JPS-GER/ComfyUI_JPS-Nodes": { + "stars": 34, + "last_update": "2024-05-22 20:39:14", + "author_account_age_days": 310 + }, + "https://github.com/Jannchie/ComfyUI-J": { + "stars": 61, + "last_update": "2024-05-23 00:16:12", + "author_account_age_days": 2548 + }, + "https://github.com/JaredTherriault/ComfyUI-JNodes": { + "stars": 12, + "last_update": "2024-06-11 03:54:30", + "author_account_age_days": 3566 + }, + "https://github.com/JayLyu/ComfyUI_BaiKong_Node": { + "stars": 0, + "last_update": "2024-06-18 16:07:31", + "author_account_age_days": 3263 + }, + "https://github.com/JcandZero/ComfyUI_GLM4Node": { + "stars": 25, + "last_update": "2024-05-22 23:12:46", + "author_account_age_days": 685 + }, + "https://github.com/Jcd1230/rembg-comfyui-node": { + "stars": 120, + "last_update": "2024-05-22 17:58:34", + "author_account_age_days": 4881 + }, + "https://github.com/JerryOrbachJr/ComfyUI-RandomSize": { + "stars": 3, + "last_update": "2024-05-22 23:18:51", + "author_account_age_days": 150 + }, + "https://github.com/JettHu/ComfyUI-TCD": { + "stars": 83, + "last_update": "2024-06-03 11:40:18", + "author_account_age_days": 2352 + }, + "https://github.com/JettHu/ComfyUI_TGate": { + "stars": 48, + "last_update": "2024-05-26 08:29:23", + "author_account_age_days": 2352 + }, + "https://github.com/Jordach/comfy-plasma": { + "stars": 49, + "last_update": "2024-05-22 18:08:28", + "author_account_age_days": 4507 + }, + "https://github.com/Kaharos94/ComfyUI-Saveaswebp": { + "stars": 31, + "last_update": "2024-05-22 18:06:48", + "author_account_age_days": 1189 + }, + "https://github.com/Kangkang625/ComfyUI-paint-by-example": { + "stars": 14, + "last_update": "2024-05-22 22:20:27", + "author_account_age_days": 908 + }, + "https://github.com/KewkLW/ComfyUI-kewky_tools": { + "stars": 3, + "last_update": "2024-05-23 01:20:32", + "author_account_age_days": 1682 + }, + "https://github.com/Koishi-Star/Euler-Smea-Dyn-Sampler": { + "stars": 133, + "last_update": "2024-06-16 15:50:10", + "author_account_age_days": 1480 + }, + "https://github.com/KoreTeknology/ComfyUI-Universal-Styler": { + "stars": 5, + "last_update": "2024-06-14 10:28:10", + "author_account_age_days": 3185 + }, + "https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet": { + "stars": 412, + "last_update": "2024-06-13 12:57:15", + "author_account_age_days": 3711 + }, + "https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved": { + "stars": 2239, + "last_update": "2024-06-17 12:20:18", + "author_account_age_days": 3711 + }, + "https://github.com/Kosinkadink/ComfyUI-VideoHelperSuite": { + "stars": 393, + "last_update": "2024-06-18 21:43:05", + "author_account_age_days": 3711 + }, + "https://github.com/KytraScript/ComfyUI_KytraWebhookHTTP": { + "stars": 3, + "last_update": "2024-05-23 00:21:43", + "author_account_age_days": 1774 + }, + "https://github.com/LEv145/images-grid-comfy-plugin": { + "stars": 129, + "last_update": "2024-05-30 17:54:32", + "author_account_age_days": 2202 + }, + "https://github.com/LZpenguin/ComfyUI-Text": { + "stars": 5, + "last_update": "2024-06-19 03:37:22", + "author_account_age_days": 1974 + }, + "https://github.com/LarryJane491/Image-Captioning-in-ComfyUI": { + "stars": 29, + "last_update": "2024-06-06 20:45:43", + "author_account_age_days": 158 + }, + "https://github.com/LarryJane491/Lora-Training-in-Comfy": { + "stars": 257, + "last_update": "2024-06-09 05:24:00", + "author_account_age_days": 158 + }, + "https://github.com/Layer-norm/comfyui-lama-remover": { + "stars": 53, + "last_update": "2024-05-25 00:12:04", + "author_account_age_days": 327 + }, + "https://github.com/Lerc/canvas_tab": { + "stars": 127, + "last_update": "2024-05-22 20:48:45", + "author_account_age_days": 5362 + }, + "https://github.com/Limitex/ComfyUI-Calculation": { + "stars": 0, + "last_update": "2024-05-22 22:18:40", + "author_account_age_days": 1269 + }, + "https://github.com/Limitex/ComfyUI-Diffusers": { + "stars": 107, + "last_update": "2024-05-22 22:18:57", + "author_account_age_days": 1269 + }, + "https://github.com/Loewen-Hob/rembg-comfyui-node-better": { + "stars": 32, + "last_update": "2024-05-23 00:32:53", + "author_account_age_days": 465 + }, + "https://github.com/LonicaMewinsky/ComfyUI-MakeFrame": { + "stars": 23, + "last_update": "2024-05-22 21:29:02", + "author_account_age_days": 970 + }, + "https://github.com/LonicaMewinsky/ComfyUI-RawSaver": { + "stars": 1, + "last_update": "2024-05-22 21:31:28", + "author_account_age_days": 970 + }, + "https://github.com/Ludobico/ComfyUI-ScenarioPrompt": { + "stars": 13, + "last_update": "2024-06-14 23:40:08", + "author_account_age_days": 1027 + }, + "https://github.com/LyazS/comfyui-anime-seg": { + "stars": 4, + "last_update": "2024-05-22 23:21:49", + "author_account_age_days": 2852 + }, + "https://github.com/M1kep/ComfyLiterals": { + "stars": 11, + "last_update": "2024-05-22 20:31:38", + "author_account_age_days": 4253 + }, + "https://github.com/M1kep/ComfyUI-KepOpenAI": { + "stars": 26, + "last_update": "2024-05-22 20:33:54", + "author_account_age_days": 4253 + }, + "https://github.com/M1kep/ComfyUI-OtherVAEs": { + "stars": 2, + "last_update": "2024-05-22 20:33:41", + "author_account_age_days": 4253 + }, + "https://github.com/M1kep/Comfy_KepKitchenSink": { + "stars": 0, + "last_update": "2024-05-22 20:33:29", + "author_account_age_days": 4253 + }, + "https://github.com/M1kep/Comfy_KepListStuff": { + "stars": 26, + "last_update": "2024-05-22 20:31:26", + "author_account_age_days": 4253 + }, + "https://github.com/M1kep/Comfy_KepMatteAnything": { + "stars": 10, + "last_update": "2024-05-22 20:33:16", + "author_account_age_days": 4253 + }, + "https://github.com/M1kep/KepPromptLang": { + "stars": 5, + "last_update": "2024-05-22 20:32:56", + "author_account_age_days": 4253 + }, + "https://github.com/MNeMoNiCuZ/ComfyUI-mnemic-nodes": { + "stars": 26, + "last_update": "2024-06-04 23:56:25", + "author_account_age_days": 1599 + }, + "https://github.com/Makeezi/ComfyUI-promptLAB": { + "stars": 0, + "last_update": "2024-05-23 01:24:51", + "author_account_age_days": 1776 + }, + "https://github.com/Mamaaaamooooo/batchImg-rembg-ComfyUI-nodes": { + "stars": 12, + "last_update": "2024-06-14 10:24:17", + "author_account_age_days": 377 + }, + "https://github.com/ManglerFTW/ComfyI2I": { + "stars": 139, + "last_update": "2024-06-14 11:01:01", + "author_account_age_days": 650 + }, + "https://github.com/MaraScott/ComfyUI_MaraScott_Nodes": { + "stars": 52, + "last_update": "2024-06-17 22:21:27", + "author_account_age_days": 4964 + }, + "https://github.com/MarcusNyne/m9-prompts-comfyui": { + "stars": 1, + "last_update": "2024-06-14 15:25:15", + "author_account_age_days": 1417 + }, + "https://github.com/MariusKM/ComfyUI-BadmanNodes": { + "stars": 0, + "last_update": "2024-06-14 12:01:26", + "author_account_age_days": 2225 + }, + "https://github.com/MarkoCa1/ComfyUI-Text": { + "stars": 2, + "last_update": "2024-05-23 00:15:39", + "author_account_age_days": 1628 + }, + "https://github.com/MarkoCa1/ComfyUI_Segment_Mask": { + "stars": 15, + "last_update": "2024-05-23 00:15:51", + "author_account_age_days": 1628 + }, + "https://github.com/Mason-McGough/ComfyUI-Mosaica": { + "stars": 4, + "last_update": "2024-05-29 12:57:49", + "author_account_age_days": 3200 + }, + "https://github.com/Millyarde/Pomfy": { + "stars": 7, + "last_update": "2024-05-22 22:22:48", + "author_account_age_days": 902 + }, + "https://github.com/MinusZoneAI/ComfyUI-Prompt-MZ": { + "stars": 64, + "last_update": "2024-06-17 04:43:45", + "author_account_age_days": 60 + }, + "https://github.com/MinusZoneAI/ComfyUI-StylizePhoto-MZ": { + "stars": 16, + "last_update": "2024-05-23 01:13:32", + "author_account_age_days": 60 + }, + "https://github.com/Miosp/ComfyUI-FBCNN": { + "stars": 4, + "last_update": "2024-05-24 12:13:08", + "author_account_age_days": 2510 + }, + "https://github.com/MitoshiroPJ/comfyui_slothful_attention": { + "stars": 5, + "last_update": "2024-05-22 22:09:15", + "author_account_age_days": 3962 + }, + "https://github.com/MokkaBoss1/ComfyUI_Mokkaboss1": { + "stars": 15, + "last_update": "2024-06-18 18:18:28", + "author_account_age_days": 374 + }, + "https://github.com/MrForExample/ComfyUI-3D-Pack": { + "stars": 1630, + "last_update": "2024-06-04 20:35:47", + "author_account_age_days": 1556 + }, + "https://github.com/MrForExample/ComfyUI-AnimateAnyone-Evolved": { + "stars": 429, + "last_update": "2024-06-14 12:02:47", + "author_account_age_days": 1556 + }, + "https://github.com/Munkyfoot/ComfyUI-TextOverlay": { + "stars": 2, + "last_update": "2024-06-14 10:26:38", + "author_account_age_days": 3040 + }, + "https://github.com/Nestorchik/NStor-ComfyUI-Translation": { + "stars": 1, + "last_update": "2024-06-14 10:25:32", + "author_account_age_days": 1319 + }, + "https://github.com/NeuralSamurAI/Comfyui-Superprompt-Unofficial": { + "stars": 55, + "last_update": "2024-05-23 00:22:08", + "author_account_age_days": 88 + }, + "https://github.com/Nevysha/ComfyUI-nevysha-top-menu": { + "stars": 4, + "last_update": "2024-05-23 00:17:31", + "author_account_age_days": 521 + }, + "https://github.com/NicholasMcCarthy/ComfyUI_TravelSuite": { + "stars": 13, + "last_update": "2024-05-22 20:34:46", + "author_account_age_days": 5144 + }, + "https://github.com/NimaNzrii/comfyui-photoshop": { + "stars": 171, + "last_update": "2024-06-18 22:59:33", + "author_account_age_days": 239 + }, + "https://github.com/NimaNzrii/comfyui-popup_preview": { + "stars": 34, + "last_update": "2024-05-22 22:12:04", + "author_account_age_days": 239 + }, + "https://github.com/Niutonian/ComfyUi-NoodleWebcam": { + "stars": 27, + "last_update": "2024-05-22 21:30:40", + "author_account_age_days": 1037 + }, + "https://github.com/Nlar/ComfyUI_CartoonSegmentation": { + "stars": 9, + "last_update": "2024-05-22 23:15:37", + "author_account_age_days": 3826 + }, + "https://github.com/NotHarroweD/Harronode": { + "stars": 5, + "last_update": "2024-05-22 22:18:29", + "author_account_age_days": 1978 + }, + "https://github.com/Nourepide/ComfyUI-Allor": { + "stars": 172, + "last_update": "2024-05-22 18:11:17", + "author_account_age_days": 2840 + }, + "https://github.com/Nuked88/ComfyUI-N-Nodes": { + "stars": 171, + "last_update": "2024-05-21 19:52:44", + "author_account_age_days": 4474 + }, + "https://github.com/Nuked88/ComfyUI-N-Sidebar": { + "stars": 370, + "last_update": "2024-06-18 17:58:13", + "author_account_age_days": 4474 + }, + "https://github.com/Off-Live/ComfyUI-off-suite": { + "stars": 0, + "last_update": "2024-06-14 12:02:25", + "author_account_age_days": 1167 + }, + "https://github.com/OpenArt-AI/ComfyUI-Assistant": { + "stars": 14, + "last_update": "2024-05-22 22:16:57", + "author_account_age_days": 770 + }, + "https://github.com/PCMonsterx/ComfyUI-CSV-Loader": { + "stars": 11, + "last_update": "2024-05-22 21:27:10", + "author_account_age_days": 1660 + }, + "https://github.com/ParisNeo/lollms_nodes_suite": { + "stars": 9, + "last_update": "2024-05-23 00:22:34", + "author_account_age_days": 4764 + }, + "https://github.com/ParmanBabra/ComfyUI-Malefish-Custom-Scripts": { + "stars": 0, + "last_update": "2024-05-22 21:26:35", + "author_account_age_days": 3638 + }, + "https://github.com/Pfaeff/pfaeff-comfyui": { + "stars": 19, + "last_update": "2024-05-22 18:21:10", + "author_account_age_days": 3202 + }, + "https://github.com/PnthrLeo/comfyUI-image-search": { + "stars": 0, + "last_update": "2024-06-14 07:06:45", + "author_account_age_days": 2546 + }, + "https://github.com/Pos13/comfyui-cyclist": { + "stars": 16, + "last_update": "2024-06-19 09:21:53", + "author_account_age_days": 1512 + }, + "https://github.com/QaisMalkawi/ComfyUI-QaisHelper": { + "stars": 2, + "last_update": "2024-05-23 20:29:30", + "author_account_age_days": 1245 + }, + "https://github.com/RenderRift/ComfyUI-RenderRiftNodes": { + "stars": 6, + "last_update": "2024-05-22 22:16:41", + "author_account_age_days": 181 + }, + "https://github.com/RomanKuschanow/ComfyUI-Advanced-Latent-Control": { + "stars": 15, + "last_update": "2024-06-14 08:11:00", + "author_account_age_days": 1376 + }, + "https://github.com/Ron-Digital/ComfyUI-SceneGenerator": { + "stars": 2, + "last_update": "2024-06-14 08:59:57", + "author_account_age_days": 924 + }, + "https://github.com/Ryuukeisyou/comfyui_face_parsing": { + "stars": 44, + "last_update": "2024-05-22 22:21:46", + "author_account_age_days": 2407 + }, + "https://github.com/Ryuukeisyou/comfyui_io_helpers": { + "stars": 1, + "last_update": "2024-05-22 22:22:59", + "author_account_age_days": 2407 + }, + "https://github.com/SLAPaper/ComfyUI-Image-Selector": { + "stars": 58, + "last_update": "2024-05-24 17:03:46", + "author_account_age_days": 3692 + }, + "https://github.com/SLAPaper/ComfyUI-dpmpp_2m_alt-Sampler": { + "stars": 8, + "last_update": "2024-06-18 19:22:50", + "author_account_age_days": 3692 + }, + "https://github.com/SOELexicon/ComfyUI-LexMSDBNodes": { + "stars": 4, + "last_update": "2024-05-22 18:15:52", + "author_account_age_days": 4078 + }, + "https://github.com/SOELexicon/ComfyUI-LexTools": { + "stars": 23, + "last_update": "2024-05-23 09:39:07", + "author_account_age_days": 4078 + }, + "https://github.com/SamKhoze/ComfyUI-DeepFuze": { + "stars": 99, + "last_update": "2024-06-19 06:03:29", + "author_account_age_days": 1438 + }, + "https://github.com/SayanoAI/Comfy-RVC": { + "stars": 2, + "last_update": "2024-06-14 08:57:33", + "author_account_age_days": 2598 + }, + "https://github.com/Scholar01/ComfyUI-Keyframe": { + "stars": 10, + "last_update": "2024-06-14 09:01:30", + "author_account_age_days": 3191 + }, + "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader": { + "stars": 3, + "last_update": "2024-06-14 09:02:43", + "author_account_age_days": 1105 + }, + "https://github.com/ScreamingHawk/comfyui-ollama-prompt-encode": { + "stars": 4, + "last_update": "2024-06-18 02:52:45", + "author_account_age_days": 4501 + }, + "https://github.com/SeaArtLab/ComfyUI-Long-CLIP": { + "stars": 59, + "last_update": "2024-06-14 08:08:26", + "author_account_age_days": 71 + }, + "https://github.com/SeargeDP/SeargeSDXL": { + "stars": 739, + "last_update": "2024-05-22 00:28:26", + "author_account_age_days": 4166 + }, + "https://github.com/Seedsa/Fooocus_Nodes": { + "stars": 37, + "last_update": "2024-06-03 17:13:53", + "author_account_age_days": 2603 + }, + "https://github.com/Shadetail/ComfyUI_Eagleshadow": { + "stars": 1, + "last_update": "2024-06-15 13:04:49", + "author_account_age_days": 3392 + }, + "https://github.com/ShmuelRonen/ComfyUI-SVDResizer": { + "stars": 1, + "last_update": "2024-06-14 11:50:52", + "author_account_age_days": 1200 + }, + "https://github.com/ShmuelRonen/ComfyUI_Gemini_Flash": { + "stars": 6, + "last_update": "2024-06-15 17:12:05", + "author_account_age_days": 1200 + }, + "https://github.com/ShmuelRonen/ComfyUI_wav2lip": { + "stars": 45, + "last_update": "2024-06-15 10:03:53", + "author_account_age_days": 1200 + }, + "https://github.com/Shraknard/ComfyUI-Remover": { + "stars": 4, + "last_update": "2024-05-22 23:15:06", + "author_account_age_days": 2311 + }, + "https://github.com/Siberpone/lazy-pony-prompter": { + "stars": 23, + "last_update": "2024-05-22 23:12:00", + "author_account_age_days": 447 + }, + "https://github.com/Smirnov75/ComfyUI-mxToolkit": { + "stars": 46, + "last_update": "2024-06-16 18:22:10", + "author_account_age_days": 1506 + }, + "https://github.com/SoftMeng/ComfyUI_ImageToText": { + "stars": 5, + "last_update": "2024-06-14 08:08:36", + "author_account_age_days": 3518 + }, + "https://github.com/SoftMeng/ComfyUI_Mexx_Poster": { + "stars": 15, + "last_update": "2024-06-14 07:06:27", + "author_account_age_days": 3518 + }, + "https://github.com/SoftMeng/ComfyUI_Mexx_Styler": { + "stars": 17, + "last_update": "2024-06-14 07:09:03", + "author_account_age_days": 3518 + }, + "https://github.com/Sorcerio/MBM-Music-Visualizer": { + "stars": 14, + "last_update": "2024-05-23 01:09:18", + "author_account_age_days": 4242 + }, + "https://github.com/SozeInc/ComfyUI-Mobile": { + "stars": 0, + "last_update": "2024-06-14 07:09:00", + "author_account_age_days": 74 + }, + "https://github.com/SpaceKendo/ComfyUI-svd_txt2vid": { + "stars": 6, + "last_update": "2024-05-22 22:11:52", + "author_account_age_days": 203 + }, + "https://github.com/Stability-AI/ComfyUI-SAI_API": { + "stars": 37, + "last_update": "2024-06-06 14:18:15", + "author_account_age_days": 837 + }, + "https://github.com/Stability-AI/stability-ComfyUI-nodes": { + "stars": 179, + "last_update": "2024-05-22 15:30:47", + "author_account_age_days": 837 + }, + "https://github.com/StartHua/ComfyUI_OOTDiffusion_CXH": { + "stars": 90, + "last_update": "2024-06-14 08:12:12", + "author_account_age_days": 2830 + }, + "https://github.com/StartHua/ComfyUI_PCDMs": { + "stars": 2, + "last_update": "2024-05-22 23:21:14", + "author_account_age_days": 2830 + }, + "https://github.com/StartHua/ComfyUI_Seg_VITON": { + "stars": 164, + "last_update": "2024-05-22 23:20:17", + "author_account_age_days": 2830 + }, + "https://github.com/StartHua/Comfyui_joytag": { + "stars": 19, + "last_update": "2024-05-22 23:20:28", + "author_account_age_days": 2830 + }, + "https://github.com/StartHua/Comfyui_segformer_b2_clothes": { + "stars": 36, + "last_update": "2024-05-22 23:20:39", + "author_account_age_days": 2830 + }, + "https://github.com/SuperBeastsAI/ComfyUI-SuperBeasts": { + "stars": 98, + "last_update": "2024-06-01 20:27:53", + "author_account_age_days": 84 + }, + "https://github.com/SuperMasterBlasterLaser/ComfyUI_YOLO_Classifiers": { + "stars": 0, + "last_update": "2024-06-17 15:08:33", + "author_account_age_days": 3573 + }, + "https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes": { + "stars": 471, + "last_update": "2024-06-05 01:09:25", + "author_account_age_days": 2144 + }, + "https://github.com/Sxela/ComfyWarp": { + "stars": 21, + "last_update": "2024-05-22 20:47:11", + "author_account_age_days": 3367 + }, + "https://github.com/TGu-97/ComfyUI-TGu-utils": { + "stars": 1, + "last_update": "2024-05-22 21:07:45", + "author_account_age_days": 524 + }, + "https://github.com/THtianhao/ComfyUI-FaceChain": { + "stars": 83, + "last_update": "2024-05-24 08:41:14", + "author_account_age_days": 3686 + }, + "https://github.com/THtianhao/ComfyUI-Portrait-Maker": { + "stars": 167, + "last_update": "2024-05-22 21:18:05", + "author_account_age_days": 3686 + }, + "https://github.com/TJ16th/comfyUI_TJ_NormalLighting": { + "stars": 128, + "last_update": "2024-05-23 00:25:37", + "author_account_age_days": 2530 + }, + "https://github.com/TMElyralab/Comfyui-MusePose": { + "stars": 250, + "last_update": "2024-06-12 11:44:33", + "author_account_age_days": 92 + }, + "https://github.com/TRI3D-LC/ComfyUI-MiroBoard": { + "stars": 0, + "last_update": "2024-06-19 07:24:27", + "author_account_age_days": 433 + }, + "https://github.com/TRI3D-LC/tri3d-comfyui-nodes": { + "stars": 17, + "last_update": "2024-06-13 06:05:42", + "author_account_age_days": 433 + }, + "https://github.com/TW-CUI/TW-CUI-Util": { + "stars": 0, + "last_update": "2024-06-17 03:03:57", + "author_account_age_days": 26 + }, + "https://github.com/TaiTair/comfyui-simswap": { + "stars": 7, + "last_update": "2024-05-28 21:58:53", + "author_account_age_days": 3561 + }, + "https://github.com/Taremin/comfyui-prompt-extranetworks": { + "stars": 2, + "last_update": "2024-05-22 23:08:34", + "author_account_age_days": 2210 + }, + "https://github.com/Taremin/comfyui-string-tools": { + "stars": 1, + "last_update": "2024-05-22 23:08:45", + "author_account_age_days": 2210 + }, + "https://github.com/Taremin/webui-monaco-prompt": { + "stars": 24, + "last_update": "2024-05-23 13:58:57", + "author_account_age_days": 2210 + }, + "https://github.com/TeaCrab/ComfyUI-TeaNodes": { + "stars": 4, + "last_update": "2024-05-22 20:44:05", + "author_account_age_days": 3212 + }, + "https://github.com/TemryL/ComfyS3": { + "stars": 15, + "last_update": "2024-06-15 17:03:52", + "author_account_age_days": 863 + }, + "https://github.com/TemryL/ComfyUI-IDM-VTON": { + "stars": 195, + "last_update": "2024-06-18 17:59:20", + "author_account_age_days": 863 + }, + "https://github.com/TencentQQGYLab/ComfyUI-ELLA": { + "stars": 281, + "last_update": "2024-05-07 03:07:38", + "author_account_age_days": 92 + }, + "https://github.com/TheBarret/ZSuite": { + "stars": 6, + "last_update": "2024-05-22 21:29:14", + "author_account_age_days": 2707 + }, + "https://github.com/TheBill2001/comfyui-upscale-by-model": { + "stars": 1, + "last_update": "2024-06-18 17:57:06", + "author_account_age_days": 1436 + }, + "https://github.com/TheMistoAI/ComfyUI-Anyline": { + "stars": 261, + "last_update": "2024-06-12 11:34:17", + "author_account_age_days": 160 + }, + "https://github.com/ThereforeGames/ComfyUI-Unprompted": { + "stars": 3, + "last_update": "2024-06-14 07:11:47", + "author_account_age_days": 930 + }, + "https://github.com/TinyTerra/ComfyUI_tinyterraNodes": { + "stars": 317, + "last_update": "2024-06-17 12:37:41", + "author_account_age_days": 616 + }, + "https://github.com/TripleHeadedMonkey/ComfyUI_MileHighStyler": { + "stars": 18, + "last_update": "2024-05-22 22:13:06", + "author_account_age_days": 855 + }, + "https://github.com/Tropfchen/ComfyUI-Embedding_Picker": { + "stars": 25, + "last_update": "2024-05-24 20:02:20", + "author_account_age_days": 3848 + }, + "https://github.com/Tropfchen/ComfyUI-yaResolutionSelector": { + "stars": 6, + "last_update": "2024-05-24 19:48:43", + "author_account_age_days": 3848 + }, + "https://github.com/Trung0246/ComfyUI-0246": { + "stars": 91, + "last_update": "2024-05-24 03:45:59", + "author_account_age_days": 3375 + }, + "https://github.com/Ttl/ComfyUi_NNLatentUpscale": { + "stars": 162, + "last_update": "2024-05-22 20:50:03", + "author_account_age_days": 4916 + }, + "https://github.com/TylerZoro/SD3-Scaling": { + "stars": 0, + "last_update": "2024-06-15 16:59:22", + "author_account_age_days": 1280 + }, + "https://github.com/Umikaze-job/select_folder_path_easy": { + "stars": 4, + "last_update": "2024-05-22 21:30:13", + "author_account_age_days": 213 + }, + "https://github.com/VAST-AI-Research/ComfyUI-Tripo": { + "stars": 64, + "last_update": "2024-05-23 01:11:56", + "author_account_age_days": 237 + }, + "https://github.com/WASasquatch/ASTERR": { + "stars": 12, + "last_update": "2024-06-17 00:49:59", + "author_account_age_days": 4620 + }, + "https://github.com/WASasquatch/ComfyUI_Preset_Merger": { + "stars": 21, + "last_update": "2024-06-17 00:52:28", + "author_account_age_days": 4620 + }, + "https://github.com/WASasquatch/FreeU_Advanced": { + "stars": 96, + "last_update": "2024-06-17 04:40:22", + "author_account_age_days": 4620 + }, + "https://github.com/WASasquatch/PPF_Noise_ComfyUI": { + "stars": 20, + "last_update": "2024-06-14 10:27:23", + "author_account_age_days": 4620 + }, + "https://github.com/WASasquatch/PowerNoiseSuite": { + "stars": 53, + "last_update": "2024-06-17 01:40:44", + "author_account_age_days": 4620 + }, + "https://github.com/WASasquatch/WAS_Extras": { + "stars": 23, + "last_update": "2024-06-17 04:08:37", + "author_account_age_days": 4620 + }, + "https://github.com/WASasquatch/was-node-suite-comfyui": { + "stars": 924, + "last_update": "2024-06-17 03:26:50", + "author_account_age_days": 4620 + }, + "https://github.com/WebDev9000/WebDev9000-Nodes": { + "stars": 1, + "last_update": "2024-06-14 10:28:22", + "author_account_age_days": 3747 + }, + "https://github.com/Wicloz/ComfyUI-Simply-Nodes": { + "stars": 1, + "last_update": "2024-06-14 10:28:41", + "author_account_age_days": 3638 + }, + "https://github.com/XmYx/deforum-comfy-nodes": { + "stars": 118, + "last_update": "2024-06-18 13:27:12", + "author_account_age_days": 2600 + }, + "https://github.com/Xyem/Xycuno-Oobabooga": { + "stars": 3, + "last_update": "2024-05-23 00:14:14", + "author_account_age_days": 4319 + }, + "https://github.com/YMC-GitHub/ymc-node-suite-comfyui": { + "stars": 16, + "last_update": "2024-05-22 21:15:51", + "author_account_age_days": 2690 + }, + "https://github.com/YOUR-WORST-TACO/ComfyUI-TacoNodes": { + "stars": 14, + "last_update": "2024-05-22 20:48:23", + "author_account_age_days": 3750 + }, + "https://github.com/Yanick112/ComfyUI-ToSVG": { + "stars": 13, + "last_update": "2024-06-14 14:00:22", + "author_account_age_days": 808 + }, + "https://github.com/YinBailiang/MergeBlockWeighted_fo_ComfyUI": { + "stars": 14, + "last_update": "2024-05-22 18:04:22", + "author_account_age_days": 781 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-APISR": { + "stars": 315, + "last_update": "2024-05-22 14:14:46", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Animated-optical-illusions": { + "stars": 17, + "last_update": "2024-06-14 07:06:15", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-ArtGallery": { + "stars": 349, + "last_update": "2024-06-12 04:40:50", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-BRIA_AI-RMBG": { + "stars": 555, + "last_update": "2024-05-22 14:14:18", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-BiRefNet-ZHO": { + "stars": 139, + "last_update": "2024-05-22 14:14:31", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM": { + "stars": 67, + "last_update": "2024-05-22 14:14:03", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Gemini": { + "stars": 585, + "last_update": "2024-05-22 14:15:11", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-InstantID": { + "stars": 1191, + "last_update": "2024-05-22 13:57:55", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Phi-3-mini": { + "stars": 175, + "last_update": "2024-06-18 19:10:34", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PhotoMaker-ZHO": { + "stars": 746, + "last_update": "2024-05-22 14:13:49", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PixArt-alpha-Diffusers": { + "stars": 43, + "last_update": "2024-05-22 13:40:58", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Q-Align": { + "stars": 3, + "last_update": "2024-05-22 14:15:52", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-2": { + "stars": 54, + "last_update": "2024-06-14 12:02:55", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-VL-API": { + "stars": 180, + "last_update": "2024-05-22 14:14:57", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-SVD-ZHO": { + "stars": 94, + "last_update": "2024-05-22 13:40:44", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-SegMoE": { + "stars": 73, + "last_update": "2024-05-22 13:41:14", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Text_Image-Composite": { + "stars": 74, + "last_update": "2024-05-31 12:03:55", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-YoloWorld-EfficientSAM": { + "stars": 457, + "last_update": "2024-05-22 13:01:07", + "author_account_age_days": 334 + }, + "https://github.com/ZHO-ZHO-ZHO/comfyui-portrait-master-zh-cn": { + "stars": 1481, + "last_update": "2024-06-14 09:00:04", + "author_account_age_days": 334 + }, + "https://github.com/ZaneA/ComfyUI-ImageReward": { + "stars": 22, + "last_update": "2024-06-14 08:59:50", + "author_account_age_days": 5535 + }, + "https://github.com/ZeDarkAdam/ComfyUI-Embeddings-Tools": { + "stars": 1, + "last_update": "2024-05-23 01:19:25", + "author_account_age_days": 1188 + }, + "https://github.com/Zuellni/ComfyUI-Custom-Nodes": { + "stars": 44, + "last_update": "2023-09-19 12:11:26", + "author_account_age_days": 517 + }, + "https://github.com/Zuellni/ComfyUI-ExLlama": { + "stars": 99, + "last_update": "2024-06-14 16:54:57", + "author_account_age_days": 517 + }, + "https://github.com/Zuellni/ComfyUI-ExLlama-Nodes": { + "stars": 99, + "last_update": "2024-06-14 16:54:57", + "author_account_age_days": 517 + }, + "https://github.com/Zuellni/ComfyUI-PickScore-Nodes": { + "stars": 22, + "last_update": "2024-06-15 08:23:16", + "author_account_age_days": 517 + }, + "https://github.com/a1lazydog/ComfyUI-AudioScheduler": { + "stars": 90, + "last_update": "2024-06-14 11:02:32", + "author_account_age_days": 4797 + }, + "https://github.com/aburahamu/ComfyUI-IsNiceParts": { + "stars": 2, + "last_update": "2024-06-14 12:01:40", + "author_account_age_days": 67 + }, + "https://github.com/aburahamu/ComfyUI-RequestsPoster": { + "stars": 2, + "last_update": "2024-06-14 13:59:24", + "author_account_age_days": 67 + }, + "https://github.com/abyz22/image_control": { + "stars": 14, + "last_update": "2024-05-22 23:10:07", + "author_account_age_days": 157 + }, + "https://github.com/adbrasi/ComfyUI-TrashNodes-DownloadHuggingface": { + "stars": 4, + "last_update": "2024-05-22 23:24:45", + "author_account_age_days": 698 + }, + "https://github.com/adieyal/comfyui-dynamicprompts": { + "stars": 179, + "last_update": "2024-06-14 20:46:45", + "author_account_age_days": 5011 + }, + "https://github.com/adriflex/ComfyUI_Blender_Texdiff": { + "stars": 1, + "last_update": "2024-05-22 23:14:18", + "author_account_age_days": 2217 + }, + "https://github.com/aegis72/aegisflow_utility_nodes": { + "stars": 22, + "last_update": "2024-05-22 22:10:29", + "author_account_age_days": 578 + }, + "https://github.com/aegis72/comfyui-styles-all": { + "stars": 29, + "last_update": "2024-05-22 22:10:41", + "author_account_age_days": 578 + }, + "https://github.com/ai-liam/comfyui-liam": { + "stars": 2, + "last_update": "2024-06-11 03:14:52", + "author_account_age_days": 1516 + }, + "https://github.com/ai-liam/comfyui_liam_util": { + "stars": 2, + "last_update": "2024-05-22 22:21:23", + "author_account_age_days": 1516 + }, + "https://github.com/aianimation55/ComfyUI-FatLabels": { + "stars": 4, + "last_update": "2024-05-22 21:26:01", + "author_account_age_days": 268 + }, + "https://github.com/al-swaiti/ComfyUI-CascadeResolutions": { + "stars": 1, + "last_update": "2024-06-14 10:27:51", + "author_account_age_days": 924 + }, + "https://github.com/alessandrozonta/ComfyUI-CenterNode": { + "stars": 2, + "last_update": "2024-05-23 01:17:52", + "author_account_age_days": 1191 + }, + "https://github.com/alessandrozonta/ComfyUI-Layers": { + "stars": 10, + "last_update": "2024-06-14 09:04:36", + "author_account_age_days": 1191 + }, + "https://github.com/alessandrozonta/ComfyUI-OpenPose": { + "stars": 1, + "last_update": "2024-06-14 13:59:36", + "author_account_age_days": 1191 + }, + "https://github.com/alexopus/ComfyUI-Image-Saver": { + "stars": 31, + "last_update": "2024-06-16 11:31:41", + "author_account_age_days": 2674 + }, + "https://github.com/ali1234/comfyui-job-iterator": { + "stars": 60, + "last_update": "2024-05-22 20:54:21", + "author_account_age_days": 4855 + }, + "https://github.com/alisson-anjos/ComfyUI-Ollama-Describer": { + "stars": 30, + "last_update": "2024-05-23 00:17:43", + "author_account_age_days": 595 + }, + "https://github.com/alpertunga-bile/prompt-generator-comfyui": { + "stars": 63, + "last_update": "2024-06-09 18:31:22", + "author_account_age_days": 1267 + }, + "https://github.com/alsritter/asymmetric-tiling-comfyui": { + "stars": 14, + "last_update": "2024-05-22 20:43:07", + "author_account_age_days": 1989 + }, + "https://github.com/alt-key-project/comfyui-dream-project": { + "stars": 68, + "last_update": "2024-05-22 20:51:52", + "author_account_age_days": 655 + }, + "https://github.com/alt-key-project/comfyui-dream-video-batches": { + "stars": 50, + "last_update": "2024-05-22 20:52:05", + "author_account_age_days": 655 + }, + "https://github.com/an90ray/ComfyUI_RErouter_CustomNodes": { + "stars": 0, + "last_update": "2024-05-22 22:21:00", + "author_account_age_days": 183 + }, + "https://github.com/andersxa/comfyui-PromptAttention": { + "stars": 20, + "last_update": "2024-05-22 18:16:30", + "author_account_age_days": 2948 + }, + "https://github.com/angeloshredder/StableCascadeResizer": { + "stars": 1, + "last_update": "2024-05-23 00:12:55", + "author_account_age_days": 1823 + }, + "https://github.com/ansonkao/comfyui-geometry": { + "stars": 7, + "last_update": "2024-06-14 09:03:19", + "author_account_age_days": 340 + }, + "https://github.com/antrobot1234/antrobots-comfyUI-nodepack": { + "stars": 9, + "last_update": "2024-05-28 14:44:16", + "author_account_age_days": 2857 + }, + "https://github.com/aria1th/ComfyUI-LogicUtils": { + "stars": 19, + "last_update": "2024-05-23 01:27:16", + "author_account_age_days": 2340 + }, + "https://github.com/asagi4/ComfyUI-CADS": { + "stars": 32, + "last_update": "2024-05-23 18:14:56", + "author_account_age_days": 435 + }, + "https://github.com/asagi4/comfyui-prompt-control": { + "stars": 156, + "last_update": "2024-06-16 19:07:32", + "author_account_age_days": 435 + }, + "https://github.com/asagi4/comfyui-utility-nodes": { + "stars": 7, + "last_update": "2024-05-25 11:40:49", + "author_account_age_days": 435 + }, + "https://github.com/aszc-dev/ComfyUI-CoreMLSuite": { + "stars": 87, + "last_update": "2024-05-22 21:23:52", + "author_account_age_days": 2722 + }, + "https://github.com/atmaranto/ComfyUI-SaveAsScript": { + "stars": 44, + "last_update": "2024-06-14 09:01:17", + "author_account_age_days": 2343 + }, + "https://github.com/audioscavenger/ComfyUI-Thumbnails": { + "stars": 4, + "last_update": "2024-06-07 07:19:30", + "author_account_age_days": 4115 + }, + "https://github.com/audioscavenger/save-image-extended-comfyui": { + "stars": 16, + "last_update": "2024-06-18 04:57:11", + "author_account_age_days": 4115 + }, + "https://github.com/avatechai/avatar-graph-comfyui": { + "stars": 214, + "last_update": "2024-05-22 21:14:14", + "author_account_age_days": 849 + }, + "https://github.com/aws-samples/comfyui-llm-node-for-amazon-bedrock": { + "stars": 4, + "last_update": "2024-06-12 15:04:39", + "author_account_age_days": 3553 + }, + "https://github.com/azure-dragon-ai/ComfyUI-ClipScore-Nodes": { + "stars": 2, + "last_update": "2024-05-22 23:16:28", + "author_account_age_days": 296 + }, + "https://github.com/badayvedat/ComfyUI-fal-Connector": { + "stars": 12, + "last_update": "2024-06-19 01:21:44", + "author_account_age_days": 1765 + }, + "https://github.com/badjeff/comfyui_lora_tag_loader": { + "stars": 40, + "last_update": "2024-05-22 20:40:03", + "author_account_age_days": 5357 + }, + "https://github.com/baicai99/ComfyUI-FrameSkipping": { + "stars": 5, + "last_update": "2024-06-18 10:25:55", + "author_account_age_days": 826 + }, + "https://github.com/banodoco/steerable-motion": { + "stars": 739, + "last_update": "2024-06-15 23:01:54", + "author_account_age_days": 396 + }, + "https://github.com/bash-j/mikey_nodes": { + "stars": 79, + "last_update": "2024-06-15 10:31:20", + "author_account_age_days": 4182 + }, + "https://github.com/bedovyy/ComfyUI_NAIDGenerator": { + "stars": 17, + "last_update": "2024-06-14 09:04:39", + "author_account_age_days": 357 + }, + "https://github.com/bilal-arikan/ComfyUI_TextAssets": { + "stars": 2, + "last_update": "2024-05-22 23:23:50", + "author_account_age_days": 3502 + }, + "https://github.com/bitaffinity/ComfyUI_HF_Inference": { + "stars": 0, + "last_update": "2024-06-14 10:23:29", + "author_account_age_days": 51 + }, + "https://github.com/blepping/ComfyUI-bleh": { + "stars": 31, + "last_update": "2024-05-22 23:17:49", + "author_account_age_days": 149 + }, + "https://github.com/blepping/ComfyUI-sonar": { + "stars": 31, + "last_update": "2024-05-22 23:18:26", + "author_account_age_days": 149 + }, + "https://github.com/blepping/comfyui_jankhidiffusion": { + "stars": 88, + "last_update": "2024-05-22 23:18:40", + "author_account_age_days": 149 + }, + "https://github.com/blueraincoatli/comfyUI_SillyNodes": { + "stars": 3, + "last_update": "2024-06-09 13:30:57", + "author_account_age_days": 307 + }, + "https://github.com/bmad4ever/ComfyUI-Bmad-DirtyUndoRedo": { + "stars": 50, + "last_update": "2024-05-22 18:11:51", + "author_account_age_days": 3531 + }, + "https://github.com/bmad4ever/comfyui_ab_samplercustom": { + "stars": 5, + "last_update": "2024-05-22 18:12:18", + "author_account_age_days": 3531 + }, + "https://github.com/bmad4ever/comfyui_bmad_nodes": { + "stars": 47, + "last_update": "2024-06-13 10:42:09", + "author_account_age_days": 3531 + }, + "https://github.com/bmad4ever/comfyui_lists_cartesian_product": { + "stars": 2, + "last_update": "2024-05-22 20:18:07", + "author_account_age_days": 3531 + }, + "https://github.com/bmad4ever/comfyui_quilting": { + "stars": 3, + "last_update": "2024-06-18 01:23:37", + "author_account_age_days": 3531 + }, + "https://github.com/bmad4ever/comfyui_wfc_like": { + "stars": 5, + "last_update": "2024-06-02 23:06:37", + "author_account_age_days": 3531 + }, + "https://github.com/bobmagicii/comfykit-custom-nodes": { + "stars": 1, + "last_update": "2024-06-04 20:04:00", + "author_account_age_days": 4739 + }, + "https://github.com/bradsec/ComfyUI_ResolutionSelector": { + "stars": 7, + "last_update": "2024-05-22 20:44:31", + "author_account_age_days": 3651 + }, + "https://github.com/braintacles/braintacles-comfyui-nodes": { + "stars": 1, + "last_update": "2024-05-23 06:06:16", + "author_account_age_days": 426 + }, + "https://github.com/brianfitzgerald/style_aligned_comfy": { + "stars": 246, + "last_update": "2024-05-30 14:23:40", + "author_account_age_days": 4234 + }, + "https://github.com/bronkula/comfyui-fitsize": { + "stars": 32, + "last_update": "2024-05-22 21:32:34", + "author_account_age_days": 5150 + }, + "https://github.com/bruefire/ComfyUI-SeqImageLoader": { + "stars": 28, + "last_update": "2024-06-08 15:48:49", + "author_account_age_days": 2360 + }, + "https://github.com/budihartono/comfyui_otonx_nodes": { + "stars": 1, + "last_update": "2024-05-25 04:10:08", + "author_account_age_days": 4681 + }, + "https://github.com/bvhari/ComfyUI_ImageProcessing": { + "stars": 16, + "last_update": "2024-05-22 18:08:40", + "author_account_age_days": 1169 + }, + "https://github.com/bvhari/ComfyUI_LatentToRGB": { + "stars": 11, + "last_update": "2024-05-22 18:08:53", + "author_account_age_days": 1169 + }, + "https://github.com/bvhari/ComfyUI_PerpWeight": { + "stars": 10, + "last_update": "2024-05-22 18:09:06", + "author_account_age_days": 1169 + }, + "https://github.com/bvhari/ComfyUI_SUNoise": { + "stars": 3, + "last_update": "2024-05-22 18:09:19", + "author_account_age_days": 1169 + }, + "https://github.com/cdb-boop/ComfyUI-Bringing-Old-Photos-Back-to-Life": { + "stars": 18, + "last_update": "2024-05-23 00:09:32", + "author_account_age_days": 1199 + }, + "https://github.com/cdb-boop/comfyui-image-round": { + "stars": 0, + "last_update": "2024-05-23 00:09:02", + "author_account_age_days": 1199 + }, + "https://github.com/cerspense/ComfyUI_cspnodes": { + "stars": 24, + "last_update": "2024-06-14 07:12:08", + "author_account_age_days": 2676 + }, + "https://github.com/ceruleandeep/ComfyUI-LLaVA-Captioner": { + "stars": 76, + "last_update": "2024-05-22 22:17:55", + "author_account_age_days": 1148 + }, + "https://github.com/chakib-belgaid/ComfyUI-autosize": { + "stars": 0, + "last_update": "2024-06-14 07:13:20", + "author_account_age_days": 3831 + }, + "https://github.com/chakib-belgaid/Comfyui_Prompt_styler": { + "stars": 0, + "last_update": "2024-06-14 09:04:45", + "author_account_age_days": 3831 + }, + "https://github.com/chandlergis/ComfyUI-IMG_Query": { + "stars": 1, + "last_update": "2024-05-23 01:25:57", + "author_account_age_days": 351 + }, + "https://github.com/chandlergis/ComfyUI_EmojiOverlay": { + "stars": 0, + "last_update": "2024-06-14 09:05:03", + "author_account_age_days": 351 + }, + "https://github.com/chaojie/ComfyUI-AniPortrait": { + "stars": 226, + "last_update": "2024-05-22 22:26:03", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-CameraCtrl-Wrapper": { + "stars": 15, + "last_update": "2024-06-14 09:07:23", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Champ": { + "stars": 19, + "last_update": "2024-05-22 22:26:47", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-DragAnything": { + "stars": 66, + "last_update": "2024-06-14 10:23:53", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-DragNUWA": { + "stars": 358, + "last_update": "2024-06-14 10:25:01", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-DynamiCrafter": { + "stars": 108, + "last_update": "2024-06-14 10:23:59", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-EasyAnimate": { + "stars": 39, + "last_update": "2024-05-22 22:24:00", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Gemma": { + "stars": 5, + "last_update": "2024-05-22 22:27:47", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-I2VGEN-XL": { + "stars": 27, + "last_update": "2024-06-14 09:06:10", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Img2Img-Turbo": { + "stars": 36, + "last_update": "2024-05-22 22:26:30", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-LaVIT": { + "stars": 8, + "last_update": "2024-06-14 10:27:44", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-LightGlue": { + "stars": 48, + "last_update": "2024-01-20 16:53:51", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Moore-AnimateAnyone": { + "stars": 201, + "last_update": "2024-06-10 20:16:06", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Motion-Vector-Extractor": { + "stars": 0, + "last_update": "2024-06-14 10:26:15", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-MotionCtrl": { + "stars": 125, + "last_update": "2024-06-14 10:26:02", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-MotionCtrl-SVD": { + "stars": 78, + "last_update": "2024-06-14 10:26:30", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-MuseTalk": { + "stars": 139, + "last_update": "2024-05-22 22:25:07", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-MuseV": { + "stars": 122, + "last_update": "2024-05-22 22:25:31", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Open-Sora": { + "stars": 86, + "last_update": "2024-05-22 22:26:59", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Open-Sora-Plan": { + "stars": 48, + "last_update": "2024-05-29 16:15:10", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Panda3d": { + "stars": 13, + "last_update": "2024-06-14 10:28:47", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Pymunk": { + "stars": 16, + "last_update": "2024-06-14 12:02:32", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-RAFT": { + "stars": 25, + "last_update": "2024-06-14 11:02:00", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-SimDA": { + "stars": 13, + "last_update": "2024-06-14 12:02:39", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Trajectory": { + "stars": 5, + "last_update": "2024-05-22 22:27:12", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-Video-Editing-X-Attention": { + "stars": 17, + "last_update": "2024-06-14 10:28:16", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI-dust3r": { + "stars": 14, + "last_update": "2024-05-22 22:27:33", + "author_account_age_days": 4828 + }, + "https://github.com/chaojie/ComfyUI_StreamingT2V": { + "stars": 23, + "last_update": "2024-06-14 10:26:21", + "author_account_age_days": 4828 + }, + "https://github.com/chaosaiart/Chaosaiart-Nodes": { + "stars": 47, + "last_update": "2024-05-27 10:55:18", + "author_account_age_days": 328 + }, + "https://github.com/chenpx976/ComfyUI-RunRunRun": { + "stars": 0, + "last_update": "2024-05-23 01:19:37", + "author_account_age_days": 3410 + }, + "https://github.com/chesnokovivan/ComfyUI-Novakid": { + "stars": 0, + "last_update": "2024-06-10 20:15:56", + "author_account_age_days": 1524 + }, + "https://github.com/chflame163/ComfyUI_FaceSimilarity": { + "stars": 8, + "last_update": "2024-05-23 12:48:18", + "author_account_age_days": 439 + }, + "https://github.com/chflame163/ComfyUI_LayerStyle": { + "stars": 615, + "last_update": "2024-06-17 12:12:21", + "author_account_age_days": 439 + }, + "https://github.com/chflame163/ComfyUI_MSSpeech_TTS": { + "stars": 22, + "last_update": "2024-05-25 02:39:56", + "author_account_age_days": 439 + }, + "https://github.com/chflame163/ComfyUI_WordCloud": { + "stars": 68, + "last_update": "2024-05-25 02:41:06", + "author_account_age_days": 439 + }, + "https://github.com/chibiace/ComfyUI-Chibi-Nodes": { + "stars": 26, + "last_update": "2024-05-22 21:16:12", + "author_account_age_days": 2844 + }, + "https://github.com/choey/Comfy-Topaz": { + "stars": 23, + "last_update": "2024-06-14 10:59:30", + "author_account_age_days": 5518 + }, + "https://github.com/chris-the-wiz/EmbeddingsCurveEditor_ComfyUI": { + "stars": 3, + "last_update": "2024-06-19 07:24:33", + "author_account_age_days": 1791 + }, + "https://github.com/chrisfreilich/virtuoso-nodes": { + "stars": 49, + "last_update": "2024-05-23 01:15:43", + "author_account_age_days": 727 + }, + "https://github.com/chrisgoringe/cg-image-picker": { + "stars": 177, + "last_update": "2024-06-12 18:50:30", + "author_account_age_days": 4060 + }, + "https://github.com/chrisgoringe/cg-noise": { + "stars": 25, + "last_update": "2024-06-14 08:10:52", + "author_account_age_days": 4060 + }, + "https://github.com/chrisgoringe/cg-prompt-info": { + "stars": 25, + "last_update": "2024-05-22 21:07:33", + "author_account_age_days": 4060 + }, + "https://github.com/chrisgoringe/cg-use-everywhere": { + "stars": 329, + "last_update": "2024-06-06 05:23:41", + "author_account_age_days": 4060 + }, + "https://github.com/chrish-slingshot/CrasHUtils": { + "stars": 11, + "last_update": "2024-05-22 21:15:25", + "author_account_age_days": 595 + }, + "https://github.com/christian-byrne/img2colors-comfyui-node": { + "stars": 1, + "last_update": "2024-05-25 03:14:52", + "author_account_age_days": 1343 + }, + "https://github.com/christian-byrne/img2txt-comfyui-nodes": { + "stars": 23, + "last_update": "2024-05-28 14:02:16", + "author_account_age_days": 1343 + }, + "https://github.com/christian-byrne/size-match-compositing-nodes": { + "stars": 2, + "last_update": "2024-06-01 05:49:27", + "author_account_age_days": 1343 + }, + "https://github.com/city96/ComfyUI_ColorMod": { + "stars": 39, + "last_update": "2024-05-22 18:06:19", + "author_account_age_days": 492 + }, + "https://github.com/city96/ComfyUI_DiT": { + "stars": 2, + "last_update": "2024-05-22 18:06:05", + "author_account_age_days": 492 + }, + "https://github.com/city96/ComfyUI_ExtraModels": { + "stars": 275, + "last_update": "2024-06-19 08:45:39", + "author_account_age_days": 492 + }, + "https://github.com/city96/ComfyUI_NetDist": { + "stars": 218, + "last_update": "2024-05-22 18:05:10", + "author_account_age_days": 492 + }, + "https://github.com/city96/SD-Advanced-Noise": { + "stars": 18, + "last_update": "2024-05-22 18:05:35", + "author_account_age_days": 492 + }, + "https://github.com/city96/SD-Latent-Interposer": { + "stars": 174, + "last_update": "2024-06-17 05:27:08", + "author_account_age_days": 492 + }, + "https://github.com/city96/SD-Latent-Upscaler": { + "stars": 111, + "last_update": "2024-05-22 18:05:50", + "author_account_age_days": 492 + }, + "https://github.com/civitai/comfy-nodes": { + "stars": 85, + "last_update": "2024-06-17 10:01:06", + "author_account_age_days": 593 + }, + "https://github.com/claussteinmassl/ComfyUI-CS-CustomNodes": { + "stars": 1, + "last_update": "2024-06-14 09:03:10", + "author_account_age_days": 2695 + }, + "https://github.com/comfyanonymous/ComfyUI": { + "stars": 39239, + "last_update": "2024-06-19 09:22:29", + "author_account_age_days": 544 + }, + "https://github.com/comfyanonymous/ComfyUI_TensorRT": { + "stars": 281, + "last_update": "2024-06-18 14:23:14", + "author_account_age_days": 544 + }, + "https://github.com/comfyanonymous/ComfyUI_experiments": { + "stars": 133, + "last_update": "2024-05-22 15:29:49", + "author_account_age_days": 544 + }, + "https://github.com/concarne000/ConCarneNode": { + "stars": 4, + "last_update": "2024-05-22 22:10:18", + "author_account_age_days": 1896 + }, + "https://github.com/conquestace/ComfyUI-ImageUploader": { + "stars": 1, + "last_update": "2024-05-23 01:25:49", + "author_account_age_days": 4604 + }, + "https://github.com/coolzilj/ComfyUI-LJNodes": { + "stars": 51, + "last_update": "2024-06-15 01:57:32", + "author_account_age_days": 4658 + }, + "https://github.com/coolzilj/ComfyUI-Photopea": { + "stars": 56, + "last_update": "2024-06-14 08:10:57", + "author_account_age_days": 4658 + }, + "https://github.com/coreyryanhanson/ComfyQR": { + "stars": 50, + "last_update": "2024-06-14 09:01:36", + "author_account_age_days": 3051 + }, + "https://github.com/coreyryanhanson/ComfyQR-scanning-nodes": { + "stars": 8, + "last_update": "2024-06-14 09:02:46", + "author_account_age_days": 3051 + }, + "https://github.com/cozymantis/cozy-utils-comfyui-nodes": { + "stars": 3, + "last_update": "2024-05-23 00:10:45", + "author_account_age_days": 103 + }, + "https://github.com/cozymantis/human-parser-comfyui-node": { + "stars": 47, + "last_update": "2024-05-23 00:10:21", + "author_account_age_days": 103 + }, + "https://github.com/cozymantis/pose-generator-comfyui-node": { + "stars": 26, + "last_update": "2024-05-23 00:10:33", + "author_account_age_days": 103 + }, + "https://github.com/crystian/ComfyUI-Crystools": { + "stars": 471, + "last_update": "2024-06-07 04:43:29", + "author_account_age_days": 4112 + }, + "https://github.com/crystian/ComfyUI-Crystools-save": { + "stars": 29, + "last_update": "2024-05-22 22:20:15", + "author_account_age_days": 4112 + }, + "https://github.com/cubiq/ComfyUI_FaceAnalysis": { + "stars": 207, + "last_update": "2024-06-14 08:08:35", + "author_account_age_days": 5006 + }, + "https://github.com/cubiq/ComfyUI_IPAdapter_plus": { + "stars": 2993, + "last_update": "2024-06-09 10:11:42", + "author_account_age_days": 5006 + }, + "https://github.com/cubiq/ComfyUI_InstantID": { + "stars": 893, + "last_update": "2024-06-14 09:03:05", + "author_account_age_days": 5006 + }, + "https://github.com/cubiq/ComfyUI_SimpleMath": { + "stars": 15, + "last_update": "2024-06-14 09:02:50", + "author_account_age_days": 5006 + }, + "https://github.com/cubiq/ComfyUI_essentials": { + "stars": 318, + "last_update": "2024-06-15 08:07:12", + "author_account_age_days": 5006 + }, + "https://github.com/cubiq/PuLID_ComfyUI": { + "stars": 400, + "last_update": "2024-06-14 07:11:56", + "author_account_age_days": 5006 + }, + "https://github.com/cuongloveit/comfy_http_request": { + "stars": 0, + "last_update": "2024-06-14 11:00:11", + "author_account_age_days": 3247 + }, + "https://github.com/curiousjp/ComfyUI-MaskBatchPermutations": { + "stars": 3, + "last_update": "2024-05-28 13:09:32", + "author_account_age_days": 1924 + }, + "https://github.com/czcz1024/Comfyui-FaceCompare": { + "stars": 0, + "last_update": "2024-06-14 07:13:32", + "author_account_age_days": 4229 + }, + "https://github.com/da2el-ai/ComfyUI-d2-size-selector": { + "stars": 1, + "last_update": "2024-05-23 01:16:17", + "author_account_age_days": 384 + }, + "https://github.com/da2el-ai/ComfyUI-d2-steps": { + "stars": 4, + "last_update": "2024-05-23 01:16:06", + "author_account_age_days": 384 + }, + "https://github.com/dagthomas/comfyui_dagthomas": { + "stars": 72, + "last_update": "2024-06-16 22:39:37", + "author_account_age_days": 4066 + }, + "https://github.com/daniabib/ComfyUI_ProPainter_Nodes": { + "stars": 143, + "last_update": "2024-06-14 11:00:17", + "author_account_age_days": 2399 + }, + "https://github.com/daniel-lewis-ab/ComfyUI-Llama": { + "stars": 25, + "last_update": "2024-06-14 08:08:32", + "author_account_age_days": 3346 + }, + "https://github.com/daniel-lewis-ab/ComfyUI-TTS": { + "stars": 11, + "last_update": "2024-06-14 08:09:49", + "author_account_age_days": 3346 + }, + "https://github.com/darkpixel/darkprompts": { + "stars": 6, + "last_update": "2024-05-23 19:48:02", + "author_account_age_days": 5319 + }, + "https://github.com/dave-palt/comfyui_DSP_imagehelpers": { + "stars": 0, + "last_update": "2024-05-22 23:12:11", + "author_account_age_days": 153 + }, + "https://github.com/daxcay/ComfyUI-DRMN": { + "stars": 12, + "last_update": "2024-06-16 07:41:11", + "author_account_age_days": 90 + }, + "https://github.com/daxcay/ComfyUI-DataSet": { + "stars": 12, + "last_update": "2024-06-16 07:41:11", + "author_account_age_days": 90 + }, + "https://github.com/daxcay/ComfyUI-JDCN": { + "stars": 59, + "last_update": "2024-06-13 15:10:48", + "author_account_age_days": 90 + }, + "https://github.com/daxcay/ComfyUI-NODEJS": { + "stars": 4, + "last_update": "2024-06-13 14:30:45", + "author_account_age_days": 90 + }, + "https://github.com/daxthin/DZ-FaceDetailer": { + "stars": 100, + "last_update": "2024-06-17 10:00:30", + "author_account_age_days": 1226 + }, + "https://github.com/dchatel/comfyui_facetools": { + "stars": 43, + "last_update": "2024-06-17 15:45:08", + "author_account_age_days": 4530 + }, + "https://github.com/denfrost/Den_ComfyUI_Workflow": { + "stars": 1, + "last_update": "2024-06-14 08:57:51", + "author_account_age_days": 3491 + }, + "https://github.com/deroberon/StableZero123-comfyui": { + "stars": 132, + "last_update": "2024-05-22 22:09:53", + "author_account_age_days": 5291 + }, + "https://github.com/deroberon/demofusion-comfyui": { + "stars": 83, + "last_update": "2024-05-22 22:09:42", + "author_account_age_days": 5291 + }, + "https://github.com/dfl/comfyui-clip-with-break": { + "stars": 9, + "last_update": "2024-05-22 23:23:15", + "author_account_age_days": 5969 + }, + "https://github.com/dfl/comfyui-tcd-scheduler": { + "stars": 76, + "last_update": "2024-05-22 23:23:28", + "author_account_age_days": 5969 + }, + "https://github.com/diStyApps/ComfyUI_FrameMaker": { + "stars": 10, + "last_update": "2024-05-23 00:11:33", + "author_account_age_days": 4199 + }, + "https://github.com/dicksondickson/ComfyUI-Dickson-Nodes": { + "stars": 2, + "last_update": "2024-06-18 01:56:55", + "author_account_age_days": 3986 + }, + "https://github.com/digitaljohn/comfyui-propost": { + "stars": 103, + "last_update": "2024-05-22 23:24:19", + "author_account_age_days": 4512 + }, + "https://github.com/dimtoneff/ComfyUI-PixelArt-Detector": { + "stars": 162, + "last_update": "2024-06-14 08:58:27", + "author_account_age_days": 3409 + }, + "https://github.com/diontimmer/ComfyUI-Vextra-Nodes": { + "stars": 60, + "last_update": "2024-05-22 17:55:21", + "author_account_age_days": 4765 + }, + "https://github.com/discopixel-studio/comfyui-discopixel": { + "stars": 7, + "last_update": "2024-06-14 09:03:19", + "author_account_age_days": 340 + }, + "https://github.com/discus0434/comfyui-aesthetic-predictor-v2-5": { + "stars": 4, + "last_update": "2024-06-14 08:12:05", + "author_account_age_days": 1465 + }, + "https://github.com/discus0434/comfyui-caching-embeddings": { + "stars": 1, + "last_update": "2024-06-14 08:59:36", + "author_account_age_days": 1465 + }, + "https://github.com/djbielejeski/a-person-mask-generator": { + "stars": 228, + "last_update": "2024-06-15 04:06:44", + "author_account_age_days": 4278 + }, + "https://github.com/dmMaze/sketch2manga": { + "stars": 24, + "last_update": "2024-06-16 14:10:01", + "author_account_age_days": 1844 + }, + "https://github.com/dmarx/ComfyUI-AudioReactive": { + "stars": 10, + "last_update": "2024-05-22 22:12:53", + "author_account_age_days": 4499 + }, + "https://github.com/dmarx/ComfyUI-Keyframed": { + "stars": 81, + "last_update": "2024-05-22 22:12:50", + "author_account_age_days": 4499 + }, + "https://github.com/drago87/ComfyUI_Dragos_Nodes": { + "stars": 3, + "last_update": "2024-05-22 21:32:15", + "author_account_age_days": 3764 + }, + "https://github.com/drustan-hawk/primitive-types": { + "stars": 5, + "last_update": "2024-05-22 21:23:12", + "author_account_age_days": 284 + }, + "https://github.com/e7mac/ComfyUI-ShadertoyGL": { + "stars": 2, + "last_update": "2024-05-23 01:09:41", + "author_account_age_days": 4798 + }, + "https://github.com/ealkanat/comfyui_easy_padding": { + "stars": 12, + "last_update": "2024-05-22 21:58:52", + "author_account_age_days": 2458 + }, + "https://github.com/edenartlab/eden_comfy_pipelines": { + "stars": 40, + "last_update": "2024-06-06 21:49:00", + "author_account_age_days": 267 + }, + "https://github.com/evanspearman/ComfyMath": { + "stars": 52, + "last_update": "2023-08-27 03:29:04", + "author_account_age_days": 4233 + }, + "https://github.com/exdysa/comfyui-selector": { + "stars": 1, + "last_update": "2024-06-19 05:54:30", + "author_account_age_days": 990 + }, + "https://github.com/failfa-st/failfast-comfyui-extensions": { + "stars": 128, + "last_update": "2024-06-17 10:01:12", + "author_account_age_days": 268 + }, + "https://github.com/fexli/fexli-util-node-comfyui": { + "stars": 3, + "last_update": "2024-05-22 21:27:36", + "author_account_age_days": 1554 + }, + "https://github.com/fexploit/ComfyUI-AutoLabel": { + "stars": 4, + "last_update": "2024-06-14 08:09:41", + "author_account_age_days": 5039 + }, + "https://github.com/fexploit/ComfyUI-AutoTrimBG": { + "stars": 2, + "last_update": "2024-05-24 20:38:15", + "author_account_age_days": 5039 + }, + "https://github.com/fexploit/ComfyUI-Classifier": { + "stars": 1, + "last_update": "2024-06-14 16:58:31", + "author_account_age_days": 5039 + }, + "https://github.com/filipemeneses/comfy_pixelization": { + "stars": 28, + "last_update": "2024-05-22 20:59:16", + "author_account_age_days": 3471 + }, + "https://github.com/filliptm/ComfyUI_Fill-Nodes": { + "stars": 116, + "last_update": "2024-06-09 08:42:25", + "author_account_age_days": 1731 + }, + "https://github.com/florestefano1975/ComfyUI-HiDiffusion": { + "stars": 131, + "last_update": "2024-05-22 00:33:06", + "author_account_age_days": 188 + }, + "https://github.com/florestefano1975/ComfyUI-StabilityAI-Suite": { + "stars": 2, + "last_update": "2024-06-14 09:05:46", + "author_account_age_days": 188 + }, + "https://github.com/florestefano1975/comfyui-portrait-master": { + "stars": 749, + "last_update": "2024-05-22 00:30:41", + "author_account_age_days": 188 + }, + "https://github.com/florestefano1975/comfyui-prompt-composer": { + "stars": 208, + "last_update": "2024-05-22 00:34:06", + "author_account_age_days": 188 + }, + "https://github.com/flowtyone/ComfyUI-Flowty-CRM": { + "stars": 123, + "last_update": "2024-06-14 10:23:09", + "author_account_age_days": 268 + }, + "https://github.com/flowtyone/ComfyUI-Flowty-LDSR": { + "stars": 162, + "last_update": "2024-06-14 09:04:51", + "author_account_age_days": 268 + }, + "https://github.com/flowtyone/ComfyUI-Flowty-TripoSR": { + "stars": 356, + "last_update": "2024-06-16 00:53:22", + "author_account_age_days": 268 + }, + "https://github.com/flyingshutter/As_ComfyUI_CustomNodes": { + "stars": 7, + "last_update": "2024-05-22 18:07:19", + "author_account_age_days": 3490 + }, + "https://github.com/fmatray/ComfyUI_BattlemapGrid": { + "stars": 0, + "last_update": "2024-06-05 22:35:06", + "author_account_age_days": 3616 + }, + "https://github.com/fofr/ComfyUI-HyperSDXL1StepUnetScheduler": { + "stars": 10, + "last_update": "2024-05-23 01:15:32", + "author_account_age_days": 5102 + }, + "https://github.com/forever22777/comfyui-self-guidance": { + "stars": 6, + "last_update": "2024-06-14 07:12:02", + "author_account_age_days": 319 + }, + "https://github.com/foxtrot-roger/comfyui-rf-nodes": { + "stars": 1, + "last_update": "2024-05-22 23:09:13", + "author_account_age_days": 2315 + }, + "https://github.com/frankchieng/ComfyUI_Aniportrait": { + "stars": 43, + "last_update": "2024-05-23 00:23:20", + "author_account_age_days": 435 + }, + "https://github.com/frankchieng/ComfyUI_MagicClothing": { + "stars": 408, + "last_update": "2024-05-23 00:23:32", + "author_account_age_days": 435 + }, + "https://github.com/frankchieng/ComfyUI_llm_easyanimiate": { + "stars": 8, + "last_update": "2024-06-14 09:06:05", + "author_account_age_days": 435 + }, + "https://github.com/fsdymy1024/ComfyUI_fsdymy": { + "stars": 2, + "last_update": "2024-05-23 01:21:16", + "author_account_age_days": 2200 + }, + "https://github.com/gemell1/ComfyUI_GMIC": { + "stars": 5, + "last_update": "2024-05-22 21:28:51", + "author_account_age_days": 1951 + }, + "https://github.com/get-salt-AI/SaltAI": { + "stars": 52, + "last_update": "2024-05-23 00:54:46", + "author_account_age_days": 111 + }, + "https://github.com/get-salt-AI/SaltAI_Language_Toolkit": { + "stars": 15, + "last_update": "2024-06-14 09:06:17", + "author_account_age_days": 111 + }, + "https://github.com/get-salt-AI/SaltAI_LlamaIndex": { + "stars": 15, + "last_update": "2024-06-14 09:06:17", + "author_account_age_days": 111 + }, + "https://github.com/ginlov/segment_to_mask_comfyui": { + "stars": 1, + "last_update": "2024-06-14 10:23:23", + "author_account_age_days": 2006 + }, + "https://github.com/giriss/comfy-image-saver": { + "stars": 143, + "last_update": "2024-05-22 20:40:55", + "author_account_age_days": 4233 + }, + "https://github.com/githubYiheng/ComfyUI_Change_IMAGE_BOREDER": { + "stars": 0, + "last_update": "2024-05-23 01:20:09", + "author_account_age_days": 3898 + }, + "https://github.com/githubYiheng/ComfyUI_GetFileNameFromURL": { + "stars": 0, + "last_update": "2024-05-23 01:19:47", + "author_account_age_days": 3898 + }, + "https://github.com/githubYiheng/comfyui_kmeans_filter": { + "stars": 0, + "last_update": "2024-06-14 09:01:24", + "author_account_age_days": 3898 + }, + "https://github.com/githubYiheng/comfyui_meanshift_filter": { + "stars": 0, + "last_update": "2024-06-14 10:59:43", + "author_account_age_days": 3898 + }, + "https://github.com/githubYiheng/comfyui_private_postprocessor": { + "stars": 0, + "last_update": "2024-06-14 08:09:39", + "author_account_age_days": 3898 + }, + "https://github.com/glibsonoran/Plush-for-ComfyUI": { + "stars": 104, + "last_update": "2024-06-19 00:05:03", + "author_account_age_days": 2492 + }, + "https://github.com/glifxyz/ComfyUI-GlifNodes": { + "stars": 7, + "last_update": "2024-06-19 08:09:46", + "author_account_age_days": 568 + }, + "https://github.com/glowcone/comfyui-base64-to-image": { + "stars": 8, + "last_update": "2024-06-14 09:01:12", + "author_account_age_days": 3740 + }, + "https://github.com/godspede/ComfyUI_Substring": { + "stars": 0, + "last_update": "2024-05-22 23:15:48", + "author_account_age_days": 3108 + }, + "https://github.com/gokayfem/ComfyUI-Depth-Visualization": { + "stars": 48, + "last_update": "2024-05-21 00:37:05", + "author_account_age_days": 1052 + }, + "https://github.com/gokayfem/ComfyUI-Dream-Interpreter": { + "stars": 67, + "last_update": "2024-05-21 00:36:50", + "author_account_age_days": 1052 + }, + "https://github.com/gokayfem/ComfyUI-Texture-Simple": { + "stars": 29, + "last_update": "2024-05-21 00:19:53", + "author_account_age_days": 1052 + }, + "https://github.com/gokayfem/ComfyUI_VLM_nodes": { + "stars": 273, + "last_update": "2024-06-02 10:23:55", + "author_account_age_days": 1052 + }, + "https://github.com/gonzalu/ComfyUI_YFG_Comical": { + "stars": 13, + "last_update": "2024-06-14 01:34:14", + "author_account_age_days": 2456 + }, + "https://github.com/griptape-ai/ComfyUI-Griptape": { + "stars": 20, + "last_update": "2024-06-19 01:55:36", + "author_account_age_days": 515 + }, + "https://github.com/guill/abracadabra-comfyui": { + "stars": 1, + "last_update": "2024-06-14 08:12:07", + "author_account_age_days": 4188 + }, + "https://github.com/guoyk93/yk-node-suite-comfyui": { + "stars": 10, + "last_update": "2024-06-17 10:00:36", + "author_account_age_days": 1484 + }, + "https://github.com/hackkhai/ComfyUI-Image-Matting": { + "stars": 12, + "last_update": "2024-05-23 00:11:45", + "author_account_age_days": 1846 + }, + "https://github.com/haohaocreates/ComfyUI-HH-Image-Selector": { + "stars": 0, + "last_update": "2024-06-14 08:13:19", + "author_account_age_days": 100 + }, + "https://github.com/hay86/ComfyUI_AceNodes": { + "stars": 8, + "last_update": "2024-06-05 07:54:59", + "author_account_age_days": 4662 + }, + "https://github.com/hay86/ComfyUI_DDColor": { + "stars": 1, + "last_update": "2024-06-14 08:12:13", + "author_account_age_days": 4662 + }, + "https://github.com/hay86/ComfyUI_Dreamtalk": { + "stars": 7, + "last_update": "2024-06-14 09:02:55", + "author_account_age_days": 4662 + }, + "https://github.com/hay86/ComfyUI_MiniCPM-V": { + "stars": 5, + "last_update": "2024-05-29 07:27:09", + "author_account_age_days": 4662 + }, + "https://github.com/hay86/ComfyUI_OpenVoice": { + "stars": 3, + "last_update": "2024-05-23 00:18:52", + "author_account_age_days": 4662 + }, + "https://github.com/hayden-fr/ComfyUI-Image-Browsing": { + "stars": 2, + "last_update": "2024-05-22 20:54:07", + "author_account_age_days": 1932 + }, + "https://github.com/hayden-fr/ComfyUI-Model-Manager": { + "stars": 24, + "last_update": "2024-05-22 20:53:55", + "author_account_age_days": 1932 + }, + "https://github.com/hben35096/ComfyUI-ToolBox": { + "stars": 0, + "last_update": "2024-06-14 08:09:46", + "author_account_age_days": 342 + }, + "https://github.com/heshengtao/comfyui_LLM_party": { + "stars": 113, + "last_update": "2024-06-19 04:29:30", + "author_account_age_days": 2890 + }, + "https://github.com/hhhzzyang/Comfyui_Lama": { + "stars": 36, + "last_update": "2024-05-22 21:13:19", + "author_account_age_days": 502 + }, + "https://github.com/hiforce/comfyui-hiforce-plugin": { + "stars": 2, + "last_update": "2024-06-14 08:13:24", + "author_account_age_days": 1797 + }, + "https://github.com/hinablue/ComfyUI_3dPoseEditor": { + "stars": 112, + "last_update": "2024-05-22 22:23:35", + "author_account_age_days": 5106 + }, + "https://github.com/holchan/ComfyUI-ModelDownloader": { + "stars": 2, + "last_update": "2024-06-14 08:59:42", + "author_account_age_days": 1586 + }, + "https://github.com/huagetai/ComfyUI-Gaffer": { + "stars": 33, + "last_update": "2024-06-19 00:58:38", + "author_account_age_days": 4627 + }, + "https://github.com/huagetai/ComfyUI_LightGradient": { + "stars": 7, + "last_update": "2024-05-23 01:21:27", + "author_account_age_days": 4627 + }, + "https://github.com/huchenlei/ComfyUI-IC-Light-Native": { + "stars": 372, + "last_update": "2024-06-14 08:58:03", + "author_account_age_days": 2870 + }, + "https://github.com/huchenlei/ComfyUI-layerdiffuse": { + "stars": 1257, + "last_update": "2024-06-17 15:23:49", + "author_account_age_days": 2870 + }, + "https://github.com/huchenlei/ComfyUI-openpose-editor": { + "stars": 13, + "last_update": "2024-06-14 08:58:09", + "author_account_age_days": 2870 + }, + "https://github.com/huchenlei/ComfyUI_DanTagGen": { + "stars": 49, + "last_update": "2024-06-14 08:58:15", + "author_account_age_days": 2870 + }, + "https://github.com/huchenlei/ComfyUI_densediffusion": { + "stars": 57, + "last_update": "2024-06-11 00:39:28", + "author_account_age_days": 2870 + }, + "https://github.com/huchenlei/ComfyUI_omost": { + "stars": 294, + "last_update": "2024-06-14 12:45:52", + "author_account_age_days": 2870 + }, + "https://github.com/hughescr/ComfyUI-OpenPose-Keypoint-Extractor": { + "stars": 6, + "last_update": "2024-06-14 09:04:25", + "author_account_age_days": 5635 + }, + "https://github.com/humgate/simplecomfy": { + "stars": 0, + "last_update": "2024-06-14 08:58:21", + "author_account_age_days": 1361 + }, + "https://github.com/hustille/ComfyUI_Fooocus_KSampler": { + "stars": 58, + "last_update": "2024-05-22 20:39:48", + "author_account_age_days": 434 + }, + "https://github.com/hustille/ComfyUI_hus_utils": { + "stars": 6, + "last_update": "2024-05-22 20:39:34", + "author_account_age_days": 434 + }, + "https://github.com/hylarucoder/ComfyUI-Eagle-PNGInfo": { + "stars": 7, + "last_update": "2024-06-17 10:01:00", + "author_account_age_days": 3908 + }, + "https://github.com/iFREEGROUP/comfyui-undistort": { + "stars": 1, + "last_update": "2024-06-14 08:59:52", + "author_account_age_days": 1551 + }, + "https://github.com/icesun963/ComfyUI_HFDownLoad": { + "stars": 0, + "last_update": "2024-06-14 08:59:58", + "author_account_age_days": 4100 + }, + "https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words": { + "stars": 94, + "last_update": "2024-05-22 21:25:49", + "author_account_age_days": 3044 + }, + "https://github.com/iemesowum/ComfyUI_IsaacNodes": { + "stars": 0, + "last_update": "2024-06-14 09:00:05", + "author_account_age_days": 5286 + }, + "https://github.com/if-ai/ComfyUI-IF_AI_HFDownloaderNode": { + "stars": 2, + "last_update": "2024-05-22 22:31:30", + "author_account_age_days": 2857 + }, + "https://github.com/if-ai/ComfyUI-IF_AI_WishperSpeechNode": { + "stars": 26, + "last_update": "2024-05-22 22:02:55", + "author_account_age_days": 2857 + }, + "https://github.com/if-ai/ComfyUI-IF_AI_tools": { + "stars": 346, + "last_update": "2024-06-10 22:40:42", + "author_account_age_days": 2857 + }, + "https://github.com/imb101/ComfyUI-FaceSwap": { + "stars": 28, + "last_update": "2024-05-22 18:22:29", + "author_account_age_days": 883 + }, + "https://github.com/jags111/ComfyUI_Jags_Audiotools": { + "stars": 32, + "last_update": "2024-05-19 18:54:12", + "author_account_age_days": 3865 + }, + "https://github.com/jags111/ComfyUI_Jags_VectorMagic": { + "stars": 51, + "last_update": "2024-05-19 18:49:42", + "author_account_age_days": 3865 + }, + "https://github.com/jags111/efficiency-nodes-comfyui": { + "stars": 681, + "last_update": "2024-06-17 07:23:01", + "author_account_age_days": 3865 + }, + "https://github.com/jamal-alkharrat/ComfyUI_rotate_image": { + "stars": 0, + "last_update": "2024-05-22 23:19:02", + "author_account_age_days": 971 + }, + "https://github.com/jamesWalker55/comfyui-p2ldgan": { + "stars": 12, + "last_update": "2024-05-22 18:19:04", + "author_account_age_days": 2522 + }, + "https://github.com/jamesWalker55/comfyui-various": { + "stars": 28, + "last_update": "2024-05-22 18:19:17", + "author_account_age_days": 2522 + }, + "https://github.com/jax-explorer/fast_video_comfyui": { + "stars": 0, + "last_update": "2024-05-23 01:17:35", + "author_account_age_days": 571 + }, + "https://github.com/jeffy5/comfyui-faceless-node": { + "stars": 12, + "last_update": "2024-06-14 04:11:28", + "author_account_age_days": 2925 + }, + "https://github.com/jesenzhang/ComfyUI_StreamDiffusion": { + "stars": 105, + "last_update": "2024-05-23 02:40:36", + "author_account_age_days": 3646 + }, + "https://github.com/jiaxiangc/ComfyUI-ResAdapter": { + "stars": 265, + "last_update": "2024-05-23 00:22:23", + "author_account_age_days": 1281 + }, + "https://github.com/jitcoder/lora-info": { + "stars": 43, + "last_update": "2024-05-22 22:17:44", + "author_account_age_days": 4035 + }, + "https://github.com/jjkramhoeft/ComfyUI-Jjk-Nodes": { + "stars": 4, + "last_update": "2024-05-22 20:44:56", + "author_account_age_days": 3644 + }, + "https://github.com/jkrauss82/ultools-comfyui": { + "stars": 5, + "last_update": "2024-06-14 08:12:15", + "author_account_age_days": 4206 + }, + "https://github.com/jmkl/ComfyUI-ricing": { + "stars": 9, + "last_update": "2024-05-22 20:54:35", + "author_account_age_days": 4592 + }, + "https://github.com/jojkaart/ComfyUI-sampler-lcm-alternative": { + "stars": 100, + "last_update": "2024-05-22 21:31:41", + "author_account_age_days": 4793 + }, + "https://github.com/jordoh/ComfyUI-Deepface": { + "stars": 10, + "last_update": "2024-06-14 08:08:29", + "author_account_age_days": 4988 + }, + "https://github.com/jtrue/ComfyUI-JaRue": { + "stars": 6, + "last_update": "2024-06-14 09:01:12", + "author_account_age_days": 3924 + }, + "https://github.com/jtydhr88/ComfyUI-LayerDivider": { + "stars": 44, + "last_update": "2024-06-15 15:02:53", + "author_account_age_days": 4748 + }, + "https://github.com/jtydhr88/ComfyUI-Workflow-Encrypt": { + "stars": 12, + "last_update": "2024-06-14 08:10:50", + "author_account_age_days": 4748 + }, + "https://github.com/juehackr/comfyui_fk_server": { + "stars": 28, + "last_update": "2024-06-17 14:20:57", + "author_account_age_days": 1107 + }, + "https://github.com/ka-puna/comfyui-yanc": { + "stars": 6, + "last_update": "2024-05-22 21:29:37", + "author_account_age_days": 2202 + }, + "https://github.com/kaanyalova/ComfyUI_ExtendedImageFormats": { + "stars": 2, + "last_update": "2024-06-03 13:20:01", + "author_account_age_days": 1261 + }, + "https://github.com/kadirnar/ComfyUI-Transformers": { + "stars": 16, + "last_update": "2024-05-23 12:34:26", + "author_account_age_days": 2324 + }, + "https://github.com/kadirnar/ComfyUI-YOLO": { + "stars": 3, + "last_update": "2024-06-18 22:20:23", + "author_account_age_days": 2324 + }, + "https://github.com/kale4eat/ComfyUI-path-util": { + "stars": 0, + "last_update": "2024-05-25 05:44:11", + "author_account_age_days": 1607 + }, + "https://github.com/kale4eat/ComfyUI-speech-dataset-toolkit": { + "stars": 5, + "last_update": "2024-05-23 00:25:02", + "author_account_age_days": 1607 + }, + "https://github.com/kale4eat/ComfyUI-string-util": { + "stars": 1, + "last_update": "2024-05-23 00:24:40", + "author_account_age_days": 1607 + }, + "https://github.com/kale4eat/ComfyUI-text-file-util": { + "stars": 0, + "last_update": "2024-05-23 00:24:51", + "author_account_age_days": 1607 + }, + "https://github.com/katalist-ai/comfyUI-nsfw-detection": { + "stars": 1, + "last_update": "2024-05-23 01:23:32", + "author_account_age_days": 748 + }, + "https://github.com/kealiu/ComfyUI-S3-Tools": { + "stars": 1, + "last_update": "2024-05-23 01:10:44", + "author_account_age_days": 4123 + }, + "https://github.com/kealiu/ComfyUI-Zero123-Porting": { + "stars": 13, + "last_update": "2024-05-23 01:11:13", + "author_account_age_days": 4123 + }, + "https://github.com/kealiu/ComfyUI-ZeroShot-MTrans": { + "stars": 128, + "last_update": "2024-05-23 01:11:01", + "author_account_age_days": 4123 + }, + "https://github.com/kenjiqq/qq-nodes-comfyui": { + "stars": 23, + "last_update": "2024-05-22 21:34:53", + "author_account_age_days": 4884 + }, + "https://github.com/kft334/Knodes": { + "stars": 3, + "last_update": "2024-06-14 08:12:06", + "author_account_age_days": 954 + }, + "https://github.com/kijai/ComfyUI-ADMotionDirector": { + "stars": 125, + "last_update": "2024-06-19 09:13:35", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-APISR-KJ": { + "stars": 55, + "last_update": "2024-05-21 16:30:21", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-BrushNet-Wrapper": { + "stars": 103, + "last_update": "2024-05-21 16:49:05", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-CCSR": { + "stars": 144, + "last_update": "2024-05-22 21:09:35", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-DDColor": { + "stars": 78, + "last_update": "2024-05-21 16:04:26", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-DepthAnythingV2": { + "stars": 77, + "last_update": "2024-06-19 08:57:28", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-DiffusionLight": { + "stars": 48, + "last_update": "2024-05-21 16:16:52", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-DynamiCrafterWrapper": { + "stars": 458, + "last_update": "2024-06-09 11:19:05", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-ELLA-wrapper": { + "stars": 103, + "last_update": "2024-05-21 16:47:28", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-Geowizard": { + "stars": 81, + "last_update": "2024-05-28 14:08:34", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-IC-Light": { + "stars": 382, + "last_update": "2024-06-19 09:18:06", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-KJNodes": { + "stars": 328, + "last_update": "2024-06-19 09:05:21", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-LaVi-Bridge-Wrapper": { + "stars": 19, + "last_update": "2024-05-21 16:41:18", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-Marigold": { + "stars": 374, + "last_update": "2024-06-19 09:10:03", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-SUPIR": { + "stars": 1160, + "last_update": "2024-05-21 14:56:36", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-SVD": { + "stars": 152, + "last_update": "2024-05-22 21:09:54", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-depth-fm": { + "stars": 53, + "last_update": "2024-05-22 21:10:15", + "author_account_age_days": 2178 + }, + "https://github.com/kijai/ComfyUI-moondream": { + "stars": 77, + "last_update": "2024-05-22 21:10:33", + "author_account_age_days": 2178 + }, + "https://github.com/kinfolk0117/ComfyUI_GradientDeepShrink": { + "stars": 23, + "last_update": "2024-05-22 21:25:13", + "author_account_age_days": 463 + }, + "https://github.com/kinfolk0117/ComfyUI_Pilgram": { + "stars": 7, + "last_update": "2024-05-22 21:25:24", + "author_account_age_days": 463 + }, + "https://github.com/kinfolk0117/ComfyUI_SimpleTiles": { + "stars": 24, + "last_update": "2024-05-22 21:25:01", + "author_account_age_days": 463 + }, + "https://github.com/klinter007/klinter_nodes": { + "stars": 4, + "last_update": "2024-06-14 09:05:41", + "author_account_age_days": 420 + }, + "https://github.com/knuknX/ComfyUI-Image-Tools": { + "stars": 3, + "last_update": "2024-06-14 09:05:58", + "author_account_age_days": 195 + }, + "https://github.com/kohya-ss/ControlNet-LLLite-ComfyUI": { + "stars": 145, + "last_update": "2024-05-22 20:44:44", + "author_account_age_days": 1804 + }, + "https://github.com/komojini/ComfyUI_SDXL_DreamBooth_LoRA_CustomNodes": { + "stars": 3, + "last_update": "2024-05-22 21:34:27", + "author_account_age_days": 578 + }, + "https://github.com/komojini/komojini-comfyui-nodes": { + "stars": 63, + "last_update": "2024-05-22 21:34:39", + "author_account_age_days": 578 + }, + "https://github.com/kunieone/ComfyUI_alkaid": { + "stars": 0, + "last_update": "2024-05-23 01:10:21", + "author_account_age_days": 2514 + }, + "https://github.com/kwaroran/abg-comfyui": { + "stars": 22, + "last_update": "2024-05-22 18:19:51", + "author_account_age_days": 602 + }, + "https://github.com/l20richo/ComfyUI-Azure-Blob-Storage": { + "stars": 2, + "last_update": "2024-06-14 10:24:05", + "author_account_age_days": 1162 + }, + "https://github.com/laksjdjf/Batch-Condition-ComfyUI": { + "stars": 1, + "last_update": "2024-05-22 20:42:42", + "author_account_age_days": 2826 + }, + "https://github.com/laksjdjf/LCMSampler-ComfyUI": { + "stars": 14, + "last_update": "2024-05-22 20:42:17", + "author_account_age_days": 2826 + }, + "https://github.com/laksjdjf/LoRTnoC-ComfyUI": { + "stars": 11, + "last_update": "2024-05-22 20:42:29", + "author_account_age_days": 2826 + }, + "https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI": { + "stars": 19, + "last_update": "2024-05-22 20:42:04", + "author_account_age_days": 2826 + }, + "https://github.com/laksjdjf/cgem156-ComfyUI": { + "stars": 30, + "last_update": "2024-06-08 01:09:03", + "author_account_age_days": 2826 + }, + "https://github.com/laksjdjf/pfg-ComfyUI": { + "stars": 10, + "last_update": "2024-05-22 20:41:41", + "author_account_age_days": 2826 + }, + "https://github.com/larsupb/LoRA-Merger-ComfyUI": { + "stars": 9, + "last_update": "2024-06-14 10:23:47", + "author_account_age_days": 3070 + }, + "https://github.com/latenightlabs/ComfyUI-LNL": { + "stars": 0, + "last_update": "2024-06-14 13:02:47", + "author_account_age_days": 145 + }, + "https://github.com/leoleelxh/ComfyUI-LLMs": { + "stars": 7, + "last_update": "2024-06-14 10:24:23", + "author_account_age_days": 4070 + }, + "https://github.com/lilly1987/ComfyUI_node_Lilly": { + "stars": 49, + "last_update": "2024-05-22 17:53:19", + "author_account_age_days": 2904 + }, + "https://github.com/linshier/comfyui-remote-tools": { + "stars": 1, + "last_update": "2024-05-28 07:44:23", + "author_account_age_days": 3786 + }, + "https://github.com/liusida/ComfyUI-AutoCropFaces": { + "stars": 18, + "last_update": "2024-06-14 10:24:37", + "author_account_age_days": 3202 + }, + "https://github.com/liusida/ComfyUI-B-LoRA": { + "stars": 13, + "last_update": "2024-06-18 03:17:46", + "author_account_age_days": 3202 + }, + "https://github.com/liusida/ComfyUI-Debug": { + "stars": 6, + "last_update": "2024-06-14 10:25:26", + "author_account_age_days": 3202 + }, + "https://github.com/liusida/ComfyUI-Login": { + "stars": 37, + "last_update": "2024-06-19 03:30:09", + "author_account_age_days": 3202 + }, + "https://github.com/liusida/ComfyUI-SD3-nodes": { + "stars": 2, + "last_update": "2024-06-14 13:01:41", + "author_account_age_days": 3202 + }, + "https://github.com/ljleb/comfy-mecha": { + "stars": 16, + "last_update": "2024-06-18 20:57:28", + "author_account_age_days": 2458 + }, + "https://github.com/lks-ai/ComfyUI-StableAudioSampler": { + "stars": 168, + "last_update": "2024-06-17 18:54:17", + "author_account_age_days": 94 + }, + "https://github.com/lks-ai/anynode": { + "stars": 405, + "last_update": "2024-06-14 10:25:56", + "author_account_age_days": 94 + }, + "https://github.com/lldacing/comfyui-easyapi-nodes": { + "stars": 27, + "last_update": "2024-05-24 02:51:26", + "author_account_age_days": 2088 + }, + "https://github.com/logtd/ComfyUI-FLATTEN": { + "stars": 61, + "last_update": "2024-06-14 18:00:19", + "author_account_age_days": 117 + }, + "https://github.com/logtd/ComfyUI-InstanceDiffusion": { + "stars": 140, + "last_update": "2024-05-22 00:02:08", + "author_account_age_days": 117 + }, + "https://github.com/logtd/ComfyUI-InversedNoise": { + "stars": 5, + "last_update": "2024-05-22 00:10:18", + "author_account_age_days": 117 + }, + "https://github.com/logtd/ComfyUI-RAVE_ATTN": { + "stars": 9, + "last_update": "2024-05-22 00:20:03", + "author_account_age_days": 117 + }, + "https://github.com/logtd/ComfyUI-RefSampling": { + "stars": 4, + "last_update": "2024-05-22 00:04:40", + "author_account_age_days": 117 + }, + "https://github.com/logtd/ComfyUI-TrackingNodes": { + "stars": 15, + "last_update": "2024-05-22 00:03:27", + "author_account_age_days": 117 + }, + "https://github.com/longgui0318/comfyui-llm-assistant": { + "stars": 5, + "last_update": "2024-05-22 23:13:46", + "author_account_age_days": 4159 + }, + "https://github.com/longgui0318/comfyui-magic-clothing": { + "stars": 20, + "last_update": "2024-06-14 10:27:32", + "author_account_age_days": 4159 + }, + "https://github.com/longgui0318/comfyui-mask-util": { + "stars": 4, + "last_update": "2024-06-15 02:59:08", + "author_account_age_days": 4159 + }, + "https://github.com/longgui0318/comfyui-oms-diffusion": { + "stars": 20, + "last_update": "2024-06-14 10:27:32", + "author_account_age_days": 4159 + }, + "https://github.com/lquesada/ComfyUI-Inpaint-CropAndStitch": { + "stars": 144, + "last_update": "2024-06-11 03:36:02", + "author_account_age_days": 4045 + }, + "https://github.com/lquesada/ComfyUI-Prompt-Combinator": { + "stars": 19, + "last_update": "2024-06-17 08:08:08", + "author_account_age_days": 4045 + }, + "https://github.com/ltdrdata/ComfyUI-Impact-Pack": { + "stars": 1373, + "last_update": "2024-06-18 16:40:52", + "author_account_age_days": 457 + }, + "https://github.com/ltdrdata/ComfyUI-Inspire-Pack": { + "stars": 286, + "last_update": "2024-06-18 18:01:15", + "author_account_age_days": 457 + }, + "https://github.com/ltdrdata/ComfyUI-Manager": { + "stars": 4337, + "last_update": "2024-06-19 08:27:58", + "author_account_age_days": 457 + }, + "https://github.com/luandev/ComfyUI-CrewAI": { + "stars": 5, + "last_update": "2024-06-14 10:25:20", + "author_account_age_days": 3802 + }, + "https://github.com/m-sokes/ComfyUI-Sokes-Nodes": { + "stars": 1, + "last_update": "2024-05-22 20:36:07", + "author_account_age_days": 310 + }, + "https://github.com/madtunebk/ComfyUI-ControlnetAux": { + "stars": 8, + "last_update": "2024-06-04 12:14:51", + "author_account_age_days": 456 + }, + "https://github.com/mape/ComfyUI-mape-Helpers": { + "stars": 120, + "last_update": "2024-05-22 23:19:13", + "author_account_age_days": 5749 + }, + "https://github.com/maracman/ComfyUI-SubjectStyle-CSV": { + "stars": 3, + "last_update": "2024-06-14 10:24:29", + "author_account_age_days": 1161 + }, + "https://github.com/marduk191/comfyui-marnodes": { + "stars": 0, + "last_update": "2024-06-14 10:24:11", + "author_account_age_days": 4409 + }, + "https://github.com/marhensa/sdxl-recommended-res-calc": { + "stars": 51, + "last_update": "2024-05-22 20:46:17", + "author_account_age_days": 4770 + }, + "https://github.com/martijnat/comfyui-previewlatent": { + "stars": 29, + "last_update": "2024-05-22 21:28:39", + "author_account_age_days": 2826 + }, + "https://github.com/massao000/ComfyUI_aspect_ratios": { + "stars": 7, + "last_update": "2024-05-22 22:23:10", + "author_account_age_days": 1402 + }, + "https://github.com/matan1905/ComfyUI-Serving-Toolkit": { + "stars": 38, + "last_update": "2024-06-04 19:15:36", + "author_account_age_days": 2734 + }, + "https://github.com/mav-rik/facerestore_cf": { + "stars": 150, + "last_update": "2024-05-22 20:53:23", + "author_account_age_days": 2915 + }, + "https://github.com/mbrostami/ComfyUI-HF": { + "stars": 16, + "last_update": "2024-05-27 21:45:33", + "author_account_age_days": 4316 + }, + "https://github.com/mbrostami/ComfyUI-TITrain": { + "stars": 7, + "last_update": "2024-05-27 21:50:06", + "author_account_age_days": 4316 + }, + "https://github.com/mcmonkeyprojects/sd-dynamic-thresholding": { + "stars": 1055, + "last_update": "2024-05-24 16:09:17", + "author_account_age_days": 2096 + }, + "https://github.com/meap158/ComfyUI-Background-Replacement": { + "stars": 35, + "last_update": "2024-05-22 20:43:52", + "author_account_age_days": 3198 + }, + "https://github.com/meap158/ComfyUI-GPU-temperature-protection": { + "stars": 3, + "last_update": "2024-05-22 20:43:21", + "author_account_age_days": 3198 + }, + "https://github.com/meap158/ComfyUI-Prompt-Expansion": { + "stars": 61, + "last_update": "2024-05-22 20:43:37", + "author_account_age_days": 3198 + }, + "https://github.com/melMass/comfy_mtb": { + "stars": 338, + "last_update": "2024-06-09 17:20:03", + "author_account_age_days": 3740 + }, + "https://github.com/mephisto83/petty-paint-comfyui-node": { + "stars": 1, + "last_update": "2024-06-15 20:16:58", + "author_account_age_days": 3667 + }, + "https://github.com/meshmesh-io/ComfyUI-MeshMesh": { + "stars": 0, + "last_update": "2024-05-23 00:10:09", + "author_account_age_days": 223 + }, + "https://github.com/meshmesh-io/mm-comfyui-loopback": { + "stars": 1, + "last_update": "2024-05-23 00:09:57", + "author_account_age_days": 223 + }, + "https://github.com/meshmesh-io/mm-comfyui-megamask": { + "stars": 0, + "last_update": "2024-05-23 00:09:47", + "author_account_age_days": 223 + }, + "https://github.com/mihaiiancu/ComfyUI_Inpaint": { + "stars": 9, + "last_update": "2024-05-22 18:19:38", + "author_account_age_days": 2656 + }, + "https://github.com/mikkel/ComfyUI-text-overlay": { + "stars": 29, + "last_update": "2024-05-22 21:13:59", + "author_account_age_days": 5911 + }, + "https://github.com/mikkel/comfyui-mask-boundingbox": { + "stars": 24, + "last_update": "2024-05-22 21:26:23", + "author_account_age_days": 5911 + }, + "https://github.com/mirabarukaso/ComfyUI_Mira": { + "stars": 20, + "last_update": "2024-06-14 11:01:10", + "author_account_age_days": 1215 + }, + "https://github.com/modusCell/ComfyUI-dimension-node-modusCell": { + "stars": 0, + "last_update": "2024-05-22 22:08:50", + "author_account_age_days": 4598 + }, + "https://github.com/moyi7712/ComfyUI_Seamless_Patten": { + "stars": 7, + "last_update": "2024-06-19 03:07:36", + "author_account_age_days": 2295 + }, + "https://github.com/mozman/ComfyUI_mozman_nodes": { + "stars": 0, + "last_update": "2024-05-22 22:13:32", + "author_account_age_days": 4075 + }, + "https://github.com/mpiquero7164/ComfyUI-SaveImgPrompt": { + "stars": 15, + "last_update": "2023-08-14 11:27:09", + "author_account_age_days": 2603 + }, + "https://github.com/muzi12888/ComfyUI-PoseKeypoint-Mask": { + "stars": 6, + "last_update": "2024-06-14 13:26:02", + "author_account_age_days": 2940 + }, + "https://github.com/nagolinc/ComfyUI_FastVAEDecorder_SDXL": { + "stars": 2, + "last_update": "2024-05-22 20:44:17", + "author_account_age_days": 3669 + }, + "https://github.com/nagolinc/comfyui_openai_node": { + "stars": 0, + "last_update": "2024-06-15 15:59:07", + "author_account_age_days": 3669 + }, + "https://github.com/nat-chan/ComfyUI-graphToPrompt": { + "stars": 0, + "last_update": "2024-05-23 01:16:40", + "author_account_age_days": 2988 + }, + "https://github.com/nat-chan/comfyui-paint": { + "stars": 2, + "last_update": "2024-06-14 11:01:38", + "author_account_age_days": 2988 + }, + "https://github.com/nat-chan/comfyui-transceiver": { + "stars": 3, + "last_update": "2024-05-23 01:16:28", + "author_account_age_days": 2988 + }, + "https://github.com/nathannlu/ComfyUI-Cloud": { + "stars": 133, + "last_update": "2024-06-14 12:00:59", + "author_account_age_days": 2720 + }, + "https://github.com/nathannlu/ComfyUI-Pets": { + "stars": 36, + "last_update": "2024-06-14 11:00:42", + "author_account_age_days": 2720 + }, + "https://github.com/natto-maki/ComfyUI-NegiTools": { + "stars": 26, + "last_update": "2024-05-22 21:31:17", + "author_account_age_days": 272 + }, + "https://github.com/nickve28/ComfyUI-Nich-Utils": { + "stars": 8, + "last_update": "2024-05-23 00:22:57", + "author_account_age_days": 4023 + }, + "https://github.com/ningxiaoxiao/comfyui-NDI": { + "stars": 35, + "last_update": "2024-06-14 12:00:29", + "author_account_age_days": 2982 + }, + "https://github.com/nirbhay-faaya/ImgProcessing_ComfyUI": { + "stars": 0, + "last_update": "2024-06-14 12:01:14", + "author_account_age_days": 330 + }, + "https://github.com/nirex0/ComfyUI_pytorch_openpose": { + "stars": 2, + "last_update": "2024-06-14 12:01:07", + "author_account_age_days": 3497 + }, + "https://github.com/nkchocoai/ComfyUI-Dart": { + "stars": 17, + "last_update": "2024-05-22 23:11:22", + "author_account_age_days": 154 + }, + "https://github.com/nkchocoai/ComfyUI-PromptUtilities": { + "stars": 6, + "last_update": "2024-05-22 23:10:42", + "author_account_age_days": 154 + }, + "https://github.com/nkchocoai/ComfyUI-SaveImageWithMetaData": { + "stars": 8, + "last_update": "2024-06-15 05:58:02", + "author_account_age_days": 154 + }, + "https://github.com/nkchocoai/ComfyUI-SizeFromPresets": { + "stars": 4, + "last_update": "2024-05-22 23:10:30", + "author_account_age_days": 154 + }, + "https://github.com/nkchocoai/ComfyUI-TextOnSegs": { + "stars": 5, + "last_update": "2024-05-22 23:10:55", + "author_account_age_days": 154 + }, + "https://github.com/noembryo/ComfyUI-noEmbryo": { + "stars": 12, + "last_update": "2024-06-04 11:27:45", + "author_account_age_days": 2737 + }, + "https://github.com/nosiu/comfyui-instantId-faceswap": { + "stars": 164, + "last_update": "2024-05-22 23:21:38", + "author_account_age_days": 3899 + }, + "https://github.com/noxinias/ComfyUI_NoxinNodes": { + "stars": 7, + "last_update": "2024-05-22 21:24:24", + "author_account_age_days": 2555 + }, + "https://github.com/ntc-ai/ComfyUI-DARE-LoRA-Merge": { + "stars": 22, + "last_update": "2024-05-22 22:22:14", + "author_account_age_days": 1712 + }, + "https://github.com/nuanarchy/ComfyUI-NuA-BIRD": { + "stars": 3, + "last_update": "2024-06-18 05:35:49", + "author_account_age_days": 1087 + }, + "https://github.com/nuanarchy/ComfyUI-NuA-FlashFace": { + "stars": 10, + "last_update": "2024-06-17 15:29:15", + "author_account_age_days": 1087 + }, + "https://github.com/nullquant/ComfyUI-BrushNet": { + "stars": 341, + "last_update": "2024-06-16 18:29:47", + "author_account_age_days": 1171 + }, + "https://github.com/olduvai-jp/ComfyUI-HfLoader": { + "stars": 3, + "last_update": "2024-05-23 00:14:52", + "author_account_age_days": 871 + }, + "https://github.com/omar92/ComfyUI-QualityOfLifeSuit_Omar92": { + "stars": 108, + "last_update": "2024-06-03 11:02:37", + "author_account_age_days": 4501 + }, + "https://github.com/osi1880vr/prompt_quill_comfyui": { + "stars": 9, + "last_update": "2024-06-13 17:24:12", + "author_account_age_days": 1071 + }, + "https://github.com/ostris/ostris_nodes_comfyui": { + "stars": 19, + "last_update": "2024-05-22 21:23:24", + "author_account_age_days": 2397 + }, + "https://github.com/ownimage/ComfyUI-ownimage": { + "stars": 0, + "last_update": "2024-05-22 22:22:37", + "author_account_age_days": 2778 + }, + "https://github.com/oyvindg/ComfyUI-TrollSuite": { + "stars": 0, + "last_update": "2024-05-22 21:32:03", + "author_account_age_days": 2324 + }, + "https://github.com/oztrkoguz/ComfyUI_StoryCreator": { + "stars": 16, + "last_update": "2024-05-23 12:18:45", + "author_account_age_days": 836 + }, + "https://github.com/palant/extended-saveimage-comfyui": { + "stars": 10, + "last_update": "2024-03-27 14:08:21", + "author_account_age_days": 5048 + }, + "https://github.com/palant/image-resize-comfyui": { + "stars": 61, + "last_update": "2024-01-18 20:59:55", + "author_account_age_days": 5048 + }, + "https://github.com/palant/integrated-nodes-comfyui": { + "stars": 31, + "last_update": "2023-12-27 22:52:00", + "author_account_age_days": 5048 + }, + "https://github.com/pamparamm/sd-perturbed-attention": { + "stars": 171, + "last_update": "2024-06-15 14:49:56", + "author_account_age_days": 2125 + }, + "https://github.com/pants007/comfy-pants": { + "stars": 2, + "last_update": "2024-05-22 18:16:04", + "author_account_age_days": 2312 + }, + "https://github.com/paulo-coronado/comfy_clip_blip_node": { + "stars": 25, + "last_update": "2024-05-22 17:39:09", + "author_account_age_days": 2681 + }, + "https://github.com/philz1337x/ComfyUI-ClarityAI": { + "stars": 40, + "last_update": "2024-05-23 01:19:05", + "author_account_age_days": 658 + }, + "https://github.com/phineas-pta/comfyui-auto-nodes-layout": { + "stars": 20, + "last_update": "2024-06-18 19:17:38", + "author_account_age_days": 2283 + }, + "https://github.com/picturesonpictures/comfy_PoP": { + "stars": 13, + "last_update": "2024-05-22 20:51:32", + "author_account_age_days": 582 + }, + "https://github.com/pkpkTech/ComfyUI-SaveAVIF": { + "stars": 0, + "last_update": "2024-05-22 22:19:21", + "author_account_age_days": 1498 + }, + "https://github.com/pkpkTech/ComfyUI-SaveQueues": { + "stars": 1, + "last_update": "2024-05-22 22:19:54", + "author_account_age_days": 1498 + }, + "https://github.com/pkpkTech/ComfyUI-TemporaryLoader": { + "stars": 1, + "last_update": "2024-05-22 22:19:44", + "author_account_age_days": 1498 + }, + "https://github.com/pkpkTech/ComfyUI-ngrok": { + "stars": 3, + "last_update": "2024-05-22 22:19:32", + "author_account_age_days": 1498 + }, + "https://github.com/portu-sim/comfyui_bmab": { + "stars": 22, + "last_update": "2024-06-09 14:22:04", + "author_account_age_days": 317 + }, + "https://github.com/prodogape/ComfyUI-EasyOCR": { + "stars": 5, + "last_update": "2024-06-14 13:01:27", + "author_account_age_days": 1025 + }, + "https://github.com/prodogape/ComfyUI-Minio": { + "stars": 2, + "last_update": "2024-05-23 00:13:38", + "author_account_age_days": 1025 + }, + "https://github.com/prodogape/ComfyUI-OmDet": { + "stars": 2, + "last_update": "2024-06-14 13:01:34", + "author_account_age_days": 1025 + }, + "https://github.com/prozacgod/comfyui-pzc-multiworkspace": { + "stars": 7, + "last_update": "2024-05-22 23:11:46", + "author_account_age_days": 5563 + }, + "https://github.com/pythongosssss/ComfyUI-Custom-Scripts": { + "stars": 1317, + "last_update": "2024-06-10 11:49:03", + "author_account_age_days": 492 + }, + "https://github.com/pythongosssss/ComfyUI-WD14-Tagger": { + "stars": 413, + "last_update": "2024-05-25 18:12:08", + "author_account_age_days": 492 + }, + "https://github.com/qwixiwp/queuetools": { + "stars": 0, + "last_update": "2024-06-14 10:27:57", + "author_account_age_days": 606 + }, + "https://github.com/ramyma/A8R8_ComfyUI_nodes": { + "stars": 4, + "last_update": "2024-05-22 20:55:02", + "author_account_age_days": 3212 + }, + "https://github.com/randjtw/advance-aesthetic-score": { + "stars": 0, + "last_update": "2024-05-23 01:14:47", + "author_account_age_days": 755 + }, + "https://github.com/ratulrafsan/Comfyui-SAL-VTON": { + "stars": 56, + "last_update": "2024-05-23 00:17:20", + "author_account_age_days": 4489 + }, + "https://github.com/rcfcu2000/zhihuige-nodes-comfyui": { + "stars": 0, + "last_update": "2024-05-22 22:13:55", + "author_account_age_days": 3419 + }, + "https://github.com/rcsaquino/comfyui-custom-nodes": { + "stars": 1, + "last_update": "2024-05-22 22:13:43", + "author_account_age_days": 1506 + }, + "https://github.com/receyuki/comfyui-prompt-reader-node": { + "stars": 206, + "last_update": "2024-06-06 23:39:40", + "author_account_age_days": 2587 + }, + "https://github.com/redhottensors/ComfyUI-ODE": { + "stars": 10, + "last_update": "2024-06-18 16:24:30", + "author_account_age_days": 134 + }, + "https://github.com/redhottensors/ComfyUI-Prediction": { + "stars": 9, + "last_update": "2024-06-14 10:25:44", + "author_account_age_days": 134 + }, + "https://github.com/rgthree/rgthree-comfy": { + "stars": 686, + "last_update": "2024-06-18 03:20:51", + "author_account_age_days": 4969 + }, + "https://github.com/richinsley/Comfy-LFO": { + "stars": 5, + "last_update": "2024-05-22 20:46:30", + "author_account_age_days": 2675 + }, + "https://github.com/ricklove/comfyui-ricklove": { + "stars": 0, + "last_update": "2024-05-22 23:21:25", + "author_account_age_days": 4827 + }, + "https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": { + "stars": 8, + "last_update": "2024-06-14 10:28:04", + "author_account_age_days": 642 + }, + "https://github.com/rklaffehn/rk-comfy-nodes": { + "stars": 2, + "last_update": "2024-06-14 10:24:43", + "author_account_age_days": 287 + }, + "https://github.com/romeobuilderotti/ComfyUI-PNG-Metadata": { + "stars": 4, + "last_update": "2024-05-22 21:29:25", + "author_account_age_days": 285 + }, + "https://github.com/ronniebasak/ComfyUI-Tara-LLM-Integration": { + "stars": 70, + "last_update": "2024-06-14 10:24:55", + "author_account_age_days": 4149 + }, + "https://github.com/royceschultz/ComfyUI-Notifications": { + "stars": 4, + "last_update": "2024-05-23 01:23:16", + "author_account_age_days": 2524 + }, + "https://github.com/royceschultz/ComfyUI-TranscriptionTools": { + "stars": 12, + "last_update": "2024-05-23 01:10:10", + "author_account_age_days": 2524 + }, + "https://github.com/rui40000/RUI-Nodes": { + "stars": 14, + "last_update": "2024-05-22 22:12:26", + "author_account_age_days": 469 + }, + "https://github.com/ruiqutech/ComfyUI-RuiquNodes": { + "stars": 0, + "last_update": "2024-05-23 01:21:50", + "author_account_age_days": 64 + }, + "https://github.com/runtime44/comfyui_r44_nodes": { + "stars": 26, + "last_update": "2024-06-11 10:49:02", + "author_account_age_days": 162 + }, + "https://github.com/saftle/suplex_comfy_nodes": { + "stars": 0, + "last_update": "2024-05-29 13:09:25", + "author_account_age_days": 4752 + }, + "https://github.com/sdfxai/SDFXBridgeForComfyUI": { + "stars": 4, + "last_update": "2024-06-14 10:26:56", + "author_account_age_days": 229 + }, + "https://github.com/seanlynch/comfyui-optical-flow": { + "stars": 24, + "last_update": "2024-05-22 20:52:17", + "author_account_age_days": 5300 + }, + "https://github.com/seanlynch/srl-nodes": { + "stars": 3, + "last_update": "2024-05-22 21:08:00", + "author_account_age_days": 5300 + }, + "https://github.com/sergekatzmann/ComfyUI_Nimbus-Pack": { + "stars": 2, + "last_update": "2024-05-22 21:34:15", + "author_account_age_days": 3327 + }, + "https://github.com/shadowcz007/comfyui-Image-reward": { + "stars": 20, + "last_update": "2024-06-14 10:24:49", + "author_account_age_days": 3309 + }, + "https://github.com/shadowcz007/comfyui-consistency-decoder": { + "stars": 2, + "last_update": "2024-06-14 10:23:35", + "author_account_age_days": 3309 + }, + "https://github.com/shadowcz007/comfyui-edit-mask": { + "stars": 1, + "last_update": "2024-06-17 02:58:56", + "author_account_age_days": 3309 + }, + "https://github.com/shadowcz007/comfyui-mixlab-nodes": { + "stars": 873, + "last_update": "2024-06-19 03:10:50", + "author_account_age_days": 3309 + }, + "https://github.com/shadowcz007/comfyui-sound-lab": { + "stars": 43, + "last_update": "2024-06-17 09:49:50", + "author_account_age_days": 3309 + }, + "https://github.com/shadowcz007/comfyui-ultralytics-yolo": { + "stars": 17, + "last_update": "2024-06-05 10:29:22", + "author_account_age_days": 3309 + }, + "https://github.com/shi3z/ComfyUI_Memeplex_DALLE": { + "stars": 2, + "last_update": "2024-05-23 00:14:25", + "author_account_age_days": 5088 + }, + "https://github.com/shiimizu/ComfyUI-PhotoMaker-Plus": { + "stars": 140, + "last_update": "2024-04-17 09:02:51", + "author_account_age_days": 1760 + }, + "https://github.com/shiimizu/ComfyUI-TiledDiffusion": { + "stars": 206, + "last_update": "2024-05-14 22:01:41", + "author_account_age_days": 1760 + }, + "https://github.com/shiimizu/ComfyUI_smZNodes": { + "stars": 148, + "last_update": "2024-06-18 07:30:24", + "author_account_age_days": 1760 + }, + "https://github.com/shingo1228/ComfyUI-SDXL-EmptyLatentImage": { + "stars": 25, + "last_update": "2024-05-22 20:41:29", + "author_account_age_days": 2218 + }, + "https://github.com/shingo1228/ComfyUI-send-eagle-slim": { + "stars": 20, + "last_update": "2024-05-22 20:41:15", + "author_account_age_days": 2218 + }, + "https://github.com/shinich39/comfyui-load-image-in-seq": { + "stars": 3, + "last_update": "2024-05-23 00:20:53", + "author_account_age_days": 307 + }, + "https://github.com/shinich39/comfyui-local-db": { + "stars": 1, + "last_update": "2024-05-23 00:21:08", + "author_account_age_days": 307 + }, + "https://github.com/shinich39/comfyui-ramdom-node": { + "stars": 2, + "last_update": "2024-06-14 10:25:13", + "author_account_age_days": 307 + }, + "https://github.com/shobhitic/ComfyUI-PlusMinusTextClip": { + "stars": 0, + "last_update": "2024-06-14 14:00:29", + "author_account_age_days": 4302 + }, + "https://github.com/shockz0rz/ComfyUI_InterpolateEverything": { + "stars": 23, + "last_update": "2024-05-22 18:13:49", + "author_account_age_days": 1621 + }, + "https://github.com/shockz0rz/comfy-easy-grids": { + "stars": 11, + "last_update": "2024-05-22 18:14:05", + "author_account_age_days": 1621 + }, + "https://github.com/siliconflow/onediff_comfy_nodes": { + "stars": 11, + "last_update": "2024-05-22 22:23:22", + "author_account_age_days": 300 + }, + "https://github.com/sipherxyz/comfyui-art-venture": { + "stars": 82, + "last_update": "2024-05-22 18:15:39", + "author_account_age_days": 1102 + }, + "https://github.com/skfoo/ComfyUI-Coziness": { + "stars": 21, + "last_update": "2024-05-27 18:24:29", + "author_account_age_days": 2077 + }, + "https://github.com/smagnetize/kb-comfyui-nodes": { + "stars": 0, + "last_update": "2024-06-14 12:00:45", + "author_account_age_days": 2709 + }, + "https://github.com/smthemex/ComfyUI_ChatGLM_API": { + "stars": 17, + "last_update": "2024-06-14 12:00:22", + "author_account_age_days": 349 + }, + "https://github.com/smthemex/ComfyUI_CustomNet": { + "stars": 4, + "last_update": "2024-06-14 11:01:27", + "author_account_age_days": 349 + }, + "https://github.com/smthemex/ComfyUI_HiDiffusion_Pro": { + "stars": 22, + "last_update": "2024-06-18 02:10:24", + "author_account_age_days": 349 + }, + "https://github.com/smthemex/ComfyUI_ID_Animator": { + "stars": 14, + "last_update": "2024-06-15 10:15:03", + "author_account_age_days": 349 + }, + "https://github.com/smthemex/ComfyUI_Llama3_8B": { + "stars": 15, + "last_update": "2024-06-15 07:14:32", + "author_account_age_days": 349 + }, + "https://github.com/smthemex/ComfyUI_ParlerTTS": { + "stars": 18, + "last_update": "2024-05-15 13:48:05", + "author_account_age_days": 349 + }, + "https://github.com/smthemex/ComfyUI_Pic2Story": { + "stars": 3, + "last_update": "2024-06-14 10:28:28", + "author_account_age_days": 349 + }, + "https://github.com/smthemex/ComfyUI_Pipeline_Tool": { + "stars": 6, + "last_update": "2024-06-14 10:28:53", + "author_account_age_days": 349 + }, + "https://github.com/smthemex/ComfyUI_Pops": { + "stars": 7, + "last_update": "2024-06-14 13:59:12", + "author_account_age_days": 349 + }, + "https://github.com/smthemex/ComfyUI_StableAudio_Open": { + "stars": 5, + "last_update": "2024-06-14 10:27:38", + "author_account_age_days": 349 + }, + "https://github.com/smthemex/ComfyUI_StoryDiffusion": { + "stars": 45, + "last_update": "2024-06-17 00:49:03", + "author_account_age_days": 349 + }, + "https://github.com/space-nuko/ComfyUI-Disco-Diffusion": { + "stars": 42, + "last_update": "2024-05-22 18:10:36", + "author_account_age_days": 2719 + }, + "https://github.com/space-nuko/ComfyUI-OpenPose-Editor": { + "stars": 151, + "last_update": "2024-05-22 18:10:49", + "author_account_age_days": 2719 + }, + "https://github.com/space-nuko/nui-suite": { + "stars": 10, + "last_update": "2024-05-22 18:11:04", + "author_account_age_days": 2719 + }, + "https://github.com/spacepxl/ComfyUI-HQ-Image-Save": { + "stars": 29, + "last_update": "2024-06-16 07:03:58", + "author_account_age_days": 289 + }, + "https://github.com/spacepxl/ComfyUI-Image-Filters": { + "stars": 78, + "last_update": "2024-06-15 22:23:37", + "author_account_age_days": 289 + }, + "https://github.com/spacepxl/ComfyUI-RAVE": { + "stars": 79, + "last_update": "2024-05-22 20:56:19", + "author_account_age_days": 289 + }, + "https://github.com/spacepxl/ComfyUI-StyleGan": { + "stars": 3, + "last_update": "2024-06-10 20:16:34", + "author_account_age_days": 289 + }, + "https://github.com/spinagon/ComfyUI-seam-carving": { + "stars": 14, + "last_update": "2024-05-23 05:07:00", + "author_account_age_days": 4735 + }, + "https://github.com/spinagon/ComfyUI-seamless-tiling": { + "stars": 74, + "last_update": "2024-05-23 05:03:42", + "author_account_age_days": 4735 + }, + "https://github.com/spro/comfyui-mirror": { + "stars": 4, + "last_update": "2024-05-22 20:50:25", + "author_account_age_days": 5226 + }, + "https://github.com/ssitu/ComfyUI_UltimateSDUpscale": { + "stars": 620, + "last_update": "2024-05-22 18:09:32", + "author_account_age_days": 1684 + }, + "https://github.com/ssitu/ComfyUI_fabric": { + "stars": 82, + "last_update": "2024-05-22 18:10:19", + "author_account_age_days": 1684 + }, + "https://github.com/ssitu/ComfyUI_restart_sampling": { + "stars": 75, + "last_update": "2024-05-22 18:09:49", + "author_account_age_days": 1684 + }, + "https://github.com/ssitu/ComfyUI_roop": { + "stars": 59, + "last_update": "2024-05-22 18:10:03", + "author_account_age_days": 1684 + }, + "https://github.com/stavsap/comfyui-ollama": { + "stars": 190, + "last_update": "2024-06-18 21:27:18", + "author_account_age_days": 4078 + }, + "https://github.com/storyicon/comfyui_musev_evolved": { + "stars": 13, + "last_update": "2024-06-14 11:02:40", + "author_account_age_days": 2547 + }, + "https://github.com/storyicon/comfyui_segment_anything": { + "stars": 509, + "last_update": "2024-05-31 07:36:30", + "author_account_age_days": 2547 + }, + "https://github.com/strimmlarn/ComfyUI_Strimmlarns_aesthetic_score": { + "stars": 25, + "last_update": "2024-06-17 10:01:44", + "author_account_age_days": 2621 + }, + "https://github.com/styler00dollar/ComfyUI-deepcache": { + "stars": 8, + "last_update": "2024-05-22 22:18:18", + "author_account_age_days": 1840 + }, + "https://github.com/styler00dollar/ComfyUI-sudo-latent-upscale": { + "stars": 27, + "last_update": "2024-05-22 22:18:07", + "author_account_age_days": 1840 + }, + "https://github.com/subtleGradient/TinkerBot-tech-for-ComfyUI-Touchpad": { + "stars": 16, + "last_update": "2024-06-19 04:30:39", + "author_account_age_days": 5925 + }, + "https://github.com/sugarkwork/comfyui_cohere": { + "stars": 0, + "last_update": "2024-06-14 13:59:30", + "author_account_age_days": 870 + }, + "https://github.com/sugarkwork/comfyui_tag_fillter": { + "stars": 16, + "last_update": "2024-05-27 13:38:24", + "author_account_age_days": 870 + }, + "https://github.com/superyoman/comfyui_lumaAPI": { + "stars": 10, + "last_update": "2024-06-17 21:00:05", + "author_account_age_days": 443 + }, + "https://github.com/syllebra/bilbox-comfyui": { + "stars": 80, + "last_update": "2024-05-22 20:40:43", + "author_account_age_days": 3131 + }, + "https://github.com/sylym/comfy_vid2vid": { + "stars": 57, + "last_update": "2024-05-22 17:53:40", + "author_account_age_days": 1893 + }, + "https://github.com/szhublox/ambw_comfyui": { + "stars": 12, + "last_update": "2024-05-22 18:04:57", + "author_account_age_days": 1002 + }, + "https://github.com/taabata/LCM_Inpaint-Outpaint_Comfy": { + "stars": 223, + "last_update": "2024-06-17 10:01:50", + "author_account_age_days": 1677 + }, + "https://github.com/talesofai/comfyui-browser": { + "stars": 408, + "last_update": "2024-05-21 20:51:18", + "author_account_age_days": 550 + }, + "https://github.com/teward/ComfyUI-Helper-Nodes": { + "stars": 4, + "last_update": "2024-05-23 01:22:01", + "author_account_age_days": 5093 + }, + "https://github.com/theUpsider/ComfyUI-Logic": { + "stars": 95, + "last_update": "2024-05-22 20:35:47", + "author_account_age_days": 2717 + }, + "https://github.com/theUpsider/ComfyUI-Styles_CSV_Loader": { + "stars": 28, + "last_update": "2024-05-22 20:31:14", + "author_account_age_days": 2717 + }, + "https://github.com/thecooltechguy/ComfyUI-ComfyRun": { + "stars": 78, + "last_update": "2024-05-22 21:33:11", + "author_account_age_days": 2417 + }, + "https://github.com/thecooltechguy/ComfyUI-ComfyWorkflows": { + "stars": 32, + "last_update": "2024-05-22 21:33:47", + "author_account_age_days": 2417 + }, + "https://github.com/thecooltechguy/ComfyUI-MagicAnimate": { + "stars": 196, + "last_update": "2024-05-22 21:33:35", + "author_account_age_days": 2417 + }, + "https://github.com/thecooltechguy/ComfyUI-Stable-Video-Diffusion": { + "stars": 287, + "last_update": "2024-05-24 22:14:42", + "author_account_age_days": 2417 + }, + "https://github.com/tiankuan93/ComfyUI-V-Express": { + "stars": 77, + "last_update": "2024-06-17 13:32:21", + "author_account_age_days": 2945 + }, + "https://github.com/tianlang0704/ComfyUI-StableProjectorzBridge": { + "stars": 4, + "last_update": "2024-06-15 09:09:38", + "author_account_age_days": 3320 + }, + "https://github.com/tmagara/ComfyUI-Prediction-Boost": { + "stars": 0, + "last_update": "2024-06-14 13:59:42", + "author_account_age_days": 4370 + }, + "https://github.com/tocubed/ComfyUI-AudioReactor": { + "stars": 8, + "last_update": "2024-05-22 22:21:57", + "author_account_age_days": 3854 + }, + "https://github.com/tooldigital/ComfyUI-Yolo-Cropper": { + "stars": 4, + "last_update": "2024-06-14 13:59:48", + "author_account_age_days": 4312 + }, + "https://github.com/toxicwind/ComfyUI-TTools": { + "stars": 0, + "last_update": "2024-06-14 13:02:56", + "author_account_age_days": 4365 + }, + "https://github.com/toyxyz/ComfyUI_toyxyz_test_nodes": { + "stars": 429, + "last_update": "2024-06-18 15:27:19", + "author_account_age_days": 3644 + }, + "https://github.com/traugdor/ComfyUI-quadMoons-nodes": { + "stars": 8, + "last_update": "2024-06-11 00:02:55", + "author_account_age_days": 3815 + }, + "https://github.com/trojblue/trNodes": { + "stars": 8, + "last_update": "2024-05-22 18:04:36", + "author_account_age_days": 2252 + }, + "https://github.com/trumanwong/ComfyUI-NSFW-Detection": { + "stars": 16, + "last_update": "2024-05-23 01:27:29", + "author_account_age_days": 2955 + }, + "https://github.com/tsogzark/ComfyUI-load-image-from-url": { + "stars": 5, + "last_update": "2024-06-14 13:59:05", + "author_account_age_days": 1523 + }, + "https://github.com/ttulttul/ComfyUI-Iterative-Mixer": { + "stars": 97, + "last_update": "2024-06-13 22:29:53", + "author_account_age_days": 4752 + }, + "https://github.com/ttulttul/ComfyUI-Tensor-Operations": { + "stars": 5, + "last_update": "2024-06-12 21:55:39", + "author_account_age_days": 4752 + }, + "https://github.com/turkyden/ComfyUI-Comic": { + "stars": 1, + "last_update": "2024-06-14 13:02:14", + "author_account_age_days": 2744 + }, + "https://github.com/turkyden/ComfyUI-Sticker": { + "stars": 0, + "last_update": "2024-06-11 03:51:33", + "author_account_age_days": 2744 + }, + "https://github.com/tusharbhutt/Endless-Nodes": { + "stars": 22, + "last_update": "2024-06-14 12:02:17", + "author_account_age_days": 2660 + }, + "https://github.com/twri/sdxl_prompt_styler": { + "stars": 602, + "last_update": "2024-05-22 18:16:58", + "author_account_age_days": 4063 + }, + "https://github.com/txt2any/ComfyUI-PromptOrganizer": { + "stars": 0, + "last_update": "2024-05-23 01:10:33", + "author_account_age_days": 79 + }, + "https://github.com/ty0x2333/ComfyUI-Dev-Utils": { + "stars": 36, + "last_update": "2024-06-03 15:06:13", + "author_account_age_days": 3697 + }, + "https://github.com/tzwm/comfyui-profiler": { + "stars": 40, + "last_update": "2024-06-14 07:05:45", + "author_account_age_days": 4764 + }, + "https://github.com/uarefans/ComfyUI-Fans": { + "stars": 12, + "last_update": "2024-05-22 20:34:07", + "author_account_age_days": 1267 + }, + "https://github.com/uetuluk/comfyui-webcam-node": { + "stars": 2, + "last_update": "2024-06-14 08:25:13", + "author_account_age_days": 2309 + }, + "https://github.com/unwdef/unwdef-nodes-comfyui": { + "stars": 1, + "last_update": "2024-06-14 07:05:51", + "author_account_age_days": 68 + }, + "https://github.com/vanche1212/ComfyUI-ZMG-Nodes": { + "stars": 3, + "last_update": "2024-06-14 07:06:03", + "author_account_age_days": 2953 + }, + "https://github.com/vanillacode314/SimpleWildcardsComfyUI": { + "stars": 3, + "last_update": "2024-06-14 07:06:09", + "author_account_age_days": 852 + }, + "https://github.com/victorchall/comfyui_webcamcapture": { + "stars": 5, + "last_update": "2024-05-31 18:01:11", + "author_account_age_days": 3140 + }, + "https://github.com/vienteck/ComfyUI-Chat-GPT-Integration": { + "stars": 26, + "last_update": "2024-05-22 22:11:14", + "author_account_age_days": 3422 + }, + "https://github.com/violet-chen/comfyui-psd2png": { + "stars": 16, + "last_update": "2024-06-12 15:30:14", + "author_account_age_days": 1393 + }, + "https://github.com/viperyl/ComfyUI-BiRefNet": { + "stars": 155, + "last_update": "2024-05-23 00:18:06", + "author_account_age_days": 2027 + }, + "https://github.com/viperyl/ComfyUI-RGT": { + "stars": 4, + "last_update": "2024-06-14 09:35:50", + "author_account_age_days": 2027 + }, + "https://github.com/vivax3794/ComfyUI-Vivax-Nodes": { + "stars": 3, + "last_update": "2024-05-23 00:10:56", + "author_account_age_days": 1833 + }, + "https://github.com/vsevolod-oparin/comfyui-kandinsky22": { + "stars": 6, + "last_update": "2024-05-23 00:14:03", + "author_account_age_days": 4979 + }, + "https://github.com/wallish77/wlsh_nodes": { + "stars": 80, + "last_update": "2024-05-22 18:21:28", + "author_account_age_days": 2215 + }, + "https://github.com/wandbrandon/comfyui-pixel": { + "stars": 4, + "last_update": "2024-06-14 07:07:09", + "author_account_age_days": 3378 + }, + "https://github.com/web3nomad/ComfyUI_Invisible_Watermark": { + "stars": 1, + "last_update": "2024-05-23 01:16:54", + "author_account_age_days": 962 + }, + "https://github.com/wei30172/comfygen": { + "stars": 4, + "last_update": "2024-05-23 00:21:19", + "author_account_age_days": 1607 + }, + "https://github.com/whatbirdisthat/cyberdolphin": { + "stars": 14, + "last_update": "2024-05-23 03:43:08", + "author_account_age_days": 5482 + }, + "https://github.com/whmc76/ComfyUI-Openpose-Editor-Plus": { + "stars": 20, + "last_update": "2024-05-22 21:28:27", + "author_account_age_days": 446 + }, + "https://github.com/wmatson/easy-comfy-nodes": { + "stars": 13, + "last_update": "2024-06-14 07:06:57", + "author_account_age_days": 4112 + }, + "https://github.com/wolfden/ComfyUi_PromptStylers": { + "stars": 64, + "last_update": "2024-05-22 18:17:46", + "author_account_age_days": 5716 + }, + "https://github.com/wolfden/ComfyUi_String_Function_Tree": { + "stars": 8, + "last_update": "2024-05-22 18:29:16", + "author_account_age_days": 5716 + }, + "https://github.com/wujm424606/ComfyUi-Ollama-YN": { + "stars": 11, + "last_update": "2024-06-14 07:06:39", + "author_account_age_days": 2257 + }, + "https://github.com/wutipong/ComfyUI-TextUtils": { + "stars": 1, + "last_update": "2024-06-14 09:34:31", + "author_account_age_days": 4180 + }, + "https://github.com/wwwins/ComfyUI-Simple-Aspect-Ratio": { + "stars": 1, + "last_update": "2024-05-22 22:22:25", + "author_account_age_days": 5045 + }, + "https://github.com/xXAdonesXx/NodeGPT": { + "stars": 324, + "last_update": "2024-06-14 07:07:03", + "author_account_age_days": 1473 + }, + "https://github.com/xiaoxiaodesha/hd_node": { + "stars": 7, + "last_update": "2024-06-11 02:36:48", + "author_account_age_days": 2869 + }, + "https://github.com/xliry/ComfyUI_SendDiscord": { + "stars": 0, + "last_update": "2024-05-23 02:21:38", + "author_account_age_days": 1268 + }, + "https://github.com/xuhongming251/ComfyUI-GPEN": { + "stars": 2, + "last_update": "2024-06-15 14:33:37", + "author_account_age_days": 4101 + }, + "https://github.com/xuhongming251/ComfyUI-MuseTalkUtils": { + "stars": 10, + "last_update": "2024-06-15 14:32:32", + "author_account_age_days": 4101 + }, + "https://github.com/yffyhk/comfyui_auto_danbooru": { + "stars": 0, + "last_update": "2024-05-22 23:23:03", + "author_account_age_days": 3716 + }, + "https://github.com/yolain/ComfyUI-Easy-Use": { + "stars": 493, + "last_update": "2024-06-16 08:15:04", + "author_account_age_days": 1335 + }, + "https://github.com/yolanother/DTAIComfyImageSubmit": { + "stars": 1, + "last_update": "2024-05-22 18:14:56", + "author_account_age_days": 4858 + }, + "https://github.com/yolanother/DTAIComfyLoaders": { + "stars": 1, + "last_update": "2024-05-22 18:14:44", + "author_account_age_days": 4858 + }, + "https://github.com/yolanother/DTAIComfyPromptAgent": { + "stars": 5, + "last_update": "2024-05-22 18:14:18", + "author_account_age_days": 4858 + }, + "https://github.com/yolanother/DTAIComfyQRCodes": { + "stars": 2, + "last_update": "2024-05-22 18:15:09", + "author_account_age_days": 4858 + }, + "https://github.com/yolanother/DTAIComfyVariables": { + "stars": 7, + "last_update": "2024-05-22 18:15:21", + "author_account_age_days": 4858 + }, + "https://github.com/yolanother/DTAIImageToTextNode": { + "stars": 15, + "last_update": "2024-05-22 18:14:31", + "author_account_age_days": 4858 + }, + "https://github.com/youyegit/tdxh_node_comfyui": { + "stars": 2, + "last_update": "2024-05-23 17:55:42", + "author_account_age_days": 423 + }, + "https://github.com/yuvraj108c/ComfyUI-Depth-Anything-Tensorrt": { + "stars": 61, + "last_update": "2024-06-14 08:07:23", + "author_account_age_days": 2147 + }, + "https://github.com/yuvraj108c/ComfyUI-PiperTTS": { + "stars": 24, + "last_update": "2024-05-22 23:17:27", + "author_account_age_days": 2147 + }, + "https://github.com/yuvraj108c/ComfyUI-Pronodes": { + "stars": 1, + "last_update": "2024-05-22 23:16:51", + "author_account_age_days": 2147 + }, + "https://github.com/yuvraj108c/ComfyUI-Upscaler-Tensorrt": { + "stars": 37, + "last_update": "2024-05-31 05:50:59", + "author_account_age_days": 2147 + }, + "https://github.com/yuvraj108c/ComfyUI-Vsgan": { + "stars": 2, + "last_update": "2024-05-22 23:17:02", + "author_account_age_days": 2147 + }, + "https://github.com/yuvraj108c/ComfyUI-Whisper": { + "stars": 49, + "last_update": "2024-05-31 05:59:22", + "author_account_age_days": 2147 + }, + "https://github.com/zcfrank1st/Comfyui-Toolbox": { + "stars": 4, + "last_update": "2024-05-22 22:08:07", + "author_account_age_days": 4410 + }, + "https://github.com/zcfrank1st/Comfyui-Yolov8": { + "stars": 17, + "last_update": "2024-06-14 07:08:40", + "author_account_age_days": 4410 + }, + "https://github.com/zcfrank1st/comfyui_visual_anagrams": { + "stars": 5, + "last_update": "2024-06-14 07:07:27", + "author_account_age_days": 4410 + }, + "https://github.com/zer0TF/cute-comfy": { + "stars": 27, + "last_update": "2024-05-22 21:18:53", + "author_account_age_days": 2665 + }, + "https://github.com/zfkun/ComfyUI_zfkun": { + "stars": 13, + "last_update": "2024-05-27 11:21:51", + "author_account_age_days": 4858 + }, + "https://github.com/zhangp365/ComfyUI-utils-nodes": { + "stars": 6, + "last_update": "2024-06-10 01:49:46", + "author_account_age_days": 286 + }, + "https://github.com/zhongpei/ComfyUI-InstructIR": { + "stars": 58, + "last_update": "2024-05-22 23:19:43", + "author_account_age_days": 3454 + }, + "https://github.com/zhongpei/Comfyui_image2prompt": { + "stars": 224, + "last_update": "2024-05-22 23:19:30", + "author_account_age_days": 3454 + }, + "https://github.com/zhuanqianfish/ComfyUI-EasyNode": { + "stars": 57, + "last_update": "2024-06-14 07:10:18", + "author_account_age_days": 4229 + }, + "https://github.com/zhulu111/ComfyUI_Bxb": { + "stars": 3, + "last_update": "2024-06-19 06:37:04", + "author_account_age_days": 34 + }, + "https://github.com/zohac/ComfyUI_ZC_DrawShape": { + "stars": 1, + "last_update": "2024-06-14 07:10:25", + "author_account_age_days": 2656 + }, + "https://github.com/zombieyang/sd-ppp": { + "stars": 9, + "last_update": "2024-06-16 02:45:04", + "author_account_age_days": 3912 } } \ No newline at end of file diff --git a/glob/manager_core.py b/glob/manager_core.py index 76fcdc01..5a608771 100644 --- a/glob/manager_core.py +++ b/glob/manager_core.py @@ -23,7 +23,7 @@ sys.path.append(glob_path) import cm_global from manager_util import * -version = [2, 30] +version = [2, 38, 2] version_str = f"V{version[0]}.{version[1]}" + (f'.{version[2]}' if len(version) > 2 else '') comfyui_manager_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..')) @@ -204,7 +204,8 @@ def write_config(): 'double_click_policy': get_config()['double_click_policy'], 'windows_selector_event_loop_policy': get_config()['windows_selector_event_loop_policy'], 'model_download_by_agent': get_config()['model_download_by_agent'], - 'downgrade_blacklist': get_config()['downgrade_blacklist'] + 'downgrade_blacklist': get_config()['downgrade_blacklist'], + 'security_level': get_config()['security_level'], } with open(config_path, 'w') as configfile: config.write(configfile) @@ -216,20 +217,30 @@ def read_config(): config.read(config_path) default_conf = config['default'] + # policy migration: disable_unsecure_features -> security_level + if 'disable_unsecure_features' in default_conf: + if default_conf['disable_unsecure_features'].lower() == 'true': + security_level = 'strong' + else: + security_level = 'normal' + else: + security_level = default_conf['security_level'] if 'security_level' in default_conf else 'normal' + return { 'preview_method': default_conf['preview_method'] if 'preview_method' in default_conf else manager_funcs.get_current_preview_method(), 'badge_mode': default_conf['badge_mode'] if 'badge_mode' in default_conf else 'none', 'git_exe': default_conf['git_exe'] if 'git_exe' in default_conf else '', 'channel_url': default_conf['channel_url'] if 'channel_url' in default_conf else 'https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main', 'share_option': default_conf['share_option'] if 'share_option' in default_conf else 'all', - 'bypass_ssl': default_conf['bypass_ssl'] if 'bypass_ssl' in default_conf else False, - 'file_logging': default_conf['file_logging'] if 'file_logging' in default_conf else True, + 'bypass_ssl': default_conf['bypass_ssl'].lower() == 'true' if 'bypass_ssl' in default_conf else False, + 'file_logging': default_conf['file_logging'].lower() == 'true' if 'file_logging' in default_conf else True, 'default_ui': default_conf['default_ui'] if 'default_ui' in default_conf else 'none', 'component_policy': default_conf['component_policy'] if 'component_policy' in default_conf else 'workflow', 'double_click_policy': default_conf['double_click_policy'] if 'double_click_policy' in default_conf else 'copy-all', - 'windows_selector_event_loop_policy': default_conf['windows_selector_event_loop_policy'] if 'windows_selector_event_loop_policy' in default_conf else False, - 'model_download_by_agent': default_conf['model_download_by_agent'] if 'model_download_by_agent' in default_conf else False, + 'windows_selector_event_loop_policy': default_conf['windows_selector_event_loop_policy'].lower() == 'true' if 'windows_selector_event_loop_policy' in default_conf else False, + 'model_download_by_agent': default_conf['model_download_by_agent'].lower() == 'true' if 'model_download_by_agent' in default_conf else False, 'downgrade_blacklist': default_conf['downgrade_blacklist'] if 'downgrade_blacklist' in default_conf else '', + 'security_level': security_level } except Exception: @@ -246,7 +257,8 @@ def read_config(): 'double_click_policy': 'copy-all', 'windows_selector_event_loop_policy': False, 'model_download_by_agent': False, - 'downgrade_blacklist': '' + 'downgrade_blacklist': '', + 'security_level': 'normal', } @@ -384,7 +396,7 @@ def execute_install_script(url, repo_path, lazy_mode=False, instant_execution=Fa package_name = remap_pip_package(line.strip()) if package_name and not package_name.startswith('#'): install_cmd = [sys.executable, "-m", "pip", "install", package_name] - if package_name.strip() != "": + if package_name.strip() != "" and not package_name.startswith('#'): try_install_script(url, repo_path, install_cmd, instant_execution=instant_execution) if os.path.exists(install_script_path): @@ -564,7 +576,7 @@ def git_pull(path): async def get_data(uri, silent=False): if not silent: - print(f"FETCH DATA from: {uri}") + print(f"FETCH DATA from: {uri}", end="") if uri.startswith("http"): async with aiohttp.ClientSession(trust_env=True, connector=aiohttp.TCPConnector(verify_ssl=False)) as session: @@ -576,6 +588,8 @@ async def get_data(uri, silent=False): json_text = f.read() json_obj = json.loads(json_text) + if not silent: + print(f" [DONE]") return json_obj @@ -964,7 +978,6 @@ def get_current_snapshot(): # Get ComfyUI hash repo_path = comfy_path - print(f"comfy_path: {comfy_path}") if not os.path.exists(os.path.join(repo_path, '.git')): print(f"ComfyUI update fail: The installed ComfyUI does not have a Git repository.") return {} @@ -1184,3 +1197,4 @@ def unzip(model_path): os.remove(model_path) return True + diff --git a/glob/manager_server.py b/glob/manager_server.py index c643ffe5..facdf22a 100644 --- a/glob/manager_server.py +++ b/glob/manager_server.py @@ -42,6 +42,36 @@ from comfy.cli_args import args import latent_preview +is_local_mode = args.listen.startswith('127.') + + +def is_allowed_security_level(level): + if level == 'high': + if is_local_mode: + return core.get_config()['security_level'].lower() in ['weak', 'normal'] + else: + return core.get_config()['security_level'].lower() == 'weak' + elif level == 'middle': + return core.get_config()['security_level'].lower() in ['weak', 'normal'] + else: + return True + + +async def get_risky_level(files): + json_data1 = await core.get_data_by_mode('local', 'custom-node-list.json') + json_data2 = await core.get_data_by_mode('cache', 'custom-node-list.json', channel_url='https://github.com/ltdrdata/ComfyUI-Manager/raw/main/custom-node-list.json') + + all_urls = set() + for x in json_data1['custom_nodes'] + json_data2['custom_nodes']: + all_urls.update(x['files']) + + for x in files: + if x not in all_urls: + return "high" + + return "middle" + + class ManagerFuncsInComfyUI(core.ManagerFuncs): def get_current_preview_method(self): if args.preview_method == latent_preview.LatentPreviewMethod.Auto: @@ -171,19 +201,18 @@ def print_comfyui_version(): print_comfyui_version() -async def populate_github_stats(json_obj, filename, silent=False): - uri = os.path.join(core.comfyui_manager_path, filename) - with open(uri, "r", encoding='utf-8') as f: - github_stats = json.load(f) +async def populate_github_stats(json_obj, json_obj_github): if 'custom_nodes' in json_obj: for i, node in enumerate(json_obj['custom_nodes']): url = node['reference'] - if url in github_stats: - json_obj['custom_nodes'][i]['stars'] = github_stats[url]['stars'] - json_obj['custom_nodes'][i]['last_update'] = github_stats[url]['last_update'] + if url in json_obj_github: + json_obj['custom_nodes'][i]['stars'] = json_obj_github[url]['stars'] + json_obj['custom_nodes'][i]['last_update'] = json_obj_github[url]['last_update'] + json_obj['custom_nodes'][i]['trust'] = json_obj_github[url]['author_account_age_days'] > 180 else: json_obj['custom_nodes'][i]['stars'] = -1 json_obj['custom_nodes'][i]['last_update'] = -1 + json_obj['custom_nodes'][i]['trust'] = False return json_obj @@ -358,6 +387,10 @@ async def fetch_updates(request): @PromptServer.instance.routes.get("/customnode/update_all") async def update_all(request): + if not is_allowed_security_level('middle'): + print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.") + return web.Response(status=403) + try: core.save_snapshot_with_postfix('autosave') @@ -439,7 +472,8 @@ async def fetch_customnode_list(request): channel = core.get_config()['channel_url'] json_obj = await core.get_data_by_mode(request.rel_url.query["mode"], 'custom-node-list.json') - json_obj = await populate_github_stats(json_obj, "github-stats.json") + json_obj_github = await core.get_data_by_mode(request.rel_url.query["mode"], 'github-stats.json', 'default') + json_obj = await populate_github_stats(json_obj, json_obj_github) def is_ignored_notice(code): if code is not None and code.startswith('#NOTICE_'): @@ -473,6 +507,16 @@ async def fetch_customnode_list(request): return web.json_response(json_obj, content_type='application/json') +@PromptServer.instance.routes.get("/customnode/alternatives") +async def fetch_customnode_alternatives(request): + alter_json = await core.get_data_by_mode(request.rel_url.query["mode"], 'alter-list.json') + + for item in alter_json['items']: + populate_markdown(item) + + return web.json_response(alter_json, content_type='application/json') + + @PromptServer.instance.routes.get("/alternatives/getlist") async def fetch_alternatives_list(request): if "skip_update" in request.rel_url.query and request.rel_url.query["skip_update"] == "true": @@ -551,6 +595,10 @@ async def get_snapshot_list(request): @PromptServer.instance.routes.get("/snapshot/remove") async def remove_snapshot(request): + if not is_allowed_security_level('middle'): + print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.") + return web.Response(status=403) + try: target = request.rel_url.query["target"] @@ -565,6 +613,10 @@ async def remove_snapshot(request): @PromptServer.instance.routes.get("/snapshot/restore") async def remove_snapshot(request): + if not is_allowed_security_level('middle'): + print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.") + return web.Response(status=403) + try: target = request.rel_url.query["target"] @@ -729,8 +781,17 @@ def copy_set_active(files, is_disable, js_path_name='.'): @PromptServer.instance.routes.post("/customnode/install") async def install_custom_node(request): + if not is_allowed_security_level('middle'): + print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.") + return web.Response(status=403) + json_data = await request.json() + risky_level = await get_risky_level(json_data['files']) + if not is_allowed_security_level(risky_level): + print(f"ERROR: This installation is not allowed in this security_level. Please contact the administrator.") + return web.Response(status=404) + install_type = json_data['install_type'] print(f"Install custom node '{json_data['title']}'") @@ -767,6 +828,10 @@ async def install_custom_node(request): @PromptServer.instance.routes.post("/customnode/fix") async def fix_custom_node(request): + if not is_allowed_security_level('middle'): + print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.") + return web.Response(status=403) + json_data = await request.json() install_type = json_data['install_type'] @@ -797,6 +862,10 @@ async def fix_custom_node(request): @PromptServer.instance.routes.post("/customnode/install/git_url") async def install_custom_node_git_url(request): + if not is_allowed_security_level('high'): + print(f"ERROR: To use this feature, you must set '--listen' to a local IP and set the security level to 'middle' or 'weak'. Please contact the administrator.") + return web.Response(status=403) + url = await request.text() res = core.gitclone_install([url]) @@ -809,6 +878,10 @@ async def install_custom_node_git_url(request): @PromptServer.instance.routes.post("/customnode/install/pip") async def install_custom_node_git_url(request): + if not is_allowed_security_level('high'): + print(f"ERROR: To use this feature, you must set '--listen' to a local IP and set the security level to 'middle' or 'weak'. Please contact the administrator.") + return web.Response(status=403) + packages = await request.text() core.pip_install(packages.split(' ')) @@ -817,6 +890,10 @@ async def install_custom_node_git_url(request): @PromptServer.instance.routes.post("/customnode/uninstall") async def uninstall_custom_node(request): + if not is_allowed_security_level('middle'): + print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.") + return web.Response(status=403) + json_data = await request.json() install_type = json_data['install_type'] @@ -841,6 +918,10 @@ async def uninstall_custom_node(request): @PromptServer.instance.routes.post("/customnode/update") async def update_custom_node(request): + if not is_allowed_security_level('middle'): + print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.") + return web.Response(status=403) + json_data = await request.json() install_type = json_data['install_type'] @@ -955,6 +1036,10 @@ manager_terminal_hook = ManagerTerminalHook() @PromptServer.instance.routes.get("/manager/terminal") async def terminal_mode(request): + if not is_allowed_security_level('high'): + print(f"ERROR: To use this action, a security_level of `weak` is required. Please contact the administrator.") + return web.Response(status=403) + if "mode" in request.rel_url.query: if request.rel_url.query['mode'] == 'true': sys.__comfyui_manager_terminal_hook.add_hook('cm', manager_terminal_hook) @@ -1043,6 +1128,19 @@ async def channel_url_list(request): return web.Response(status=200) +def add_target_blank(html_text): + pattern = r'(]*)(>)' + + def add_target(match): + if 'target=' not in match.group(1): + return match.group(1) + ' target="_blank"' + match.group(2) + return match.group(0) + + modified_html = re.sub(pattern, add_target, html_text) + + return modified_html + + @PromptServer.instance.routes.get("/manager/notice") async def get_notice(request): url = "github.com" @@ -1063,6 +1161,8 @@ async def get_notice(request): # markdown_content += f"
         ()" markdown_content += f"
Manager: {core.version_str}" + markdown_content = add_target_blank(markdown_content) + try: if core.comfy_ui_required_commit_datetime.date() > core.comfy_ui_commit_datetime.date(): markdown_content = f'

Your ComfyUI is too OUTDATED!!!

' + markdown_content @@ -1078,6 +1178,10 @@ async def get_notice(request): @PromptServer.instance.routes.get("/manager/reboot") def restart(self): + if not is_allowed_security_level('middle'): + print(f"ERROR: To use this action, a security_level of `middle or below` is required. Please contact the administrator.") + return web.Response(status=403) + try: sys.stdout.close_log() except Exception as e: @@ -1582,8 +1686,9 @@ async def default_cache_update(): b = get_cache("extension-node-map.json") c = get_cache("model-list.json") d = get_cache("alter-list.json") + e = get_cache("github-stats.json") - await asyncio.gather(a, b, c, d) + await asyncio.gather(a, b, c, d, e) threading.Thread(target=lambda: asyncio.run(default_cache_update())).start() diff --git a/glob/security_check.py b/glob/security_check.py new file mode 100644 index 00000000..1c6fdf6f --- /dev/null +++ b/glob/security_check.py @@ -0,0 +1,80 @@ +import sys +import subprocess +import os + + +def security_check(): + print("[START] Security scan") + + custom_nodes_path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')) + comfyui_path = os.path.abspath(os.path.join(custom_nodes_path, '..')) + + guide = { + "ComfyUI_LLMVISION": """ +0.Remove ComfyUI\\custom_nodes\\ComfyUI_LLMVISION. +1.Remove pip packages: openai-1.16.3.dist-info, anthropic-0.21.4.dist-info, openai-1.30.2.dist-info, anthropic-0.26.1.dist-info, %LocalAppData%\\rundll64.exe + (For portable versions, it is recommended to reinstall. If you are using a venv, it is advised to recreate the venv.) +2.Remove these files in your system: lib/browser/admin.py, Cadmino.py, Fadmino.py, VISION-D.exe, BeamNG.UI.exe +3.Check your Windows registry for the key listed above and remove it. + (HKEY_CURRENT_USER\\Software\\OpenAICLI) +4.Run a malware scanner. +5.Change all of your passwords, everywhere. + +(Reinstall OS is recommended.) +\n +Detailed information: https://old.reddit.com/r/comfyui/comments/1dbls5n/psa_if_youve_used_the_comfyui_llmvision_node_from/ + """, + "lolMiner": """ +1. Remove pip packages: lolMiner* +2. Remove files: lolMiner*, 4G_Ethash_Linux_Readme.txt, mine* in ComfyUI dir. + +(Reinstall ComfyUI is recommended.) + """ + } + + node_blacklist = {"ComfyUI_LLMVISION": "ComfyUI_LLMVISION"} + + pip_blacklist = {"AppleBotzz": "ComfyUI_LLMVISION"} + + file_blacklist = { + "ComfyUI_LLMVISION": ["%LocalAppData%\\rundll64.exe"], + "lolMiner": [os.path.join(comfyui_path, 'lolMiner')] + } + + installed_pips = subprocess.check_output([sys.executable, '-m', "pip", "freeze"], text=True) + + detected = set() + for k, v in node_blacklist.items(): + if os.path.exists(os.path.join(custom_nodes_path, k)): + print(f"[SECURITY ALERT] custom node '{k}' is dangerous.") + detected.add(v) + + for k, v in pip_blacklist.items(): + if k in installed_pips: + detected.add(v) + break + + for k, v in file_blacklist.items(): + for x in v: + if os.path.exists(os.path.expandvars(x)): + detected.add(k) + break + + if len(detected) > 0: + for line in installed_pips.split('\n'): + for k, v in pip_blacklist.items(): + if k in line: + print(f"[SECURITY ALERT] '{line}' is dangerous.") + + print("\n########################################################################") + print(" Malware has been detected, forcibly terminating ComfyUI execution.") + print("########################################################################\n") + + for x in detected: + print(f"\n======== TARGET: {x} =========") + print(f"\nTODO:") + print(guide.get(x)) + + exit(-1) + + print("[DONE] Security scan") diff --git a/js/a1111-alter-downloader.js b/js/a1111-alter-downloader.js deleted file mode 100644 index 65780a6b..00000000 --- a/js/a1111-alter-downloader.js +++ /dev/null @@ -1,566 +0,0 @@ -import { app } from "../../scripts/app.js"; -import { api } from "../../scripts/api.js" -import { ComfyDialog, $el } from "../../scripts/ui.js"; -import { install_checked_custom_node, manager_instance, rebootAPI } from "./common.js"; - -async function getAlterList() { - var mode = manager_instance.datasrc_combo.value; - - var skip_update = ""; - if(manager_instance.update_check_checkbox.checked) - skip_update = "&skip_update=true"; - - const response = await api.fetchApi(`/alternatives/getlist?mode=${mode}${skip_update}`); - - const data = await response.json(); - return data; -} - -export class AlternativesInstaller extends ComfyDialog { - static instance = null; - - install_buttons = []; - message_box = null; - data = null; - - clear() { - this.install_buttons = []; - this.message_box = null; - this.data = null; - } - - constructor(app, manager_dialog) { - super(); - this.manager_dialog = manager_dialog; - this.search_keyword = ''; - this.element = $el("div.comfy-modal", { parent: document.body }, []); - } - - startInstall(target) { - const self = AlternativesInstaller.instance; - - self.updateMessage(`
Installing '${target.title}'`); - } - - disableButtons() { - for(let i in this.install_buttons) { - this.install_buttons[i].disabled = true; - this.install_buttons[i].style.backgroundColor = 'gray'; - } - } - - apply_searchbox(data) { - let keyword = this.search_box.value.toLowerCase(); - for(let i in this.grid_rows) { - let data1 = this.grid_rows[i].data; - let data2 = data1.custom_node; - - if(!data2) - continue; - - let content = data1.tags.toLowerCase() + data1.description.toLowerCase() + data2.author.toLowerCase() + data2.description.toLowerCase() + data2.title.toLowerCase(); - - if(this.filter && this.filter != '*') { - if(this.filter != data2.installed) { - this.grid_rows[i].control.style.display = 'none'; - continue; - } - } - - if(keyword == "") - this.grid_rows[i].control.style.display = null; - else if(content.includes(keyword)) { - this.grid_rows[i].control.style.display = null; - } - else { - this.grid_rows[i].control.style.display = 'none'; - } - } - } - - async invalidateControl() { - this.clear(); - - // splash - while (this.element.children.length) { - this.element.removeChild(this.element.children[0]); - } - - const msg = $el('div', {id:'custom-message'}, - [$el('br'), - 'The custom node DB is currently being updated, and updates to custom nodes are being checked for.', - $el('br'), - 'NOTE: Update only checks for extensions that have been fetched.', - $el('br')]); - msg.style.height = '100px'; - msg.style.verticalAlign = 'middle'; - this.element.appendChild(msg); - - // invalidate - this.data = (await getAlterList()).items; - - this.element.removeChild(msg); - - while (this.element.children.length) { - this.element.removeChild(this.element.children[0]); - } - - this.createHeaderControls(); - await this.createGrid(); - this.apply_searchbox(this.data); - this.createBottomControls(); - } - - updateMessage(msg, btn_id) { - this.message_box.innerHTML = msg; - if(btn_id) { - const rebootButton = document.getElementById(btn_id); - const self = this; - rebootButton.addEventListener("click", - function() { - if(rebootAPI()) { - self.close(); - self.manager_dialog.close(); - } - }); - } - } - - invalidate_checks(is_checked, install_state) { - if(is_checked) { - for(let i in this.grid_rows) { - let data = this.grid_rows[i].data; - let checkbox = this.grid_rows[i].checkbox; - let buttons = this.grid_rows[i].buttons; - - checkbox.disabled = data.custom_node.installed != install_state; - - if(checkbox.disabled) { - for(let j in buttons) { - buttons[j].style.display = 'none'; - } - } - else { - for(let j in buttons) { - buttons[j].style.display = null; - } - } - } - - this.checkbox_all.disabled = false; - } - else { - for(let i in this.grid_rows) { - let checkbox = this.grid_rows[i].checkbox; - if(checkbox.check) - return; // do nothing - } - - // every checkbox is unchecked -> enable all checkbox - for(let i in this.grid_rows) { - let checkbox = this.grid_rows[i].checkbox; - let buttons = this.grid_rows[i].buttons; - checkbox.disabled = false; - - for(let j in buttons) { - buttons[j].style.display = null; - } - } - - this.checkbox_all.checked = false; - this.checkbox_all.disabled = true; - } - } - - check_all(is_checked) { - if(is_checked) { - // lookup first checked item's state - let check_state = null; - for(let i in this.grid_rows) { - let checkbox = this.grid_rows[i].checkbox; - if(checkbox.checked) { - check_state = this.grid_rows[i].data.custom_node.installed; - } - } - - if(check_state == null) - return; - - // check only same state items - for(let i in this.grid_rows) { - let checkbox = this.grid_rows[i].checkbox; - if(this.grid_rows[i].data.custom_node.installed == check_state) - checkbox.checked = true; - } - } - else { - // uncheck all - for(let i in this.grid_rows) { - let checkbox = this.grid_rows[i].checkbox; - let buttons = this.grid_rows[i].buttons; - checkbox.checked = false; - checkbox.disabled = false; - - for(let j in buttons) { - buttons[j].style.display = null; - } - } - - this.checkbox_all.disabled = true; - } - } - - async createGrid() { - var grid = document.createElement('table'); - grid.setAttribute('id', 'alternatives-grid'); - - this.grid_rows = {}; - - let self = this; - - var thead = document.createElement('thead'); - var tbody = document.createElement('tbody'); - - var headerRow = document.createElement('tr'); - thead.style.position = "sticky"; - thead.style.top = "0px"; - thead.style.borderCollapse = "collapse"; - thead.style.tableLayout = "fixed"; - - var header0 = document.createElement('th'); - header0.style.width = "20px"; - this.checkbox_all = $el("input",{type:'checkbox', id:'check_all'},[]); - header0.appendChild(this.checkbox_all); - this.checkbox_all.checked = false; - this.checkbox_all.disabled = true; - this.checkbox_all.addEventListener('change', function() { self.check_all.call(self, self.checkbox_all.checked); }); - - var header1 = document.createElement('th'); - header1.innerHTML = '  ID  '; - header1.style.width = "20px"; - var header2 = document.createElement('th'); - header2.innerHTML = 'Tags'; - header2.style.width = "10%"; - var header3 = document.createElement('th'); - header3.innerHTML = 'Author'; - header3.style.width = "150px"; - var header4 = document.createElement('th'); - header4.innerHTML = 'Title'; - header4.style.width = "20%"; - var header5 = document.createElement('th'); - header5.innerHTML = 'Description'; - header5.style.width = "50%"; - var header6 = document.createElement('th'); - header6.innerHTML = 'Install'; - header6.style.width = "130px"; - - header1.style.position = "sticky"; - header1.style.top = "0px"; - header2.style.position = "sticky"; - header2.style.top = "0px"; - header3.style.position = "sticky"; - header3.style.top = "0px"; - header4.style.position = "sticky"; - header4.style.top = "0px"; - header5.style.position = "sticky"; - header5.style.top = "0px"; - - thead.appendChild(headerRow); - headerRow.appendChild(header0); - headerRow.appendChild(header1); - headerRow.appendChild(header2); - headerRow.appendChild(header3); - headerRow.appendChild(header4); - headerRow.appendChild(header5); - headerRow.appendChild(header6); - - headerRow.style.backgroundColor = "Black"; - headerRow.style.color = "White"; - headerRow.style.textAlign = "center"; - headerRow.style.width = "100%"; - headerRow.style.padding = "0"; - - grid.appendChild(thead); - grid.appendChild(tbody); - - if(this.data) - for (var i = 0; i < this.data.length; i++) { - const data = this.data[i]; - var dataRow = document.createElement('tr'); - - let data0 = document.createElement('td'); - let checkbox = $el("input",{type:'checkbox', id:`check_${i}`},[]); - data0.appendChild(checkbox); - checkbox.checked = false; - checkbox.addEventListener('change', function() { self.invalidate_checks.call(self, checkbox.checked, data.custom_node?.installed); }); - - var data1 = document.createElement('td'); - data1.style.textAlign = "center"; - data1.innerHTML = i+1; - var data2 = document.createElement('td'); - data2.innerHTML = ` ${data.tags}`; - var data3 = document.createElement('td'); - var data4 = document.createElement('td'); - if(data.custom_node) { - data3.innerHTML = ` ${data.custom_node.author}`; - data4.innerHTML = ` ${data.custom_node.title}`; - } - else { - data3.innerHTML = ` Unknown`; - data4.innerHTML = ` Unknown`; - } - var data5 = document.createElement('td'); - data5.innerHTML = data.description; - var data6 = document.createElement('td'); - data6.style.textAlign = "center"; - - var installBtn = document.createElement('button'); - var installBtn2 = null; - var installBtn3 = null; - - if(data.custom_node) { - this.install_buttons.push(installBtn); - - switch(data.custom_node.installed) { - case 'Disabled': - installBtn3 = document.createElement('button'); - installBtn3.innerHTML = 'Enable'; - installBtn3.style.backgroundColor = 'blue'; - installBtn3.style.color = 'white'; - this.install_buttons.push(installBtn3); - - installBtn.innerHTML = 'Uninstall'; - installBtn.style.backgroundColor = 'red'; - installBtn.style.color = 'white'; - break; - case 'Update': - installBtn2 = document.createElement('button'); - installBtn2.innerHTML = 'Update'; - installBtn2.style.backgroundColor = 'blue'; - installBtn2.style.color = 'white'; - this.install_buttons.push(installBtn2); - - installBtn3 = document.createElement('button'); - installBtn3.innerHTML = 'Disable'; - installBtn3.style.backgroundColor = 'MediumSlateBlue'; - installBtn3.style.color = 'white'; - this.install_buttons.push(installBtn3); - - installBtn.innerHTML = 'Uninstall'; - installBtn.style.backgroundColor = 'red'; - installBtn.style.color = 'white'; - break; - case 'True': - installBtn3 = document.createElement('button'); - installBtn3.innerHTML = 'Disable'; - installBtn3.style.backgroundColor = 'MediumSlateBlue'; - installBtn3.style.color = 'white'; - this.install_buttons.push(installBtn3); - - installBtn.innerHTML = 'Uninstall'; - installBtn.style.backgroundColor = 'red'; - installBtn.style.color = 'white'; - break; - case 'False': - installBtn.innerHTML = 'Install'; - installBtn.style.backgroundColor = 'black'; - installBtn.style.color = 'white'; - break; - default: - installBtn.innerHTML = 'Try Install'; - installBtn.style.backgroundColor = 'Gray'; - installBtn.style.color = 'white'; - } - - let j = i; - if(installBtn2 != null) { - installBtn2.style.width = "120px"; - installBtn2.addEventListener('click', function() { - install_checked_custom_node(self.grid_rows, j, AlternativesInstaller.instance, 'update'); - }); - - data6.appendChild(installBtn2); - } - - if(installBtn3 != null) { - installBtn3.style.width = "120px"; - installBtn3.addEventListener('click', function() { - install_checked_custom_node(self.grid_rows, j, AlternativesInstaller.instance, 'toggle_active'); - }); - - data6.appendChild(installBtn3); - } - - - installBtn.style.width = "120px"; - installBtn.addEventListener('click', function() { - if(this.innerHTML == 'Uninstall') { - if (confirm(`Are you sure uninstall ${data.title}?`)) { - install_checked_custom_node(self.grid_rows, j, AlternativesInstaller.instance, 'uninstall'); - } - } - else { - install_checked_custom_node(self.grid_rows, j, AlternativesInstaller.instance, 'install'); - } - }); - - data6.appendChild(installBtn); - } - - dataRow.style.backgroundColor = "var(--bg-color)"; - dataRow.style.color = "var(--fg-color)"; - dataRow.style.textAlign = "left"; - - dataRow.appendChild(data0); - dataRow.appendChild(data1); - dataRow.appendChild(data2); - dataRow.appendChild(data3); - dataRow.appendChild(data4); - dataRow.appendChild(data5); - dataRow.appendChild(data6); - tbody.appendChild(dataRow); - - let buttons = []; - if(installBtn) { - buttons.push(installBtn); - } - if(installBtn2) { - buttons.push(installBtn2); - } - if(installBtn3) { - buttons.push(installBtn3); - } - - this.grid_rows[i] = {data:data, buttons:buttons, checkbox:checkbox, control:dataRow}; - } - - const panel = document.createElement('div'); - panel.style.width = "100%"; - panel.appendChild(grid); - - function handleResize() { - const parentHeight = self.element.clientHeight; - const gridHeight = parentHeight - 200; - - grid.style.height = gridHeight + "px"; - } - window.addEventListener("resize", handleResize); - - grid.style.position = "relative"; - grid.style.display = "inline-block"; - grid.style.width = "100%"; - grid.style.height = "100%"; - grid.style.overflowY = "scroll"; - this.element.style.height = "85%"; - this.element.style.width = "80%"; - this.element.appendChild(panel); - - handleResize(); - } - - createFilterCombo() { - let combo = document.createElement("select"); - - combo.style.cssFloat = "left"; - combo.style.fontSize = "14px"; - combo.style.padding = "4px"; - combo.style.background = "black"; - combo.style.marginLeft = "2px"; - combo.style.width = "199px"; - combo.id = `combo-manger-filter`; - combo.style.borderRadius = "15px"; - - let items = - [ - { value:'*', text:'Filter: all' }, - { value:'Disabled', text:'Filter: disabled' }, - { value:'Update', text:'Filter: update' }, - { value:'True', text:'Filter: installed' }, - { value:'False', text:'Filter: not-installed' }, - ]; - - items.forEach(item => { - const option = document.createElement("option"); - option.value = item.value; - option.text = item.text; - combo.appendChild(option); - }); - - let self = this; - combo.addEventListener('change', function(event) { - self.filter = event.target.value; - self.apply_searchbox(); - }); - - if(self.filter) { - combo.value = self.filter; - } - - return combo; - } - - createHeaderControls() { - let self = this; - this.search_box = $el('input.cm-search-filter', {type:'text', id:'manager-alternode-search-box', placeholder:'input search keyword', value:this.search_keyword}, []); - this.search_box.style.height = "25px"; - this.search_box.onkeydown = (event) => { - if (event.key === 'Enter') { - self.search_keyword = self.search_box.value; - self.apply_searchbox(); - } - if (event.key === 'Escape') { - self.search_keyword = self.search_box.value; - self.apply_searchbox(); - } - }; - - let search_button = document.createElement("button"); - search_button.className = "cm-small-button"; - search_button.innerHTML = "Search"; - search_button.onclick = () => { - self.search_keyword = self.search_box.value; - self.apply_searchbox(); - }; - search_button.style.display = "inline-block"; - - let filter_control = this.createFilterCombo(); - filter_control.style.display = "inline-block"; - - let cell = $el('td', {width:'100%'}, [filter_control, this.search_box, ' ', search_button]); - let search_control = $el('table', {width:'100%'}, - [ - $el('tr', {}, [cell]) - ] - ); - - cell.style.textAlign = "right"; - this.element.appendChild(search_control); - } - - async createBottomControls() { - var close_button = document.createElement("button"); - close_button.className = "cm-small-button"; - close_button.innerHTML = "Close"; - close_button.onclick = () => { this.close(); } - close_button.style.display = "inline-block"; - - this.message_box = $el('div', {id:'alternatives-installer-message'}, [$el('br'), '']); - this.message_box.style.height = '60px'; - this.message_box.style.verticalAlign = 'middle'; - - this.element.appendChild(this.message_box); - this.element.appendChild(close_button); - } - - async show() { - try { - this.invalidateControl(); - this.element.style.display = "block"; - this.element.style.zIndex = 10001; - } - catch(exception) { - app.ui.dialog.show(`Failed to get alternatives list. / ${exception}`); - console.error(exception); - } - } -} diff --git a/js/cm-api.js b/js/cm-api.js index e65cb348..1a6309d3 100644 --- a/js/cm-api.js +++ b/js/cm-api.js @@ -41,9 +41,18 @@ async function tryInstallCustomNode(event) { headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(event.detail.target) }); + + if(response.status == 403) { + show_message('This action is not allowed with this security level configuration.'); + return false; + } } - api.fetchApi("/manager/reboot"); + let response = await api.fetchApi("/manager/reboot"); + if(response.status == 403) { + show_message('This action is not allowed with this security level configuration.'); + return false; + } await sleep(300); diff --git a/js/comfyui-manager.js b/js/comfyui-manager.js index 3e98c234..53544c15 100644 --- a/js/comfyui-manager.js +++ b/js/comfyui-manager.js @@ -11,11 +11,10 @@ import { showYouMLShareDialog } from "./comfyui-share-common.js"; import { OpenArtShareDialog } from "./comfyui-share-openart.js"; -import { CustomNodesInstaller } from "./custom-nodes-downloader.js"; -import { AlternativesInstaller } from "./a1111-alter-downloader.js"; +import { CustomNodesManager } from "./custom-nodes-manager.js"; import { SnapshotManager } from "./snapshot.js"; import { ModelInstaller } from "./model-downloader.js"; -import { manager_instance, setManagerInstance, install_via_git_url, install_pip, rebootAPI, free_models } from "./common.js"; +import { manager_instance, setManagerInstance, install_via_git_url, install_pip, rebootAPI, free_models, show_message } from "./common.js"; import { ComponentBuilderDialog, load_components, set_component_policy, getPureName } from "./components-manager.js"; import { set_double_click_policy } from "./node_fixer.js"; @@ -26,6 +25,7 @@ docStyle.innerHTML = ` height: 520px; box-sizing: content-box; z-index: 10000; + overflow-y: auto; } .cb-widget { @@ -520,25 +520,21 @@ async function updateComfyUI() { const response = await api.fetchApi('/comfyui_manager/update_comfyui'); if (response.status == 400) { - app.ui.dialog.show('Failed to update ComfyUI.'); - app.ui.dialog.element.style.zIndex = 10010; + show_message('Failed to update ComfyUI.'); return false; } if (response.status == 201) { - app.ui.dialog.show('ComfyUI has been successfully updated.'); - app.ui.dialog.element.style.zIndex = 10010; + show_message('ComfyUI has been successfully updated.'); } else { - app.ui.dialog.show('ComfyUI is already up to date with the latest version.'); - app.ui.dialog.element.style.zIndex = 10010; + show_message('ComfyUI is already up to date with the latest version.'); } return true; } catch (exception) { - app.ui.dialog.show(`Failed to update ComfyUI / ${exception}`); - app.ui.dialog.element.style.zIndex = 10010; + show_message(`Failed to update ComfyUI / ${exception}`); return false; } finally { @@ -560,39 +556,35 @@ async function fetchUpdates(update_check_checkbox) { const response = await api.fetchApi(`/customnode/fetch_updates?mode=${mode}`); if (response.status != 200 && response.status != 201) { - app.ui.dialog.show('Failed to fetch updates.'); - app.ui.dialog.element.style.zIndex = 10010; + show_message('Failed to fetch updates.'); return false; } if (response.status == 201) { - app.ui.dialog.show("There is an updated extension available.

NOTE:
Fetch Updates is not an update.
Please update from

"); + show_message("There is an updated extension available.

NOTE:
Fetch Updates is not an update.
Please update from

"); const button = document.getElementById('cm-install-customnodes-button'); button.addEventListener("click", async function() { app.ui.dialog.close(); - if(!CustomNodesInstaller.instance) - CustomNodesInstaller.instance = new CustomNodesInstaller(app, self); - - await CustomNodesInstaller.instance.show(CustomNodesInstaller.ShowMode.UPDATE); + if(!CustomNodesManager.instance) { + CustomNodesManager.instance = new CustomNodesManager(app, self); + } + await CustomNodesManager.instance.show(CustomNodesManager.ShowMode.UPDATE); } ); - app.ui.dialog.element.style.zIndex = 10010; update_check_checkbox.checked = false; } else { - app.ui.dialog.show('All extensions are already up-to-date with the latest versions.'); - app.ui.dialog.element.style.zIndex = 10010; + show_message('All extensions are already up-to-date with the latest versions.'); } return true; } catch (exception) { - app.ui.dialog.show(`Failed to update custom nodes / ${exception}`); - app.ui.dialog.element.style.zIndex = 10010; + show_message(`Failed to update custom nodes / ${exception}`); return false; } finally { @@ -615,11 +607,16 @@ async function updateAll(update_check_checkbox, manager_dialog) { const response1 = await api.fetchApi('/comfyui_manager/update_comfyui'); const response2 = await api.fetchApi(`/customnode/update_all?mode=${mode}`); - if (response1.status == 400 || response2.status == 400) { - app.ui.dialog.show('Failed to update ComfyUI or several extensions.

See terminal log.
'); - app.ui.dialog.element.style.zIndex = 10010; + if (response2.status == 403) { + show_message('This action is not allowed with this security level configuration.'); return false; } + + if (response1.status == 400 || response2.status == 400) { + show_message('Failed to update ComfyUI or several extensions.

See terminal log.
'); + return false; + } + if(response1.status == 201 || response2.status == 201) { const update_info = await response2.json(); @@ -633,7 +630,7 @@ async function updateAll(update_check_checkbox, manager_dialog) { updated_list = "
UPDATED: "+update_info.updated.join(", "); } - app.ui.dialog.show( + show_message( "ComfyUI and all extensions have been updated to the latest version.
To apply the updated custom node, please ComfyUI. And refresh browser.
" +failed_list +updated_list @@ -646,19 +643,15 @@ async function updateAll(update_check_checkbox, manager_dialog) { manager_dialog.close(); } }); - - app.ui.dialog.element.style.zIndex = 10010; } else { - app.ui.dialog.show('ComfyUI and all extensions are already up-to-date with the latest versions.'); - app.ui.dialog.element.style.zIndex = 10010; + show_message('ComfyUI and all extensions are already up-to-date with the latest versions.'); } return true; } catch (exception) { - app.ui.dialog.show(`Failed to update ComfyUI or several extensions / ${exception}`); - app.ui.dialog.element.style.zIndex = 10010; + show_message(`Failed to update ComfyUI or several extensions / ${exception}`); return false; } finally { @@ -721,12 +714,13 @@ class ManagerMenuDialog extends ComfyDialog { [ $el("button.cm-button", { type: "button", - textContent: "Install Custom Nodes", + textContent: "Custom Nodes Manager", onclick: () => { - if(!CustomNodesInstaller.instance) - CustomNodesInstaller.instance = new CustomNodesInstaller(app, self); - CustomNodesInstaller.instance.show(CustomNodesInstaller.ShowMode.NORMAL); + if(!CustomNodesManager.instance) { + CustomNodesManager.instance = new CustomNodesManager(app, self); + } + CustomNodesManager.instance.show(CustomNodesManager.ShowMode.NORMAL); } }), @@ -735,9 +729,10 @@ class ManagerMenuDialog extends ComfyDialog { textContent: "Install Missing Custom Nodes", onclick: () => { - if(!CustomNodesInstaller.instance) - CustomNodesInstaller.instance = new CustomNodesInstaller(app, self); - CustomNodesInstaller.instance.show(CustomNodesInstaller.ShowMode.MISSING_NODES); + if(!CustomNodesManager.instance) { + CustomNodesManager.instance = new CustomNodesManager(app, self); + } + CustomNodesManager.instance.show(CustomNodesManager.ShowMode.MISSING); } }), @@ -775,9 +770,10 @@ class ManagerMenuDialog extends ComfyDialog { textContent: "Alternatives of A1111", onclick: () => { - if(!AlternativesInstaller.instance) - AlternativesInstaller.instance = new AlternativesInstaller(app, self); - AlternativesInstaller.instance.show(); + if(!CustomNodesManager.instance) { + CustomNodesManager.instance = new CustomNodesManager(app, self); + } + CustomNodesManager.instance.show(CustomNodesManager.ShowMode.ALTERNATIVES); } }), diff --git a/js/common.js b/js/common.js index 03615260..7090855f 100644 --- a/js/common.js +++ b/js/common.js @@ -1,6 +1,11 @@ import { app } from "../../scripts/app.js"; import { api } from "../../scripts/api.js"; +export function show_message(msg) { + app.ui.dialog.show(msg); + app.ui.dialog.element.style.zIndex = 10010; +} + export async function sleep(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } @@ -19,58 +24,6 @@ export function rebootAPI() { return false; } -export async function install_checked_custom_node(grid_rows, target_i, caller, mode) { - if(caller) { - let failed = ''; - - caller.disableButtons(); - - for(let i in grid_rows) { - if(!grid_rows[i].checkbox.checked && i != target_i) - continue; - - var target; - - if(grid_rows[i].data.custom_node) { - target = grid_rows[i].data.custom_node; - } - else { - target = grid_rows[i].data; - } - - caller.startInstall(target); - - try { - const response = await api.fetchApi(`/customnode/${mode}`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(target) - }); - - if(response.status == 400) { - show_message(`${mode} failed: ${target.title}`); - continue; - } - - const status = await response.json(); - app.ui.dialog.close(); - target.installed = 'True'; - continue; - } - catch(exception) { - failed += `
${target.title}`; - } - } - - if(failed != '') { - show_message(`${mode} failed: ${failed}`); - } - - await caller.invalidateControl(); - caller.updateMessage("
To apply the installed/updated/disabled/enabled custom node, please ComfyUI. And refresh browser.", 'cm-reboot-button1'); - } -}; - export var manager_instance = null; export function setManagerInstance(obj) { @@ -94,19 +47,21 @@ export async function install_pip(packages) { body: packages, }); + if(res.status == 403) { + show_message('This action is not allowed with this security level configuration.'); + return; + } + if(res.status == 200) { - app.ui.dialog.show(`PIP package installation is processed.
To apply the pip packages, please click the button in ComfyUI.`); + show_message(`PIP package installation is processed.
To apply the pip packages, please click the button in ComfyUI.`); const rebootButton = document.getElementById('cm-reboot-button3'); const self = this; rebootButton.addEventListener("click", rebootAPI); - - app.ui.dialog.element.style.zIndex = 10010; } else { - app.ui.dialog.show(`Failed to install '${packages}'
See terminal log.`); - app.ui.dialog.element.style.zIndex = 10010; + show_message(`Failed to install '${packages}'
See terminal log.`); } } @@ -116,21 +71,24 @@ export async function install_via_git_url(url, manager_dialog) { } if(!isValidURL(url)) { - app.ui.dialog.show(`Invalid Git url '${url}'`); - app.ui.dialog.element.style.zIndex = 10010; + show_message(`Invalid Git url '${url}'`); return; } - app.ui.dialog.show(`Wait...

Installing '${url}'`); - app.ui.dialog.element.style.zIndex = 10010; + show_message(`Wait...

Installing '${url}'`); const res = await api.fetchApi("/customnode/install/git_url", { method: "POST", body: url, }); + if(res.status == 403) { + show_message('This action is not allowed with this security level configuration.'); + return; + } + if(res.status == 200) { - app.ui.dialog.show(`'${url}' is installed
To apply the installed custom node, please ComfyUI.`); + show_message(`'${url}' is installed
To apply the installed custom node, please ComfyUI.`); const rebootButton = document.getElementById('cm-reboot-button4'); const self = this; @@ -141,12 +99,9 @@ export async function install_via_git_url(url, manager_dialog) { manager_dialog.close(); } }); - - app.ui.dialog.element.style.zIndex = 10010; } else { - app.ui.dialog.show(`Failed to install '${url}'
See terminal log.`); - app.ui.dialog.element.style.zIndex = 10010; + show_message(`Failed to install '${url}'
See terminal log.`); } } @@ -158,15 +113,9 @@ export async function free_models() { }); if(res.status == 200) { - app.ui.dialog.show('Models have been unloaded.') + show_message('Models have been unloaded.') } else { - app.ui.dialog.show('Unloading of models failed.

Installed ComfyUI may be an outdated version.') + show_message('Unloading of models failed.

Installed ComfyUI may be an outdated version.') } - app.ui.dialog.element.style.zIndex = 10010; } - -export function show_message(msg) { - app.ui.dialog.show(msg); - app.ui.dialog.element.style.zIndex = 10010; -} \ No newline at end of file diff --git a/js/custom-nodes-downloader.js b/js/custom-nodes-downloader.js deleted file mode 100644 index e60cde7e..00000000 --- a/js/custom-nodes-downloader.js +++ /dev/null @@ -1,943 +0,0 @@ -import { app } from "../../scripts/app.js"; -import { api } from "../../scripts/api.js" -import { ComfyDialog, $el } from "../../scripts/ui.js"; -import { install_checked_custom_node, manager_instance, rebootAPI } from "./common.js"; - - -async function getCustomNodes() { - var mode = manager_instance.datasrc_combo.value; - - var skip_update = ""; - if(manager_instance.update_check_checkbox.checked) - skip_update = "&skip_update=true"; - - const response = await api.fetchApi(`/customnode/getlist?mode=${mode}${skip_update}`); - - const data = await response.json(); - return data; -} - -async function getCustomnodeMappings() { - var mode = manager_instance.datasrc_combo.value; - - const response = await api.fetchApi(`/customnode/getmappings?mode=${mode}`); - - const data = await response.json(); - return data; -} - -async function getConflictMappings() { - var mode = manager_instance.datasrc_combo.value; - - const response = await api.fetchApi(`/customnode/getmappings?mode=${mode}`); - - const data = await response.json(); - - let node_to_extensions_map = {}; - - for(let k in data) { - for(let i in data[k][0]) { - let node = data[k][0][i]; - let l = node_to_extensions_map[node]; - if(!l) { - l = []; - node_to_extensions_map[node] = l; - } - l.push(k); - } - } - - let conflict_map = {}; - for(let node in node_to_extensions_map) { - if(node_to_extensions_map[node].length > 1) { - for(let i in node_to_extensions_map[node]) { - let extension = node_to_extensions_map[node][i]; - let l = conflict_map[extension]; - - if(!l) { - l = []; - conflict_map[extension] = l; - } - - for(let j in node_to_extensions_map[node]) { - let extension2 = node_to_extensions_map[node][j]; - if(extension != extension2) - l.push([node, extension2]); - } - } - } - } - - return conflict_map; -} - -async function getUnresolvedNodesInComponent() { - try { - var mode = manager_instance.datasrc_combo.value; - - const response = await api.fetchApi(`/component/get_unresolved`); - - const data = await response.json(); - return data.nodes; - } - catch { - return []; - } -} - -export class CustomNodesInstaller extends ComfyDialog { - static instance = null; - - install_buttons = []; - message_box = null; - data = null; - - static ShowMode = { - NORMAL: 0, - MISSING_NODES: 1, - UPDATE: 2, - }; - - clear() { - this.install_buttons = []; - this.message_box = null; - this.data = null; - } - - constructor(app, manager_dialog) { - super(); - this.manager_dialog = manager_dialog; - this.search_keyword = ''; - this.element = $el("div.comfy-modal", { parent: document.body }, []); - - this.currentSortProperty = ''; // The property currently being sorted - this.currentSortAscending = true; // The direction of the current sort - } - - startInstall(target) { - const self = CustomNodesInstaller.instance; - - self.updateMessage(`
Installing '${target.title}'`); - } - - disableButtons() { - for(let i in this.install_buttons) { - this.install_buttons[i].disabled = true; - this.install_buttons[i].style.backgroundColor = 'gray'; - } - } - - apply_searchbox(data) { - let keyword = this.search_box.value.toLowerCase(); - for(let i in this.grid_rows) { - let data = this.grid_rows[i].data; - let content = data.author.toLowerCase() + data.description.toLowerCase() + data.title.toLowerCase() + data.reference.toLowerCase(); - - if(this.filter && this.filter != '*') { - if(this.filter == 'True' && (data.installed == 'Update' || data.installed == 'Fail')) { - this.grid_rows[i].control.style.display = null; - } - else if(this.filter != data.installed) { - this.grid_rows[i].control.style.display = 'none'; - continue; - } - } - - if(keyword == "") - this.grid_rows[i].control.style.display = null; - else if(content.includes(keyword)) { - this.grid_rows[i].control.style.display = null; - } - else { - this.grid_rows[i].control.style.display = 'none'; - } - } - } - - async filter_missing_node(data) { - const mappings = await getCustomnodeMappings(); - - // build regex->url map - const regex_to_url = []; - for (let i in data) { - if(data[i]['nodename_pattern']) { - let item = {regex: new RegExp(data[i].nodename_pattern), url: data[i].files[0]}; - regex_to_url.push(item); - } - } - - // build name->url map - const name_to_urls = {}; - for (const url in mappings) { - const names = mappings[url]; - - for(const name in names[0]) { - let v = name_to_urls[names[0][name]]; - if(v == undefined) { - v = []; - name_to_urls[names[0][name]] = v; - } - v.push(url); - } - } - - const registered_nodes = new Set(); - for (let i in LiteGraph.registered_node_types) { - registered_nodes.add(LiteGraph.registered_node_types[i].type); - } - - const missing_nodes = new Set(); - const workflow = app.graph.serialize(); - const group_nodes = workflow.extra && workflow.extra.groupNodes ? workflow.extra.groupNodes : []; - let nodes = workflow.nodes; - - for (let i in group_nodes) { - let group_node = group_nodes[i]; - nodes = nodes.concat(group_node.nodes); - } - - for (let i in nodes) { - const node_type = nodes[i].type; - if(node_type.startsWith('workflow/')) - continue; - - if (!registered_nodes.has(node_type)) { - const urls = name_to_urls[node_type.trim()]; - if(urls) - urls.forEach(url => { - missing_nodes.add(url); - }); - else { - for(let j in regex_to_url) { - if(regex_to_url[j].regex.test(node_type)) { - missing_nodes.add(regex_to_url[j].url); - } - } - } - } - } - - let unresolved_nodes = await getUnresolvedNodesInComponent(); - for (let i in unresolved_nodes) { - let node_type = unresolved_nodes[i]; - const url = name_to_urls[node_type]; - if(url) - missing_nodes.add(url); - } - - return data.filter(node => node.files.some(file => missing_nodes.has(file))); - } - - async invalidateControl() { - this.clear(); - - // splash - while (this.element.children.length) { - this.element.removeChild(this.element.children[0]); - } - - const msg = $el('div', {id:'custom-message'}, - [$el('br'), - 'The custom node DB is currently being updated, and updates to custom nodes are being checked for.', - $el('br'), - 'NOTE: Update only checks for extensions that have been fetched.', - $el('br')]); - msg.style.height = '100px'; - msg.style.verticalAlign = 'middle'; - msg.style.color = "var(--fg-color)"; - - this.element.appendChild(msg); - - // invalidate - let data = await getCustomNodes(); - this.data = data.custom_nodes; - this.channel = data.channel; - - this.conflict_mappings = await getConflictMappings(); - - if(this.show_mode == CustomNodesInstaller.ShowMode.MISSING_NODES) - this.data = await this.filter_missing_node(this.data); - - this.element.removeChild(msg); - - while (this.element.children.length) { - this.element.removeChild(this.element.children[0]); - } - - this.createHeaderControls(); - await this.createGrid(); - this.apply_searchbox(this.data); - this.createBottomControls(); - } - - updateMessage(msg, btn_id) { - this.message_box.innerHTML = msg; - if(btn_id) { - const rebootButton = document.getElementById(btn_id); - const self = this; - rebootButton.addEventListener("click", - function() { - if(rebootAPI()) { - self.close(); - self.manager_dialog.close(); - } - }); - console.log(rebootButton); - } - } - - invalidate_checks(is_checked, install_state) { - if(is_checked) { - for(let i in this.grid_rows) { - let data = this.grid_rows[i].data; - let checkbox = this.grid_rows[i].checkbox; - let buttons = this.grid_rows[i].buttons; - - checkbox.disabled = data.installed != install_state; - - if(checkbox.disabled) { - for(let j in buttons) { - buttons[j].style.display = 'none'; - } - } - else { - for(let j in buttons) { - buttons[j].style.display = null; - } - } - } - - this.checkbox_all.disabled = false; - } - else { - for(let i in this.grid_rows) { - let checkbox = this.grid_rows[i].checkbox; - if(checkbox.check) - return; // do nothing - } - - // every checkbox is unchecked -> enable all checkbox - for(let i in this.grid_rows) { - let checkbox = this.grid_rows[i].checkbox; - let buttons = this.grid_rows[i].buttons; - checkbox.disabled = false; - - for(let j in buttons) { - buttons[j].style.display = null; - } - } - - this.checkbox_all.checked = false; - this.checkbox_all.disabled = true; - } - } - - check_all(is_checked) { - if(is_checked) { - // lookup first checked item's state - let check_state = null; - for(let i in this.grid_rows) { - let checkbox = this.grid_rows[i].checkbox; - if(checkbox.checked) { - check_state = this.grid_rows[i].data.installed; - } - } - - if(check_state == null) - return; - - // check only same state items - for(let i in this.grid_rows) { - let checkbox = this.grid_rows[i].checkbox; - if(this.grid_rows[i].data.installed == check_state) - checkbox.checked = true; - } - } - else { - // uncheck all - for(let i in this.grid_rows) { - let checkbox = this.grid_rows[i].checkbox; - let buttons = this.grid_rows[i].buttons; - checkbox.checked = false; - checkbox.disabled = false; - - for(let j in buttons) { - buttons[j].style.display = null; - } - } - - this.checkbox_all.disabled = true; - } - } - - sortData(property, ascending = true) { - this.data.sort((a, b) => { - // Check if either value is -1 and handle accordingly - if (a[property] === -1) return 1; // Always put a at the end if its value is -1 - if (b[property] === -1) return -1; // Always put b at the end if its value is -1 - // And be careful here, (-1<'2024-01-01') and (-1>'2024-01-01') are both false! So I handle -1 seperately. - if (a[property] < b[property]) return ascending ? -1 : 1; - if (a[property] > b[property]) return ascending ? 1 : -1; - return 0; - }); - } - - resetHeaderStyles() { - const headers = ['th_author', 'th_title', 'th_stars', 'th_last_update']; // Add the IDs of all your sortable headers here - headers.forEach(headerId => { - const header = this.element.querySelector(`#${headerId}`); - if (header) { - header.style.backgroundColor = ''; // Reset to default background color - // Add other style resets if necessary - } - }); - } - - toggleSort(property) { - // If currently sorted by this property, toggle the direction; else, sort ascending - if (this.currentSortProperty === property) { - this.currentSortAscending = !this.currentSortAscending; - } else { - this.currentSortAscending = false; - } - this.currentSortProperty = property; - - this.resetHeaderStyles(); // Reset styles of all sortable headers - - // Determine the ID of the header based on the property - let headerId = ''; - if (property === 'stars') { - headerId = 'th_stars'; - } else if (property === 'last_update') { - headerId = 'th_last_update'; - } else if (property === 'author') { - headerId = 'th_author'; - } else if (property === 'title') { - headerId = 'th_title'; - } - - // If we have a valid headerId, change its style to indicate it's the active sort column - if (headerId) { - const activeHeader = this.element.querySelector(`#${headerId}`); - if (activeHeader) { - activeHeader.style.backgroundColor = '#222'; - // Slightly brighter. Add other style changes if necessary. - } - } - - // Call sortData with the current property and direction - this.sortData(property, this.currentSortAscending); - - // Refresh the grid to display sorted data - this.createGrid(); - this.apply_searchbox(this.data); - } - - async createGrid() { - // Remove existing table if present - var grid = this.element.querySelector('#custom-nodes-grid'); - var panel; - let self = this; - if (grid) { - grid.querySelector('tbody').remove(); - panel = grid.parentNode; - } else { - grid = document.createElement('table'); - grid.setAttribute('id', 'custom-nodes-grid'); - - this.grid_rows = {}; - - var thead = document.createElement('thead'); - - var headerRow = document.createElement('tr'); - thead.style.position = "sticky"; - thead.style.top = "0px"; - thead.style.borderCollapse = "collapse"; - thead.style.tableLayout = "fixed"; - - var header0 = document.createElement('th'); - header0.style.width = "20px"; - this.checkbox_all = $el("input",{type:'checkbox', id:'check_all'},[]); - header0.appendChild(this.checkbox_all); - this.checkbox_all.checked = false; - this.checkbox_all.disabled = true; - this.checkbox_all.addEventListener('change', function() { self.check_all.call(self, self.checkbox_all.checked); }); - - var header1 = document.createElement('th'); - header1.innerHTML = '  ID  '; - header1.style.width = "20px"; - - var header2 = document.createElement('th'); - header2.innerHTML = 'Author'; - header2.style.width = "150px"; - header2.style.cursor = 'pointer'; - header2.setAttribute('id', 'th_author'); - header2.onclick = () => this.toggleSort('author'); - - var header3 = document.createElement('th'); - header3.innerHTML = 'Name'; - header3.style.width = "20%"; - header3.style.cursor = 'pointer'; - header3.setAttribute('id', 'th_title'); - header3.onclick = () => this.toggleSort('title'); - - var header4 = document.createElement('th'); - header4.innerHTML = 'Description'; - header4.style.width = "60%"; - // header4.classList.add('expandable-column'); - - var header5 = document.createElement('th'); - header5.innerHTML = '   ★   '; - header5.style.width = "130px"; - header5.setAttribute('id', 'th_stars'); - header5.style.cursor = 'pointer'; - header5.onclick = () => this.toggleSort('stars'); - - var header6 = document.createElement('th'); - header6.innerHTML = 'Last Update'; - header6.style.width = "130px"; - header6.setAttribute('id', 'th_last_update'); - header6.style.cursor = 'pointer'; - header6.onclick = () => this.toggleSort('last_update'); - - var header7 = document.createElement('th'); - header7.innerHTML = 'Install'; - header7.style.width = "130px"; - - header0.style.position = "sticky"; - header0.style.top = "0px"; - header1.style.position = "sticky"; - header1.style.top = "0px"; - header2.style.position = "sticky"; - header2.style.top = "0px"; - header3.style.position = "sticky"; - header3.style.top = "0px"; - header4.style.position = "sticky"; - header4.style.top = "0px"; - header5.style.position = "sticky"; - header5.style.top = "0px"; - header6.style.position = "sticky"; - header6.style.top = "0px"; - header7.style.position = "sticky"; - header7.style.top = "0px"; - - thead.appendChild(headerRow); - headerRow.appendChild(header0); - headerRow.appendChild(header1); - headerRow.appendChild(header2); - headerRow.appendChild(header3); - headerRow.appendChild(header4); - headerRow.appendChild(header5); - headerRow.appendChild(header6); - headerRow.appendChild(header7); - - headerRow.style.backgroundColor = "Black"; - headerRow.style.color = "White"; - headerRow.style.textAlign = "center"; - headerRow.style.width = "100%"; - headerRow.style.padding = "0"; - - grid.appendChild(thead); - - panel = document.createElement('div'); - panel.style.width = "100%"; - panel.appendChild(grid); - this.element.appendChild(panel); - } - var tbody = document.createElement('tbody'); - grid.appendChild(tbody); - - if(this.data) - for (var i = 0; i < this.data.length; i++) { - const data = this.data[i]; - let dataRow = document.createElement('tr'); - - let data0 = document.createElement('td'); - let checkbox = $el("input",{type:'checkbox', id:`check_${i}`},[]); - data0.appendChild(checkbox); - checkbox.checked = false; - checkbox.addEventListener('change', function() { self.invalidate_checks.call(self, checkbox.checked, data.installed); }); - - var data1 = document.createElement('td'); - data1.style.textAlign = "center"; - data1.innerHTML = i+1; - - var data2 = document.createElement('td'); - data2.style.maxWidth = "100px"; - data2.className = "cm-node-author" - data2.textContent = ` ${data.author}`; - data2.style.whiteSpace = "nowrap"; - data2.style.overflow = "hidden"; - data2.style.textOverflow = "ellipsis"; - - var data3 = document.createElement('td'); - data3.style.maxWidth = "200px"; - data3.style.wordWrap = "break-word"; - data3.className = "cm-node-name" - data3.innerHTML = ` ${data.title}`; - if(data.installed == 'Fail') - data3.innerHTML = ' (IMPORT FAILED)' + data3.innerHTML; - - var data4 = document.createElement('td'); - data4.innerHTML = data.description; - data4.className = "cm-node-desc" - - let conflicts = this.conflict_mappings[data.files[0]]; - if(conflicts) { - let buf = '

Conflicted Nodes:
'; - for(let k in conflicts) { - let node_name = conflicts[k][0]; - - let extension_name = conflicts[k][1].split('/').pop(); - if(extension_name.endsWith('/')) { - extension_name = extension_name.slice(0, -1); - } - if(node_name.endsWith('.git')) { - extension_name = extension_name.slice(0, -4); - } - - buf += `${node_name} [${extension_name}], `; - } - - if(buf.endsWith(', ')) { - buf = buf.slice(0, -2); - } - buf += "

"; - data4.innerHTML += buf; - } - - var data5 = document.createElement('td'); - data5.style.maxWidth = "100px"; - data5.className = "cm-node-stars" - if(data.stars < 0) { - data5.textContent = 'N/A'; - } - else { - data5.textContent = `${data.stars}`; - } - data5.style.whiteSpace = "nowrap"; - data5.style.overflow = "hidden"; - data5.style.textOverflow = "ellipsis"; - data5.style.textAlign = "center"; - - var lastUpdateDate = new Date(); - var data6 = document.createElement('td'); - data6.style.maxWidth = "100px"; - data6.className = "cm-node-last-update"; - if(data.last_update < 0) { - data6.textContent = 'N/A'; - } - else { - data6.textContent = `${data.last_update}`.split(' ')[0]; - } - data6.style.whiteSpace = "nowrap"; - data6.style.overflow = "hidden"; - data6.style.textOverflow = "ellipsis"; - data6.style.textAlign = "center"; - - var data7 = document.createElement('td'); - data7.style.textAlign = "center"; - - var installBtn = document.createElement('button'); - installBtn.className = "cm-btn-install"; - var installBtn2 = null; - var installBtn3 = null; - var installBtn4 = null; - - this.install_buttons.push(installBtn); - - switch(data.installed) { - case 'Disabled': - installBtn3 = document.createElement('button'); - installBtn3.innerHTML = 'Enable'; - installBtn3.className = "cm-btn-enable"; - installBtn3.style.backgroundColor = 'blue'; - installBtn3.style.color = 'white'; - this.install_buttons.push(installBtn3); - - installBtn.innerHTML = 'Uninstall'; - installBtn.style.backgroundColor = 'red'; - break; - - case 'Update': - installBtn2 = document.createElement('button'); - installBtn2.innerHTML = 'Update'; - installBtn2.className = "cm-btn-update"; - installBtn2.style.backgroundColor = 'blue'; - installBtn2.style.color = 'white'; - this.install_buttons.push(installBtn2); - - installBtn3 = document.createElement('button'); - installBtn3.innerHTML = 'Disable'; - installBtn3.className = "cm-btn-disable"; - installBtn3.style.backgroundColor = 'MediumSlateBlue'; - installBtn3.style.color = 'white'; - this.install_buttons.push(installBtn3); - - installBtn.innerHTML = 'Uninstall'; - installBtn.style.backgroundColor = 'red'; - break; - - case 'Fail': - installBtn4 = document.createElement('button'); - installBtn4.innerHTML = 'Try fix'; - installBtn4.className = "cm-btn-disable"; - installBtn4.style.backgroundColor = '#6495ED'; - installBtn4.style.color = 'white'; - this.install_buttons.push(installBtn4); - - case 'True': - if(manager_instance.update_check_checkbox.checked) { - installBtn2 = document.createElement('button'); - installBtn2.innerHTML = 'Try update'; - installBtn2.className = "cm-btn-update"; - installBtn2.style.backgroundColor = 'Gray'; - installBtn2.style.color = 'white'; - this.install_buttons.push(installBtn2); - } - - installBtn3 = document.createElement('button'); - installBtn3.innerHTML = 'Disable'; - installBtn3.className = "cm-btn-disable"; - installBtn3.style.backgroundColor = 'MediumSlateBlue'; - installBtn3.style.color = 'white'; - this.install_buttons.push(installBtn3); - - installBtn.innerHTML = 'Uninstall'; - installBtn.style.backgroundColor = 'red'; - break; - case 'False': - installBtn.innerHTML = 'Install'; - installBtn.style.backgroundColor = 'black'; - installBtn.style.color = 'white'; - break; - - default: - installBtn.innerHTML = `Try Install`; - installBtn.style.backgroundColor = 'Gray'; - installBtn.style.color = 'white'; - } - - let j = i; - if(installBtn2 != null) { - installBtn2.style.width = "120px"; - installBtn2.addEventListener('click', function() { - install_checked_custom_node(self.grid_rows, j, CustomNodesInstaller.instance, 'update'); - }); - - data7.appendChild(installBtn2); - } - - if(installBtn3 != null) { - installBtn3.style.width = "120px"; - installBtn3.addEventListener('click', function() { - install_checked_custom_node(self.grid_rows, j, CustomNodesInstaller.instance, 'toggle_active'); - }); - - data7.appendChild(installBtn3); - } - - if(installBtn4 != null) { - installBtn4.style.width = "120px"; - installBtn4.addEventListener('click', function() { - install_checked_custom_node(self.grid_rows, j, CustomNodesInstaller.instance, 'fix'); - }); - - data7.appendChild(installBtn4); - } - - installBtn.style.width = "120px"; - installBtn.addEventListener('click', function() { - if(this.innerHTML == 'Uninstall') { - if (confirm(`Are you sure uninstall ${data.title}?`)) { - install_checked_custom_node(self.grid_rows, j, CustomNodesInstaller.instance, 'uninstall'); - } - } - else { - install_checked_custom_node(self.grid_rows, j, CustomNodesInstaller.instance, 'install'); - } - }); - - if(!data.author.startsWith('#NOTICE')){ - data7.appendChild(installBtn); - } - - if(data.installed == 'Fail' || data.author.startsWith('#NOTICE')) - dataRow.style.backgroundColor = "#880000"; - else - dataRow.style.backgroundColor = "var(--bg-color)"; - dataRow.style.color = "var(--fg-color)"; - dataRow.style.textAlign = "left"; - - dataRow.appendChild(data0); - dataRow.appendChild(data1); - dataRow.appendChild(data2); - dataRow.appendChild(data3); - dataRow.appendChild(data4); - dataRow.appendChild(data5); - dataRow.appendChild(data6); - dataRow.appendChild(data7); - tbody.appendChild(dataRow); - - let buttons = []; - if(installBtn) { - buttons.push(installBtn); - } - if(installBtn2) { - buttons.push(installBtn2); - } - if(installBtn3) { - buttons.push(installBtn3); - } - - this.grid_rows[i] = {data:data, buttons:buttons, checkbox:checkbox, control:dataRow}; - } - - function handleResize() { - const parentHeight = self.element.clientHeight; - const gridHeight = parentHeight - 200; - - grid.style.height = gridHeight + "px"; - } - window.addEventListener("resize", handleResize); - - grid.style.position = "relative"; - grid.style.display = "inline-block"; - grid.style.width = "100%"; - grid.style.height = "100%"; - grid.style.overflowY = "scroll"; - this.element.style.height = "85%"; - this.element.style.width = "80%"; - - handleResize(); - } - - createFilterCombo() { - let combo = document.createElement("select"); - - combo.style.cssFloat = "left"; - combo.style.fontSize = "14px"; - combo.style.padding = "4px"; - combo.style.background = "black"; - combo.style.marginLeft = "2px"; - combo.style.width = "199px"; - combo.id = `combo-manger-filter`; - combo.style.borderRadius = "15px"; - - let items = - [ - { value:'*', text:'Filter: all' }, - { value:'Disabled', text:'Filter: disabled' }, - { value:'Update', text:'Filter: update' }, - { value:'True', text:'Filter: installed' }, - { value:'False', text:'Filter: not-installed' }, - { value:'Fail', text:'Filter: import failed' }, - ]; - - items.forEach(item => { - const option = document.createElement("option"); - option.value = item.value; - option.text = item.text; - combo.appendChild(option); - }); - - if(this.show_mode == CustomNodesInstaller.ShowMode.UPDATE) { - this.filter = 'Update'; - } - else if(this.show_mode == CustomNodesInstaller.ShowMode.MISSING_NODES) { - this.filter = '*'; - } - - let self = this; - combo.addEventListener('change', function(event) { - self.filter = event.target.value; - self.apply_searchbox(); - }); - - if(self.filter) { - combo.value = self.filter; - } - - return combo; - } - - createHeaderControls() { - let self = this; - this.search_box = $el('input.cm-search-filter', {type:'text', id:'manager-customnode-search-box', placeholder:'input search keyword', value:this.search_keyword}, []); - this.search_box.style.height = "25px"; - this.search_box.onkeydown = (event) => { - if (event.key === 'Enter') { - self.search_keyword = self.search_box.value; - self.apply_searchbox(); - } - if (event.key === 'Escape') { - self.search_keyword = self.search_box.value; - self.apply_searchbox(); - } - }; - - - let search_button = document.createElement("button"); - search_button.className = "cm-small-button"; - search_button.innerHTML = "Search"; - search_button.onclick = () => { - self.search_keyword = self.search_box.value; - self.apply_searchbox(); - }; - search_button.style.display = "inline-block"; - - let filter_control = this.createFilterCombo(); - filter_control.style.display = "inline-block"; - - let channel_badge = ''; - if(this.channel != 'default') { - channel_badge = $el('span', {id:'cm-channel-badge'}, [`Channel: ${this.channel} (Incomplete list)`]); - } - else { - - } - let cell = $el('td', {width:'100%'}, [filter_control, channel_badge, this.search_box, ' ', search_button]); - let search_control = $el('table', {width:'100%'}, - [ - $el('tr', {}, [cell]) - ] - ); - - cell.style.textAlign = "right"; - - this.element.appendChild(search_control); - } - - async createBottomControls() { - var close_button = document.createElement("button"); - close_button.className = "cm-small-button"; - close_button.innerHTML = "Close"; - close_button.onclick = () => { this.close(); } - close_button.style.display = "inline-block"; - - this.message_box = $el('div', {id:'custom-installer-message'}, [$el('br'), '']); - this.message_box.style.height = '60px'; - this.message_box.style.verticalAlign = 'middle'; - - this.element.appendChild(this.message_box); - this.element.appendChild(close_button); - } - - async show(show_mode) { - this.show_mode = show_mode; - - if(this.show_mode != CustomNodesInstaller.ShowMode.NORMAL) { - this.search_keyword = ''; - } - - try { - this.invalidateControl(); - - this.element.style.display = "block"; - this.element.style.zIndex = 10001; - } - catch(exception) { - app.ui.dialog.show(`Failed to get custom node list. / ${exception}`); - } - } -} \ No newline at end of file diff --git a/js/custom-nodes-manager.js b/js/custom-nodes-manager.js new file mode 100644 index 00000000..a89e1b39 --- /dev/null +++ b/js/custom-nodes-manager.js @@ -0,0 +1,1524 @@ +import { app } from "../../scripts/app.js"; +import { api } from "../../scripts/api.js" +import { $el } from "../../scripts/ui.js"; +import { manager_instance, rebootAPI, install_via_git_url } from "./common.js"; + +// https://cenfun.github.io/turbogrid/api.html +import TG from "./turbogrid.esm.js"; + +const icons = { + search: '', + extensions: '', + conflicts: '' +} + +const pageCss = ` +.cn-manager { + --grid-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + z-index: 10001; + width: 80%; + height: 80%; + display: flex; + flex-direction: column; + gap: 10px; + color: var(--fg-color); + font-family: arial, sans-serif; +} + +.cn-manager .cn-flex-auto { + flex: auto; +} + +.cn-manager button { + font-size: 16px; + color: var(--input-text); + background-color: var(--comfy-input-bg); + border-radius: 8px; + border-color: var(--border-color); + border-style: solid; + margin: 0; + padding: 4px 8px; + min-width: 100px; +} + +.cn-manager button:disabled, +.cn-manager input:disabled, +.cn-manager select:disabled { + color: gray; +} + +.cn-manager button:disabled { + background-color: var(--comfy-input-bg); +} + +.cn-manager .cn-manager-restart { + display: none; + background-color: #500000; + color: white; +} + +.cn-manager-header { + display: flex; + flex-wrap: wrap; + gap: 5px; + align-items: center; + padding: 0 5px; +} + +.cn-manager-header label { + display: flex; + gap: 5px; + align-items: center; +} + +.cn-manager-filter { + height: 28px; + line-height: 28px; +} + +.cn-manager-keywords { + height: 28px; + line-height: 28px; + padding: 0 5px 0 26px; + background-size: 16px; + background-position: 5px center; + background-repeat: no-repeat; + background-image: url("data:image/svg+xml;charset=utf8,${encodeURIComponent(icons.search.replace("currentColor", "#888"))}"); +} + +.cn-manager-status { + padding-left: 10px; +} + +.cn-manager-grid { + flex: auto; + border: 1px solid var(--border-color); + overflow: hidden; +} + +.cn-manager-selection { + display: flex; + flex-wrap: wrap; + gap: 10px; + align-items: center; +} + +.cn-manager-message { + +} + +.cn-manager-footer { + display: flex; + flex-wrap: wrap; + gap: 10px; + align-items: center; +} + +.cn-manager-grid .tg-turbogrid { + font-family: var(--grid-font); + font-size: 15px; + background: var(--bg-color); +} + +.cn-manager-grid .cn-node-name a { + color: skyblue; + text-decoration: none; +} + +.cn-manager-grid .cn-node-desc a { + color: #5555FF; + font-weight: bold; + text-decoration: none; +} + +.cn-manager-grid .tg-cell a:hover { + text-decoration: underline; +} + +.cn-manager-grid .cn-extensions-button, +.cn-manager-grid .cn-conflicts-button { + display: inline-block; + width: 20px; + height: 20px; + color: green; + border: none; + padding: 0; + margin: 0; + background: none; + min-width: 20px; +} + +.cn-manager-grid .cn-conflicts-button { + color: orange; +} + +.cn-manager-grid .cn-extensions-list, +.cn-manager-grid .cn-conflicts-list { + line-height: normal; + text-align: left; + max-height: 80%; + min-height: 200px; + min-width: 300px; + overflow-y: auto; + font-size: 12px; + border-radius: 5px; + padding: 10px; + filter: drop-shadow(2px 5px 5px rgb(0 0 0 / 30%)); +} + +.cn-manager-grid .cn-extensions-list { + border-color: var(--bg-color); +} + +.cn-manager-grid .cn-conflicts-list { + background-color: #CCCC55; + color: #AA3333; +} + +.cn-manager-grid .cn-extensions-list h3, +.cn-manager-grid .cn-conflicts-list h3 { + margin: 0; + padding: 5px 0; + color: #000; +} + +.cn-tag-list { + display: flex; + flex-wrap: wrap; + gap: 5px; + align-items: center; + margin-bottom: 5px; +} + +.cn-tag-list > div { + background-color: var(--border-color); + border-radius: 5px; + padding: 0 5px; +} + +.cn-install-buttons { + display: flex; + flex-direction: column; + gap: 3px; + padding: 3px; + align-items: center; + justify-content: center; + height: 100%; +} + +.cn-selected-buttons { + display: flex; + gap: 5px; + align-items: center; + padding-right: 20px; +} + +.cn-manager .cn-btn-enable { + background-color: blue; + color: white; +} + +.cn-manager .cn-btn-disable { + background-color: MediumSlateBlue; + color: white; +} + +.cn-manager .cn-btn-update { + background-color: blue; + color: white; +} + +.cn-manager .cn-btn-try-update { + background-color: Gray; + color: white; +} + +.cn-manager .cn-btn-try-fix { + background-color: #6495ED; + color: white; +} + +.cn-manager .cn-btn-install { + background-color: black; + color: white; +} + +.cn-manager .cn-btn-try-install { + background-color: Gray; + color: white; +} + +.cn-manager .cn-btn-uninstall { + background-color: red; + color: white; +} + +@keyframes cn-btn-loading-bg { + 0% { + left: 0; + } + 100% { + left: -100px; + } +} + +.cn-manager button.cn-btn-loading { + position: relative; + overflow: hidden; + border-color: rgb(0 119 207 / 80%); + background-color: var(--comfy-input-bg); +} + +.cn-manager button.cn-btn-loading::after { + position: absolute; + top: 0; + left: 0; + content: ""; + width: 500px; + height: 100%; + background-image: repeating-linear-gradient( + -45deg, + rgb(0 119 207 / 30%), + rgb(0 119 207 / 30%) 10px, + transparent 10px, + transparent 15px + ); + animation: cn-btn-loading-bg 3s linear infinite; +} + +.cn-manager-light .cn-node-name a { + color: blue; +} + +.cn-manager-light .cm-warn-note { + background-color: #ccc !important; +} + +.cn-manager-light .cn-btn-install { + background-color: #333; +} + +`; + +const pageHtml = ` +
+ + +
+
+
+
+
+
+
+ +`; + +const ShowMode = { + NORMAL: "Normal", + UPDATE: "Update", + MISSING: "Missing", + ALTERNATIVES: "Alternatives" +}; + +export class CustomNodesManager { + static instance = null; + static ShowMode = ShowMode; + + constructor(app, manager_dialog) { + this.app = app; + this.manager_dialog = manager_dialog; + this.id = "cn-manager"; + + app.registerExtension({ + name: "Comfy.CustomNodesManager", + afterConfigureGraph: (missingNodeTypes) => { + const item = this.getFilterItem(ShowMode.MISSING); + if (item) { + item.hasData = false; + item.hashMap = null; + } + } + }); + + this.filter = ''; + this.keywords = ''; + this.restartMap = {}; + + this.init(); + } + + init() { + + if (!document.querySelector(`style[context="${this.id}"]`)) { + const $style = document.createElement("style"); + $style.setAttribute("context", this.id); + $style.innerHTML = pageCss; + document.head.appendChild($style); + } + + this.element = $el("div", { + parent: document.body, + className: "comfy-modal cn-manager" + }); + this.element.innerHTML = pageHtml; + this.initFilter(); + this.bindEvents(); + this.initGrid(); + } + + initFilter() { + const $filter = this.element.querySelector(".cn-manager-filter"); + const filterList = [{ + label: "All", + value: "", + hasData: true + }, { + label: "Installed", + value: "True", + hasData: true + }, { + label: "Disabled", + value: "Disabled", + hasData: true + }, { + label: "Import Failed", + value: "Fail", + hasData: true + }, { + label: "Not Installed", + value: "False", + hasData: true + }, { + label: "Unknown", + value: "None", + hasData: true + }, { + label: "Update", + value: ShowMode.UPDATE, + hasData: false + }, { + label: "Missing", + value: ShowMode.MISSING, + hasData: false + }, { + label: "Alternatives of A1111", + value: ShowMode.ALTERNATIVES, + hasData: false + }]; + this.filterList = filterList; + $filter.innerHTML = filterList.map(item => { + return `` + }).join(""); + } + + getFilterItem(filter) { + return this.filterList.find(it => it.value === filter) + } + + getInstallButtons(installed, title) { + + const buttons = { + "enable": { + label: "Enable", + mode: "toggle_active" + }, + "disable": { + label: "Disable", + mode: "toggle_active" + }, + + "update": { + label: "Update", + mode: "update" + }, + "try-update": { + label: "Try update", + mode: "update" + }, + + "try-fix": { + label: "Try fix", + mode: "fix" + }, + + "install": { + label: "Install", + mode: "install" + }, + "try-install": { + label: "Try install", + mode: "install" + }, + "uninstall": { + label: "Uninstall", + mode: "uninstall" + } + } + + const installGroups = { + "Disabled": ["enable", "uninstall"], + "Update": ["update", "disable", "uninstall"], + "Fail": ["try-fix", "uninstall"], + "True": ["try-update", "disable", "uninstall"], + "False": ["install"], + 'None': ["try-install"] + } + + if (!manager_instance.update_check_checkbox.checked) { + installGroups.True = installGroups.True.filter(it => it !== "try-update"); + } + + if (title === "ComfyUI-Manager") { + installGroups.True = installGroups.True.filter(it => it !== "disable"); + } + + const list = installGroups[installed]; + if (!list) { + return ""; + } + + return list.map(id => { + const bt = buttons[id]; + return ``; + }).join(""); + } + + getButton(target) { + if(!target) { + return; + } + const mode = target.getAttribute("mode"); + if (!mode) { + return; + } + const group = target.getAttribute("group"); + if (!group) { + return; + } + return { + group, + mode, + target, + label: target.innerText + } + } + + bindEvents() { + const eventsMap = { + ".cn-manager-filter": { + change: (e) => { + + if (this.grid) { + this.grid.selectAll(false); + } + + const value = e.target.value + this.filter = value; + const item = this.getFilterItem(value); + if (item && !item.hasData) { + this.loadData(value); + return; + } + this.updateGrid(); + } + }, + + ".cn-manager-keywords": { + input: (e) => { + const keywords = `${e.target.value}`.trim(); + if (keywords !== this.keywords) { + this.keywords = keywords; + this.updateGrid(); + } + }, + focus: (e) => e.target.select() + }, + + ".cn-manager-selection": { + click: (e) => { + const btn = this.getButton(e.target); + if (btn) { + const nodes = this.selectedMap[btn.group]; + if (nodes) { + this.installNodes(nodes, btn); + } + } + } + }, + + ".cn-manager-close": { + click: (e) => this.close() + }, + + ".cn-manager-restart": { + click: () => { + if(rebootAPI()) { + this.close(); + this.manager_dialog.close(); + } + } + }, + + ".cn-manager-check-update": { + click: (e) => { + e.target.classList.add("cn-btn-loading"); + this.setFilter(ShowMode.UPDATE); + this.loadData(ShowMode.UPDATE); + } + }, + + ".cn-manager-check-missing": { + click: (e) => { + e.target.classList.add("cn-btn-loading"); + this.setFilter(ShowMode.MISSING); + this.loadData(ShowMode.MISSING); + } + }, + + ".cn-manager-install-url": { + click: (e) => { + const url = prompt("Please enter the URL of the Git repository to install", ""); + if (url !== null) { + install_via_git_url(url, this.manager_dialog); + } + } + } + }; + Object.keys(eventsMap).forEach(selector => { + const target = this.element.querySelector(selector); + if (target) { + const events = eventsMap[selector]; + if (events) { + Object.keys(events).forEach(type => { + target.addEventListener(type, events[type]); + }); + } + } + }); + } + + // =========================================================================================== + + initGrid() { + const container = this.element.querySelector(".cn-manager-grid"); + const grid = new TG.Grid(container); + this.grid = grid; + + const autoHeightColumns = ['description', "alternatives"]; + + let prevViewRowsLength = 0; + grid.bind('onUpdated', (e, d) => { + + const viewRows = grid.viewRows; + if (viewRows.length !== prevViewRowsLength) { + prevViewRowsLength = viewRows.length; + this.showStatus(`${prevViewRowsLength} custom nodes`); + } + + const visibleRowList = grid.viewport.rows; + const rows = []; + const heights = []; + + visibleRowList.forEach(function(viewIndex) { + // display index after filter is no equal global index + const rowItem = grid.getViewRowItem(viewIndex); + if (rowItem.rowHeightFixed) { + return; + } + + const list = autoHeightColumns.map(k => { + const cellNode = grid.getCellNode(rowItem, k); + if (cellNode) { + const div = cellNode.querySelector('.tg-multiline-fixing'); + // 10px is padding top and bottom + const realHeight = Math.max(TG.$(div).height() + 10, grid.options.rowHeight); + return realHeight; + } + }).filter(n => n); + + if (list.length) { + rowItem.rowHeightFixed = true; + rows.push(rowItem); + heights.push(Math.max.apply(null, list)); + } + + }); + if (!rows.length) { + return; + } + grid.setRowHeight(rows, heights); + }); + + grid.bind('onColumnWidthChanged', (e, d) => { + if (autoHeightColumns.includes(d.id)) { + // reset when column width changed + grid.forEachRow(function(row) { + row.rowHeightFixed = false; + }); + } + }); + + grid.bind('onSelectChanged', (e, changes) => { + this.renderSelected(); + }); + + grid.bind('onClick', (e, d) => { + const btn = this.getButton(d.e.target); + if (btn) { + this.installNodes([d.rowItem.hash], btn, d.rowItem.title); + } + }); + + grid.setOption({ + theme: 'dark', + selectVisible: true, + selectMultiple: true, + selectAllVisible: true, + + textSelectable: true, + scrollbarRound: true, + + frozenColumn: 1, + rowNotFound: "No Results", + + rowHeight: 30 * 3 + 3 * 4, + bindWindowResize: true, + bindContainerResize: true, + + // updateGrid handler for filter and keywords + rowFilter: (rowItem) => { + + const searchableColumns = ["title", "author", "description"]; + if (this.hasAlternatives()) { + searchableColumns.push("alternatives"); + } + + let shouldShown = grid.highlightKeywordsFilter(rowItem, searchableColumns, this.keywords); + + if (shouldShown) { + if(this.filter && rowItem.filterTypes) { + shouldShown = rowItem.filterTypes.includes(this.filter); + } + } + + return shouldShown; + } + }); + + } + + hasAlternatives() { + return this.filter === ShowMode.ALTERNATIVES + } + + renderGrid() { + + // update theme + const colorPalette = this.app.ui.settings.settingsValues['Comfy.ColorPalette']; + Array.from(this.element.classList).forEach(cn => { + if (cn.startsWith("cn-manager-")) { + this.element.classList.remove(cn); + } + }); + this.element.classList.add(`cn-manager-${colorPalette}`); + + const options = { + theme: colorPalette === "light" ? "" : "dark" + }; + + const rows = this.custom_nodes || []; + rows.forEach((item, i) => { + item.id = i + 1; + const nodeKey = item.files[0]; + const extensionInfo = this.extension_mappings[nodeKey]; + if(extensionInfo) { + const { extensions, conflicts } = extensionInfo; + if (extensions.length) { + item.extensions = extensions.length; + item.extensionsList = extensions; + } + if (conflicts) { + item.conflicts = conflicts.length; + item.conflictsList = conflicts; + } + } + }); + + const columns = [{ + id: 'id', + name: 'ID', + width: 50, + align: 'center' + }, { + id: 'title', + name: 'Title', + width: 200, + minWidth: 100, + maxWidth: 500, + classMap: 'tg-multiline cn-node-name', + formatter: (title, rowItem, columnItem) => { + return `
+ ${rowItem.installed === 'Fail' ? '(IMPORT FAILED)' : ''} + ${title} +
`; + } + }, { + id: 'installed', + name: 'Install', + width: 130, + minWidth: 110, + maxWidth: 200, + sortable: false, + align: 'center', + formatter: (installed, rowItem, columnItem) => { + if (rowItem.restart) { + return `Restart Required`; + } + const buttons = this.getInstallButtons(installed, rowItem.title); + return `
${buttons}
`; + } + }, { + id: "alternatives", + name: "Alternatives", + width: 400, + maxWidth: 5000, + invisible: !this.hasAlternatives(), + classMap: 'tg-multiline cn-node-desc', + formatter: (alternatives, rowItem, columnItem) => { + return `
${alternatives}
`; + } + }, { + id: 'description', + name: 'Description', + width: 400, + maxWidth: 5000, + classMap: 'tg-multiline cn-node-desc', + formatter: (description, rowItem, columnItem) => { + return `
${description}
`; + } + }, { + id: "extensions", + name: "Extensions", + width: 80, + align: 'center', + formatter: (extensions, rowItem, columnItem) => { + const extensionsList = rowItem.extensionsList; + if (!extensionsList) { + return; + } + const list = []; + const eId = `popover_extensions_${columnItem.id}_${rowItem.tg_index}`; + list.push(``) + list.push(`
`) + list.push(`

【${rowItem.title}】Extension Nodes (${extensionsList.length})

`); + extensionsList.forEach(en => { + list.push(`
  • ${en}
  • `); + }) + list.push("
    "); + return list.join(""); + } + }, { + id: "conflicts", + name: "Conflicts", + width: 80, + align: 'center', + formatter: (conflicts, rowItem, columnItem) => { + const conflictsList = rowItem.conflictsList; + if (!conflictsList) { + return; + } + const list = []; + const cId = `popover_conflicts_${columnItem.id}_${rowItem.tg_index}`; + list.push(``) + list.push(`
    `) + list.push(`

    【${rowItem.title}】Conflicted Nodes (${conflictsList.length})

    `); + conflictsList.forEach(en => { + let [node_name, extension_name] = en; + extension_name = extension_name.split('/').filter(it => it).pop(); + if(extension_name.endsWith('.git')) { + extension_name = extension_name.slice(0, -4); + } + list.push(`
  • ${node_name} [${extension_name}]
  • `); + }) + list.push("
    "); + return list.join(""); + } + }, { + id: 'author', + name: 'Author', + width: 100, + classMap: "cn-node-author", + formatter: (author, rowItem, columnItem) => { + if (rowItem.trust) { + return `✅ ${author}`; + } + return author; + } + }, { + id: 'stars', + name: '★', + align: 'center', + classMap: "cn-node-stars", + formatter: (stars) => { + if (stars < 0) { + return 'N/A'; + } + if (typeof stars === 'number') { + return stars.toLocaleString(); + } + return stars; + } + }, { + id: 'last_update', + name: 'Last Update', + align: 'center', + type: 'date', + width: 100, + classMap: "cn-node-last-update", + formatter: (last_update) => { + if (last_update < 0) { + return 'N/A'; + } + return `${last_update}`.split(' ')[0]; + } + }]; + + this.grid.setData({ + options, + rows, + columns + }); + + this.grid.render(); + + } + + updateGrid() { + if (this.grid) { + this.grid.update(); + if (this.hasAlternatives()) { + this.grid.forEachRow(function(row) { + row.rowHeightFixed = false; + }); + this.grid.showColumn("alternatives"); + } else { + this.grid.hideColumn("alternatives"); + } + } + } + + // =========================================================================================== + + renderSelected() { + const selectedList = this.grid.getSelectedRows(); + if (!selectedList.length) { + this.showSelection(""); + return; + } + + const selectedMap = {}; + selectedList.forEach(item => { + let type = item.installed; + if (item.restart) { + type = "Restart Required"; + } + if (selectedMap[type]) { + selectedMap[type].push(item.hash); + } else { + selectedMap[type] = [item.hash]; + } + }); + + this.selectedMap = selectedMap; + + const list = []; + Object.keys(selectedMap).forEach(v => { + const filterItem = this.getFilterItem(v); + list.push(`
    + Selected ${selectedMap[v].length} ${filterItem ? filterItem.label : v} + ${this.grid.hasMask ? "" : this.getInstallButtons(v)} +
    `); + }); + + this.showSelection(list.join("")); + } + + focusInstall(item, mode) { + const cellNode = this.grid.getCellNode(item, "installed"); + if (cellNode) { + const cellBtn = cellNode.querySelector(`button[mode="${mode}"]`); + if (cellBtn) { + cellBtn.classList.add("cn-btn-loading"); + return true + } + } + } + + async installNodes(list, btn, title) { + + const { target, label, mode} = btn; + + if(mode === "uninstall") { + title = title || `${list.length} custom nodes`; + if (!confirm(`Are you sure uninstall ${title}?`)) { + return; + } + } + + target.classList.add("cn-btn-loading"); + this.showLoading(); + this.showError(""); + + let needRestart = false; + let errorMsg = ""; + for (const hash of list) { + + const item = this.grid.getRowItemBy("hash", hash); + if (!item) { + errorMsg = `Not found custom node: ${hash}`; + break; + } + + this.grid.scrollRowIntoView(item); + + if (!this.focusInstall(item, mode)) { + this.grid.onNextUpdated(() => { + this.focusInstall(item, mode); + }); + } + + this.showStatus(`${label} ${item.title} ...`); + + const data = item.originalData; + const res = await this.fetchData(`/customnode/${mode}`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(data) + }); + + if (res.error) { + + errorMsg = `${item.title} ${mode} failed: `; + if(res.status == 403) { + errorMsg += `This action is not allowed with this security level configuration.`; + } else if(res.status == 404) { + errorMsg += `With the current security level configuration, only custom nodes from the "default channel" can be installed.`; + } else { + errorMsg += res.error.message; + } + + break; + } + + needRestart = true; + + this.grid.setRowSelected(item, false); + item.restart = true; + this.restartMap[item.hash] = true; + this.grid.updateCell(item, "installed"); + + //console.log(res.data); + + } + + this.hideLoading(); + target.classList.remove("cn-btn-loading"); + + if (errorMsg) { + this.showError(errorMsg); + } else { + this.showStatus(`${label} ${list.length} custom node(s) successfully`); + } + + if (needRestart) { + this.showRestart(); + this.showMessage(`To apply the installed/updated/disabled/enabled custom node, please restart ComfyUI. And refresh browser.`, "red") + } + + } + + // =========================================================================================== + + async fetchData(route, options) { + let err; + const res = await api.fetchApi(route, options).catch(e => { + err = e; + }); + + if (!res) { + return { + status: 400, + error: new Error("Unknown Error") + } + } + + const { status, statusText } = res; + if (err) { + return { + status, + error: err + } + } + + if (status !== 200) { + return { + status, + error: new Error(statusText || "Unknown Error") + } + } + + const data = await res.json(); + if (!data) { + return { + status, + error: new Error(`Failed to load data: ${route}`) + } + } + return { + status, + data + } + } + + // =========================================================================================== + + async getExtensionMappings() { + const mode = manager_instance.datasrc_combo.value; + this.showStatus(`Loading extension mappings (${mode}) ...`); + const res = await this.fetchData(`/customnode/getmappings?mode=${mode}`); + if (res.error) { + console.log(res.error); + return {} + } + + const data = res.data; + + const extension_mappings = {}; + const conflicts_map = {}; + Object.keys(data).forEach(k => { + const [extensions, metadata] = data[k]; + extension_mappings[k] = { + extensions, + metadata + } + extensions.forEach(node => { + let l = conflicts_map[node]; + if(!l) { + l = []; + conflicts_map[node] = l; + } + l.push(k); + }) + }) + + Object.keys(conflicts_map).forEach(node => { + const list = conflicts_map[node]; + if(list.length > 1) { + list.forEach(k => { + const item = extension_mappings[k]; + if(!item) { + console.log(`not found ${k}`) + return; + } + + if (!item.conflicts) { + item.conflicts = []; + } + list.forEach(key => { + if(k !== key) { + item.conflicts.push([node, key]) + } + }) + }) + } + }) + + return extension_mappings; + } + + async getMissingNodes() { + const mode = manager_instance.datasrc_combo.value; + this.showStatus(`Loading missing nodes (${mode}) ...`); + const res = await this.fetchData(`/customnode/getmappings?mode=${mode}`); + if (res.error) { + this.showError(`Failed to get custom node mappings: ${res.error}`); + return; + } + + const mappings = res.data; + + // build regex->url map + const regex_to_url = []; + this.custom_nodes.forEach(node => { + if(node.nodename_pattern) { + regex_to_url.push({ + regex: new RegExp(node.nodename_pattern), + url: node.files[0] + }); + } + }); + + // build name->url map + const name_to_urls = {}; + for (const url in mappings) { + const names = mappings[url]; + + for(const name in names[0]) { + let v = name_to_urls[names[0][name]]; + if(v == undefined) { + v = []; + name_to_urls[names[0][name]] = v; + } + v.push(url); + } + } + + const registered_nodes = new Set(); + for (let i in LiteGraph.registered_node_types) { + registered_nodes.add(LiteGraph.registered_node_types[i].type); + } + + const missing_nodes = new Set(); + const workflow = app.graph.serialize(); + const group_nodes = workflow.extra && workflow.extra.groupNodes ? workflow.extra.groupNodes : []; + let nodes = workflow.nodes; + + for (let i in group_nodes) { + let group_node = group_nodes[i]; + nodes = nodes.concat(group_node.nodes); + } + + for (let i in nodes) { + const node_type = nodes[i].type; + if(node_type.startsWith('workflow/')) + continue; + + if (!registered_nodes.has(node_type)) { + const urls = name_to_urls[node_type.trim()]; + if(urls) + urls.forEach(url => { + missing_nodes.add(url); + }); + else { + for(let j in regex_to_url) { + if(regex_to_url[j].regex.test(node_type)) { + missing_nodes.add(regex_to_url[j].url); + } + } + } + } + } + + const resUnresolved = await this.fetchData(`/component/get_unresolved`); + const unresolved = resUnresolved.data; + if (unresolved && unresolved.nodes) { + unresolved.nodes.forEach(node_type => { + const url = name_to_urls[node_type]; + if(url) { + missing_nodes.add(url); + } + }); + } + + const hashMap = {}; + this.custom_nodes.forEach(item => { + if (item.files.some(file => missing_nodes.has(file))) { + hashMap[item.hash] = true; + } + }); + return hashMap; + } + + async getAlternatives() { + + const mode = manager_instance.datasrc_combo.value; + this.showStatus(`Loading alternatives (${mode}) ...`); + const res = await this.fetchData(`/customnode/alternatives?mode=${mode}`); + if (res.error) { + this.showError(`Failed to get alternatives: ${res.error}`); + return []; + } + + const hashMap = {}; + const { items } = res.data; + + items.forEach(item => { + + const custom_node = this.custom_nodes.find(node => node.files.find(file => file === item.id)); + if (!custom_node) { + console.log(`Not found custom node: ${item.id}`); + return; + } + + const tags = `${item.tags}`.split(",").map(tag => { + return `
    ${tag.trim()}
    `; + }).join("") + + hashMap[custom_node.hash] = { + alternatives: `
    ${tags}
    ${item.description}` + } + + }); + + return hashMap + } + + async loadData(show_mode = ShowMode.NORMAL) { + this.show_mode = show_mode; + console.log("Show mode:", show_mode); + + this.showLoading(); + + this.extension_mappings = await this.getExtensionMappings(); + + const mode = manager_instance.datasrc_combo.value; + this.showStatus(`Loading custom nodes (${mode}) ...`); + + const skip_update = this.show_mode === ShowMode.UPDATE ? "" : "&skip_update=true"; + const res = await this.fetchData(`/customnode/getlist?mode=${mode}${skip_update}`); + if (res.error) { + this.showError("Failed to get custom node list."); + this.hideLoading(); + return + } + + const { channel, custom_nodes} = res.data; + this.channel = channel; + this.custom_nodes = custom_nodes; + + if(this.channel !== 'default') { + this.element.querySelector(".cn-manager-channel").innerHTML = `Channel: ${this.channel} (Incomplete list)`; + } + + for (const item of custom_nodes) { + item.originalData = JSON.parse(JSON.stringify(item)); + item.hash = await calculateHash(item); + } + + const filterItem = this.getFilterItem(this.show_mode); + if(filterItem) { + let hashMap; + if(this.show_mode == ShowMode.UPDATE) { + hashMap = {}; + custom_nodes.forEach(it => { + if (it.installed === "Update") { + hashMap[it.hash] = true; + } + }); + } else if(this.show_mode == ShowMode.MISSING) { + hashMap = await this.getMissingNodes(); + } else if(this.show_mode == ShowMode.ALTERNATIVES) { + hashMap = await this.getAlternatives(); + } + filterItem.hashMap = hashMap; + filterItem.hasData = true; + } + + custom_nodes.forEach(nodeItem => { + if (this.restartMap[nodeItem.hash]) { + nodeItem.restart = true; + } + const filterTypes = new Set(); + this.filterList.forEach(filterItem => { + const { value, hashMap } = filterItem; + if (hashMap) { + const hashData = hashMap[nodeItem.hash] + if (hashData) { + filterTypes.add(value); + if (value === ShowMode.UPDATE) { + nodeItem.installed = "Update"; + } + if (typeof hashData === "object") { + Object.assign(nodeItem, hashData); + } + } + } else { + if (nodeItem.installed === value) { + filterTypes.add(value); + } + const map = { + "Update": "True", + "Disabled": "True", + "Fail": "True", + "None": "False" + } + if (map[nodeItem.installed]) { + filterTypes.add(map[nodeItem.installed]); + } + } + }); + nodeItem.filterTypes = Array.from(filterTypes); + }); + + this.renderGrid(); + + this.hideLoading(); + + } + + // =========================================================================================== + + showSelection(msg) { + this.element.querySelector(".cn-manager-selection").innerHTML = msg; + } + + showError(err) { + this.showMessage(err, "red"); + } + + showMessage(msg, color) { + if (color) { + msg = `${msg}`; + } + this.element.querySelector(".cn-manager-message").innerHTML = msg; + } + + showStatus(msg, color) { + if (color) { + msg = `${msg}`; + } + this.element.querySelector(".cn-manager-status").innerHTML = msg; + } + + showLoading() { + this.setDisabled(true); + if (this.grid) { + this.grid.showLoading(); + this.grid.showMask({ + opacity: 0.05 + }); + } + } + + hideLoading() { + this.setDisabled(false); + if (this.grid) { + this.grid.hideLoading(); + this.grid.hideMask(); + } + } + + setDisabled(disabled) { + + const $close = this.element.querySelector(".cn-manager-close"); + const $restart = this.element.querySelector(".cn-manager-restart"); + + const list = [ + ".cn-manager-header input", + ".cn-manager-header select", + ".cn-manager-footer button", + ".cn-manager-selection button" + ].map(s => { + return Array.from(this.element.querySelectorAll(s)); + }) + .flat() + .filter(it => { + return it !== $close && it !== $restart; + }); + + list.forEach($elem => { + if (disabled) { + $elem.setAttribute("disabled", "disabled"); + } else { + $elem.removeAttribute("disabled"); + } + }); + + Array.from(this.element.querySelectorAll(".cn-btn-loading")).forEach($elem => { + $elem.classList.remove("cn-btn-loading"); + }); + + } + + showRestart() { + this.element.querySelector(".cn-manager-restart").style.display = "block"; + } + + setFilter(filterValue) { + let filter = ""; + const filterItem = this.getFilterItem(filterValue); + if(filterItem) { + filter = filterItem.value; + } + this.filter = filter; + this.element.querySelector(".cn-manager-filter").value = filter; + } + + setKeywords(keywords = "") { + this.keywords = keywords; + this.element.querySelector(".cn-manager-keywords").value = keywords; + } + + show(show_mode) { + this.element.style.display = "flex"; + this.setFilter(show_mode); + this.setKeywords(""); + this.showSelection(""); + this.showMessage(""); + this.loadData(show_mode); + } + + close() { + this.element.style.display = "none"; + } +} + +// =========================================================================================== + +async function calculateHash(item) { + const message = item.title + item.files[0]; + return md5(message); +} + +function md5(inputString) { + const hc = '0123456789abcdef'; + const rh = n => {let j,s='';for(j=0;j<=3;j++) s+=hc.charAt((n>>(j*8+4))&0x0F)+hc.charAt((n>>(j*8))&0x0F);return s;} + const ad = (x,y) => {let l=(x&0xFFFF)+(y&0xFFFF);let m=(x>>16)+(y>>16)+(l>>16);return (m<<16)|(l&0xFFFF);} + const rl = (n,c) => (n<>>(32-c)); + const cm = (q,a,b,x,s,t) => ad(rl(ad(ad(a,q),ad(x,t)),s),b); + const ff = (a,b,c,d,x,s,t) => cm((b&c)|((~b)&d),a,b,x,s,t); + const gg = (a,b,c,d,x,s,t) => cm((b&d)|(c&(~d)),a,b,x,s,t); + const hh = (a,b,c,d,x,s,t) => cm(b^c^d,a,b,x,s,t); + const ii = (a,b,c,d,x,s,t) => cm(c^(b|(~d)),a,b,x,s,t); + const sb = x => { + let i;const nblk=((x.length+8)>>6)+1;const blks=[];for(i=0;i>2]|=x.charCodeAt(i)<<((i%4)*8);} + blks[i>>2]|=0x80<<((i%4)*8);blks[nblk*16-2]=x.length*8;return blks; + } + let i,x=sb(inputString),a=1732584193,b=-271733879,c=-1732584194,d=271733878,olda,oldb,oldc,oldd; + for(i=0;i{i.d(e,{A:()=>l});var o=i(256),n=i.n(o),s=i(505),r=i.n(s)()(n());r.push([t.id,'.tg-turbogrid{position:relative;z-index:0;width:100%;height:100%;margin:0;padding:0;box-sizing:border-box;font-size:14px;font-family:arial,sans-serif;outline:0;cursor:default;overflow:hidden}.tg-turbogrid *,.tg-turbogrid *::before,.tg-turbogrid *::after{box-sizing:border-box}.tg-text-unselectable.tg-turbogrid{user-select:none}.tg-turbogrid svg{display:block;pointer-events:none}.tg-turbogrid .tg-symbols{font-family:webdings,sans-serif}.tg-turbogrid .tg-nowrap{white-space:nowrap}.tg-turbogrid .tg-align-left{text-align:left}.tg-turbogrid .tg-align-center{text-align:center}.tg-turbogrid .tg-align-right{text-align:right}@keyframes tg-fade-in{from{opacity:0}to{opacity:1}}@keyframes tg-fade-out{from{opacity:1}to{opacity:0}}.tg-turbogrid .tg-fade-in{animation-name:tg-fade-in;animation-duration:.2s;animation-fill-mode:both}.tg-turbogrid .tg-fade-in .tg-scrollbar-track{display:none}.tg-turbogrid .tg-fade-out{animation-name:tg-fade-out;animation-duration:.2s;animation-fill-mode:both}.tg-turbogrid .tg-fade-out .tg-scrollbar-track{display:none}.tg-turbogrid .tg-mask{position:absolute;top:0;left:0;z-index:200;display:none;width:100%;height:100%;background-color:#000;opacity:.1}@keyframes tg-loading-animation{0%{transform:rotate(0deg)}100%{transform:rotate(360deg)}}.tg-turbogrid .tg-loading{position:absolute;top:50%;left:50%;z-index:300;display:none;transform:translate(-50%, -50%);pointer-events:none}.tg-turbogrid .tg-loading-default{width:35px;height:35px;color:#0077cf;animation:1s tg-loading-animation linear infinite}.tg-turbogrid .tg-loading-fast{animation:.382s tg-loading-animation linear infinite}.tg-turbogrid .tg-checkbox{width:100%;height:100%;cursor:pointer;overflow:hidden}.tg-turbogrid .tg-checkbox:hover .tg-checkbox-item{fill:#005ba1}.tg-turbogrid .tg-checkbox.tg-select-icon-all{height:18px}.tg-turbogrid .tg-checkbox .tg-icon-checkbox{position:absolute;top:50%;left:50%;display:block;width:16px;height:16px;transform:translate(-50%, -50%)}.tg-turbogrid .tg-checkbox .tg-checkbox-item{display:none;fill:gray}.tg-turbogrid .tg-checkbox .tg-checkbox-none{display:block}.tg-turbogrid .tg-checkbox.tg-selected .tg-checkbox-selected{display:block;fill:#0077cf}.tg-turbogrid .tg-checkbox.tg-mixed .tg-checkbox-mixed{display:block;fill:#0077cf}.tg-turbogrid .tg-radio{cursor:pointer;overflow:hidden}.tg-turbogrid .tg-radio:hover .tg-icon-radio::before{border-color:#005ba1}.tg-turbogrid .tg-radio .tg-icon-radio{position:absolute;top:50%;left:50%;width:16px;height:16px;transform:translate(-50%, -50%)}.tg-turbogrid .tg-radio .tg-icon-radio::before{position:absolute;top:50%;left:50%;content:"";display:block;width:16px;height:16px;border:thin solid gray;border-radius:50%;background:#fff;transform:translate(-50%, -50%)}.tg-turbogrid .tg-radio .tg-icon-radio::after{position:absolute;top:50%;left:50%;content:"";display:none;width:10px;height:10px;border-radius:50%;background:#0077cf;transform:translate(-50%, -50%)}.tg-turbogrid .tg-radio.tg-selected .tg-icon-radio::after{display:block;border-color:#0077cf}.tg-turbogrid .tg-scrollbar{position:absolute;z-index:100;overflow:hidden;user-select:none}.tg-turbogrid .tg-scrollbar-v{top:0;right:0}.tg-turbogrid .tg-scrollbar-h{left:0;bottom:0}.tg-turbogrid .tg-scrollbar-track{position:relative;width:100%;height:100%;background:#f9f9f9;overflow:hidden;user-select:none}.tg-turbogrid .tg-scrollbar-thumb{position:absolute;top:0;left:0;border-radius:1px;background:#999;overflow:hidden;user-select:none}.tg-turbogrid .tg-scrollbar-thumb:hover{background:#888}.tg-turbogrid .tg-scrollbar-thumb-hold{background:#666}.tg-turbogrid .tg-scrollbar-thumb-hold:hover{background:#666}.tg-turbogrid .tg-scrollbar-round .tg-scrollbar-track{border-radius:10px}.tg-turbogrid .tg-scrollbar-round .tg-scrollbar-thumb{border-radius:10px}.tg-turbogrid .tg-scroll-pane{position:relative;margin:0;padding:0;border:none;outline:none;overflow:hidden}.tg-turbogrid .tg-scroll-view{position:relative;width:100%;height:100%;margin:0;padding:0;border:none;overflow:hidden}.tg-turbogrid .tg-scroll-body{position:absolute}.tg-turbogrid .tg-header{position:relative;width:10000px;border-left:0;overflow:hidden}.tg-turbogrid .tg-header-table{position:relative;color:#5e5e5e;font-weight:bold;font-size:14px;line-height:16px;border-bottom:thin solid #e5e5e5;overflow:hidden}.tg-turbogrid .tg-header-item{position:absolute;bottom:0}.tg-turbogrid .tg-header-group-item{overflow:hidden}.tg-turbogrid .tg-header-group-item::after{position:absolute;left:5px;bottom:0;content:"";display:block;width:calc(100% - 10px);height:1px;border-bottom:thin solid #ccc}.tg-turbogrid .tg-column-header{position:absolute;bottom:0;overflow:hidden}.tg-turbogrid .tg-column-header .tg-column-name{padding:10px 5px;text-overflow:ellipsis;overflow:hidden}.tg-turbogrid .tg-column-header .tg-column-name.tg-header-group-name{margin:0 5px;padding:5px 0}.tg-turbogrid .tg-column-resizing{position:absolute;top:0;right:-5px;z-index:100;width:10px;height:100%;background:#ccc;cursor:ew-resize;opacity:0}.tg-turbogrid .tg-header-column-last .tg-column-resizing{right:0}.tg-turbogrid .tg-column-sortable .tg-column-name{cursor:pointer}.tg-turbogrid .tg-column-sortable .tg-sort-indicator{cursor:pointer}.tg-turbogrid .tg-column-sorted{color:#000}.tg-turbogrid .tg-header-sort-h .tg-column-name{padding:12px 5px 15px}.tg-turbogrid .tg-header-sort-h .tg-column-sort{width:100%;height:15px;margin-top:-15px;padding:0 5px;overflow:hidden}.tg-turbogrid .tg-header-sort-h .tg-sort-indicator{position:relative;display:none;width:100%;height:100%}.tg-turbogrid .tg-header-sort-h .tg-column-sorted .tg-column-sort .tg-sort-indicator{display:block}.tg-turbogrid .tg-header-sort-h .tg-sort-indicator-line{position:absolute;top:1px;width:100%;height:0;border-top:thin solid #1e1e1e;overflow:hidden}.tg-turbogrid .tg-header-sort-h .tg-sort-indicator-icon{position:absolute;top:5px;left:0;right:inherit}.tg-turbogrid .tg-header-sort-h .tg-align-right .tg-sort-indicator-icon{left:inherit;right:0}.tg-turbogrid .tg-header-sort-h .tg-align-center .tg-sort-indicator-icon{left:50%;transform:translateX(-50%)}.tg-turbogrid .tg-header-sort-h .tg-sort-indicator-icon .tg-icon-sort-h{display:block;width:19px;height:6px}.tg-turbogrid .tg-header-sort-h .tg-sort-indicator-icon .tg-icon-item{display:none;fill:#1e1e1e}.tg-turbogrid .tg-header-sort-h .tg-sort-indicator-icon .tg-icon-item-light{fill:#ababab}.tg-turbogrid .tg-column-sort-v{display:flex;flex-direction:row;align-items:center}.tg-turbogrid .tg-column-sort-v .tg-column-name{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.tg-turbogrid .tg-column-sort-v.tg-align-right{justify-content:right}.tg-turbogrid .tg-column-sort-v .tg-sort-indicator{position:relative;width:16px;height:16px}.tg-turbogrid .tg-column-sort-v .tg-sort-indicator-icon{position:absolute}.tg-turbogrid .tg-column-sort-v .tg-sort-indicator-icon .tg-icon-sort-v{display:block;width:10px;height:16px}.tg-turbogrid .tg-column-sort-v .tg-sort-indicator-icon .tg-icon-item{fill:#ababab}.tg-turbogrid .tg-column-sort-v .tg-sort-indicator-icon .tg-icon-item-light{fill:#ababab}.tg-turbogrid .tg-column-sort-v.tg-column-sorted .tg-sort-indicator-icon .tg-icon-item{fill:#1e1e1e}.tg-turbogrid .tg-column-sort-v.tg-column-sorted .tg-sort-indicator-icon .tg-icon-item-light{fill:#ababab}.tg-turbogrid .tg-sort-desc .tg-sort-indicator .tg-sort-indicator-icon .tg-desc{display:block}.tg-turbogrid .tg-sort-desc .tg-sort-indicator .tg-sort-indicator-icon .tg-asc{display:none}.tg-turbogrid .tg-sort-asc .tg-sort-indicator .tg-sort-indicator-icon .tg-desc{display:none}.tg-turbogrid .tg-sort-asc .tg-sort-indicator .tg-sort-indicator-icon .tg-asc{display:block}.tg-turbogrid .tg-column-line{position:absolute;top:0;left:0;z-index:100;display:none;height:100%;pointer-events:none}.tg-turbogrid .tg-column-line-item{position:absolute;top:0;bottom:0;display:block;width:0;height:100%;border-left:thin solid #ccc}.tg-turbogrid .tg-column-line-item.tg-active{border-left:thin solid #0077cf}.tg-turbogrid .tg-column-dragging{cursor:ew-resize}.tg-turbogrid .tg-column-dragging .tg-column-name{cursor:ew-resize}.tg-turbogrid .tg-column-dragging .tg-column-resizing:not(.tg-resizing-active){display:none}.tg-turbogrid .tg-tree{position:relative;display:flex;flex-direction:row;place-items:center left;width:100%;height:100%;overflow:hidden}.tg-turbogrid .tg-tree-icon{position:relative;width:15px;height:100%;min-height:9px;text-align:left;cursor:pointer;overflow:hidden}.tg-turbogrid .tg-tree-icon .tg-icon-tree{position:absolute;top:50%;left:0;display:block;width:9px;height:9px;transform:translate(0, -50%);overflow:hidden}.tg-turbogrid .tg-tree-icon .tg-tree-item{display:none}.tg-turbogrid .tg-tree-icon-collapsed .tg-tree-collapsed{display:block}.tg-turbogrid .tg-tree-icon-empty .tg-tree-collapsed{opacity:.5}.tg-turbogrid .tg-tree-icon-expanded .tg-tree-expanded{display:block}.tg-turbogrid .tg-tree-name{flex:1;text-overflow:ellipsis;overflow:hidden}.tg-turbogrid .tg-tree-header .tg-tree .tg-tree-icon{display:none}.tg-turbogrid .tg-tree-icon-all{position:relative;height:17px}.tg-turbogrid .tg-tree-header-indent .tg-tree{padding-left:5px}.tg-turbogrid .tg-tree-header-indent .tg-tree .tg-tree-icon{display:block}.tg-turbogrid .tg-tree-header-indent.tg-column-sort-h .tg-column-sort{width:calc(100% - 20px);margin-left:20px}.tg-turbogrid .tg-pane{position:absolute;width:100%;outline:0;overflow:hidden}.tg-turbogrid .tg-header-frame{position:relative;display:block;outline:0;overflow:hidden}.tg-turbogrid .tg-header-frame .tg-pane{height:100%}.tg-turbogrid .tg-body-frame{position:relative;width:100%;outline:0}.tg-turbogrid .tg-body-message{position:absolute;display:none;width:100%;height:100%;padding:10px;overflow:hidden}.tg-turbogrid .tg-body-message img,.tg-turbogrid .tg-body-message div{position:absolute;top:50%;left:50%;transform:translate(-50%, -50%)}.tg-turbogrid .tg-body{position:absolute;outline:0}.tg-turbogrid .tg-cell-hover-icon{display:none}.tg-touch-device.tg-turbogrid .tg-cell-hover-icon{display:inherit}.tg-turbogrid .tg-cell-row-number{font-weight:normal}.tg-turbogrid .tg-cell-row-drag .tg-row-drag-icon{position:absolute;top:50%;left:50%;width:24px;height:24px;cursor:move;opacity:.8;transform:translate(-50%, -50%)}.tg-turbogrid .tg-cell-row-drag .tg-row-drag-icon:hover{opacity:1}.tg-turbogrid .tg-cell{position:absolute;z-index:1;height:100%;margin:0;padding:0 5px;color:#1e1e1e;white-space:nowrap;text-overflow:ellipsis;vertical-align:middle;overflow:hidden}.tg-turbogrid .tg-cell:focus{outline:none}.tg-turbogrid .tg-cell.tg-flashing{border:1px solid red !important}.tg-turbogrid .tg-cell.tg-selected{background-color:beige}.tg-turbogrid .tg-cell.tg-multiline{display:flex;flex-direction:column;justify-content:center;padding:5px;line-height:normal;white-space:normal;text-overflow:ellipsis}.tg-turbogrid .tg-cell.tg-multiline .tg-multiline-wrapper{overflow:hidden}.tg-turbogrid .tg-cell.tg-align-left.tg-cell-negative{padding-left:1px}.tg-turbogrid .tg-cell.tg-align-right.tg-cell-negative{padding-right:1px}.tg-turbogrid .tg-row{position:absolute;width:100%;border:0;border-bottom:thin solid #e5e5e5}.tg-turbogrid .tg-row.tg-group-line{border-bottom:thin solid #999}.tg-turbogrid .tg-row.tg-none-line{border-bottom:none}.tg-turbogrid .tg-row.tg-top-line{border-top:thin solid #e5e5e5}.tg-turbogrid .tg-row.tg-group{font-weight:bold;overflow:hidden}.tg-turbogrid .tg-row.tg-group .tg-cell.tg-align-left.tg-cell-negative{padding-left:0}.tg-turbogrid .tg-row.tg-group .tg-cell.tg-align-right.tg-cell-negative{padding-right:0}.tg-turbogrid .tg-row.tg-hover .tg-cell .tg-cell-hover-icon{display:inherit}.tg-turbogrid .tg-row.tg-dragging{opacity:.3}.tg-turbogrid .tg-row.tg-clone{z-index:1000;border:1px dashed #ccc;border-right:none;border-left:none;background:#fff;cursor:move;opacity:.5}.tg-turbogrid .tg-row.tg-clone *{cursor:move}.tg-turbogrid .tg-row-placeholder{position:absolute;z-index:9999;width:100%;border-top:2px solid #00a8e1;pointer-events:none}.tg-turbogrid .tg-row::before,.tg-turbogrid .tg-row::after{position:absolute;top:0;left:0;content:"";z-index:100;display:none;width:100%;height:100%;pointer-events:none}.tg-turbogrid .tg-hover.tg-row::before{display:block;background:rgba(0,0,0,.08)}.tg-turbogrid .tg-selected.tg-row::after{display:block;background:rgba(0,0,0,.13)}.tg-lightblue .tg-header-item{border-top:thin solid #e8eaf0;border-right:thin solid #e8eaf0}.tg-lightblue .tg-column-name{padding:5px;color:#304265}.tg-lightblue .tg-header-group-item::after{display:none}.tg-lightblue .tg-checkbox .tg-icon-item{fill:#d4d7e0}.tg-lightblue .tg-checkbox:hover .tg-icon-item{fill:#107fff}.tg-lightblue .tg-checkbox.tg-selected .tg-select-checkbox{fill:#107fff}.tg-lightblue .tg-checkbox.tg-mixed .tg-select-mixed{fill:#107fff}.tg-lightblue .tg-cell{color:#304265;border-right:thin solid #e8eaf0}.tg-lightblue .tg-row{border-bottom:thin solid #e8eaf0}.tg-lightblue .tg-row.tg-group-line{border-bottom:thin solid #c9ccd8}.tg-lightblue .tg-row.tg-selected{background:rgba(58,116,213,.05)}.tg-lightblue .tg-row.tg-hover{background:rgba(58,116,213,.05)}.tg-lightblue .tg-row.tg-even{background:#fbfcfe}.tg-lightblue .tg-row.tg-odd{background:#fff}.tg-lightblue .tg-hover.tg-row::before{background:rgba(58,116,213,.05)}.tg-lightblue .tg-selected.tg-row::after{background:rgba(58,116,213,.1)}.tg-lightblue .tg-header-frame{border-bottom:thin solid #e8eaf0}.tg-lightblue .tg-row-not-found .tg-frozen-line-v{border-right:none}.tg-lightblue .tg-scrollbar-track{background:#fff}.tg-lightblue .tg-scrollbar-thumb{background:rgba(48,66,101,.35)}.tg-lightblue .tg-scrollbar-thumb:hover{background-color:#a8a8a8}.tg-lightblue .tg-scrollbar-thumb:active{background-color:#787878}.tg-dark{background:#1e1e1e}.tg-dark .tg-checkbox .tg-icon-item{fill:#ababab}.tg-dark .tg-header-table{color:#ccc;border-bottom:thin solid #333}.tg-dark .tg-header-group-item::after{border-bottom:1px solid #999}.tg-dark .tg-column-sorted{color:#fff}.tg-dark .tg-column-sorted .tg-tree-icon-all .tg-icon-item{fill:#fff}.tg-dark .tg-header-sort-h .tg-sort-indicator-line{border-top:thin solid #eee}.tg-dark .tg-header-sort-h .tg-sort-indicator-icon .tg-icon-item{fill:#eee}.tg-dark .tg-header-sort-h .tg-sort-indicator-icon .tg-icon-item-light{fill:#666}.tg-dark .tg-column-sort-v .tg-sort-indicator-icon .tg-icon-item{fill:#666}.tg-dark .tg-column-sort-v .tg-sort-indicator-icon .tg-icon-item-light{fill:#666}.tg-dark .tg-column-sort-v.tg-column-sorted .tg-sort-indicator-icon .tg-icon-item{fill:#fff}.tg-dark .tg-column-sort-v.tg-column-sorted .tg-sort-indicator-icon .tg-icon-item-light{fill:#666}.tg-dark .tg-tree-icon .tg-icon-item{fill:#fff}.tg-dark .tg-tree-icon-all .tg-icon-item{fill:#999}.tg-dark .tg-header-item .tg-tree-icon .tg-icon-item{fill:#999}.tg-dark .tg-header-item .tg-column-sorted .tg-tree-icon .tg-icon-item{fill:#fff}.tg-dark .tg-row{border-bottom:thin solid #333}.tg-dark .tg-row.tg-group-line{border-bottom:thin solid #666}.tg-dark .tg-row.tg-clone{border:1px dashed #1e1e1e;opacity:.1}.tg-dark .tg-cell{color:#eee}.tg-dark .tg-body-message{color:#eee}.tg-dark .tg-hover.tg-row::before{background:rgba(255,255,255,.1)}.tg-dark .tg-selected.tg-row::after{background:rgba(255,255,255,.2)}.tg-dark .tg-mask{background-color:#fff}.tg-dark .tg-scrollbar-track{background:#333}.tg-dark .tg-scrollbar-thumb{background:#bbb}.tg-dark .tg-scrollbar-thumb:hover{background:#ddd}.tg-dark .tg-scrollbar-thumb-hold{background:#eee}.tg-dark .tg-scrollbar-thumb-hold:hover{background:#eee}.tg-pointer-events-none{pointer-events:none}',""]);const l=r},505:t=>{t.exports=function(t){var e=[];return e.toString=function(){return this.map((function(e){var i="",o=void 0!==e[5];return e[4]&&(i+="@supports (".concat(e[4],") {")),e[2]&&(i+="@media ".concat(e[2]," {")),o&&(i+="@layer".concat(e[5].length>0?" ".concat(e[5]):""," {")),i+=t(e),o&&(i+="}"),e[2]&&(i+="}"),e[4]&&(i+="}"),i})).join("")},e.i=function(t,i,o,n,s){"string"==typeof t&&(t=[[null,t,void 0]]);var r={};if(o)for(var l=0;l0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=s),i&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=i):c[2]=i),n&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=n):c[4]="".concat(n)),e.push(c))}},e}},256:t=>{t.exports=function(t){return t[1]}}},e={};function i(o){var n=e[o];if(void 0!==n)return n.exports;var s=e[o]={id:o,exports:{}};return t[o](s,s.exports,i),s.exports}i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var o in e)i.o(e,o)&&!i.o(t,o)&&Object.defineProperty(t,o,{enumerable:!0,get:e[o]})},i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e);var o={};(()=>{i.d(o,{$:()=>w,MP:()=>e,_d:()=>k,xA:()=>Xt,In:()=>X,T8:()=>D,Gr:()=>kt,ht:()=>qt,J0:()=>d,xv:()=>Yt,Ay:()=>Kt});const t="turbogrid",e={ID:t,NS:`tg-${t}`,VERSION:"3.1.0",TIMESTAMP:"2024-06-04T10:15:28.564Z",UP:"up",DOWN:"down",LEFT:"left",RIGHT:"right",TREE_INDENT:15},n=function(t){if(!t||"object"!=typeof t)return!1;const e=Object.prototype.toString.call(t);return!!["[object Object]","[object Array]"].includes(e)&&(!t.constructor||!![Object,Array].includes(t.constructor))},s=function(t,e){let i;return t.forEach((t=>{n(t)&&(i||(i=t instanceof Array?[]:{}),t instanceof Array?function(t,e,i){const o=e.length;for(let s=0;s{this.execute()})):Promise.resolve().then((()=>{this.execute()}))}execute(){if(!this.started)return;this.started=!1;const t=this.callback;this.callback=null,"function"==typeof t&&t.call(this)}cancel(){this.started=!1,this.callback=null}}const a=new WeakMap,c={isObject:n,merge:l,hasOwn:function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},uid:function(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:8;const e="0123456789abcdefghijklmnopqrstuvwxyz";let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";for(;t--;)i+=e[36*Math.random()|0];return i},isNum:function(t){if("number"!=typeof t||isNaN(t))return!1;return(e=t)!==Number.MAX_VALUE&&e!==Number.MIN_VALUE&&e!==Number.NEGATIVE_INFINITY&&e!==Number.POSITIVE_INFINITY;var e},toNum:function(t,e){return"number"!=typeof t&&(t=parseFloat(t)),isNaN(t)&&(t=0),e&&!Number.isInteger(t)&&(t=Math.round(t)),t},convertNum:function(t){if("string"==typeof t){if(/^[-+]?\d+(\.\d+)?$/gi.test(t))return parseFloat(t)}return t},clamp:function(t,e,i){return Math.max(Math.min(t,i),e)},per:function(t){return t=c.toNum(t),t=c.clamp(t,0,1)},replace:function(t,e){return t=`${t}`,e?t=t.replace(/\{([^}]+)\}/g,(function(t,i){return c.hasOwn(e,i)?e[i]:t})):t},isArray:function(t){return!!(t&&t instanceof Array)},toList:function(t){return t instanceof Array?t:void 0===t?[]:"string"==typeof t?[t]:t&&c.hasOwn(t,"length")?Array.from(t):[t]},isList:function(t){return!!(c.isArray(t)&&t.length>0)},inList:function(t,e){if(!c.isList(e))return!1;for(let i=0,o=e.length;i{if(!c.isList(t))return;let n=0;const s=t.length;for(;nt.startsWith(e))).forEach((e=>{t[e]=null}))},hasShiftKey:function(t){let e=!1;return t&&(e=t.shiftKey),e},isTouchDevice:function(){return"ontouchstart"in window||navigator.maxTouchPoints>0||navigator.msMaxTouchPoints>0},contains:function(t,e){if(!t||!e)return!1;if(t===e)return!0;if("function"==typeof t.contains)return t.contains(e);let i=e.parentNode;for(;i;){if(i===t)return!0;i=i.parentNode}return!1},isNarrowCharacter:function(t){const e=t.codePointAt(0);return e>=32&&e<=126||162===e||163===e||165===e||166===e||172===e||175===e||8361===e||e>=10214&&e<=10221||10629===e||10630===e||e>=65377&&e<=65470||e>=65474&&e<=65479||e>=65482&&e<=65487||e>=65490&&e<=65495||e>=65498&&e<=65500||e>=65512&&e<=65518},getCharLen:function(t){let e=0;if(!t)return e;for(const i of String(t))e+=c.isNarrowCharacter(i)?1:2;return e},pascalToKebabCase:function(t){return`${t}`.trim().replace(/([a-z])([A-Z])/g,"$1-$2").replace(/\W/g,(t=>/[À-ž]/.test(t)?t:"-")).replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-").toLowerCase()},classMap:function(t){if("string"==typeof t)return t.trim();if(Array.isArray(t)){let e=t.filter((t=>t));return e=e.map((t=>t&&"object"==typeof t?c.classMap(t):String(t).trim())),e=e.filter((t=>t)),e=Array.from(new Set(e)),e.join(" ")}if(t&&"object"==typeof t){const e=[];return Object.keys(t).forEach((i=>{t[i]&&e.push(i)})),e.join(" ")}return""},styleMap:function(t){if("string"==typeof t)return t.trim();if(Array.isArray(t)){let e=t.filter((t=>t));return e=e.map((t=>{const e=String(t).trim();return e?-1===e.indexOf(":")?"":e.endsWith(";")?e:`${e};`:""})),e=e.filter((t=>t)),e=Array.from(new Set(e)),e.join(" ")}if(t&&"object"==typeof t){const e=[];return Object.keys(t).forEach((i=>{const o=t[i];if(o||0===o){const t=String(o).trim();t&&e.push(`${c.pascalToKebabCase(i)}: ${t};`)}})),e.join(" ")}return""},getInstance:function(t){if(t){const e=document.getElementById(t);if(e)return a.get(e)}},setInstance:function(t,e){t&&a.set(t,e)},bindEvents:function(t,e){t&&(c.unbindEvents(t),Object.keys(t).forEach((i=>{const o=t[i];o.target=o.target||e,o.target.addEventListener(i,o.handler,o.options)})))},unbindEvents:function(t){t&&Object.keys(t).forEach((e=>{const i=t[e];i.target&&i.target.removeEventListener(e,i.handler,i.options)}))},preventDefault:function(t){t&&"function"==typeof t.preventDefault&&t.cancelable&&t.preventDefault()},debounce:function(t){let e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100;const o=function(){clearTimeout(e),e=setTimeout((()=>{t.apply(this,arguments)}),i)};return o.cancel=()=>{clearTimeout(e)},o},throttle:function(t){let e,i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:100,o=0;const n=function(){const n=Date.now();if(n>o+i)return clearTimeout(e),o=n,void t.apply(this,arguments);clearTimeout(e),e=setTimeout((()=>{o=n,t.apply(this,arguments)}),i)};return n.cancel=()=>{clearTimeout(e),o=0},n},microtask:function(t){const e=new h,i=function(){e.start((()=>{t.apply(this,arguments)}))};return i.cancel=()=>{e.cancel()},i},nextTick:function(t){"function"==typeof window.queueMicrotask?window.queueMicrotask((()=>{t()})):Promise.resolve().then((()=>{t()}))},cancelAsync:function(t){t&&(Object.keys(t).filter((e=>e.startsWith("async")&&"function"==typeof t[e])).forEach((e=>{const i=t[e];"function"==typeof i.cancel&&(i.cancel(),t[e]=null)})),Object.keys(t).filter((t=>t.startsWith("timeout"))).forEach((e=>{clearTimeout(t[e])})))}},d=c,u={animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},g=function(t){return null!==t&&1===t.nodeType},f=function(t){let e=t.ownerDocument.defaultView;return e&&e.opener||(e=window),e.getComputedStyle(t)},p={},m=function(t,e){return null!=(i=t)&&i===i.window?t[`inner${e}`]:(function(t){return null!==t&&9===t.nodeType}(t)&&(t=t.body),t[`client${e}`]);var i},b=function(t){return this.list=[],t?this.create(t):this};function w(t){return new b(t)}b.prototype={constructor:b,Query:"Query",list:[],create:function(t){return t instanceof b?t:"string"==typeof t?this.createFromString(t):((t.nodeType||t===window)&&(this.list=[t]),this)},createFromString:function(t){if("<"===(t=t.trim())[0]&&">"===t[t.length-1]&&t.length>=3)this.parseHTML(t);else{const e=document.querySelectorAll(t);for(let t=0,i=e.length;t{this.css(e,t[e])}))}var i;return this.each((function(i){let o=e;"number"!=typeof o||u[t]||(o+="px"),i.style[t]=o})),this},attr:function(t,e){if(!t)return this;if(1===arguments.length){if("object"==typeof t)return Object.keys(t).forEach((e=>{this.attr(e,t[e])})),this;const e=this.get(0);return e?e.getAttribute(t):void 0}return this.each((function(i){i.setAttribute(t,e)})),this},removeAttr:function(t){return t?(this.each((function(e){e.hasAttribute(t)&&e.removeAttribute(t)})),this):this},removeClass:function(t){if(!arguments.length)return this.each((function(t){t.className=""})),this;if(!t||"string"!=typeof t)return this;const e=t.split(" ");return this.each((function(t){e.forEach((function(e){e&&t.classList.remove(e)}))})),this},addClass:function(t){if(!t||"string"!=typeof t)return this;const e=t.split(" ");return this.each((function(t){e.forEach((function(e){e&&t.classList.add(e)}))})),this},hasClass:function(t){if(!t||"string"!=typeof t)return!1;let e=!1;return this.each((function(i){if(i.classList.contains(t))return e=!0,!1})),e},show:function(){return this.each((function(t){if(!g(t))return;const e=function(t){if(!p[t]){const e=document.createElement(t);document.body.appendChild(e);const i=f(e).display;e.parentNode.removeChild(e),p[t]=i}return p[t]}(t.nodeName);t.style.display=e})),this},hide:function(){return this.each((function(t){if(!g(t))return;"none"!==t.style.display&&(t.style.display="none")})),this},click:function(){const t=this.get(0);return t&&"function"==typeof t.click&&t.click(),this},offset:function(){const t={left:0,top:0},e=this.get(0);if(e){const i=e.getBoundingClientRect();t.left=i.left+window.scrollX,t.top=i.top+window.scrollY}return t},clone:function(){const t=new b;return this.each((function(e){if(e&&e.cloneNode){const i=e.cloneNode(!0);t.add(i)}})),t},children:function(){const t=new b;return this.each((function(e){let i=e.firstChild;for(;i;)t.add(i),i=i.nextSibling})),t},parent:function(){const t=this.get(0);return t?new b(t.parentNode):new b},is:function(t){if(!t)return!1;const e=t.split(",");let i=!0;return this.each((function(t){if(!t.nodeName)return i=!1,!1;const o=t.nodeName.toLowerCase();return d.inList(o,e)?void 0:(i=!1,!1)})),i}},Object.defineProperty(b.prototype,"length",{get:function(){return this.list.length}});const v={createCache:function(){this.headerCache=new Map,this.bodyCache=new Map,this.dataCache=new WeakMap},setHeaderCache:function(t,e){this.headerCache.set(t,e)},getHeaderCache:function(t){return this.headerCache.get(t)},clearHeaderCache:function(){this.headerCache.clear()},setRowCache:function(t,e){this.bodyCache.set(t,{rowNodes:e,cellNodes:new Map})},getRowCache:function(t){return this.bodyCache.get(t)},deleteRowCache:function(t){const e=this.getRowNodesByIndex(t);e&&e.each((t=>{this.removeNode(t)})),this.bodyCache.delete(t)},deleteCellCache:function(t,e){t&&(this.removeNode(t.get(e)),t.delete(e))},getRowNodesByIndex:function(t){const e=this.getRowCache(t);if(e)return e.rowNodes},getCellNodeByIndex:function(t,e){const i=this.getRowCache(t);if(i)return i.cellNodes.get(e)},forEachBodyCache:function(t){this.bodyCache.forEach(((e,i)=>{t.call(this,i,e.rowNodes,e.cellNodes)}))},updateRowCacheTopOffset:function(){const t=this.frozenInfo.row;this.forEachBodyCache(((e,i,o)=>{if(!(e<=t)&&i){const t=this.getViewRowItem(e),o=this.getViewRowTop(t);i.css("top",o)}}))},setNodeDataCache:function(t,e){if(t)return this.dataCache.set(t,e)},getNodeDataCache:function(t){if(t)return this.dataCache.get(t)},removeCache:function(){this.headerCache=null,this.bodyCache=null,this.dataCache=null}},H=["onUpdated","onFirstUpdated","onHeaderUpdated","onSort","onColumnAdded","onColumnRemoved","onColumnWidthChanged","onRowAdded","onRowRemoved","onRowExpanded","onRowCollapsed","onRowSubsRequest","onRowDragged","onRowDropped","onRowMoved","onRowMouseEnter","onRowMouseLeave","onSelectChanged","onCellUpdated","onCellMouseEnter","onCellMouseLeave","onClick","onDblClick","onContextMenu","onMouseOver","onMouseOut","onTouchStart","onTouchMove","onTouchEnd","onScroll","onScrollStateChanged","onMouseWheel","onResize","onLayout","onKeyDown","onDestroy"],y={};H.forEach((t=>{y[t]=t}));const C=y,R={renderCells:function(t,e){t.forEach((t=>{this.drawRowCells(t,e)}))},getCellValue:function(t,e){return t[e.id]},renderCell:function(t,e,i){const o=this.getCellValue(t,e);let n=o;this.nullFormatter&&(n=this.nullFormatter.call(this,n,t,e,i));const s=t.tg_formatter||e.tg_formatter;"function"==typeof s&&(n=s.call(this,n,t,e,i)),this.renderNodeContent(i,n);const{highlightKey:r}=this.options.highlightKeywords;t[r+e.id]&&this.renderSettings.highlightCells.push(i),this.trigger(C.onCellUpdated,{value:o,rowItem:t,columnItem:e,node:i})},getPreRenderColumnList:function(t,e){const i=[];if(!e.length)return i;for(let o=0,n=e.length;o{this.createCellNode(t,e)}))},getCellClass:function(t,e){const i=e.tg_view_index,o=["tg-cell"];return o.push(`tg-c-${i}`),e.align&&o.push(`tg-align-${e.align}`),0===e.tg_list_index&&o.push("tg-list-first"),e.tg_list_last&&o.push("tg-list-last"),o.push(d.classMap(e.classMap)),o.push(d.classMap(t[`${e.id}ClassMap`])),d.classMap(o)},createCellNode:function(t,e){const i=this.getRowCache(t);if(!i)return;const o=this.getViewRowItem(t),n=this.getViewColumnItem(e);if(!o||!n)return;const s=document.createElement("div");s.setAttribute("column",e);const r=this.getCellClass(o,n);s.className=r;const l=d.styleMap(n.styleMap)+d.styleMap(o[`${n.id}StyleMap`]);l&&(s.style.cssText=l);const h=i.rowNodes,a=n.tg_frozen,c=this.getCellRowNode(h,a);this.appendNode(c,s),this.renderCell(o,n,s),i.cellNodes.set(e,s),this.setNodeDataCache(s,{row:t,rowItem:o,rowNode:c,column:e,columnItem:n,cellNode:s})},getCellRowNode:function(t,e){const i=t.get(0);if(this.frozenInfo.columns){const o=t.get(1);return this.frozenInfo.right?e?o:i:e?i:o}return i}},S={addColumn:function(t,e,i){let o=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];const n=this.getToBeAddedItemList(t);if(!n.length)return!1;let s;if(null!=e&&(s=this.getColumnItem(e),!s))return!1;const r=this.getToBeAddedParentSubs(s,this.columns),l=[this.getToBeAddedPositionIndex(i,r),0].concat(n);r.splice.apply(r,l),this.onNextUpdated((function(){this.trigger(C.onColumnAdded,n)}));const h={type:"columns"};return o&&(h.scrollColumn=n[n.length-1]),this.render(h),!0},deleteColumn:function(t){const e=this.toColumnItemList(t,(t=>!t.private));return!!e.length&&(this.removeColumnsHandler(e),this.onNextUpdated((function(){this.trigger(C.onColumnRemoved,e)})),this.render("columns"),!0)},removeColumnsHandler:function(t){const e=[].concat(t);e.sort((function(t,e){return e.tg_index-t.tg_index})),e.forEach((t=>{let e;if(t===this.sortColumn&&this.removeSortColumn(),t.tg_parent)e=t.tg_parent.subs,e.splice(t.tg_sub_index,1);else{e=this.columns;const i=e.findIndex((e=>e===t));-1!==i&&e.splice(i,1)}!e.length&&t.tg_parent&&(t.tg_parent.subs=null)}))}},T={setColumnWidth:function(t,e){return this.updateColumnWidth(t,e)?(this.resize(),this):this},updateColumnWidth:function(t,e){const i=this.getColumnItem(t);return!!i&&(!!d.isNum(e)&&(e=Math.round(e),e=Math.max(0,e),i.tg_width!==e&&(i.width=e,i.minWidth=Math.min(i.minWidth,e),i.maxWidth=Math.max(i.maxWidth,e),this.updateViewColumnWidth(i),!0)))},showColumn:function(t){return this.updateColumnsInvisible(this.toColumnItemList(t),!1)},hideColumn:function(t){return this.updateColumnsInvisible(this.toColumnItemList(t),!0)},updateColumnsInvisible:function(t,e){if(!t.length)return!1;const i=[];return t.forEach((t=>{t.invisible!==e&&(t.invisible=e,t.tg_invisible=e,i.push(t))})),!!i.length&&(this.render("columns"),!0)}},L={showColumnLine:function(t){t&&(this.$columnLineContainer.show(),this.renderColumnLine(t))},hideColumnLine:function(){this.previousColumnLineActive||this.$columnLineContainer.hide()},setColumnLineActive:function(t){t!==this.previousColumnLineActive&&(this.previousColumnLineActive=t,t?this.$columnLineItem.addClass("tg-active"):this.$columnLineItem.removeClass("tg-active"))},getColumnLineLeft:function(t){let e=t.tg_left;return t.tg_frozen||(e-=this.scrollLeft),this.frozenInfo.right&&(t.tg_frozen?e=t.tg_left+this.paneWidthL:e-=this.columnsWidthR),e},renderColumnLine:function(t){const e=this.getHeaderItemNode(t).offsetTop,i=t.tg_width,o=this.getColumnLineLeft(t);this.$columnLineItemL.css({top:e,left:o}),this.$columnLineItemR.css({top:e,left:o+i-1}),this.frozenInfo.right||(this.frozenInfo.columns&&!t.tg_frozen&&o{this.renderColumnLine(e.columnItem)})),this.resize()},columnWidthTouchStartHandler:function(t,e){d.preventDefault(e.e);const i=e.columnItem;this.showColumnLine(i),this.setColumnLineActive(!0),e.index=i.tg_index;const o=this.getColumnHeaderNode(i);e.width=o.clientWidth},columnWidthTouchMoveHandler:function(t,e){d.preventDefault(e.e);const i=e.columnItem;let o=e.width+e.offsetX;o=d.clamp(o,i.minWidth,i.maxWidth),i.tg_width!==o&&(i.width=o,this.updateViewColumnWidth(i),this.renderColumnLine(i))},columnWidthTouchEndHandler:function(t,e){d.preventDefault(e.e),this.setColumnLineActive(!1),this.hideColumnLine(),this.resize()}},I={getColumnItem:function(t){return d.isNum(t)?(t<0&&(t=this.columnsInfo.length+t),this.columnsInfo.indexCache[t]):t?d.isNum(t.tg_index)?t:this.getColumnItemById(t.id||t):void 0},getColumnItemById:function(t){return this.getColumnItemBy("id",t)},getColumnItemBy:function(t,e){if(void 0!==e)return this.columnsInfo.indexCache.find((i=>i[t]===e))},getColumnsLength:function(t){return t?this.columnsInfo.length:this.viewColumns.length},getViewColumnItem:function(t){return this.viewAllColumns[t]},isColumnSortable:function(t){return!!t&&(!t.tg_group&&(!(!t.name||!t.id)&&this.isSortable(t)))},isColumnResizable:function(t){return!!t&&(!t.tg_group&&(!d.hasOwn(t,"resizable")||Boolean(t.resizable)))},updateViewColumnWidth:function(t){return t.tg_width=t.width,this.updateColumnHeaderSize(t),this.updateTotalColumnsWidth(),this.updateHeaderLayerHeight(),this.cssRulesInvalid=!0,this.resizeBodyHandler(),this.trigger(C.onColumnWidthChanged,t),!0},updateTotalColumnsWidth:function(){this.blankColumn.tg_width=0;const t=this.viewColumns;let e=0,i=0;const o=this.frozenInfo.columns,n=t.length;let s=0;for(let r=0;r0&&(s+=l,o&&r>=o?i+=l:e+=l)}if(this.frozenInfo.right){const t=e;e=i,i=t}this.columnsWidthL=e,this.columnsWidthR=i,this.columnsWidth=e+i},updateColumnHeaderSize:function(t){this.updateColumnHeaderWidth(t),this.updateColumnHeaderHeight(t,!0),this.updateColumnGroupWidth(t)},updateColumnHeaderWidth:function(t){const e=this.getColumnHeaderNode(t);if(!e)return;const i=t.tg_width;this.isInvisible(t)||i<=0?e.style.display="none":(e.style.display="",e.style.width=`${i}px`)},updateColumnHeaderHeight:function(t,e){if(t.tg_height=0,t.tg_width<=0)return;if(this.isInvisible(t))return;e&&(t.tg_element_height=0);const i=t.tg_element_height;if(i)return void(t.tg_height=i);const o=this.getColumnHeaderHeight(t);t.tg_height=o,t.tg_element_height=o},getColumnHeaderHeight:function(t){const e=this.getColumnHeaderNode(t);return e?e.clientHeight:0},updateColumnGroupWidth:function(t){const e=t.tg_parent;if(!e)return;const i=this.getColumnGroupWidth(e);e.tg_width!==i&&(e.tg_width=i,this.updateColumnHeaderSize(e))},getColumnGroupWidth:function(t){if(this.isInvisible(t))return 0;let e=0;return t.subs&&t.subs.forEach((t=>{this.isInvisible(t)||d.isNum(t.tg_width)&&(e+=t.tg_width)})),e}},E={initTreeInfo:function(t,e){const i=[];let o=!1,n=0,s=0;const r=function(t,r,l){(t=>{t.invisible?t.tg_invisible=!0:t.tg_invisible&&(t.tg_invisible=!1)})(t),((t,i)=>{if(e>=0&&!t.tg_invisible)return t.tg_frozen=!0,void(e-=1);t.tg_frozen&&(t.tg_frozen=!1)})(t),(t=>{if(d.hasOwn(t,"subs")){if(Array.isArray(t.subs))return o=!0,t.tg_group=!0,void(t.tg_subs_length=t.subs.length);t.subs=null}t.tg_group&&(t.tg_group=!1)})(t),((t,e)=>{t.tg_parent=e;let i=0;e&&(i=e.tg_level+1,i>n&&(n=i)),t.tg_level=i})(t,l),t.tg_index=s,t.tg_sub_index=r,i.push(t),s+=1},l=function(t,e){let i=0;const o=t.length;for(;i{if(!this.isInvisible(e))return this.isRowSelectable(e)?t(e,i,o):void 0})),this},toRowItemList:function(t,e){let i=d.toList(t).map((t=>this.getRowItem(t))).filter((t=>t));return"function"==typeof e&&(i=i.filter(e)),i},toColumnItemList:function(t,e){let i=d.toList(t).map((t=>this.getColumnItem(t))).filter((t=>t));return"function"==typeof e&&(i=i.filter(e)),i},isRowLeaf:function(t){return!!t&&("blank"!==t.formatter&&(!t.tg_frozen&&!t.tg_group))},isRowSelectable:function(t){return!!t&&(d.hasOwn(t,"selectable")?Boolean(t.selectable):this.isRowLeaf(t))},isEmptyGroup:function(t){return!(!t||!t.tg_group||0!==t.tg_subs_length)},isInvisible:function(t){return!!t&&(!(!t.tg_filtered&&!t.tg_invisible)||!!this.isInvisible(t.tg_parent))},isSortable:function(t){return!!t&&(!d.hasOwn(t,"sortable")||Boolean(t.sortable))},isCollapsedChanged:function(t,e){return Boolean(t.collapsed)!==e},isSelectedChanged:function(t,e){return Boolean(t.selected)!==e}},x={updateCssRules:function(){this.cssRulesInvalid&&(this.cssRulesInvalid=!1,this.initCssRules(),this.updateColumnsCssRules(),this.updateHeadersCssRules(),this.updateStyleElement())},initCssRules:function(){this.removeCssRules(),this.cssList={},this.cssDisplayCache={};const t=this.getRowHeight(),e=this.createCssRule(".tg-row");e.height=`${t}px`,e["line-height"]=`${t}px`},resetCssDisplay:function(t){if(this.cssDisplayCache){t=t||"";for(const e in this.cssDisplayCache)if(d.hasOwn(this.cssDisplayCache,e)){this.cssDisplayCache[e].style.display=t}}},updateColumnsCssRules:function(){const t=this.viewColumns,e=this.frozenInfo.column,i={};let o=0;for(let n=0,s=t.length;n=0;i--){const e=this.headerLayerHeight[i],o=this.createCssRule(`.tg-h-${i}`);o.bottom=`${t}px`,o.height=`${e}px`,t+=e}this.getLayerCombinations(e).forEach((t=>{const e=this.createCssRule(`.tg-h-${t}`);let i=0;t.split("").forEach((t=>{i+=this.headerLayerHeight[t]||0})),e.height=`${i}px`}))},getLayerCombinations:function(t){let e="";for(;t>=0;)e+=t,t--;if(e.length<2)return[];const i=[],o=function(t,e){const n=t.length;let s=e+2;for(;s<=n;){const o=t.substring(e,s);i.push(o),s++}e=i){let t="Possible Event memory leak detected. ";return t+=`More than ${i} (max limit) listeners added. `,t+="Use setMaxListeners(n) to increase limit.",void console.warn(t,e)}t.events.push(e)},addEvents:function(t,e,i){e.forEach((function(e){const o=e.type;t[o]||(t[o]={events:[]});if("function"!=typeof e.handler)return;const n=t[o];_.addEvent(n,e,i)}))},removeEventByNamespace:function(t,e){Object.keys(t).forEach((function(i){const o=t[i],n=[];o.events.forEach((function(t){t&&t.namespace!==e&&n.push(t)})),o.events=n}))},removeEventByHandler:function(t,e,i){const o=t[e];if(!o)return;const n=[];o.events.forEach((function(t){t&&t.handler!==i&&n.push(t)})),o.events=n},removeEventByType:function(t,e){const i=t[e];i&&(i.events=[])},removeEvent:function(t,e){const i=e.type,o=e.namespace;if(!i&&o)return void _.removeEventByNamespace(t,o);const n=e.handler;"function"!=typeof n?_.removeEventByType(t,i):_.removeEventByHandler(t,i,n)},removeEvents:function(t,e){e.forEach((function(e){_.removeEvent(t,e)}))},removeAllEvents:function(t){Object.keys(t).forEach((function(e){_.removeEventByType(t,e)}))},sendEventList:function(t,e,i,o){const n=e.events;for(let e=0;e!t.onceCalled))},sendEvent:function(t,e,i,o){const n=e[i];if(!n)return;const s=new P({type:i,target:t,currentTarget:t,data:o});_.sendEventList(t,n,s,o)}},N=_;class k{maxListeners=10;setMaxListeners(t){this.maxListeners=Number(t)||10}getMaxListeners(){return this.maxListeners}getEventListeners(){return this.eventListeners||(this.eventListeners={}),this.eventListeners}delEventListeners(){this.eventListeners=null}bind(t,e,i){const o=N.getEventList(this,t,e,i);if(!o.length)return this;const n=this.getEventListeners();return N.addEvents(n,o,this.maxListeners),this}once(t,e){return this.bind(t,e,{once:!0})}unbind(t,e,i){const o=this.getEventListeners();if(!arguments.length)return N.removeAllEvents(o),this;const n=N.getEventList(this,t,e,i);return n.length?(N.removeEvents(o,n),this):this}trigger(t,e){const i=this.getEventListeners();return N.sendEvent(this,i,t,e),this}}const V={DRAG_START:"drag_start",DRAG_MOVE:"drag_move",DRAG_END:"drag_end"};class O extends k{static EVENT=V;generateOptions(t){return d.merge({type:"mouse",startX:0,startY:0,previousX:0,previousY:0,currentX:0,currentY:0,moveX:0,moveY:0,offsetX:0,offsetY:0,changed:!1},t)}start(t,e){t&&(this.unbindEvents(),this.bindEvents(),this.options=this.generateOptions(e),this.startHandler(t))}bindEvents(){this.windowEvents={mousemove:{handler:t=>{this.iframeHandler(t),this.mouseMoveHandler(t)},options:!0},mouseup:{handler:t=>{this.mouseUpHandler(t)},options:{once:!0}}},d.bindEvents(this.windowEvents,window)}unbindEvents(){d.unbindEvents(this.windowEvents),this.windowEvents=null,this.previousIframe&&(this.previousIframe.classList.remove("tg-pointer-events-none"),this.previousIframe=null)}iframeHandler(t){const e=t.target;"IFRAME"===e.nodeName&&e!==this.previousIframe&&(this.previousIframe&&this.previousIframe.classList.remove("tg-pointer-events-none"),e.classList.add("tg-pointer-events-none"),this.previousIframe=e)}startHandler(t){const e=this.options;e.e=t,e.startX=t.pageX,e.startY=t.pageY,e.currentX=e.startX,e.currentY=e.startY,this.hasMoved=!1}mouseMoveHandler(t){d.preventDefault(t);const e=this.options;e.e=t,e.previousX=e.currentX,e.previousY=e.currentY,e.currentX=t.pageX,e.currentY=t.pageY,e.moveX=e.currentX-e.previousX,e.moveY=e.currentY-e.previousY,e.offsetX=e.currentX-e.startX,e.offsetY=e.currentY-e.startY,e.changed=!(0===e.offsetX&&0===e.offsetY),this.hasMoved?this.trigger(V.DRAG_MOVE,e):(this.hasMoved=!0,this.trigger(V.DRAG_START,e))}mouseUpHandler(t){this.unbindEvents();const e=this.options;this.hasMoved&&(e.e=t,d.preventDefault(t),this.trigger(V.DRAG_END,e))}destroy(){this.unbindEvents(),this.unbind()}}const $={Linear:{None:function(t){return t}}},B={MOTION_START:"motion_start",MOTION_MOVE:"motion_move",MOTION_END:"motion_end",MOTION_STOP:"motion_stop"};class D extends k{static EVENT=B;constructor(t){super(),this.constructorOptions=t,this.stopped=!0}generateOptions(t){return d.merge({easing:null,duration:100,from:0,till:1,data:0},this.constructorOptions,t)}stop(){return this.stopped||(this.stopped=!0,this.cancelAnimationFrame(),this.trigger(B.MOTION_STOP,this.data)),this}start(t){return this.stop(),this.stopped=!1,this.options=this.generateOptions(t),this.initCalculation(),this.data=this.calculateHandler(0),this.trigger(B.MOTION_START,this.data),this.stopped||(this.time=Date.now(),this.requestAnimationFrame(this.moveHandler)),this}requestAnimationFrame(t){this.requestId=window.requestAnimationFrame((()=>{t.apply(this)}))}cancelAnimationFrame(){window.cancelAnimationFrame(this.requestId)}getEasing(t){return"function"!=typeof t&&(t=d.getValue($,t,$.Linear.None)),t}moveHandler(){const t=Date.now()-this.time,e=this.duration;if(t{o[n]=this.calculateNumber(t,e[n],i[n])})),o):(this.calculateKeys=[],Object.keys(e).forEach((n=>{const s=e[n],r=i[n];d.isNum(s)&&d.isNum(r)&&(o[n]=this.calculateNumber(t,s,r),this.calculateKeys.push(n))})),o)}calculateNumber(t,e,i){return(i-e)*t+e}calculateNone(t,e,i){return e}destroy(){this.stop(),this.unbind()}}const W={TOUCH_START:"touch_start",TOUCH_MOVE:"touch_move",TOUCH_END:"touch_end",TOUCH_INERTIA:"touch_inertia"};class A extends k{static EVENT=W;generateOptions(t){return d.merge({type:"touch",startX:0,startY:0,previousX:0,previousY:0,currentX:0,currentY:0,moveX:0,moveY:0,offsetX:0,offsetY:0,changed:!1,touchLength:0,direction:"",inertia:!1,inertiaTime:200},t)}start(t,e){t&&(this.unbindEvents(),this.bindEvents(),this.options=this.generateOptions(e),this.startHandler(t))}bindEvents(){this.touchEvents={touchmove:{handler:t=>{this.touchMoveHandler(t)},options:{passive:!1}},touchend:{handler:t=>{this.touchEndHandler(t)},options:{passive:!1,once:!0}},touchcancel:{handler:t=>{this.touchCancelHandler(t)},options:{passive:!1,once:!0}}},d.bindEvents(this.touchEvents,document.body)}unbindEvents(){this.motionStop(),d.unbindEvents(this.touchEvents),this.touchEvents=null}startHandler(t){this.trackingPoints=[];const e=t.touches,i=e[0];if(!i)return;const o=this.options;o.e=t,o.startX=i.clientX,o.startY=i.clientY,o.currentX=o.startX,o.currentY=o.startY,o.touchLength=e.length,this.addTrackingPoint(o),this.trigger(W.TOUCH_START,o)}touchMoveHandler(t){const e=t.touches,i=e[0];if(!i)return;const o=this.options;o.e=t,o.previousX=o.currentX,o.previousY=o.currentY,o.currentX=i.clientX,o.currentY=i.clientY,o.moveX=o.currentX-o.previousX,o.moveY=o.currentY-o.previousY,o.offsetX=o.currentX-o.startX,o.offsetY=o.currentY-o.startY,o.changed=!(0===o.offsetX&&0===o.offsetY),o.touchLength=e.length,o.direction=this.getDirection(o),this.addTrackingPoint(o),this.trigger(W.TOUCH_MOVE,o)}touchEndHandler(t){this.unbindEvents();const e=this.options;e.e=t,this.trigger(W.TOUCH_END,e);const i=t.changedTouches[0];if(!i)return;const o=t.touches;e.touchLength=o.length,e.touchLength>0||(e.currentX=i.clientX,e.currentY=i.clientY,this.addTrackingPoint(e),this.motionStart())}touchCancelHandler(t){this.unbindEvents(),this.trigger(W.TOUCH_END,this.options)}getMotionInfo(){const t=this.trackingPoints;if(t.length<2)return;if(this.filterTrackingPoints(t),t.length<2)return;const e=t[0],i=t[t.length-1],o=i.t-e.t;if(o<=0)return;let n=i.x-e.x,s=i.y-e.y;const r=Math.abs(n),l=Math.abs(s);r>l?s=0:n=0;return{offsetDistance:Math.max(r,l),offsetTime:o,offsetX:n,offsetY:s}}motionStart(){const t=this.options;if(!t.inertia)return;const e=this.getMotionInfo();if(!e)return;const i=500*e.offsetDistance/50,o=d.clamp(i,20,2e3),n={x:20*(e.offsetX/e.offsetTime),y:20*(e.offsetY/e.offsetTime)};this.motion=new D,this.motion.bind(D.EVENT.MOTION_MOVE,((e,i)=>{t.touchInertiaX=i.x,t.touchInertiaY=i.y,this.trigger(W.TOUCH_INERTIA,t)})),this.motion.start({duration:o,from:n,till:{x:0,y:0}})}motionStop(){this.motion&&(this.motion.destroy(),this.motion=null)}getDirection(t){const i=t.offsetX,o=t.offsetY,n=Math.abs(i),s=Math.abs(o);if(n0)return e.UP;if(o<0)return e.DOWN}if(n>s){if(i>0)return e.LEFT;if(i<0)return e.RIGHT}return""}filterTrackingPoints(t){t.reverse();const e=t.length,i=Date.now(),o=this.options.inertiaTime;for(let n=0;no){t.length=n;break}t.reverse()}addTrackingPoint(t){if(!t.inertia)return;const e=t.currentX,i=t.currentY,o=Date.now(),n=this.trackingPoints;n.push({x:e,y:i,t:o}),n.length>100&&this.filterTrackingPoints(n)}destroy(){this.unbindEvents(),this.unbind()}}const F={getAllEvents:function(){return[].concat(H)},bindEvents:function(){this.unbindEvents(),this.containerEvents={mousedown:{handler:t=>{this.containerMouseDownHandler(t)},options:!0},mousemove:{handler:t=>{this.containerMouseMoveHandler(t)},options:!0},mouseover:{handler:t=>{this.containerMouseOverOutHandler(t,!0)},options:!0},mouseout:{handler:t=>{this.containerMouseOverOutHandler(t,!1)},options:!0},mouseenter:{handler:t=>{this.containerMouseEnterLeaveHandler(t,!0)},options:!0},mouseleave:{handler:t=>{this.containerMouseEnterLeaveHandler(t,!1)},options:!0},touchstart:{handler:t=>{this.containerTouchStartHandler(t)},options:{passive:!1}},touchmove:{handler:t=>{this.containerTouchMoveHandler(t)},options:{passive:!1}},touchend:{handler:t=>{this.containerTouchEndHandler(t)},options:{passive:!1}},touchcancel:{handler:t=>{this.containerTouchCancelHandler(t)},options:{passive:!1}},wheel:{handler:t=>{this.containerWheelHandler(t)},options:{passive:!1}},click:{handler:t=>{this.containerClickHandler(t)},options:!0},dblclick:{handler:t=>{this.containerDblClickHandler(t)},options:!0},contextmenu:{handler:t=>{this.containerContextMenuHandler(t)},options:!0},selectstart:{handler:t=>{this.containerSelectStartHandler(t)},options:!0},keydown:{handler:t=>{this.containerKeyDownHandler(t)},options:!0}},d.bindEvents(this.containerEvents,this.container),this.columnWidthDrag=new O,this.columnWidthDrag.bind(O.EVENT.DRAG_START,((t,e)=>{this.columnWidthDragStartHandler(t,e)})).bind(O.EVENT.DRAG_MOVE,((t,e)=>{this.columnWidthDragMoveHandler(t,e)})).bind(O.EVENT.DRAG_END,((t,e)=>{this.columnWidthDragEndHandler(t,e)})),this.columnWidthTouch=new A,this.columnWidthTouch.bind(A.EVENT.TOUCH_START,((t,e)=>{this.columnWidthTouchStartHandler(t,e)})).bind(A.EVENT.TOUCH_MOVE,((t,e)=>{this.columnWidthTouchMoveHandler(t,e)})).bind(A.EVENT.TOUCH_END,((t,e)=>{this.columnWidthTouchEndHandler(t,e)})),this.rowDrag=new O,this.rowDrag.bind(O.EVENT.DRAG_START,((t,e)=>{this.rowDragStartHandler(t,e)})).bind(O.EVENT.DRAG_MOVE,((t,e)=>{this.rowDragMoveHandler(t,e)})).bind(O.EVENT.DRAG_END,((t,e)=>{this.rowDragEndHandler(t,e)})),this.rowTouch=new A,this.rowTouch.bind(A.EVENT.TOUCH_START,((t,e)=>{this.rowDragStartHandler(t,e)})).bind(A.EVENT.TOUCH_MOVE,((t,e)=>{this.rowDragMoveHandler(t,e)})).bind(A.EVENT.TOUCH_END,((t,e)=>{this.rowDragEndHandler(t,e)})),this.scrollTouch=new A,this.scrollTouch.bind(A.EVENT.TOUCH_START,((t,e)=>{this.scrollTouchStartHandler(t,e)})).bind(A.EVENT.TOUCH_MOVE,((t,e)=>{this.scrollTouchMoveHandler(t,e)})).bind(A.EVENT.TOUCH_END,((t,e)=>{this.scrollTouchEndHandler(t,e)})).bind(A.EVENT.TOUCH_INERTIA,((t,e)=>{this.scrollTouchInertiaHandler(t,e)}))},isDefaultPrevented:function(t){return!!t&&t.defaultPrevented},getEventClosestNode:function(t,e){if(t&&t!==this.container)return t.classList.contains(e)?t:this.getEventClosestNode(t.parentNode,e)},getEventClosestData:function(t){if(!t||t===this.container)return;const e=this.getNodeDataCache(t);return e||this.getEventClosestData(t.parentNode)},getEventData:function(t){const e=this.getEventClosestData(t.target);if(e)return e.e=t,e},getWheelDelta:function(t,e,i){let o=t.deltaX,n=t.deltaY;return d.isNum(o)||(o=d.toNum(t.wheelDeltaX)),d.isNum(n)||(n=d.toNum(t.wheelDeltaY||t.wheelDelta)),1===t.deltaMode?(n*=e,o*=e):2===t.deltaMode&&(n*=i,o*=i),{deltaX:o,deltaY:n}},columnResizingMouseDownHandler:function(t){const e=this.getEventData(t);e&&this.columnWidthDrag.start(t,{columnItem:e.columnItem})},columnResizingTouchStartHandler:function(t){const e=this.getEventData(t);e&&this.columnWidthTouch.start(t,{columnItem:e.columnItem})},columnResizingMouseEnterLeaveHandler:function(t,e){const i=this.getEventData(t);i&&(e?this.showColumnLine(i.columnItem):this.hideColumnLine())},rowDragMouseDownHandler:function(t){const e=this.getEventData(t);e&&this.rowDrag.start(t,{rowItem:e.rowItem})},rowDragTouchStartHandler:function(t){const e=this.getEventData(t);e&&(this.protectedItem=e,this.rowTouch.start(t,{rowItem:e.rowItem}))},scrollPaneTouchStartHandler:function(t){if(!this.hasHScroll&&!this.hasVScroll)return;const e=this.getEventData(t);this.protectedItem=e,this.scrollTouch.start(t,{inertia:!0})},sortHandler:function(t,e){const i=e.columnItem;if(!this.isColumnSortable(i))return;const o=this.getEventClosestNode(t.target,"tg-column-name"),n=this.getEventClosestNode(t.target,"tg-column-sort");(o||n)&&(this.trigger(C.onSort,e),this.isDefaultPrevented(t)||this.setSortColumn(i))},selectIconAllClickHandler:function(t){const e=w(t);let i=!1;(e.hasClass("tg-selected")||e.hasClass("tg-mixed"))&&(i=!0),i=!i,this.selectAll(i)},cellEnterLeaveHandler:function(t,e){const i=this.getEventData(t);i&&(e?this.trigger(C.onCellMouseEnter,i):this.trigger(C.onCellMouseLeave,i))},rowEnterLeaveHandler:function(t,e){const i=this.getEventData(t);if(i&&(e?this.trigger(C.onRowMouseEnter,i):this.trigger(C.onRowMouseLeave,i),!this.isDefaultPrevented(t)))return this.renderRowHover(i.rowItem,e),this},containerMouseDownHandler:function(t){if(this.getEventClosestNode(t.target,"tg-column-resizing"))this.columnResizingMouseDownHandler(t);else if(this.options.rowDragVisible){this.getEventClosestNode(t.target,"tg-row-drag-icon")&&this.rowDragMouseDownHandler(t)}},containerMouseMoveHandler:function(t){this.scrollbarFadeInOutHandler(t,!0)},containerMouseOverOutHandler:function(t,e){const i=this.getEventClosestNode(t.target,"tg-cell"),o=this.getEventClosestNode(t.target,"tg-header-item");if(i||o){const i=this.getEventData(t);if(!i)return;e?this.trigger(C.onMouseOver,i):this.trigger(C.onMouseOut,i)}},containerMouseEnterLeaveHandler:function(t,e){this.scrollbarFadeInOutHandler(t,e);if(w(t.target).hasClass("tg-column-resizing"))return void this.columnResizingMouseEnterLeaveHandler(t,e);if(w(t.target).hasClass("tg-cell"))return void this.cellEnterLeaveHandler(t,e);w(t.target).hasClass("tg-row")&&this.rowEnterLeaveHandler(t,e)},containerTouchStartHandler:function(t){this.scrollTouch.motionStop();if(this.getEventClosestNode(t.target,"tg-column-resizing"))return void this.columnResizingTouchStartHandler(t);if(this.options.rowDragVisible){if(this.getEventClosestNode(t.target,"tg-row-drag-icon"))return void this.rowDragTouchStartHandler(t)}const e=this.getEventData(t);e&&(this.trigger(C.onTouchStart,e),this.isDefaultPrevented(t))||this.scrollPaneTouchStartHandler(t)},containerTouchMoveHandler:function(t){const e=this.getEventData(t);e&&this.trigger(C.onTouchMove,e)},containerTouchEndHandler:function(t){const e=this.getEventData(t);e&&this.trigger(C.onTouchEnd,e)},containerTouchCancelHandler:function(t){this.trigger(C.onTouchEnd,{e:t})},containerWheelHandler:function(t){if(this.hasMask)return;const e=this.getRowHeight(),i=this.bodyHeight,o=this.getWheelDelta(t,e,i);if(this.trigger(C.onMouseWheel,{e:t,deltaX:o.deltaX,deltaY:o.deltaY,delta:o}),this.isDefaultPrevented(t))return;let n=!1;this.scrollPaneHidden&&(n=this.scrollPaneFrozen.setOffsetH(o.deltaX),o.deltaX=0);(this.scrollPane.mouseWheelHandler(o)||n)&&d.preventDefault(t)},containerClickHandler:function(t){if(this.getEventClosestNode(t.target,"tg-tree-icon-all"))return void this.toggleAllRows();const e=this.getEventClosestNode(t.target,"tg-select-icon-all");if(e)return void this.selectIconAllClickHandler(e);const i=this.getEventData(t);if(!i)return;if(this.getEventClosestNode(t.target,"tg-header-item")){if(this.trigger(C.onClick,i),this.isDefaultPrevented(t))return;return void this.sortHandler(t,i)}if(this.getEventClosestNode(t.target,"tg-tree-icon"))return void this.toggleRow(i.rowItem);this.getEventClosestNode(t.target,"tg-select-icon")?this.setRowSelected(i.rowItem,t):this.trigger(C.onClick,i)},containerDblClickHandler:function(t){const e=this.getEventData(t)||{e:t};this.trigger(C.onDblClick,e)},containerContextMenuHandler:function(t){const e=this.getEventData(t)||{e:t};this.trigger(C.onContextMenu,e)},containerSelectStartHandler:function(t){if(this.options.textSelectable)return;w(t.target).is("input,textarea,code")||d.preventDefault(t)},containerKeyDownHandler:function(t){if(this.hasMask)return;if(this.trigger(C.onKeyDown,{e:t}),this.isDefaultPrevented(t))return;const e=t.keyCode,i={9:this.keyTabHandler,13:this.keyEnterHandler,27:this.keyEscHandler,33:this.keyPageUpHandler,34:this.keyPageDownHandler,35:this.keyEndHandler,36:this.keyHomeHandler,37:this.keyLeftHandler,38:this.keyUpHandler,39:this.keyRightHandler,40:this.keyDownHandler}[e];if(!i)return;i.call(this,t)&&d.preventDefault(t)},unbindEvents:function(){d.unbindEvents(this.containerEvents),this.containerEvents=null,this.columnWidthDrag&&(this.columnWidthDrag.destroy(),this.columnWidthDrag=null),this.columnWidthTouch&&(this.columnWidthTouch.destroy(),this.columnWidthTouch=null),this.rowDrag&&(this.rowDrag.destroy(),this.rowDrag=null),this.rowTouch&&(this.rowTouch.destroy(),this.rowTouch=null),this.scrollTouch&&(this.scrollTouch.destroy(),this.scrollTouch=null),this.protectedItem=null}},G={exportData:function(t){const e=this.getData();return{columns:this.getTreeSnapshot(e.columns,t),rows:this.getTreeSnapshot(e.rows,t)}},isItemExportable:function(t){return!!t&&(!d.hasOwn(t,"exportable")||Boolean(t.exportable))},getTreeSnapshot:function(t,e){const i=(t,o)=>{d.isList(o)&&o.forEach((o=>{if(!this.isItemExportable(o))return;const n=this.getItemSnapshot(o,e),s=o.subs;Array.isArray(s)&&(n.subs=[],i(n.subs,s)),t.push(n)}))},o=[];return i(o,t),o},getItemSnapshot:function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i={};return Object.keys(t).forEach((o=>{!0!==e[o]?!1!==e[o]&&"subs"!==o&&0!==o.indexOf("tg_")&&(i[o]=t[o]):i[o]=t[o]})),i}},j={flushRow:function(t){d.toList(t).forEach((t=>{this.deleteRowCache(t)}))},flushRowFrom:function(t){d.isNum(t)&&(0!==t?this.forEachBodyCache(((e,i,o)=>{e>=t&&this.deleteRowCache(e)})):this.flushBody())},flushBody:function(){this.forEachBodyCache(((t,e,i)=>{this.deleteRowCache(t)}))},flushSort:function(){this.frozenInfo.rows?this.flushRowFrom(this.frozenInfo.rows):this.flushBody()},flushColumn:function(t){const e=d.toList(t);this.forEachBodyCache(((t,i,o)=>{e.forEach((t=>{this.deleteCellCache(o,t)}))}))},flushColumnFrom:function(t){d.isNum(t)&&this.forEachBodyCache(((e,i,o)=>{o.forEach(((e,i)=>{i>=t&&this.deleteCellCache(o,i)}))}))},flushCell:function(t,e){const i=d.toList(t),o=d.toList(e);i.forEach((t=>{const e=this.getRowCache(t);if(!e)return;const i=e.cellNodes;o.forEach((t=>{this.deleteCellCache(i,t)}))}))},flushWithViewport:function(){const{rows:t,columns:e}=this.viewport;this.forEachBodyCache(((i,o,n)=>{t.includes(i)?n.forEach(((t,i)=>{e.includes(i)||this.deleteCellCache(n,i)})):this.deleteRowCache(i)}))}},U={"sort-h":'\n\n \n \n \n \n\n',"sort-v":'\n\n \n \n \n \n\n',checkbox:'\n\n \n \n \n\n',radio:'
    ',drag:'\n\n \n\n',tree:'\n\n \n \n\n'},X={icons:U,getIcon:function(t){let e=U[t];return e=String(e).trim(),e}},Y={header:function(t,e,i,o){return t},null:function(t,e,i,o){return e&&e.tg_group?t:null==t?"—":t},blank:function(t,e,i,o){return""},string:function(t,e,i,o){return t},number:function(t,e,i,o){return t},icon:function(t,e,i,o){return`${t}`},select:function(t,e,i,o){return this.isRowSelectable(e)?this.getSelectFormatterContent(e):""},rowDrag:function(t,e,i,o){return this.getRowDragFormatterContent(e)},rowNumber:function(t,e,i,o){return e.tg_row_number||""},tree:function(t,e,i,o){return this.getTreeFormatterContent(t,e)}},q={setFormatter:function(t,e){this.renderType="all";let i=t;if("string"==typeof t){if(this.formatters)return this.formatters[t]=e,this;i={},i[t]=e}return this.customFormatters=i,this},getFormatter:function(t){if(!t)return;const e=this.formatters[t];return"function"==typeof e?e.bind(this):void 0},getDefaultFormatter:function(t){return(Y[t]||Y.string).bind(this)},getSelectFormatterContent:function(t){let e="radio";this.options.selectMultiple&&(e="checkbox");const i=X.getIcon(e);return`
    ${i}
    `},getRowDragFormatterContent:function(t){if(t.tg_frozen)return"";return`
    ${X.getIcon("drag")}
    `},getTreeIndentWidth:function(t,i,o){if(!t)return 0;let n=5;return i||(n+=e.TREE_INDENT),n+=o*e.TREE_INDENT,n},getTreeFormatterContent:function(t,e){const i=this.rowsInfo.isTree,o=e.tg_group,n=this.isEmptyGroup(e);n&&(e.collapsed=!0);const s=e.collapsed,r=d.toNum(e.tg_level),l=this.getTreeIndentWidth(i,o,r),h=[];if(h.push(`
    `),o){const t={"tg-tree-icon":!0,"tg-tree-icon-collapsed":s,"tg-tree-icon-expanded":!s,"tg-tree-icon-empty":n},e=X.getIcon("tree"),i=`
    ${e}
    `;h.push(i)}return h.push(`
    ${t}
    `),h.push("
    "),h.join("")}},K={renderHeaderTables:function(){this.clearHeaderCache();const t=this.viewColumns,e=this.frozenInfo.columns;this.hasTreeColumn=!1,this.hasSortColumn=!1;let i=[],o=[];for(let n=0,s=t.length;n=e?o.push(s):i.push(s)}if(this.frozenInfo.right){const t=i;i=o,o=t}this.renderHeaderTable(i,this.$headerL),this.renderHeaderTable(o,this.$headerR)},renderHeaderTable:function(t,e){const i=document.createElement("div"),o=["tg-header-table"];this.hasSortColumn&&(o.push("tg-header-sortable"),o.push(`tg-header-sort-${this.options.sortIndicator}`)),i.className=d.classMap(o);const n=t.length;if(n){let e=t[n-1];e&&"tg-column-blank"===e.id&&(e=t[n-2]),t.forEach((t=>{this.renderHeaderItem(t,i,e)}))}e.append(i)},renderHeaderItem:function(t,e,i){const o=t.tg_view_index;if(this.getHeaderCache(o))return;const n=this.getHeaderItemClass(t,i),s=d.styleMap(t.headerStyleMap),r={column:o,class:n,data:t.id};s&&(r.style=s);const l=[this.createColumnHeader(t)];if(this.isColumnResizable(t)){const e=this.createColumnResizing(t);l.push(e)}const h=this.createElement("div",r,l);e.appendChild(h),this.setHeaderCache(o,h),this.setNodeDataCache(h,{rowItem:this.headerRowItem,column:o,columnItem:t,headerNode:h}),t.tg_parent&&this.renderHeaderItem(t.tg_parent,e)},createColumnHeader:function(t){const e={class:this.getHeaderClass(t),style:this.getHeaderStyle(t)},i=[this.createColumnName(t)];if(this.hasSortColumn&&!t.tg_group){const e=this.createColumnSort(t);i.push(e)}return this.createElement("div",e,i)},createColumnName:function(t){const e=["tg-column-name"];t.tg_group&&e.push("tg-header-group-name");const i={class:e.join(" ")};let o=t.name;const n=t.tg_headerFormatter;return"function"==typeof n&&(o=n.call(this,o,this.headerRowItem,t)),"tree"===t.formatter?o=this.createHeaderTreeName(o):t===this.selectColumn&&this.isSelectAllVisible()&&(o=this.createHeaderSelectName()),this.createElement("div",i,o)},createHeaderTreeName:function(t){this.hasTreeColumn=!0;const e=[];if(this.options.collapseAllVisible){const t=X.getIcon("tree"),i=this.createElement("div",{class:"tg-tree-icon tg-tree-icon-all"},t);e.push(i)}else{const t=this.createElement("div",{class:"tg-tree-icon"});e.push(t)}const i=this.createElement("div",{class:"tg-tree-name"},t);e.push(i);return this.createElement("div",{class:"tg-tree"},e)},createHeaderSelectName:function(){const t=X.getIcon("checkbox");return this.createElement("div",{class:"tg-select-icon-all tg-checkbox"},t)},createColumnSort:function(t){let e;return this.isColumnSortable(t)&&(e="h"===this.options.sortIndicator?this.createSortIndicatorH(t):this.createSortIndicatorV(t)),this.createElement("div",{class:"tg-column-sort"},e)},createSortIndicatorH:function(t){const e=X.getIcon("sort-h"),i=[this.createElement("div",{class:"tg-sort-indicator-line"}),this.createElement("div",{class:"tg-sort-indicator-icon"},e)];return this.createElement("div",{class:"tg-sort-indicator"},i)},createSortIndicatorV:function(t){const e=X.getIcon("sort-v"),i=[this.createElement("div",{class:"tg-sort-indicator-icon"},e)];return this.createElement("div",{class:"tg-sort-indicator"},i)},createColumnResizing:function(){return this.createElement("div",{class:"tg-column-resizing"})},getHeaderItemClass:function(t,e){const i=["tg-header-item"];return t.tg_group&&i.push("tg-header-group-item"),t===e&&i.push("tg-header-column-last"),i.push(`tg-c-${t.tg_view_index}`),i.push(`tg-h-${t.tg_layer}`),t.tg_combination&&i.push(`tg-h-${t.tg_combination}`),i.push(d.classMap(t.headerClassMap)),d.classMap(i)},getHeaderClass:function(t){const e=["tg-column-header"];return"tree"===t.formatter&&(e.push("tg-tree-header"),this.rowsInfo.isTree&&e.push("tg-tree-header-indent")),this.isColumnSortable(t)&&e.push(`tg-column-sortable tg-column-sort-${this.options.sortIndicator}`),t.align&&e.push(`tg-align-${t.align}`),e.join(" ")},getHeaderStyle:function(t){const e=[d.styleMap(t.headerStyleMap)],i=t.tg_width;return this.isInvisible(t)||i<=0?e.push("display:none;"):e.push(`width:${i}px;`),e.join("")}},J={renderHeader:function(){this.cssRulesInvalid=!0,this.$headerL.empty(),this.$headerR.empty(),this.resetCssDisplay(),this.renderHeaderTables(),this.renderHeaderSort(),this.headerCreated=!0,this.trigger(C.onHeaderUpdated,{node:this.$headerFrame.get(0)})},initHeaderLayerHeight:function(){this.updateScrollPaneHiddenState(),this.resetCssDisplay(),this.viewAllColumns.forEach((t=>{this.updateColumnHeaderHeight(t)})),this.resetCssDisplay("none"),this.updateHeaderLayerHeight()},updateHeaderLayerHeight:function(){const t={},e=this.columnsInfo.maxLevel;for(let i=0;i<=e;i++)t[i]=0;const i=[];this.viewAllColumns.forEach((function(e){if(e.tg_combination)i.push(e);else{const i=e.tg_height,o=e.tg_layer;t[o]=Math.max(t[o],i)}})),i.forEach((function(e){let i=e.tg_height;const o=e.tg_combination.split(""),n=o.pop();o.forEach((function(e){i-=t[e]||0})),t[n]=Math.max(t[n],i)}));const o=JSON.stringify(t);this.previousHeaderLayerHeight!==o&&(this.previousHeaderLayerHeight=o,this.headerLayerHeight=t,this.cssRulesInvalid=!0)}};var Q=i(915);const Z={create:function(t){this.id=d.uid(4,"tg-"),d.isObject(t)||(t={container:t}),this.constructorOptions=t,this.createCache(),this.createView(t.container)},createView:function(t){this.createHolder(t),this.$holder?(this.createGlobalStyle(),this.createContainer()):console.error("Grid requires a container")},createHolder:function(t){const e=w(t);if(!e.length)return;this.$holder=e,this.$holder.empty(),this.holder=this.$holder.get(0);const i=this.holder.getRootNode();this.shadowRoot=null,i&&i.host&&(this.shadowRoot=i)},createGlobalStyle:function(){const t=this.shadowRoot||document.head;if(t.querySelector(`style[context="${e.ID}"]`))return;const i=document.createElement("style");i.setAttribute("context",e.ID),i.innerHTML=Q.A.toString(),t.appendChild(i)},createContainer:function(){return this.$container=w('
    \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n
    \r\n
    \r\n\r\n
    \r\n\r\n
    \r\n
    \r\n \r\n \r\n \r\n
    \r\n
    \r\n\r\n
    \r\n').appendTo(this.$holder),this.$container.attr("id",this.id),this.$container.addClass(`${e.NS} ${this.id}`),this.container=this.$container.get(0),d.setInstance(this.container,this),this.$headerFrame=this.$container.find(".tg-header-frame"),this.$paneHL=this.$headerFrame.find(".tg-pane-header-left"),this.$paneHR=this.$headerFrame.find(".tg-pane-header-right"),this.$headerL=this.$paneHL.find(".tg-header-left"),this.$headerR=this.$paneHR.find(".tg-header-right"),this.$header=w().add(this.$headerL).add(this.$headerR),this.$bodyFrame=this.$container.find(".tg-body-frame"),this.$paneTL=this.$bodyFrame.find(".tg-pane-top-left"),this.$paneTR=this.$bodyFrame.find(".tg-pane-top-right"),this.$paneBL=this.$bodyFrame.find(".tg-pane-bottom-left"),this.$paneBR=this.$bodyFrame.find(".tg-pane-bottom-right"),this.$bodyTL=this.$paneTL.find(".tg-body-top-left"),this.$bodyTR=this.$paneTR.find(".tg-body-top-right"),this.$bodyBL=this.$paneBL.find(".tg-body-bottom-left"),this.$bodyBR=this.$paneBR.find(".tg-body-bottom-right"),this.$body=w().add(this.$bodyTL).add(this.$bodyTR).add(this.$bodyBL).add(this.$bodyBR),this.$columnLineContainer=this.$container.find(".tg-column-line"),this.$columnLineItem=this.$columnLineContainer.find(".tg-column-line-item"),this.$columnLineItemL=this.$columnLineContainer.find(".tg-column-line-l"),this.$columnLineItemR=this.$columnLineContainer.find(".tg-column-line-r"),this}},tt={initColumnsHandler:function(){this.columns=this.data.columns,this.columns.forEach(((t,e)=>{t&&"object"==typeof t||(this.columns[e]={})}));const t=this.getPrivateColumns();this.columnsInfo=this.initTreeInfo(t,this.frozenInfo.column);const e=[],i=[],o=(t,n)=>{if(!d.isList(t))return;let s,r=0;t.forEach((t=>{if(!this.isInvisible(t))if(t.tg_group){if(this.isEmptyGroup(t))return;i.push(t),o(t.subs,t)}else t.tg_list_index=r,r+=1,t.tg_list_last=!1,s=t,e.push(t)})),s&&(s.tg_list_last=!0)};o(t),e.forEach((t=>{this.initColumnItemHandler(t)})),i.forEach((t=>{this.initColumnGroupHandler(t)}));const n=[].concat(e).concat(i);this.initViewList(n,((t,e)=>{})),this.viewColumns=e,this.viewGroupColumns=i,this.viewAllColumns=n,this.initHeaderHandler(t),this.initSortColumn()},getPrivateColumns:function(){const t=this.options;this.selectColumn=t.selectColumn,this.rowDragColumn=t.rowDragColumn,this.rowNumberColumn=t.rowNumberColumn,this.blankColumn=t.blankColumn;let e=[];const i=()=>{t.selectVisible&&e.push(this.selectColumn),t.rowDragVisible&&e.push(this.rowDragColumn),t.rowNumberVisible&&(this.rowNumberColumn.width=t.rowNumberWidth,e.push(this.rowNumberColumn))};if(this.frozenInfo.right){const t=this.frozenInfo.column;this.columns.forEach(((o,n)=>{e.push(o),n===t&&i()}))}else i(),e=e.concat(this.columns);return e.push(this.blankColumn),e},setColumns:function(t){this.data.columns=d.toList(t),this.rerender()},getColumns:function(){return this.columns},getViewColumns:function(t){return t?this.viewAllColumns:this.viewColumns},initColumnItemHandler:function(t){this.initColumnProps(t),this.initColumnFormatter(t),this.initColumnWidth(t)},initColumnGroupHandler:function(t){this.initColumnFormatterByName(t,"headerFormatter","header")},initColumnProps:function(t){const e=this.options.columnTypes;if(!d.hasOwn(t,"type")){const i=e[t.id];"string"==typeof i&&(t.type=i)}let i=this.options.columnProps;const o=e[t.type];o&&"object"==typeof o&&(i=d.merge(i,o));for(const e in i)d.hasOwn(t,e)||(t[e]=i[e])},initColumnFormatter:function(t){this.initColumnFormatterByName(t,"headerFormatter","header");let e=t.type;const i=t.formatter;"string"==typeof i&&(e=i),this.initColumnFormatterByName(t,"formatter",e)},initColumnFormatterByName:function(t,e,i){let o=t[e];"function"!=typeof o?(o=this.getFormatter(i),t[`tg_${e}`]=o||this.getFormatter("string")):t[`tg_${e}`]=o.bind(this)},initColumnWidth:function(t){if(t!==this.blankColumn)return d.isNum(t.width)&&t.width>=0?(t.tg_width=t.width,t.minWidth=Math.min(t.minWidth,t.tg_width),void(t.maxWidth=Math.max(t.maxWidth,t.tg_width))):void this.initColumnWidthByName(t);t.tg_width=0},initColumnWidthByName:function(t){const e=this.getComputedColumnWidth(t);d.isNum(e)&&(t.tg_width=e)},getComputedColumnWidth:function(t){const e=t.name||"",i=d.getCharLen(e);let o=Math.round(10*i);return o>103&&(o=Math.max(103,Math.round(10*i/2)),o>133&&(o=Math.max(133,Math.round(10*i/3)),o>163&&(o=Math.max(163,Math.round(10*i/4))))),d.clamp(o,t.minWidth,t.maxWidth)},initSortColumn:function(){this.sortColumn=null;const t=this.options,e=t.sortField;if(!e)return;const i=this.getColumnItemById(e);return i&&this.isColumnSortable(i)?(d.hasOwn(i,"sortAsc")||(i.sortAsc=t.sortAsc),this.sortColumn=i,this):void 0}},et={initHeaderHandler:function(t){this.initHeaderRowItem(),this.viewGroupColumns.reverse(),this.initGroupColumnsWidth(),this.initGroupColumnsLayer(t)},initHeaderRowItem:function(){this.headerRowItem={tg_index:-1,tg_view_index:-1},this.viewAllColumns.forEach((t=>{d.hasOwn(t,"id")&&(this.headerRowItem[t.id]=t.name)}))},initGroupColumnsWidth:function(){this.viewGroupColumns.forEach((t=>{let e=0;t.subs.forEach((t=>{this.isInvisible(t)||(e+=t.tg_width)})),t.tg_width=e}))},initGroupColumnsLayer:function(t){const e=this.columnsInfo.maxLevel;this.viewColumns.forEach((function(t){t.tg_layer=e,t.tg_parent&&(t.tg_parent.tg_layer=e-1)})),this.viewGroupColumns.forEach((function(t){const e=t.tg_layer,i=t.tg_parent;if(i){let t=e-1;d.isNum(i.tg_layer)&&(t=Math.min(t,i.tg_layer)),i.tg_layer=t}})),this.initColumnRowspanHandler(t,0)},initColumnRowspanHandler:function(t,e){t.forEach((t=>{const i=this.initColumnCombinationHandler(t,e);t.tg_group&&this.initColumnRowspanHandler(t.subs,e+i)}))},initColumnCombinationHandler:function(t,e){const i=[],o=t.tg_layer;for(;e<=o;)i.push(e),e+=1;i.reverse();const n=i.length;let s="";return n>1&&(s=i.join("")),t.tg_combination=s,n}},it={},ot={name:"",minWidth:81,maxWidth:300},nt=function(t){return null==t},st=function(t,e){const i=nt(t),o=nt(e);return i&&o?0:i?1:o?-1:void 0},rt=function(t,e){return t.tg_index>e.tg_index?1:-1},lt=function(t,e){return rt(t,e)},ht=function(t,e){if("string"==typeof t&&"string"==typeof e){const i=t.toUpperCase(),o=e.toUpperCase();if(i!==o)return i>o?-1:1}return t>e?-1:1},at=function(t,e,i,o){return t?-1:e?1:ht(i,o)},ct=function(t,e){const i="number"==typeof t,o="number"==typeof e;return i&&o?t>e?-1:1:at(i,o,t,e)},dt=function(t,e){const i=new Date(t),o=new Date(e),n=d.isDate(i),s=d.isDate(o);if(n&&s){const t=i.getTime(),e=o.getTime();if(t===e)return;return t>e?-1:1}return at(n,s,t,e)},ut=function(t,e){const i="boolean"==typeof t,o="boolean"==typeof e;return i&&o?t>e?-1:1:at(i,o,t,e)},gt=function(t,e,i,o){const n=t[i.sortField],s=e[i.sortField],r=st(n,s);if("number"==typeof r)return 0===r?lt(t,e):i.sortBlankFactor*r;if(n!==s&&"function"==typeof o){const t=o(n,s);if(d.isNum(t))return i.sortFactor*t}return lt(t,e)},ft={blankValue:st,equal:lt,index:rt,value:gt,diffType:at,string:function(t,e,i){return gt(t,e,i,ht)},stringValue:ht,number:function(t,e,i){return gt(t,e,i,ct)},numberValue:ct,date:function(t,e,i){return gt(t,e,i,dt)},dateValue:dt,boolean:function(t,e,i){return gt(t,e,i,ut)},booleanValue:ut};const pt={initOptionsHandler:function(){return this.options=this.generateOptions(),this.initOptionsFormatters(),this.initOptionsSort(),this.initOptionsFrozen(),this.initOptionsScrollbar(),this.initOptionsContainer(),this.initBindWindowResize(),this.initBindContainerResize(),this},generateOptions(){const t={className:e.NS,theme:e.ID,headerVisible:!0,rowHeight:32,rowFilter:null,rowFilteredSort:null,rowNotFound:"",rowMoveCrossLevel:!0,rowCacheLength:0,rowProps:it,columnTypes:{tree:{type:"tree",formatter:"tree",width:230,minWidth:120,maxWidth:810},number:{type:"number",align:"right"},date:{type:"date",align:"right"},name:"tree"},columnCacheLength:0,columnProps:ot,collapseAllOnInit:null,collapseAllVisible:!0,selectAllOnInit:null,selectVisible:!1,selectAllVisible:!0,selectMultiple:!0,selectColumn:{private:!0,id:"tg-column-select",name:"",formatter:"select",headerClassMap:"tg-header-select",classMap:"tg-cell-select",width:36,align:"center",resizable:!1,sortable:!1,exportable:!1},rowDragCrossLevel:!0,rowDragVisible:!1,rowDragColumn:{private:!0,id:"tg-column-row-drag",name:"",formatter:"rowDrag",headerClassMap:"tg-header-row-drag",classMap:"tg-cell-row-drag",align:"center",width:36,resizable:!1,sortable:!1,exportable:!1},rowNumberWidth:36,rowNumberFilter:null,rowNumberVisible:!1,rowNumberColumn:{private:!0,id:"tg-column-row-number",name:"",formatter:"rowNumber",headerClassMap:"tg-header-row-number",classMap:"tg-cell-row-number",align:"center",maxWidth:100,sortable:!1,exportable:!1},blankColumn:{private:!0,id:"tg-column-blank",name:"",formatter:"blank",headerClassMap:"tg-header-blank",classMap:"tg-cell-blank",width:0,minWidth:0,maxWidth:4096,resizable:!1,sortable:!1,exportable:!1},sortField:"",sortAsc:!0,sortBlankValueBottom:!0,sortComparers:ft,sortOnInit:!1,sortIndicator:"h",highlightKeywords:{textKey:"tg_text_",textGenerator:null,highlightKey:"tg_highlight_",highlightPre:"",highlightPost:""},frozenRow:-1,frozenRowMax:10,frozenRowHoverable:!1,frozenBottom:!1,frozenColumn:-1,frozenColumnMax:10,frozenRight:!1,scrollbarSize:12,scrollbarSizeH:null,scrollbarSizeV:null,scrollbarRound:!1,scrollbarFade:!1,scrollbarFadeTimeout:1e3,scrollbarType:"auto",scrollPaneMinWidth:30,scrollPaneGradient:30,autoHeight:!1,textSelectable:!1,bindWindowResize:!1,bindContainerResize:!1},i=this.generateThemeOptions();return d.merge(t,i,this.constructorOptions,this.customOptions,this.dataOptions)},generateThemeOptions(){const t=this.pickOptions("theme").pop();if(t)return this.getThemeOptions(t)},pickOptions(t){return[this.constructorOptions,this.customOptions,this.dataOptions].map((e=>e&&e[t])).filter((t=>t))},initOptionsFormatters(){let t;const e=this.pickOptions("formatters");e.length&&(t=d.merge.apply(null,e)),this.formatters=d.merge(Y,t,this.customFormatters),this.nullFormatter=this.getFormatter("null")},initOptionsSort(){"v"!==this.options.sortIndicator&&(this.options.sortIndicator="h")},initOptionsFrozen:function(){const t=this.options;this.frozenInfo={column:-1,row:-1,columns:0,rows:0,bottom:Boolean(t.frozenBottom),right:Boolean(t.frozenRight)};let e=d.toNum(t.frozenColumn,!0);e=d.clamp(e,-1,t.frozenColumnMax),e>-1&&!this.frozenInfo.right&&(t.selectVisible&&(e+=1),t.rowDragVisible&&(e+=1),t.rowNumberVisible&&(e+=1)),this.frozenInfo.column=e,e>-1?this.frozenInfo.columns=e+1:(this.frozenInfo.columns=0,this.frozenInfo.right=!1);let i=d.toNum(t.frozenRow,!0);i=d.clamp(i,-1,t.frozenRowMax),this.frozenInfo.row=i,i>-1?this.frozenInfo.rows=i+1:(this.frozenInfo.rows=0,this.frozenInfo.bottom=!1)},initOptionsScrollbar:function(){const t=this.options;("auto"===t.scrollbarType&&d.isTouchDevice()||["touch","mobile"].includes(t.scrollbarType))&&(t.scrollbarFade=!0,t.scrollbarSize=6,t.scrollbarRound=!0);const e=d.toNum(t.scrollbarSize);this.scrollbarSizeH=e,d.isNum(t.scrollbarSizeH)&&(this.scrollbarSizeH=t.scrollbarSizeH),this.scrollbarSizeV=e,d.isNum(t.scrollbarSizeV)&&(this.scrollbarSizeV=t.scrollbarSizeV)},initOptionsContainer:function(){this.$container.attr("id",this.id);const t=this.options;this.$container.removeClass();const i=[e.NS,this.id,`tg-${t.theme}`,t.className];t.textSelectable||i.push("tg-text-unselectable"),d.isTouchDevice()&&i.push("tg-touch-device"),this.$container.addClass(d.classMap(i))}},mt={initBindWindowResize:function(){this.unbindWindowResize(),this.options.bindWindowResize&&(this.windowResizeEvents={resize:{handler:t=>{this.resize()}}},d.bindEvents(this.windowResizeEvents,window))},unbindWindowResize:function(){d.unbindEvents(this.windowResizeEvents)},initBindContainerResize:function(){if(this.unbindContainerResize(),!this.options.bindContainerResize||!this.holder)return;if("undefined"==typeof ResizeObserver)return;this.resizeObserver=new ResizeObserver((t=>{var e;(e=this.holder,Boolean(e.offsetWidth||e.offsetHeight||e.getClientRects().length))&&this.resize()})),this.resizeObserver.observe(this.holder)},unbindContainerResize:function(){this.resizeObserver&&(this.resizeObserver.disconnect(),this.resizeObserver=null)}},bt={initRowsHandler:function(){this.rows=this.data.rows,this.rowsInfo=this.initTreeInfo(this.rows,this.frozenInfo.row)},getRows:function(){return this.rows},getViewRows:function(){return this.viewRows},createViewRows:function(){this.initRowFilterHandler();const t=[],e=this.getRowNumberFilter();let i=1;const o=(t,o)=>{if(e.call(this,t,o))return t.tg_row_number=i,void(i+=1);t.tg_row_number=""},n=(e,i,s)=>{if(!d.isList(e))return;let r,l=0;e.forEach((e=>{if(this.isInvisible(e))return;e.tg_list_index=l,l+=1,e.tg_list_last=!1,r=e,this.gridRowItemHandler(e),o(e,l),s||t.push(e);const i=s||e.tg_group&&e.collapsed;n(e.subs,e,i)})),r&&(r.tg_list_last=!0)};n(this.rows);let s,r=0;return this.initViewList(t,((t,e)=>{t.tg_top=r,this.initRowHeight(t),r+=this.getRowHeight(t),t.tg_group_line=!1,t.collapsed&&(t.tg_group_line=!0),s&&(t.tg_group||t.tg_level{const i=this.getRowItem(t);if(!i)return;const s=o[e]||n;i.height=s,delete i.tg_height,this.initRowHeight(i),this.flushRowFrom(i.tg_view_index)})),this.render("rows"),this},initRowFilterHandler:function(){const t=this.options.rowFilter;if("function"!=typeof t)return;if(this.forEachRow(((e,i,o)=>{if(e.tg_invisible)return;const n=!t.call(this,e,i,o);if(e.tg_filtered=n,!n){let t=e;for(;t.tg_parent;)t.tg_parent.tg_filtered=!1,t=t.tg_parent}})),this.sortColumn)return;let e=this.options.rowFilteredSort;if("function"==typeof e&&(e=e.call(this)),!e)return;"string"==typeof e&&(e={sortField:e,sortAsc:this.options.sortAsc});const i=e.sortField||e.id;i&&this.sortRows(i,e)},highlightKeywordsFilter:function(t,e,i){const{textKey:o,textGenerator:n,highlightKey:s}=this.options.highlightKeywords;if(e.forEach((e=>{t[`${s}${e}`]=null})),!i)return!0;const r=`${i}`.trim().toLowerCase().split(/\s+/g).filter((t=>t));if(!r.length)return!0;let l=!1;const h=(e,i)=>(/<\/?[a-z][\s\S]*>/i.test(e)&&(e=((e,i)=>{const n=`${o}${i}`,s=t[n];if(s)return s;const r=document.createElement("div");r.innerHTML=e;const l=r.innerText;return t[n]=l,l})(e,i)),(t=>{const e=t.toLowerCase();let i=0;for(const t of r){const o=e.indexOf(t,i);if(-1===o)return;i=o+t.length}return!0})(e));let a=function(t,e){return t[e]};return"function"==typeof n&&(a=n),e.forEach((e=>{const i=a(t,e);if(null==i)return;const o=`${i}`.trim();if(!o)return;const n=h(o,e);n&&(t[`${s}${e}`]=n,l=!0,this.highlightKeywords=r)})),l},highlightKeywordsHandler:function(){const{highlightCells:t}=this.renderSettings;if(!t.length)return;const e=this.highlightKeywords;e&&d.nextTick((()=>{t.forEach((t=>{const i=document.createTreeWalker(t,NodeFilter.SHOW_TEXT),o=[];let n=i.nextNode();for(;n;)o.push(n),n=i.nextNode();o.length&&this.highlightTextNodes(o,e)}))}))},highlightTextNodes:function(t,e){const{highlightPre:i,highlightPost:o}=this.options.highlightKeywords;let n=0;const s=()=>(n>=e.length&&(n=0),e[n++]);let r=s();t.forEach((t=>{const e=t.textContent,n=e.toLowerCase(),l=[];let h=0;const a=e.length;let c=!1;for(;h{if(e.selected){if(t)return void(e.selected=!1);t=e}}))}const t=this.options.selectAllOnInit;!0!==t?!1===t&&this.updateAllRowsSelected(!1):this.updateAllRowsSelected(!0)},updateAllRowsSelected:function(t){this.forEachSelectableRow((e=>{e.selected=t}))},initCollapseAllOnInitHandler:function(){const t=this.options.collapseAllOnInit;!0!==t?!1===t&&this.updateAllRowsCollapsed(!1):this.updateAllRowsCollapsed(!0)},getToBeAddedItemList:function(t){const e=[];return d.toList(t).forEach((t=>{t&&"object"==typeof t?e.push(t):void 0!==t&&e.push({name:t})})),e},getToBeAddedParentSubs:function(t,e){return t?(t.subs||(t.subs=[]),t.subs):e},getToBeAddedPositionIndex:function(t,e){const i=e.length;return d.isNum(t)&&t>=0&&t<=i?Math.round(t):i},generateDataSnapshot:function(t){if(!t||"object"!=typeof t)return t;const e=this.cleanTreeList(t.rows),i=this.cleanTreeList(t.columns);return this.convertNumberType(e,i),t.rows=e,t.columns=i,t},cleanTreeList:function(t){if(!d.isList(t))return[];const e=(t,i)=>{i.forEach((i=>{if(!i||"object"!=typeof i)return void t.push({});const o=this.getItemSnapshot(i),n=i.subs;Array.isArray(n)&&(o.subs=[],e(o.subs,n)),t.push(o)}))},i=[];return e(i,t),i},convertNumberType:function(t,e){const i=[];d.forEachTree(e,(function(t){"number"===t.type&&t.id&&i.push(t.id)})),i.length&&d.forEachTree(t,(function(t){i.forEach((function(e){t[e]=d.convertNum(t[e])}))}))}},vt={setDefaultLoading:function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};if(!t)return;const i=t.style;e.size&&(i.width=e.size,i.height=e.size),e.color&&(i.color=e.color),e.size||e.color||t.removeAttribute("style"),e.fast?t.classList.add("tg-loading-fast"):t.classList.remove("tg-loading-fast")},getDefaultLoading:function(t){return this.setDefaultLoading(this.$defaultLoading,t),this.$defaultLoading},getLoadingHolder:function(){return this.$container?this.$container.find(".tg-loading"):w()},setLoading:function(t){if(!this.$container)return this;this.$defaultLoading||(this.$defaultLoading=this.$container.find(".tg-loading-default").get(0));const e=this.getLoadingHolder().get(0);return"function"==typeof t&&(t=t.call(this,e)),d.isObject(t)&&(t=this.getDefaultLoading(t)),t||(t=this.getDefaultLoading()),this.renderNodeContent(e,t),this},showLoading:function(){return this.getLoadingHolder().show(),this},hideLoading:function(){return this.getLoadingHolder().hide(),this}},Ht={showMask:function(t){if(!this.hasMask||t){const e=this.$container.find(".tg-mask"),i=e.get(0);if(t&&i){const e=d.styleMap(t);e&&(i.style.cssText=e)}e.show(),this.hasMask=!0}return this},hideMask:function(){return this.hasMask&&(this.$container.find(".tg-mask").hide(),this.hasMask=!1),this}},yt={renderNodeContent:function(t,e){if(t){if(e&&e.nodeType)return this.emptyNode(t),void t.appendChild(e);if(Array.isArray(e))return this.emptyNode(t),void e.forEach((e=>{e&&e.nodeType&&t.appendChild(e)}));void 0===e&&(e=""),t.innerHTML=e}},emptyNode:function(t){if(t)for(;t.firstChild;)t.removeChild(t.firstChild)},removeNode:function(t){t&&t.parentNode&&t.parentNode.removeChild(t)},appendNode:function(t,e){t&&e&&t.appendChild(e)},createElement:function(t,e,i){const o=document.createElement(t);e&&Object.keys(e).forEach((function(t){const i=e[t];void 0!==i&&o.setAttribute(t,i)})),d.isArray(i)||(i=[i]);let n="";return i.forEach((function(t){t&&t.nodeType?o.appendChild(t):void 0!==t&&(n+=t)})),n&&(o.innerHTML=n),o},find:function(t,e){return w(e||this.$container).find(t)},getRowNodes:function(t){const e=this.getRowItem(t);if(e)return this.getRowNodesByIndex(e.tg_view_index)},getCellNode:function(t,e){const i=this.getRowItem(t);if(!i)return;const o=this.getColumnItem(e);return o?this.getCellNodeByIndex(i.tg_view_index,o.tg_view_index):void 0},getHeaderItemNode:function(t){const e=this.getColumnItem(t);if(e)return this.getHeaderCache(e.tg_view_index)},getColumnHeaderNode:function(t){const e=this.getHeaderItemNode(t);if(e)return e.querySelector(".tg-column-header")}},Ct={render:function(){this.asyncRender||(this.asyncRender=d.microtask(this.renderSync)),this.asyncRender.apply(this,arguments)},renderSync:function(){this.renderStartedTimestamp=Date.now();const t=this.generateRenderSettings.apply(this,arguments);return this.renderSettings=t,"all"===t.type?(this.flushBody(),this.initHandler(),this.renderHeader(),this.updateViewRowsAndSize(),this.renderBody(),this):"columns"===t.type?(this.flushBody(),this.initColumnsHandler(),this.renderHeader(),this.updateViewRowsAndSize(),this.renderBody(),this):"rows"===t.type?(this.updateViewRowsAndSize(),this.renderBody(),this):"resize"===t.type?(this.resizeHandler(),this.renderBody(),this):(this.renderBody(),this)},generateRenderSettings:function(t){const e={type:this.renderType,scrollLeft:null,scrollTop:null,scrollColumn:null,scrollRow:null,highlightCells:[]};return"string"==typeof t?e.type=t:t&&Object.assign(e,t),this.headerCreated||(e.type="all"),e},renderBody:function(){this.scrollOnInit(),this.scrollTopOffset=this.scrollPane.getScrollTopOffset();const t=this.getViewport();return this.viewport=t,this.flushWithViewport(),this.previousScrollTopOffset!==this.scrollTopOffset&&(this.previousScrollTopOffset=this.scrollTopOffset,this.updateRowCacheTopOffset()),this.renderRows(t.rows),this.renderCells(t.rows,t.columns),this.renderUpdatedTimestamp=Date.now(),this.renderDuration=this.renderUpdatedTimestamp-this.renderStartedTimestamp,this.trigger(C.onUpdated,t),this.firstUpdated||(this.firstUpdated=!0,this.trigger(C.onFirstUpdated,t)),this.layoutEventHandler(),this.resizeEventHandler(),this.highlightKeywordsHandler(),this.renderSettings=null,this.renderType=null,this},rerender:function(){return this.render("all"),this}},Rt={resize:function(){return this.asyncResize||(this.asyncResize=d.throttle(this.resizeSync,100)),this.asyncResize.apply(this,arguments),this},resizeSync:function(){return this.headerCreated?(this.resizeHolderHandler.apply(this,arguments),this.firstUpdated&&this.isHolderInvisible()||this.render("resize"),this):this},resizeHolderHandler(t,e){if(0!==arguments.length)return 1===arguments.length?t&&"object"==typeof t?void this.$holder.css(t):void this.$holder.css({width:t}):void this.$holder.css({width:t,height:e})},isHolderInvisible(){const t=this.$holder.width(),e=this.$holder.height();return!t||!e},resizeHandler:function(){this.containerWidth=this.$container.width(),this.containerHeight=this.$container.height(),this.headerWidth=this.containerWidth,this.bodyWidth=this.containerWidth,this.updateTotalColumnsWidth(),this.resizeHeaderHandler(),this.resizeBodyHandler()},layoutEventHandler:function(){const t=this.previousLayout||{},e={headerWidth:this.headerWidth,headerHeight:this.headerHeight,bodyWidth:this.bodyWidth,bodyHeight:this.bodyHeight};Object.values(e).join("")!==Object.values(t).join("")&&(this.previousLayout=e,this.trigger(C.onLayout,d.merge({previous:t},e)))},resizeEventHandler:function(){const t=this.previousSize||{},e={width:this.containerWidth,height:this.containerHeight};Object.values(e).join("")!==Object.values(t).join("")&&(this.previousSize=e,this.trigger(C.onResize,d.merge({previous:t},e)))},resizeHeaderHandler:function(){this.initHeaderLayerHeight();const t=this.options;t.autoHeight&&this.viewRows.length>5e3&&(t.autoHeight=!1),this.headerHeight=0,t.headerVisible&&(this.containerHeight>0||t.autoHeight)&&this.updateHeaderTableHeight(),this.$headerFrame.css({width:this.headerWidth,height:this.headerHeight})},updateHeaderTableHeight:function(){let t=0;Object.keys(this.headerLayerHeight).forEach((e=>{t+=this.headerLayerHeight[e]}));const e=this.$headerL.find(".tg-header-table"),i=this.$headerR.find(".tg-header-table");e.css({height:t}),i.css({height:t}),this.headerHeight=t},resizeBodyHandler:function(){this.updateScrollState(),this.bodyHeight=this.containerHeight-this.headerHeight,this.$bodyFrame.css({width:this.bodyWidth,height:this.bodyHeight}),this.updatePaneWidth(),this.updatePaneHeight(),this.updateCanvasWidth(),this.updateCanvasHeight(),this.updateScrollPane(),this.updateCssRules()},updatePaneWidth:function(){let t=this.bodyWidth,e=0;if(this.frozenInfo.columns){const i=this.getScrollbarWidth();this.frozenInfo.right?(e=this.columnsWidthR+i,t=this.bodyWidth-e):(t=this.columnsWidthL,e=this.bodyWidth-t),this.scrollPaneHidden&&(this.frozenInfo.right?(t<=0&&(t=0),e=Math.max(0,this.bodyWidth-t)):(e3&&void 0!==arguments[3])||arguments[3];const n=this.getToBeAddedItemList(t);if(!n.length)return!1;let s;if(null!=e&&(s=this.getRowItem(e),!s))return!1;const r=this.getToBeAddedParentSubs(s,this.rows),l=this.getToBeAddedPositionIndex(i,r),h=[l,0].concat(n);r.splice.apply(r,h),this.initRowsHandler(),s?(s.collapsed=!1,this.flushRowFrom(s.tg_view_index+l)):this.flushRowFrom(l),this.onNextUpdated((function(){this.trigger(C.onRowAdded,n)}));const a={type:"rows"};return o&&(a.scrollRow=n[n.length-1]),this.render(a),!0},deleteRow:function(t){const e=d.toList(t),i=[];if(e.forEach((t=>{const e=this.getRowItem(t);e&&i.push(e)})),!i.length)return!1;const o=this.removeRowsHandler(i);this.initRowsHandler();const n=this.getRemovedMinIndex(o);return this.flushRowFrom(n),this.onNextUpdated((function(){this.trigger(C.onRowRemoved,i)})),this.render("rows"),!0},getRemovedMinIndex:function(t){let e=0;const i=t[t.length-1];if(this.isInvisible(i))return e;e=i.tg_view_index,e>0&&(e-=1);let o=i.tg_parent;for(;o;)o.collapsed&&(e=o.tg_view_index),o=o.tg_parent;return e},removeRowsHandler:function(t){const e=[].concat(t);e.sort((function(t,e){return e.tg_index-t.tg_index}));const i=[];return e.forEach((t=>{this.getRowParentSubs(t).splice(t.tg_sub_index,1),i.push(t)})),i}},Tt={renderCollapseAllState:function(){this.hasTreeColumn&&(this.asyncRenderCollapseAllState||(this.asyncRenderCollapseAllState=d.microtask(this.renderCollapseAllStateSync)),this.asyncRenderCollapseAllState.apply(this,arguments))},renderCollapseAllStateSync:function(){const t=this.$header.find(".tg-tree-header");this.rowsInfo.isTree?t.addClass("tg-tree-header-indent"):t.removeClass("tg-tree-header-indent"),this.renderCollapseAllIcon()},checkCollapseAllState:function(t){if(t!==this.allRowsCollapsed){if(t){let t=0;const e=this.rows.length;for(;t{if(e.tg_group&&e.tg_subs_length&&e.collapsed)return t=!0,!1})),t)return}this.allRowsCollapsed=t,this.renderCollapseAllIcon()}},expandAllRows:function(){return this.renderAllRowsCollapsed(!1)},collapseAllRows:function(){return this.renderAllRowsCollapsed(!0)},toggleAllRows:function(){return this.allRowsCollapsed?this.expandAllRows():this.collapseAllRows()},renderAllRowsCollapsed:function(t){const e=this.updateAllRowsCollapsed(t);return e.length?(this.flushBody(),this.onNextUpdated((()=>{this.renderCollapseAllIcon(),t?this.trigger(C.onRowCollapsed,e):this.trigger(C.onRowExpanded,e)})),this.render("rows"),this):this},updateAllRowsCollapsed:function(t){this.allRowsCollapsed=t;const e=[];return this.forEachRow((i=>{i.subs&&i.tg_subs_length&&this.isCollapsedChanged(i,t)&&(i.collapsed=t,e.push(i))})),e},expandRow:function(t){const e=this.getRowItem(t);return e?this.isEmptyGroup(e)?(this.trigger(C.onRowSubsRequest,e),this):this.isCollapsedChanged(e,!1)?(e.collapsed=!1,this.flushRowFrom(e.tg_view_index),this.renderCollapseIcon(e),this.onNextUpdated((()=>{this.checkCollapseAllState(!1),this.trigger(C.onRowExpanded,e)})),this.render("rows"),this):this:this},collapseRow:function(t){const e=this.getRowItem(t);return e&&e.subs&&e.tg_subs_length&&this.isCollapsedChanged(e,!0)?(e.collapsed=!0,this.flushRowFrom(e.tg_view_index),this.renderCollapseIcon(e),this.onNextUpdated((()=>{this.checkCollapseAllState(!0),this.trigger(C.onRowCollapsed,e)})),this.render("rows"),this):this},toggleRow:function(t){const e=this.getRowItem(t);return e?(e.collapsed?this.expandRow(e):this.collapseRow(e),this):this},expandRowLevel:function(t){t=d.toNum(t,!0);const e=[],i=[];return this.forEachRow((o=>{o.subs&&o.tg_subs_length&&(o.tg_level<=t?this.isCollapsedChanged(o,!1)&&(o.collapsed=!1,i.push(o)):this.isCollapsedChanged(o,!0)&&(o.collapsed=!0,e.push(o)))})),e.length||i.length?(this.flushBody(),this.onNextUpdated((()=>{e.length&&this.trigger(C.onRowCollapsed,e),i.length&&this.trigger(C.onRowExpanded,i)})),this.render("rows"),this):this},renderCollapseAllIcon:function(){if(!this.options.collapseAllVisible||!this.hasTreeColumn)return;const t=this.$header.find(".tg-tree-icon-all");this.renderTreeIcon(t,this.allRowsCollapsed)},renderCollapseIcon:function(t){if(!this.headerCreated)return;const e=this.getRowNodesByIndex(t.tg_view_index);if(!e)return;const i=e.find(".tg-tree-icon");this.renderTreeIcon(i,t.collapsed)},renderTreeIcon:function(t,e){t&&(e?t.removeClass("tg-tree-icon-expanded").addClass("tg-tree-icon-collapsed"):t.removeClass("tg-tree-icon-collapsed").addClass("tg-tree-icon-expanded"))}},Lt={rowDragStartHandler:function(t,e){this.removeSortColumn();const i=e.rowItem;if(!i)return;const o=this.getRowNodesByIndex(i.tg_view_index);o&&(e.dragCloneNodes=this.getRowDragCloneNodes(o),e.dropPlaceholder=this.getRowDropPlaceholder(o),e.dragStartTop=this.getRowTop(i),e.dragRowHeight=this.getRowHeight(i),e.dragStartScrollTop=this.scrollTop,e.dragMaxScrollTop=this.scrollPane.getMaxScrollTop(),this.trigger(C.onRowDragged,{e:t,rowItem:i}),this.isDefaultPrevented(t)||("touch"===e.type&&d.preventDefault(e.e),this.setRowState(i,"dragging"),this.rowDropListHandler(e),this.updateDragCloneRowPosition(e)))},rowDragMoveHandler:function(t,e){"touch"===e.type&&d.preventDefault(e.e),this.updateDragCloneRowPosition(e),this.updateDragPlaceholderPosition(e),this.rowDragAutoScrollHandler(e)},rowDragEndHandler:function(t,e){"touch"===e.type&&(this.protectedItem=null,d.preventDefault(e.e)),this.autoScrollStop(),this.setRowState(e.rowItem,"dragging",!1),e.dragCloneNodes&&(e.dragCloneNodes.remove(),e.dragCloneNodes=null),e.dropPlaceholder&&(e.dropPlaceholder.remove(),e.dropPlaceholder=null),e.changed&&this.rowDropHandler(e)},updateDragCloneRowPosition:function(t){const e=this.scrollTop-t.dragStartScrollTop,i=t.dragStartTop+t.offsetY+e,o=i-this.scrollTopOffset;t.dragCloneNodes&&t.dragCloneNodes.css("top",o).show(),t.dragCurrentPosition=i+.5*t.dragRowHeight},getRowDragCloneNodes:function(t){const e=w();return t.each((function(t){const i=w(t),o=i.clone();o.appendTo(i.parent()),e.add(o)})),e.addClass("tg-clone").hide(),e},getRowDropPlaceholder:function(t){const e=w();return t.each((function(t){const i=w(t),o=w("
    ").addClass("tg-row-placeholder").hide(),n=i.parent();n.find(".tg-row-placeholder").remove(),o.appendTo(n),e.add(o)})),e},updateDragPlaceholderPosition:function(t){this.rowDropItemHandler(t);const e=t.dropItem;if(!e)return;let i=t.dropPosition-1;t.dropBottom?e.tg_view_last&&(i=t.dropPosition-2):e.tg_view_index-this.frozenInfo.rows==0&&(i=t.dropPosition);const o=i-this.scrollTopOffset;t.dropPlaceholder&&t.dropPlaceholder.css("top",o).show()},rowDragAutoScrollHandler:function(t){const e=t.dragCurrentPosition,i=this.scrollTop,o=this.bodyHeight-this.frozenRowsHeight,n=i+o,s=this.options.rowHeight,r=Math.min(3*s,.5*o);if(!(rn-r){const i=e-(n-r),o=this.getAutoScrollOffset(i,r);this.autoScrollStart(o,t)}else this.autoScrollStop()},getAutoScrollOffset:function(t,e){return Math.floor(t/e*20)},autoScrollStop:function(){this.autoScrollMotion&&(this.autoScrollMotion.destroy(),this.autoScrollMotion=null)},autoScrollStart:function(t,e){this.autoScrollStop();const i=e.dragMaxScrollTop;this.autoScrollMotion=new D,this.autoScrollMotion.bind(D.EVENT.MOTION_MOVE,(()=>{const o=d.clamp(this.scrollTop+t,0,i);o!==this.scrollTop?(this.setScrollTop(o),this.updateDragCloneRowPosition(e),this.updateDragPlaceholderPosition(e)):this.autoScrollStop()})),this.autoScrollMotion.once(D.EVENT.MOTION_END,(()=>{this.autoScrollStart(t,e)})),this.autoScrollMotion.start({duration:200})},rowDropListHandler:function(t){const e=this.getRowDropList(t);if(!d.isList(e))return;const i=t.rowItem,o=e.filter((t=>{if(t===i)return!1;if(t.tg_frozen)return!1;let e=t.tg_parent;for(;e;){if(e===i)return!1;e=e.tg_parent}return!0}));if(!d.isList(o))return;const n=[];o.forEach((t=>{const e=this.getRowTop(t),i=this.getRowHeight(t);n.push({rowItem:t,position:e}),n.push({rowItem:t,position:e+i-1,dropBottom:!0})})),t.dropList=n},getRowDropList:function(t){const e=this.options.rowDragCrossLevel;return e?"function"==typeof e?e.call(this,t):this.viewRows:this.getRowParentSubs(t.rowItem)},rowDropItemHandler:function(t){const e=t.dropList;if(!e)return;const i=t.dragCurrentPosition;let o=Number.MAX_VALUE;for(let n=0,s=e.length;no)break;o=r,t.dropItem=s.rowItem,t.dropBottom=s.dropBottom,t.dropPosition=s.position}},rowDragDropPositionHandler:function(t,e,i){const o=this.getRowParentSubs(t),n=t.tg_sub_index;let s,r;return this.isDropIntoGroupFirstChild(e,i)?(s=e.subs,r=0):(s=this.getRowParentSubs(e),r=e.tg_sub_index,o===s&&n{this.trigger(C.onRowDropped,n)})),this.render({type:"rows",scrollRow:i})}},It={getMoveFocusRow:function(t,e){let i=t[0];return e>0&&(i=t[t.length-1]),i},getMoveLengthInList:function(t,e){let i=0;return t.forEach((t=>{this.getRowParentSubs(t)===e&&(i+=1)})),i},getMoveInfo:function(t,e,i){const o=this.getRowParentSubs(i);let n=i.tg_sub_index+e;const s=i.tg_parent;if(s&&this.options.rowMoveCrossLevel){const e=0,i=s.tg_subs_length-1;if(ni){const e=n-i;return this.getMoveInfo(t,e,s)}}if(e>0){n-=this.getMoveLengthInList(t,o)-1}return n=d.clamp(n,0,o.length),{list:o,index:n}},moveRowsHandler:function(t,e){(t=this.removeRowsHandler(t)).reverse();const i=this.getMoveFocusRow(t,e),o=this.getMoveInfo(t,e,i),n=[o.index,0].concat(t);return o.list.splice.apply(o.list,n),this.initRowsHandler(),this.onNextUpdated((function(){this.scrollRowIntoView(i),this.trigger(C.onRowMoved,t)})),this.removeSortColumn(),this.update(),!0},moveRows:function(t,e){t=d.toList(t);const i=[];return t.forEach((t=>{const e=this.getRowItem(t);e&&i.push(e)})),!!i.length&&(!(i.length>=this.getRowsLength())&&(0!==(e=d.toNum(e,!0))&&this.moveRowsHandler(i,e)))},moveRowsUp:function(t){return this.moveRows(t,-1)},moveRowsDown:function(t){return this.moveRows(t,1)},moveRowsToTop:function(t){return this.moveRows(t,-this.getRowsLength(!0))},moveRowsToBottom:function(t){return this.moveRows(t,this.getRowsLength(!0))},moveSelectedRowsUp:function(){return this.moveRows(this.getSelectedRows(),-1)},moveSelectedRowsDown:function(){return this.moveRows(this.getSelectedRows(),1)},moveSelectedRowsToTop:function(){return this.moveRows(this.getSelectedRows(),-this.getRowsLength(!0))},moveSelectedRowsToBottom:function(){return this.moveRows(this.getSelectedRows(),this.getRowsLength(!0))}},Et={getSelectedRow:function(){let t=null;return this.forEachSelectableRow((function(e){if(e.selected)return t=e,!1})),t},getSelectedRows:function(){const t=[];return this.forEachSelectableRow((function(e){e.selected&&t.push(e)})),t.length>1&&t.sort((function(t,e){const i=t.tg_selected_index,o=e.tg_selected_index;return i>o?1:i0&&void 0!==arguments[0])||arguments[0];if(t=Boolean(t),this.globalSelectedIndex=0,t&&!this.options.selectMultiple)return this;const e=this.getAllSelectedChangedList(t);return e.length?(this.updateRowsSelectedState(e),this):this},setRowSelected:function(){return(this.options.selectMultiple?this.setRowMultipleSelected:this.setRowSingleSelected).apply(this,arguments)},setRowSingleSelected:function(t){const e=this.getRowItem(t);if(!e)return this;if(!this.isRowSelectable(e))return this;if(e.selected)return this;const i=[],o=this.getSelectedRow();return o&&o.selected&&i.push(o),e.selected||i.push(e),i.length?(this.updateRowsSelectedState(i),this):this},setRowMultipleSelected:function(t,e){if(0===arguments.length)return this;if(1===arguments.length&&!1===arguments[0])return this.selectAll(!1);const i=this.toRowItemList(t,(t=>this.isRowSelectable(t)));return i.length?!1===e?(this.setRowListUnselected(i),this):d.hasShiftKey(e)&&1===i.length?(this.setRowBetweenListSelected(i[0]),this):(this.updateRowsSelectedState(i),this):this},setRowListUnselected:function(t){const e=this.getSelectedChangedList(t,!1);e.length&&this.updateRowsSelectedState(e)},setRowBetweenListSelected:function(t){const e=this.previousSelectedRow;if(e&&e!==t){const i=this.getBetweenSelectedChangedList(e,t);if(!i.length)return;this.updateRowsSelectedState(i,!0)}else this.updateRowsSelectedState([t])},getAllSelectedChangedList:function(t){const e=[];return this.forEachSelectableRow((i=>{this.isSelectedChanged(i,t)&&e.push(i)})),e},getSelectedChangedList:function(t,e){const i=[];return t.forEach((t=>{this.isSelectedChanged(t,e)&&i.push(t)})),i},getBetweenSelectedChangedList:function(t,e){const i=t.tg_index,o=e.tg_index,n=[];if(i=o;)n.push(t),t--}return this.toRowItemList(n,(t=>this.isRowSelectable(t)&&!t.selected))},updateRowsSelectedState:function(t,e){let i;t.forEach((t=>{const e=!t.selected;t.selected=e,e&&(t.tg_selected_index=this.globalSelectedIndex++,i=t),this.renderRowSelectedState(t)})),e||(this.previousSelectedRow=i),this.renderSelectAllState(),this.onNextUpdated((()=>{this.trigger(C.onSelectChanged,t)})),this.render()},renderRowSelectedState:function(t){const e=t.tg_view_index;this.viewport.rows.includes(e)&&(this.renderRowState(t,"selected"),this.flushCell(e,this.selectColumn.tg_view_index))},renderSelectAllState:function(){this.isSelectAllVisible()&&(this.asyncRenderSelectAllState||(this.asyncRenderSelectAllState=d.microtask(this.renderSelectAllStateSync)),this.asyncRenderSelectAllState.apply(this,arguments))},renderSelectAllStateSync:function(){const t=this.getSelectAllState();if(t===this.previousSelectAllState)return;this.previousSelectAllState=t;const e=this.selectColumn,i=w(this.getColumnHeaderNode(e)).find(".tg-select-icon-all");i.length&&(i.removeClass("tg-selected tg-mixed"),t&&i.addClass(`tg-${t}`))},getSelectAllState:function(){let t=0;this.forEachSelectableRow((e=>{t+=1}));const e=this.getSelectedRows().length;let i="mixed";return 0===e?(i="",this.previousSelectedRow=null):e===t&&(i="selected"),i},isSelectAllVisible:function(){const t=this.options;return!!(t.selectVisible&&t.selectAllVisible&&t.selectMultiple)}},xt={setRowHover:function(t,e){const i=this.getRowItem(t);return i?(this.renderRowHover(i,e),this):this},renderRowHover:function(t,e){if(this.previousHover&&(this.previousHover.removeClass("tg-hover"),this.previousHover=null),!e)return this;if(t.tg_frozen&&!this.options.frozenRowHoverable)return this;const i=t.tg_view_index;return this.previousHover=this.$body.find(`.tg-row[row='${i}']`).addClass("tg-hover"),this},setRowState:function(t,e){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];const o=this.getRowItem(t);return o?(o.tg_state_names||(o.tg_state_names=new Set),o.tg_state_names.add(e),o[e]=i,this.renderRowState(o,e),this):this},renderRowState:function(t,e){const i=this.getRowNodesByIndex(t.tg_view_index);if(i){const o=`tg-${e}`;t[e]?i.addClass(o):i.removeClass(o)}}},zt={getRowItem:function(t){return d.isNum(t)?(t<0&&(t=this.rowsInfo.length+t),this.rowsInfo.indexCache[t]):t?d.isNum(t.tg_index)?t:this.getRowItemById(t.id||t):void 0},getRowItemById:function(t){return this.getRowItemBy("id",t)},getRowItemBy:function(t,e){if(void 0!==e)return this.rowsInfo.indexCache.find((i=>i[t]===e))},getRowsLength:function(t){return t?this.rowsInfo.length:this.viewRows.length},getViewRowItem:function(t){return this.viewRows[t]},getPreRenderRowInfo:function(t){const e={rows:[],rowNotFound:!1,benchmark:0};if(!t.length)return 0===this.getRowsLength()&&(e.rowNotFound=!0),e;const i=[],o=this.frozenInfo.row;return t.forEach((t=>{this.getRowCache(t)?t>o&&i.push(t):e.rows.push(t)})),i.length&&(e.benchmark=Math.min.apply(Math,i)),e.rows.sort((function(t,i){return t{this.renderRowNodes(t,e.benchmark)}))},createRowNode:function(t,e,i,o,n,s){const r=document.createElement("div");return r.setAttribute("row",t),r.className=i,o&&(r.style.cssText=o),r.style.top=`${n}px`,s!==this.options.rowHeight&&(r.style.height=`${s}px`,r.style.lineHeight=`${s}px`),this.setNodeDataCache(r,{row:t,rowItem:e,rowNode:r}),r},appendRowNode:function(t,e,i,o){ithis.frozenInfo.row))return e;e-=this.frozenRowsHeight}return e-=this.scrollTopOffset,e},getRowTop:function(t){let e=t.tg_top;return t.tg_frozen||(e-=this.frozenRowsHeight),e},getRowVPos:function(t){const e=this.frozenInfo.bottom,i=this.frozenInfo.row;let o="top";return this.frozenInfo.rows&&(t<=i?e&&(o="bottom"):e||(o="bottom")),o},getRowCanvas:function(t,e){return"top"===t?"left"===e?this.$bodyTL:this.$bodyTR:"left"===e?this.$bodyBL:this.$bodyBR}},Mt={CHANGE:"change"},Pt={h:{type:"h",className:"tg-scrollbar-h",offset:"left",size:"width",page:"pageX",axis:"x",offsetName:"offsetX"},v:{type:"v",className:"tg-scrollbar-v",offset:"top",size:"height",page:"pageY",axis:"y",offsetName:"offsetY"}};class _t extends k{static EVENT=Mt;static H="h";static V="v";type="h";settings={};size=0;viewSize=0;bodySize=0;trackSize=0;position=0;scale=0;thumbPosition=0;thumbScale=0;constructor(t,e){super(),this.settings=Pt[t]||Pt.h,this.type=this.settings.type,this.id=d.uid(4,`tg-scrollbar-${this.type}-`),this.$holder=w(e),this.$holder.find(`.${this.settings.className}`).remove(),this.options=this.generateOptions()}generateOptions(t){return d.merge({size:15,round:!1,blank:!1,motionDuration:200},t)}updateOptions(t){this.options=this.generateOptions(t);let e=this.options.size;d.isNum(e)||(e=d.toNum(e)),e=Math.round(e),e=Math.max(e,0),e=Math.min(e,30),this.size=e}create(){this.$container=w('
    ').appendTo(this.$holder),this.$container.attr("id",this.id),this.$container.addClass(d.classMap(["tg-scrollbar",this.settings.className,{"tg-scrollbar-round":this.options.round}])),this.$track=this.$container.find(".tg-scrollbar-track"),this.$thumb=this.$container.find(".tg-scrollbar-thumb"),this.thumbDrag=new O,this.thumbDrag.bind(O.EVENT.DRAG_START,((t,e)=>{this.thumbDragStart(e)})).bind(O.EVENT.DRAG_MOVE,((t,e)=>{this.thumbDragMove(e)})).bind(O.EVENT.DRAG_END,((t,e)=>{this.thumbDragEnd(e)}));const t=this.$container.get(0);return this.scrollEvents={mousedown:{handler:e=>{e.target.classList.contains("tg-scrollbar-thumb")?this.thumbMouseDownHandler(e):(this.trackEvents={mouseup:{handler:t=>{this.trackMouseupHandler(t)},options:{once:!0}}},d.bindEvents(this.trackEvents,t),this.trackMousedownHandler(e))},options:!0},selectstart:{handler:t=>{d.preventDefault(t)},options:!0}},d.bindEvents(this.scrollEvents,t),this}getBlank(){return this.options.blank}getSize(){return this.size}getViewSize(){return this.viewSize}getBodySize(){return this.bodySize}getTrackMouseDirection(){let t=1;return this.trackMousePosition0){const i=this.getMaxThumbPosition();t=Math.round(i*this.position/e),t=d.clamp(t,0,i)}return this.setThumbPosition(t),this}trackMousedownHandler(t){return this.motionStop(),this.trackMousePosition=this.getTrackMousePos(t),this.motionStart(),this}trackMouseupHandler(t){return d.unbindEvents(this.trackEvents),this.motionStop(),this.motionStarted||(this.trackMousePosition=this.getTrackMousePos(t),this.trackScrollHandler(),this.triggerEvent()),this}trackScrollHandler(){const t=Math.max(0,this.viewSize-20)*this.getTrackMouseDirection();return this.setOffset(t),this}motionStop(){return this.motion&&(this.motion.destroy(),this.motion=null),this}motionStart(){const t=this.position,e=Math.round(this.trackMousePosition/this.viewSize*this.getMaxPosition());return this.motionStarted=!1,this.motion=new D,this.motion.bind(D.EVENT.MOTION_START,((t,e)=>{this.motionStarted=!0})),this.motion.bind(D.EVENT.MOTION_MOVE,((t,e)=>{this.motionUpdateHandler(t,e)})),this.motion.start({duration:this.options.motionDuration,from:t,till:e}),this}motionUpdateHandler(t,e){e!==this.position&&(this.setPosition(e),this.triggerEvent())}thumbMouseDownHandler(t){this.$thumb.addClass("tg-scrollbar-thumb-hold"),this.thumbDrag.start(t,{target:this.$thumb})}thumbDragStart(t){this.motionStop(),t.thumbPositionStart=this.thumbPosition}thumbDragMove(t){let e=t.thumbPositionStart+t[this.settings.offsetName];const i=this.getMaxThumbPosition();e=d.clamp(e,0,i),this.setThumbPosition(e);let o=0;i>0&&(o=d.per(e/i)*this.getMaxPosition(),o=Math.round(o)),this.position=o,this.triggerEvent()}thumbDragEnd(t){this.$thumb&&this.$thumb.removeClass("tg-scrollbar-thumb-hold")}triggerEvent(){this.trigger(Mt.CHANGE,this.position)}getPosition(){return this.position}setPosition(t){t=d.toNum(t,!0);const e=this.getMaxPosition();t=d.clamp(t,0,e),this.position=t,this.updateThumbPosition()}getMaxPosition(){return this.bodySize-this.viewSize}updatePosition(){const t=this.getMaxPosition(),e=d.clamp(this.position,0,t);this.position=e}setOffset(t){t=d.toNum(t);const e=this.position+t;return this.setPosition(e),this}getScale(){return this.scale}setScale(t){return t=d.per(t),this.scale=t,this.scaleChangeHandler(),this}scaleChangeHandler(){let t=Math.round(this.viewSize*this.scale);if(t=Math.max(t,Math.round(1.5*this.options.size)),t=Math.min(t,this.viewSize-1),this.thumbSize=t,this.$thumb){const t={};"h"===this.type?(t.height=this.size,t.width=this.thumbSize):(t.width=this.size,t.height=this.thumbSize),this.$thumb.css(t)}}updateTrackSize(){const t={};return"h"===this.type?(t.width=this.trackSize,t.height=this.size):(t.height=this.trackSize,t.width=this.size),this.$container.css(t),this}updateThumbSize(){let t=0;return this.bodySize&&(t=this.trackSize/this.bodySize),this.setScale(t),this}parseSize(t){return t=d.toNum(t),t=Math.round(t),t=Math.max(t,0)}updateSize(t,e,i){t=this.parseSize(t),this.viewSize=t,e=this.parseSize(e),this.bodySize=e,i=d.isNum(i)?this.parseSize(i):t,this.trackSize=i,this.previousFadeIn=null}fade(t){return!(!this.$container||!this.size)&&(this.previousFadeIn!==t&&(this.previousFadeIn=t,t?this.$container.hasClass("tg-fade-out")&&this.$container.removeClass("tg-fade-out").addClass("tg-fade-in"):this.$container.removeClass("tg-fade-in").addClass("tg-fade-out"),!0))}show(){if(this.updatePosition(),!this.getBlank())return!this.$container&&this.size>0&&this.create(),this.$container?(this.updateTrackSize(),this.updateThumbSize(),this):this;this.remove()}hide(){return this.updatePosition(),this.remove(),this}remove(){if(this.motionStop(),d.unbindEvents(this.scrollEvents),d.unbindEvents(this.trackEvents),this.thumbDrag&&(this.thumbDrag.destroy(),this.thumbDrag=null),!this.$container)return this;this.$thumb=null,this.$track=null,this.$container.remove(),this.$container=null}destroy(){return this.remove(),this}}const Nt={CHANGE:"change"};class kt extends k{static EVENT=Nt;visible=!0;constructor(t,e){super(),this.id=d.uid(4,`tg-scroll-pane-${e}-`),this.gradientInfo=[],this.$container=w(t).attr("id",this.id),this.$container.addClass("tg-scroll-pane"),this.$scrollView=this.$container.find(".tg-scroll-view"),this.$scrollBody=this.$scrollView.find(".tg-scroll-body"),this.scrollbarH=new _t(_t.H,this.$container),this.scrollbarH.bind(_t.EVENT.CHANGE,((t,e)=>{this.scrollHChangeHandler()})),this.scrollbarV=new _t(_t.V,this.$container),this.scrollbarV.bind(_t.EVENT.CHANGE,((t,e)=>{this.scrollVChangeHandler()})),this.options=this.generateOptions()}generateOptions(t){return d.merge({scrollbarH:{},scrollbarV:{},scrollbarFade:!1,scrollSizeOnKeyPress:20,gradient:30},t)}show(){return this.$container.show(),this.visible=!0,this}hide(){return this.$container.hide(),this.visible=!1,this}width(){return this.scrollPaneW}height(){return this.scrollPaneH}render(t){return this.visible?(this.options=this.generateOptions(t),this.update(),this):this}update(){this.scrollPaneW=this.options.scrollPaneW,this.scrollPaneH=this.options.scrollPaneH,this.scrollBodyW=this.options.scrollBodyW,this.scrollBodyH=this.options.scrollBodyH,this.updateScrollbar()}setGroupH(t){this.groupH=d.toList(t)}setGroupV(t){this.groupV=d.toList(t)}updateGroupH(){if(!d.isList(this.groupH))return this;const t=this.scrollbarH.getPosition();return this.groupH.forEach((function(e){e&&e.updateScrollHFromGroup(t)})),this}updateGroupV(){if(!d.isList(this.groupV))return this;const t=this.scrollbarV.getPosition();return this.groupV.forEach((function(e){e&&e.updateScrollVFromGroup(t)})),this}updateGroupList(){this.updateGroupH(),this.updateGroupV()}updateScrollHFromGroup(t){this.scrollbarH.getPosition()!==t&&(this.scrollbarH.setPosition(t),this.updateScrollLeft(),this.triggerEvent())}updateScrollVFromGroup(t){this.scrollbarV.getPosition()!==t&&(this.scrollbarV.setPosition(t),this.updateScrollTop(),this.triggerEvent())}setPosition(t,e){return this.scrollbarH.setPosition(t),this.scrollbarV.setPosition(e),this.updateScrollLeft(),this.updateScrollTop(),this.updateGroupList(),this}updateScrollbar(){this.scrollbarH.updateOptions(this.options.scrollbarH),this.scrollbarV.updateOptions(this.options.scrollbarV),this.updateScrollState(),this.updateScrollView(),this.updateScrollTrack(),this.scrollbarH.updateSize(this.scrollViewW,this.scrollBodyW,this.scrollTrackW),this.scrollbarV.updateSize(this.scrollViewH,this.scrollBodyH,this.scrollTrackH),this.hasScrollH?(this.scrollbarH.show(),this.scrollbarH.setPosition(this.scrollbarH.getPosition())):this.scrollbarH.hide(),this.hasScrollV?(this.scrollbarV.show(),this.scrollbarV.setPosition(this.scrollbarV.getPosition())):this.scrollbarV.hide(),this.updateScrollLeft(),this.updateScrollTop(),this.updateGroupList()}updateScrollState(){const t=this.scrollbarH.getSize(),e=this.scrollbarV.getSize(),i=this.scrollbarH.getBlank(),o=this.scrollbarV.getBlank(),n=this.options.scrollbarFade;let s=!1,r=0;(function(){(this.scrollPaneWe&&t.push("left"),ie&&t.push("top"),o{const i=`tg-gradient-${e}`;t.includes(e)?this.$container.addClass(i):this.$container.removeClass(i)})))}getScrollLeft(){return this.scrollbarH.getPosition()}getScrollTop(){return this.scrollbarV.getPosition()}getMaxScrollLeft(){return this.scrollbarH.getMaxPosition()}getMaxScrollTop(){return this.scrollbarV.getMaxPosition()}getScrollTopOffset(){const t=this.getScrollTop();return t-t%1e4}triggerEvent(){this.trigger(Nt.CHANGE,{scrollLeft:this.getScrollLeft(),scrollTop:this.getScrollTop()})}scrollHChangeHandler(){this.updateScrollLeft(),this.updateGroupList(),this.triggerEvent()}scrollVChangeHandler(){this.updateScrollTop(),this.updateGroupList(),this.triggerEvent()}setOffsetH(t){const e=this.getScrollLeft();this.scrollbarH.setOffset(t);return this.getScrollLeft()!==e&&(this.updateScrollLeft(),this.updateGroupList(),this.triggerEvent(),!0)}setOffsetV(t){const e=this.getScrollTop();this.scrollbarV.setOffset(t);return this.getScrollTop()!==e&&(this.updateScrollTop(),this.updateGroupList(),this.triggerEvent(),!0)}mouseWheelHandler(t){const e=t.deltaX,i=t.deltaY,o=Math.abs(e);if(o>Math.abs(i)){if(this.hasScrollH)return this.setOffsetH(e)}else{if(this.hasScrollV)return this.setOffsetV(i);if(this.hasScrollH&&!o)return this.setOffsetH(i)}return!1}keyPageUpHandler(t){return this.setOffsetV(-this.scrollViewH)}keyPageDownHandler(t){return this.setOffsetV(this.scrollViewH)}keyEndHandler(t){return this.setOffsetV(this.scrollBodyH)}keyHomeHandler(t){return this.setOffsetV(-this.scrollBodyH)}keyLeftHandler(t){return this.setOffsetH(-this.options.scrollSizeOnKeyPress)}keyUpHandler(t){return this.setOffsetV(-this.options.scrollSizeOnKeyPress)}keyRightHandler(t){return this.setOffsetH(this.options.scrollSizeOnKeyPress)}keyDownHandler(t){return this.setOffsetV(this.options.scrollSizeOnKeyPress)}destroy(){return this.visible=!1,this.groupH=null,this.groupV=null,this.scrollbarV&&(this.scrollbarV.destroy(),this.scrollbarV=null),this.scrollbarH&&(this.scrollbarH.destroy(),this.scrollbarH=null),this.$container=null,this.$scrollView=null,this.$scrollBody=null,this}}const Vt={initScrollPane:function(){this.initFrozenStyle(),this.createScrollPane()},initFrozenStyle:function(){const t={HL:{container:this.$paneHL,cls:[]},HR:{container:this.$paneHR,cls:[]},TL:{container:this.$paneTL,cls:[]},TR:{container:this.$paneTR,cls:[]},BL:{container:this.$paneBL,cls:[]},BR:{container:this.$paneBR,cls:[]}},e="tg-frozen-h";this.frozenInfo.rows&&(this.frozenInfo.bottom?(t.BL.cls.push(e),t.BR.cls.push(e)):(t.TL.cls.push(e),t.TR.cls.push(e)));const i="tg-frozen-v",o="tg-frozen-line-v";this.frozenInfo.columns&&(this.frozenInfo.right?(t.HR.cls.push(i),t.TR.cls.push(i),t.BR.cls.push(i)):(t.HL.cls.push(i),t.TL.cls.push(i),t.BL.cls.push(i)),t.HL.cls.push(o),t.TL.cls.push(o),t.BL.cls.push(o));const n="tg-frozen",s=[n,e,i,o].join(" ");Object.keys(t).forEach((function(e){const i=t[e],o=i.container;o.removeClass(s);const r=i.cls;if(!r.length)return;const l=[n].concat(r).join(" ");o.addClass(l)}))},createScrollPane:function(){this.removeScrollPane(),this.scrollPaneMap={HL:new kt(this.$paneHL,"header-left"),HR:new kt(this.$paneHR,"header-right"),TL:new kt(this.$paneTL,"top-left"),TR:new kt(this.$paneTR,"top-right"),BL:new kt(this.$paneBL,"bottom-left"),BR:new kt(this.$paneBR,"bottom-right")},this.scrollPaneMap.BR.setGroupH([this.scrollPaneMap.HR,this.scrollPaneMap.TR]),this.scrollPaneMap.TR.setGroupH([this.scrollPaneMap.HR,this.scrollPaneMap.BR]),this.scrollPaneMap.BL.setGroupH([this.scrollPaneMap.HL,this.scrollPaneMap.TL]),this.scrollPaneMap.TL.setGroupH([this.scrollPaneMap.HL,this.scrollPaneMap.BL]),this.scrollPaneMap.BR.setGroupV(this.scrollPaneMap.BL),this.scrollPaneMap.BL.setGroupV(this.scrollPaneMap.BR),this.scrollPaneMap.TR.setGroupV(this.scrollPaneMap.TL),this.scrollPaneMap.TL.setGroupV(this.scrollPaneMap.TR),this.initActiveScrollPane(),this.initPaneVisibility()},initActiveScrollPane:function(){const t=this.getScrollPaneVP(),e=this.getScrollPaneHP(),i=`${t}${e}`;this.scrollPane=this.scrollPaneMap[i],this.scrollPane.bind(kt.EVENT.CHANGE,((t,e)=>{this.scrollPaneChangeHandler(t,e)}));let o={L:"L",R:"L"};this.frozenInfo.columns&&this.frozenInfo.right&&(o={L:"R",R:"L"});const n=`${t}${o[e]}`;this.scrollPaneFrozen=this.scrollPaneMap[n]},getScrollPaneVP:function(){return this.frozenInfo.rows&&!this.frozenInfo.bottom?"B":"T"},getScrollPaneHP:function(){return this.frozenInfo.columns&&!this.frozenInfo.right?"R":"L"},initPaneVisibility:function(){this.scrollPaneMap.HL.show(),this.scrollPaneMap.TL.show(),this.frozenInfo.columns?(this.scrollPaneMap.HR.show(),this.scrollPaneMap.TR.show(),this.frozenInfo.rows?(this.scrollPaneMap.BL.show(),this.scrollPaneMap.BR.show()):(this.scrollPaneMap.BL.hide(),this.scrollPaneMap.BR.hide())):(this.scrollPaneMap.HR.hide(),this.scrollPaneMap.TR.hide(),this.scrollPaneMap.BR.hide(),this.frozenInfo.rows?this.scrollPaneMap.BL.show():this.scrollPaneMap.BL.hide())},scrollPaneChangeHandler:function(t,e){this.hideColumnLine(),this.scrollLeft=e.scrollLeft,this.scrollTop=e.scrollTop,this.scrollRenderHandler()},scrollbarFadeInOutHandler:function(t,e){this.options.scrollbarFade&&(e?this.updateScrollPaneFade(!0):this.options.scrollbarFadeTimeout||this.updateScrollPaneFade(!1))},updateScrollPaneFade:function(t){if(!this.options.scrollbarFade)return;this.updateScrollPaneFadeSync(t);const e=this.options.scrollbarFadeTimeout;e&&(clearTimeout(this.timeout_fade),this.timeout_fade=setTimeout((()=>{this.updateScrollPaneFadeSync(!1)}),e))},updateScrollPaneFadeSync:function(t){if(this.previousScrollbarFadeIn===t)return;this.previousScrollbarFadeIn=t;const e=[];Object.keys(this.scrollPaneMap).forEach((t=>{const i=this.scrollPaneMap[t];i.hasScrollbar()&&e.push(i)})),e.length&&e.forEach((function(e){e.fade(t)}))},updateScrollPane:function(){const t=this.getScrollbarOptions();this.scrollPaneMap.HL.render(this.getScrollPaneOptions({scrollPaneW:this.paneWidthL,scrollPaneH:this.headerHeight,scrollBodyW:this.bodyWidthL,scrollBodyH:this.headerHeight,scrollbarV:t.HLV,scrollbarH:t.HLH})),this.scrollPaneMap.HR.render(this.getScrollPaneOptions({scrollPaneW:this.paneWidthR,scrollPaneH:this.headerHeight,scrollBodyW:this.bodyWidthR,scrollBodyH:this.headerHeight,scrollbarV:t.HRV,scrollbarH:t.HRH})),this.scrollPaneMap.TL.render(this.getScrollPaneOptions({scrollPaneW:this.paneWidthL,scrollPaneH:this.paneHeightT,scrollBodyW:this.bodyWidthL,scrollBodyH:this.bodyHeightT,scrollbarV:t.TLV,scrollbarH:t.TLH})),this.scrollPaneMap.TR.render(this.getScrollPaneOptions({scrollPaneW:this.paneWidthR,scrollPaneH:this.paneHeightT,scrollBodyW:this.bodyWidthR,scrollBodyH:this.bodyHeightT,scrollbarV:t.TRV,scrollbarH:t.TRH})),this.scrollPaneMap.BL.render(this.getScrollPaneOptions({scrollPaneW:this.paneWidthL,scrollPaneH:this.paneHeightB,scrollBodyW:this.bodyWidthL,scrollBodyH:this.bodyHeightB,scrollbarV:t.BLV,scrollbarH:t.BLH})),this.scrollPaneMap.BR.render(this.getScrollPaneOptions({scrollPaneW:this.paneWidthR,scrollPaneH:this.paneHeightB,scrollBodyW:this.bodyWidthR,scrollBodyH:this.bodyHeightB,scrollbarV:t.BRV,scrollbarH:t.BRH})),this.scrollLeft=this.getScrollLeft(),this.scrollTop=this.getScrollTop(),this.updateScrollPaneFade(Boolean(this.options.scrollbarFadeTimeout))},getScrollPaneOptions:function(t){const e=this.options;return t.scrollbarFade=e.scrollbarFade,t.gradient=d.clamp(d.toNum(e.scrollPaneGradient,!0),0,100),t},getScrollbarOptions:function(){const t=this.options.scrollbarRound,e={};return["HLH","HLV","HRH","HRV","TLH","TLV","TRH","TRV","BLH","BLV","BRH","BRV"].forEach((function(i){e[i]={size:0,round:t,blank:!1}})),this.scrollbarOptionsHandler(e),this.scrollbarFadeHandler(e),e},scrollbarOptionsHandler:function(t){const e=this.scrollbarSizeH,i=this.scrollbarSizeV;this.scrollbarHeaderHandler(t,e,i),this.frozenInfo.columns?this.frozenInfo.rows?this.scrollbarC1R1Handler(t,e,i):this.scrollbarC1R0Handler(t,e,i):this.frozenInfo.rows?this.scrollbarC0R1Handler(t,e,i):this.scrollbarC0R0Handler(t,e,i)},scrollbarFadeHandler:function(t){if(this.options.scrollbarFade)for(const e in t)if(d.hasOwn(t,e)){const i=t[e];i.size>0&&i.blank&&(i.blank=!1,i.size=0)}},scrollbarHeaderHandler:function(t,e,i){this.hasVScroll&&(this.frozenInfo.columns?(t.HRV.size=i,t.HRV.blank=1):(t.HLV.size=i,t.HLV.blank=1))},scrollbarC0R0Handler:function(t,e,i){t.TLH.size=e,t.TLV.size=i},scrollbarC0R1Handler:function(t,e,i){this.frozenInfo.bottom?this.scrollbarC0R1B1Handler(t,e,i):this.scrollbarC0R1B0Handler(t,e,i)},scrollbarC0R1B1Handler:function(t,e,i){t.BLH.size=e,t.TLV.size=i,this.hasVScroll&&(t.BLV.size=i,t.BLV.blank=1)},scrollbarC0R1B0Handler:function(t,e,i){t.BLH.size=e,t.BLV.size=i,this.hasVScroll&&(t.TLV.size=i,t.TLV.blank=1)},scrollbarC1R0Handler:function(t,e,i){this.frozenInfo.right?this.scrollbarC1R0R1Handler(t,e,i):this.scrollbarC1R0R0Handler(t,e,i)},scrollbarC1R0R1Handler:function(t,e,i){this.hasHScroll&&(t.TLH.size=e,this.scrollPaneHidden?(t.TRH.size=e,t.TLH.blank=!0):(t.TRH.size=e,t.TRH.blank=!0)),t.TRV.size=i},scrollbarC1R0R0Handler:function(t,e,i){this.hasHScroll&&(t.TRH.size=e,this.scrollPaneHidden?(t.TLH.size=e,t.TRH.blank=!0):(t.TLH.size=e,t.TLH.blank=!0)),t.TRV.size=i},scrollbarC1R1Handler:function(t,e,i){this.frozenInfo.right?this.frozenInfo.bottom?this.scrollbarC1R1R1B1Handler(t,e,i):this.scrollbarC1R1R1B0Handler(t,e,i):this.frozenInfo.bottom?this.scrollbarC1R1R0B1Handler(t,e,i):this.scrollbarC1R1R0B0Handler(t,e,i)},scrollbarC1R1R1B1Handler:function(t,e,i){this.hasHScroll&&(t.BLH.size=e,this.scrollPaneHidden&&(t.BRH.size=e,t.BLH.blank=!0)),t.TRV.size=i,this.hasVScroll&&(t.BRV.size=i,t.BRV.blank=1)},scrollbarC1R1R1B0Handler:function(t,e,i){this.hasHScroll&&(t.BLH.size=e,this.scrollPaneHidden?(t.BRH.size=e,t.BLH.blank=!0):(t.BRH.size=e,t.BRH.blank=!0)),t.BRV.size=i,this.hasVScroll&&(t.TRV.size=i,t.TRV.blank=1)},scrollbarC1R1R0B1Handler:function(t,e,i){this.hasHScroll&&(t.BRH.size=e,this.scrollPaneHidden&&(t.BLH.size=e,t.BRH.blank=!0)),t.TRV.size=i,this.hasVScroll&&(t.BRV.size=i,t.BRV.blank=1)},scrollbarC1R1R0B0Handler:function(t,e,i){this.hasHScroll&&(t.BRH.size=e,this.scrollPaneHidden?(t.BLH.size=e,t.BRH.blank=!0):(t.BLH.size=e,t.BLH.blank=!0)),t.BRV.size=i,this.hasVScroll&&(t.TRV.size=i,t.TRV.blank=1)},removeScrollPane:function(){clearTimeout(this.timeout_fade),this.previousScrollbarFadeIn=null,this.scrollPaneMap&&(Object.keys(this.scrollPaneMap).forEach((t=>{const e=this.scrollPaneMap[t];e&&e.destroy()})),this.scrollPaneMap=null,this.scrollPane=null,this.scrollPaneFrozen=null)}},Ot={updateScrollState:function(){this.updateGlobalScrollInfo(),this.updateHScrollState(),this.updateVScrollState(),this.updateBlankColumnWidth(),this.scrollStateChanged=!1,this.previousHasHScroll===this.hasHScroll&&this.previousHasVScroll===this.hasVScroll||(this.scrollStateChanged=!0,this.previousHasHScroll=this.hasHScroll,this.previousHasVScroll=this.hasVScroll,this.trigger(C.onScrollStateChanged,{hasHScroll:this.hasHScroll,hasVScroll:this.hasVScroll}))},updateGlobalScrollInfo:function(){this.totalRowsLength=this.getRowsLength(),this.totalRowsHeight=this.getRowsHeight(),this.frozenRowsHeight=this.getFrozenRowsHeight(),this.scrollRowsHeight=this.totalRowsHeight-this.frozenRowsHeight,this.totalRowsHeight=Math.max(this.totalRowsHeight,1),this.scrollRowsHeight=Math.max(this.scrollRowsHeight,1),this.flushRowFrom(this.totalRowsLength)},updateHScrollState:function(){if(this.hasHScroll=!0,this.updateScrollPaneHiddenState(),this.updateHScrollByScrollPaneHidden(),this.scrollPaneHidden)return;this.containerWidth-this.columnsWidth>=0&&(this.hasHScroll=!1)},getScrollPaneCurrentWidth:function(){return this.frozenInfo.right?this.bodyWidth-this.columnsWidthR:this.bodyWidth-this.columnsWidthL},updateHScrollByScrollPaneHidden:function(){if(this.scrollPaneHidden){this.hasHScroll=!1;this.getScrollPaneCurrentWidth()=this.totalRowsHeight&&(this.hasVScroll=!1)}},updateBlankColumnWidth:function(){let t=this.containerWidth-this.columnsWidth;!this.hasVScroll||this.hasHScroll||this.options.scrollbarFade||(t-=this.scrollbarSizeV),this.scrollPaneHidden&&(t=0),this.hasHScroll||(t>=0?(this.frozenInfo.columns?this.columnsWidthR+=t:this.columnsWidthL+=t,this.blankColumn.tg_width=t):this.hasHScroll=!0)}},$t={scrollToRow:function(t){const e=this.getRowItem(t);return this.scrollToItem(e,null),this},scrollToColumn:function(t){const e=this.getColumnItem(t);return this.scrollToItem(null,e),this},scrollToCell:function(t,e){const i=this.getRowItem(t),o=this.getColumnItem(e);return this.scrollToItem(i,o),this},scrollToFirstRow:function(){return this.setScrollTop(0),this},scrollToLastRow:function(){const t=this.getViewRows(),e=t[t.length-1],i=this.getScrollRowPosition(e);if(d.isNum(i))return this.setScrollTop(i),this},scrollToFirstColumn:function(){return this.setScrollLeft(0),this},scrollToLastColumn:function(t){const e=this.getViewColumns();let i=e[e.length-2];t&&(i=e[e.length-1]);const o=this.getScrollColumnPosition(i);if(d.isNum(o))return this.setScrollLeft(o),this},scrollRowIntoView:function(t){const e=this.getRowItem(t);return this.scrollItemIntoView(e,null),this},scrollColumnIntoView:function(t){const e=this.getColumnItem(t);return this.scrollItemIntoView(null,e),this},scrollCellIntoView:function(t,e){const i=this.getRowItem(t),o=this.getColumnItem(e);return this.scrollItemIntoView(i,o),this},setScroll:function(t,e){return t===this.scrollLeft&&e===this.scrollTop||(this.scrollLeft=t,this.scrollTop=e,this.scrollHandler()),this},setScrollLeft:function(t){return t===this.scrollLeft||(this.scrollLeft=t,this.scrollHandler()),this},setScrollTop:function(t){return t===this.scrollTop||(this.scrollTop=t,this.scrollHandler()),this},getScrollRowPosition:function(t){if(!t)return;let e=t.tg_view_index;return e-=this.frozenInfo.rows,e>=0?this.getRowTop(t):void 0},getScrollColumnPosition:function(t){if(!t)return;let e=t.tg_left;return this.frozenInfo.columns&&(e-=this.bodyWidthL),e>=0?e:void 0},scrollToItem:function(t,e){return this.scrollToChanged=!1,this.scrollToRowHandler(t),this.scrollToColumnHandler(e),this.scrollToChanged?(this.scrollHandler(),this):this},scrollToRowHandler:function(t){if(!t)return;const e=this.getScrollRowPosition(t);d.isNum(e)&&e!==this.scrollTop&&(this.scrollTop=e,this.scrollToChanged=!0)},scrollToColumnHandler:function(t){if(!t)return;const e=this.getScrollColumnPosition(t);d.isNum(e)&&e!==this.scrollLeft&&(this.scrollLeft=e,this.scrollToChanged=!0)},scrollItemIntoView:function(t,e){return this.scrollIntoViewChanged=!1,this.scrollRowIntoViewHandler(t),this.scrollColumnIntoViewHandler(e),this.scrollIntoViewChanged?(this.scrollHandler(),this):this},scrollRowIntoViewHandler:function(t){if(!t)return;const e=this.getScrollRowPosition(t);if(!d.isNum(e))return;if(ethis.scrollTop+o){const t=e-(o-i);this.scrollTop=t,this.scrollIntoViewChanged=!0}},scrollColumnIntoViewHandler:function(t){if(!t)return;const e=this.getScrollColumnPosition(t);if(!d.isNum(e))return;if(ethis.scrollLeft+o){const t=e-(o-i);this.scrollLeft=t,this.scrollIntoViewChanged=!0}},scrollOnInit:function(){const{scrollLeft:t,scrollTop:e,scrollColumn:i,scrollRow:o}=this.renderSettings;this.scrollIntoViewChanged=!1,Number.isInteger(t)&&t!==this.scrollLeft&&(this.scrollLeft=t,this.scrollIntoViewChanged=!0),Number.isInteger(e)&&e!==this.scrollTop&&(this.scrollTop=e,this.scrollIntoViewChanged=!0),i&&this.scrollColumnIntoViewHandler(i),o&&this.scrollRowIntoViewHandler(o),this.scrollIntoViewChanged&&this.scrollPane.setPosition(this.scrollLeft,this.scrollTop)},scrollHandler:function(){this.scrollPane.setPosition(this.scrollLeft,this.scrollTop),this.scrollRenderHandler()},scrollRenderHandler:function(){this.previousScrollLeft===this.scrollLeft&&this.previousScrollTop===this.scrollTop||(this.previousScrollLeft=this.scrollLeft,this.previousScrollTop=this.scrollTop,this.onNextUpdated((()=>{this.updateScrollPaneFade(!0),this.trigger(C.onScroll,{scrollLeft:this.scrollLeft,scrollTop:this.scrollTop})})),this.render())},scrollTouchStartHandler:function(t,e){this.hideColumnLine(),this.scrollTouchLeft=this.getScrollLeft(),this.scrollTouchTop=this.getScrollTop(),this.scrollMaxTouchLeft=this.getMaxScrollLeft(),this.scrollMaxTouchTop=this.getMaxScrollTop()},getTouchOrientation:function(t){return t.orientation?t.orientation:[e.LEFT,e.RIGHT].includes(t.direction)?(t.orientation||(t.orientation="Y"),t.orientation):[e.UP,e.DOWN].includes(t.direction)?(t.orientation||(t.orientation="X"),t.orientation):void 0},scrollTouchMoveHandler:function(t,e){if(e.touchLength>1)return;let i=e.offsetX,o=e.offsetY;const n=this.getTouchOrientation(e);"X"===n?i=0:"Y"===n&&(o=0);let s=this.scrollTouchLeft-i,r=this.scrollTouchTop-o;s=d.clamp(s,0,this.scrollMaxTouchLeft),r=d.clamp(r,0,this.scrollMaxTouchTop);let l=!1;this.scrollPaneHidden&&(l=this.scrollPaneFrozen.setOffsetH(-e.moveX),s=0);const h=this.getScrollLeft(),a=this.getScrollTop();(s!==h||r!==a||l)&&(d.preventDefault(e.e),this.setScroll(s,r))},scrollTouchEndHandler:function(){this.protectedItem=null},scrollTouchInertiaHandler:function(t,e){const i=this.getScrollLeft(),o=this.getScrollTop(),n=i-e.touchInertiaX,s=o-e.touchInertiaY;this.setScroll(n,s)},getScrollViewWidth:function(){let t=this.getScrollPaneWidth();return this.frozenInfo.right||(t-=this.getScrollbarWidth()),t},getScrollViewHeight:function(){let t=this.getScrollPaneHeight();return this.frozenInfo.bottom||(t-=this.getScrollbarHeight()),t},getScrollPaneWidth:function(){return this.scrollPane.width()},getScrollPaneHeight:function(){return this.scrollPane.height()},getScrollbarWidth:function(){return this.hasVScroll&&!this.options.scrollbarFade?this.scrollbarSizeV:0},getScrollbarHeight:function(){return this.hasHScroll&&!this.options.scrollbarFade?this.scrollbarSizeH:0},getScrollLeft:function(){return this.scrollPane.getScrollLeft()},getScrollTop:function(){return this.scrollPane.getScrollTop()},getMaxScrollLeft:function(){return this.scrollPane.getMaxScrollLeft()},getMaxScrollTop:function(){return this.scrollPane.getMaxScrollTop()}};class Bt{constructor(t){this.options=this.generateOptions(t)}generateOptions(t){return d.merge({ignore:null,sortField:"",sortFactor:1,sortBlankFactor:1,sortComparer:null},t)}sortList(t){if(!d.isList(t)||1===t.length)return!1;this.ignoreExcludeHandler(t);const e=this.comparerHandler(t);return this.ignoreIncludeHandler(t),e}getDefaultComparer(t){return(ft[t]||ft.string).bind(this)}comparerHandler(t){const e=this.options,i=e.sortField,o=e.sortFactor,n=e.sortBlankFactor,s=e.sortComparer;return"function"==typeof s&&(t.sort(((t,e)=>s.call(this,t,e,{sortField:i,sortFactor:o,sortBlankFactor:n}))),!0)}ignoreExcludeHandler(t){const e=this.options.ignore;this.ignoreListTop=[],this.ignoreListBottom=[];const i=[];for(let o=0,n=t.length;o{t.unshift(e.item)})),this.ignoreListBottom.forEach((e=>{t.push(e.item)}))}}const Dt={removeSortColumn:function(){return this.sortColumn=null,this.$header&&this.$header.find(".tg-column-sorted").removeClass("tg-column-sorted"),this},setSortColumn:function(t){if(!(t=this.getColumnItem(t)))return;if(!this.isColumnSortable(t))return;t===this.sortColumn?t.sortAsc=!t.sortAsc:d.hasOwn(t,"sortAsc")||(t.sortAsc=this.options.sortAsc),this.sortColumn=t;if(this.getRowsLength()-this.frozenInfo.rows<2)return;if(!this.headerCreated)return;this.updateRowsSort()&&(this.renderHeaderSort(),this.flushSort(),this.render("rows"))},renderHeaderSort:function(){const t=this.sortColumn;if(!t)return this;if(!this.isColumnSortable(t))return this;this.$header.find(".tg-column-sorted").removeClass("tg-column-sorted");const e=t.tg_view_index,i=this.$header.find(`.tg-header-item[column='${e}']`).find(".tg-column-header").addClass("tg-column-sorted");return t.sortAsc?i.removeClass("tg-sort-desc").addClass("tg-sort-asc"):i.removeClass("tg-sort-asc").addClass("tg-sort-desc"),this},getSortComparer:function(t){const e=t.comparer;if("function"==typeof e)return e;const i=this.options.sortComparers,o=i[e||t.type];return"function"==typeof o?o:i.string},updateRowsSort:function(){const t=this.sortColumn;if(!t)return!1;const e=t.id;return!!e&&this.sortRows(e,t)},sortRows:function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const i=e.sortAsc?-1:1,o=this.options.sortBlankValueBottom?1:i,n=this.getSortComparer(e);let s=!1;const r=new Bt({ignore:function(t){return t.tg_frozen?{item:t,top:!0}:t.sortFixed?{item:t,top:"top"===t.sortFixed}:void 0},sortField:t,sortFactor:i,sortBlankFactor:o,sortComparer:n}),l=function(t){r.sortList(t)&&(s=!0),t.forEach((function(t,e){t.tg_sub_index=e,t.subs&&l(t.subs)}))};return l(this.rows),s&&this.initRowsHandler(),s}},Wt={default:{},lightblue:{rowHeight:35,scrollbarSize:10,scrollbarRound:!0},dark:{}},At={getAllThemes:function(){return Object.keys(Wt)},getThemeOptions:function(t){return Wt[t]}},Ft={update:function(){return this.flushBody(),this.render("rows"),this},updateRow:function(t,e){const i=this.getRowItem(t);if(!i)return this;if(e&&"object"==typeof e){const t=this.getItemSnapshot(e);Object.keys(t).forEach((function(e){i[e]=t[e]}))}return this.flushRow(i.tg_view_index),this.render("rows"),this},updateCell:function(t,e,i){const o=this.getRowItem(t);if(!o)return this;const n=this.getColumnItem(e);return n?(arguments.length>2&&(o[n.id]=i),this.flushCell(o.tg_view_index,n.tg_view_index),this.render("rows"),this):this},onNextUpdated:function(t){return"function"!=typeof t||this.once(C.onUpdated,t),this}},Gt={getViewport:function(){this.scrollLeft=this.getScrollLeft(),this.scrollTop=this.getScrollTop();return{rows:this.getViewportRows(),columns:this.getViewportColumns()}},getViewportRows:function(){const t=[],e=this.viewRows,i=e.length;if(!i)return t;let o=this.options.rowCacheLength;o=d.clamp(d.toNum(o,!0),0,i);const n=this.frozenInfo.rows;if(n){let e=0;for(;e1;){const n=Math.floor(.5*(e+i)),s=t[n],r=this.getRowTop(s),l=this.getRowHeight(s);if(or+l))return n;e=n}}const n=t[i];return o=e)return[];const i=[],o=this.frozenInfo.columns,n=this.viewColumns;for(let s=o,r=n.length;s0;){const n=t[0]-1;n>o&&t.unshift(n);const s=t[t.length-1]+1;si)&&!(n0&&(e.rows.length=o),i=t.options}return this.data=e,this.dataOptions=i,this}setDataSnapshot(t){return this.setData(this.generateDataSnapshot(t)),this}getData(){return this.data}toString(){return"[object Grid]"}}var Ut;Ut=jt.prototype,[v,R,S,T,L,I,E,x,z,F,G,j,q,K,J,Z,tt,et,pt,mt,bt,wt,vt,Ht,{keyTabHandler:function(t){},keyEnterHandler:function(t){},keyEscHandler:function(t){},keyPageUpHandler:function(t){return this.scrollPane.keyPageUpHandler(t)},keyPageDownHandler:function(t){return this.scrollPane.keyPageDownHandler(t)},keyEndHandler:function(t){return this.scrollPane.keyEndHandler(t)},keyHomeHandler:function(t){return this.scrollPane.keyHomeHandler(t)},keyLeftHandler:function(t){return this.scrollPaneHidden?this.scrollPaneFrozen.keyLeftHandler(t):this.scrollPane.keyLeftHandler(t)},keyUpHandler:function(t){return this.scrollPane.keyUpHandler(t)},keyRightHandler:function(t){return this.scrollPaneHidden?this.scrollPaneFrozen.keyRightHandler(t):this.scrollPane.keyRightHandler(t)},keyDownHandler:function(t){return this.scrollPane.keyDownHandler(t)}},yt,Ct,Rt,St,Tt,{showRow:function(t){return this.updateRowsInvisible(this.toRowItemList(t),!1)},hideRow:function(t){return this.updateRowsInvisible(this.toRowItemList(t),!0)},updateRowsInvisible:function(t,e){if(!t.length)return!1;const i=[];return t.forEach((t=>{t.invisible!==e&&(t.invisible=e,t.tg_invisible=e,i.push(t))})),!!i.length&&(this.update(),!0)}},Lt,It,Et,xt,zt,Vt,Ot,$t,Dt,At,Ft,Gt].forEach((t=>{for(const e in t){if(d.hasOwn(Ut,e))throw new Error(`ERROR: extends with an existing key: "${e}"`);Ut[e]=t[e]}}));const Xt=jt,Yt=e.VERSION,qt=e.TIMESTAMP,Kt={VERSION:Yt,TIMESTAMP:qt,Grid:Xt,$:w,CONST:e,EventBase:k,Icon:X,Motion:D,ScrollPane:kt,Util:d}})();var n=o.$,s=o.MP,r=o._d,l=o.xA,h=o.In,a=o.T8,c=o.Gr,d=o.ht,u=o.J0,g=o.xv,f=o.Ay;export{n as $,s as CONST,r as EventBase,l as Grid,h as Icon,a as Motion,c as ScrollPane,d as TIMESTAMP,u as Util,g as VERSION,f as default}; \ No newline at end of file diff --git a/misc/custom-nodes.jpg b/misc/custom-nodes.jpg index 10482f1b..74c2a8bf 100644 Binary files a/misc/custom-nodes.jpg and b/misc/custom-nodes.jpg differ diff --git a/misc/main.png b/misc/main.png deleted file mode 100644 index 910da417..00000000 Binary files a/misc/main.png and /dev/null differ diff --git a/misc/menu.jpg b/misc/menu.jpg index bf98d421..c83540a9 100644 Binary files a/misc/menu.jpg and b/misc/menu.jpg differ diff --git a/misc/missing-list.jpg b/misc/missing-list.jpg new file mode 100644 index 00000000..ead97637 Binary files /dev/null and b/misc/missing-list.jpg differ diff --git a/misc/missing-list.png b/misc/missing-list.png deleted file mode 100644 index f1cc4fd2..00000000 Binary files a/misc/missing-list.png and /dev/null differ diff --git a/misc/missing-menu.jpg b/misc/missing-menu.jpg new file mode 100644 index 00000000..455ea6fc Binary files /dev/null and b/misc/missing-menu.jpg differ diff --git a/misc/missing-menu.png b/misc/missing-menu.png deleted file mode 100644 index 5e74744b..00000000 Binary files a/misc/missing-menu.png and /dev/null differ diff --git a/misc/share-setting.jpg b/misc/share-setting.jpg index 0ceacf2c..631794a3 100644 Binary files a/misc/share-setting.jpg and b/misc/share-setting.jpg differ diff --git a/model-list.json b/model-list.json index 7845037a..5c3eb391 100644 --- a/model-list.json +++ b/model-list.json @@ -1,5 +1,25 @@ { "models": [ + { + "name": "TAESD3 Decoder", + "type": "TAESD", + "base": "SDXL", + "save_path": "vae_approx", + "description": "(SD3 Verison) To view the preview in high quality while running samples in ComfyUI, you will need this model.", + "reference": "https://github.com/madebyollin/taesd", + "filename": "taesd3_decoder.pth", + "url": "https://github.com/madebyollin/taesd/raw/main/taesd3_decoder.pth" + }, + { + "name": "TAESD3 Encoder", + "type": "TAESD", + "base": "SDXL", + "save_path": "vae_approx", + "description": "(SD3 Verison) To view the preview in high quality while running samples in ComfyUI, you will need this model.", + "reference": "https://github.com/madebyollin/taesd", + "filename": "taesd3_encoder.pth", + "url": "https://github.com/madebyollin/taesd/raw/main/taesd3_encoder.pth" + }, { "name": "TAESDXL Decoder", "type": "TAESD", @@ -120,6 +140,16 @@ "filename": "8x_NMKD-Superscale_150000_G.pth", "url": "https://huggingface.co/uwg/upscaler/resolve/main/ESRGAN/8x_NMKD-Superscale_150000_G.pth" }, + { + "name": "8x_NMKD-Faces_160000_G", + "type": "upscale", + "base": "upscale", + "save_path": "default", + "description": "8x_NMKD-Faces_160000_G upscaler model", + "reference": "https://huggingface.co/gemasai/8x_NMKD-Faces_160000_G/tree/main", + "filename": "8x_NMKD-Faces_160000_G.pth", + "url": "https://huggingface.co/gemasai/8x_NMKD-Faces_160000_G/resolve/main/8x_NMKD-Faces_160000_G.pth" + }, { "name": "LDSR(Latent Diffusion Super Resolution)", "type": "upscale", @@ -2611,6 +2641,368 @@ "reference": "https://huggingface.co/lllyasviel/ic-light", "filename": "iclight_sd15_fcon.safetensors", "url": "https://huggingface.co/lllyasviel/ic-light/resolve/main/iclight_sd15_fcon.safetensors" + }, + + + { + "name": "ID-Animator/animator.ckpt", + "type": "ID-Animator", + "base": "SD1.5", + "save_path": "custom_nodes/ComfyUI_ID_Animator/models", + "description": "ID-Animator checkpoint", + "reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator", + "filename": "animator.ckpt", + "url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/animator.ckpt" + }, + { + "name": "ID-Animator/mm_sd_v15_v2.ckpt", + "type": "ID-Animator", + "base": "SD1.5", + "save_path": "custom_nodes/ComfyUI_ID_Animator/models/animatediff_models", + "description": "AnimateDiff checkpoint for ID-Animator", + "reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator", + "filename": "mm_sd_v15_v2.ckpt", + "url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/mm_sd_v15_v2.ckpt" + }, + { + "name": "ID-Animator/image_encoder", + "type": "ID-Animator", + "base": "SD1.5", + "save_path": "custom_nodes/ComfyUI_ID_Animator/models/image_encoder", + "description": "CLIP Image encoder for ID-Animator", + "reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator", + "filename": "model.safetensors", + "url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/image_encoder/model.safetensors" + }, + + { + "name": "TencentARC/CustomNet", + "type": "CustomNet", + "base": "CustomNet", + "save_path": "custom_nodes/ComfyUI_CustomNet/pretrain", + "description": "CustomNet pretrained model for ComfyUI_CustomNet", + "reference": "https://huggingface.co/TencentARC/CustomNet/tree/main", + "filename": "customnet_v1.pt", + "url": "https://huggingface.co/TencentARC/CustomNet/resolve/main/customnet_v1.pt" + }, + + { + "name": "TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic v2 (fp16)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[2.5GB] Controlnet SDXL Tile model realistic version.", + "reference": "https://huggingface.co/TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic", + "filename": "TTPLANET_Controlnet_Tile_realistic_v2_fp16.safetensors", + "url": "https://huggingface.co/TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic/resolve/main/TTPLANET_Controlnet_Tile_realistic_v2_fp16.safetensors" + }, + { + "name": "TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic v2 (rank256)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[774MB] Controlnet SDXL Tile model realistic version.", + "reference": "https://huggingface.co/TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic", + "filename": "TTPLANET_Controlnet_Tile_realistic_v2_rank256.safetensors", + "url": "https://huggingface.co/TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic/resolve/main/TTPLANET_Controlnet_Tile_realistic_v2_rank256.safetensors" + }, + + { + "name": "ViperYX/RGT_x2.pth", + "type": "RGT", + "base": "RGT", + "save_path": "RGT/RGT", + "description": "[180MB] RGT x2 upscale model for ComfyUI-RGT", + "reference": "https://huggingface.co/ViperYX/RGT/tree/main", + "filename": "RGT_x2.pth", + "url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT/RGT_x2.pth" + }, + { + "name": "ViperYX/RGT_x3.pth", + "type": "RGT", + "base": "RGT", + "save_path": "RGT/RGT", + "description": "[180MB] RGT x3 upscale model for ComfyUI-RGT", + "reference": "https://huggingface.co/ViperYX/RGT/tree/main", + "filename": "RGT_x3.pth", + "url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT/RGT_x3.pth" + }, + { + "name": "ViperYX/RGT_x4.pth", + "type": "RGT", + "base": "RGT", + "save_path": "RGT/RGT", + "description": "[180MB] RGT_S x4 upscale model for ComfyUI-RGT", + "reference": "https://huggingface.co/ViperYX/RGT/tree/main", + "filename": "RGT_x4.pth", + "url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT/RGT_x4.pth" + }, + + { + "name": "ViperYX/RGT_S_x2.pth", + "type": "RGT", + "base": "RGT", + "save_path": "RGT/RGT_S", + "description": "[135MB] RGT_S x2 upscale model for ComfyUI-RGT", + "reference": "https://huggingface.co/ViperYX/RGT/tree/main", + "filename": "RGT_S_x2.pth", + "url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT_S/RGT_S_x2.pth" + }, + { + "name": "ViperYX/RGT_S_x3.pth", + "type": "RGT", + "base": "RGT", + "save_path": "RGT/RGT_S", + "description": "[136MB] RGT_S x3 upscale model for ComfyUI-RGT", + "reference": "https://huggingface.co/ViperYX/RGT/tree/main", + "filename": "RGT_S_x3.pth", + "url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT_S/RGT_S_x3.pth" + }, + { + "name": "ViperYX/RGT_S_x4.pth", + "type": "RGT", + "base": "RGT", + "save_path": "RGT/RGT_S", + "description": "[136MB] RGT_S x4 upscale model for ComfyUI-RGT", + "reference": "https://huggingface.co/ViperYX/RGT/tree/main", + "filename": "RGT_S_x4.pth", + "url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT_S/RGT_S_x4.pth" + }, + + { + "name": "Doubiiu/ToonCrafter model checkpoint", + "type": "checkpoint", + "base": "ToonCrafter", + "save_path": "custom_nodes/ComfyUI-ToonCrafter/ToonCrafter/checkpoints/tooncrafter_512_interp_v1", + "description": "[10.5GB] ToonCrafter checkpoint model for ComfyUI-ToonCrafter", + "reference": "https://huggingface.co/Doubiiu/ToonCrafter/tree/main", + "filename": "model.ckpt", + "url": "https://huggingface.co/Doubiiu/ToonCrafter/resolve/main/model.ckpt" + }, + + { + "name": "xinsir/Controlnet-Scribble-Sdxl-1.0", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL/controlnet-scribble-sdxl-1.0", + "description": "[2.5GB] Controlnet SDXL Scribble model.", + "reference": "https://huggingface.co/xinsir/controlnet-scribble-sdxl-1.0", + "filename": "diffusion_pytorch_model.safetensors", + "url": "https://huggingface.co/xinsir/controlnet-scribble-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors" + }, + { + "name": "xinsir/Controlnet-Canny-Sdxl-1.0 (V2)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL/controlnet-canny-sdxl-1.0", + "description": "[2.5GB] Controlnet SDXL Canny model.", + "reference": "https://huggingface.co/xinsir/controlnet-canny-sdxl-1.0", + "filename": "diffusion_pytorch_model_V2.safetensors", + "url": "https://huggingface.co/xinsir/controlnet-canny-sdxl-1.0/resolve/main/diffusion_pytorch_model_V2.safetensors" + }, + { + "name": "xinsir/Controlnet-Openpose-Sdxl-1.0", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL/controlnet-openpose-sdxl-1.0", + "description": "[2.5GB] Controlnet SDXL Openpose model.", + "reference": "https://huggingface.co/xinsir/controlnet-openpose-sdxl-1.0", + "filename": "diffusion_pytorch_model.safetensors", + "url": "https://huggingface.co/xinsir/controlnet-openpose-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors" + }, + { + "name": "xinsir/Controlnet-Openpose-Sdxl-1.0 (Ver. twins)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL/controlnet-openpose-sdxl-1.0", + "description": "[2.5GB] Controlnet SDXL Openpose model. (Ver. twins)", + "reference": "https://huggingface.co/xinsir/controlnet-openpose-sdxl-1.0", + "filename": "diffusion_pytorch_model_twins.safetensors", + "url": "https://huggingface.co/xinsir/controlnet-openpose-sdxl-1.0/resolve/main/diffusion_pytorch_model_twins.safetensors" + }, + { + "name": "xinsir/Controlnet-Scribble-Sdxl-1.0-Anime", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL/controlnet-scribble-sdxl-1.0-anime", + "description": "[2.5GB] Controlnet SDXL Scribble model. (Ver. anime)", + "reference": "https://huggingface.co/xinsir/anime-painter", + "filename": "diffusion_pytorch_model.safetensors", + "url": "https://huggingface.co/xinsir/anime-painter/resolve/main/diffusion_pytorch_model.safetensors" + }, + + { + "name": "Kijai/ToonCrafter model checkpoint (interpolation fp16)", + "type": "checkpoint", + "base": "ToonCrafter", + "save_path": "checkpoints/ToonCrafter", + "description": "[5.25GB] ToonCrafter checkpoint model for ComfyUI-DynamiCrafterWrapper", + "reference": "https://huggingface.co/Kijai/DynamiCrafter_pruned", + "filename": "tooncrafter_512_interp-fp16.safetensors", + "url": "https://huggingface.co/Kijai/DynamiCrafter_pruned/resolve/main/tooncrafter_512_interp-fp16.safetensors" + }, + + { + "name": "CN-anytest_v4-marged.safetensors", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[2.5GB] AnyTest Controlnet. A model for style transfer.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v4-marged.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v4-marged.safetensors" + }, + { + "name": "CN-anytest_v4-marged_am_dim256.safetensors (dim256/Animagine)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[774MB] AnyTest Controlnet Lora (dim256) for Animagine. A model for style transfer.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v4-marged_am_dim256.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v4-marged_am_dim256.safetensors" + }, + { + "name": "CN-anytest_v4-marged_am_dim128.safetensors (dim128/Animagine)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[396MB] AnyTest Controlnet Lora (dim128) for Animagine. A model for style transfer.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v4-marged_am_dim128.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v4-marged_am_dim128.safetensors" + }, + { + "name": "CN-anytest_v4-marged_pn_dim256.safetensors (dim256/Pony)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[774MB] AnyTest Controlnet Lora (dim256) for Pony. A model for style transfer.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v4-marged_pn_dim256.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v4-marged_pn_dim256.safetensors" + }, + { + "name": "CN-anytest_v4-marged_pn_dim128.safetensors (dim128/Pony)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[396MB] AnyTest Controlnet Lora (dim128) for Pony. A model for style transfer.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v4-marged_pn_dim128.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v4-marged_pn_dim128.safetensors" + }, + + { + "name": "CN-anytest_v3-50000_fp16.safetensors (fp16)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[2.5GB] AnyTest Controlnet. A strict control model.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v3-50000_fp16.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v3-50000_fp16.safetensors" + }, + { + "name": "CN-anytest_v3-50000_am_dim256.safetensors (dim256/Animagine)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[774MB] AnyTest Controlnet Lora (dim256) for Animagine. A strict control model.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v3-50000_am_dim256.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v3-50000_am_dim256.safetensors" + }, + { + "name": "CN-anytest_v3-50000_am_dim128.safetensors (dim128/Animagine)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[396MB] AnyTest Controlnet Lora (dim128) for Animagine. A strict control model.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v3-50000_am_dim128.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v3-50000_am_dim128.safetensors" + }, + { + "name": "CN-anytest_v3-50000_pn_dim256.safetensors (dim256/Pony)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[774MB] AnyTest Controlnet Lora (dim256) for Pony. A strict control model.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v3-50000_pn_dim256.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v3-50000_pn_dim256.safetensors" + }, + { + "name": "CN-anytest_v3-50000_pn_dim128.safetensors (dim128/Pony)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[396MB] AnyTest Controlnet Lora (dim128) for Pony. A strict control model.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v3-50000_pn_dim128.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v3-50000_pn_dim128.safetensors" + }, + + { + "name": "kijai/DepthAnythingV2 (vitb/fp16)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[195MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vitb_fp16.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vitb_fp16.safetensors" + }, + { + "name": "kijai/DepthAnythingV2 (vitb/fp32)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[390MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vitb_fp32.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vitb_fp32.safetensors" + }, + { + "name": "kijai/DepthAnythingV2 (vitl/fp16)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[671MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vitl_fp16.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vitl_fp16.safetensors" + }, + { + "name": "kijai/DepthAnythingV2 (vitl/fp32)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[195MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vitl_fp32.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vitl_fp32.safetensors" + }, + { + "name": "kijai/DepthAnythingV2 (vits/fp16)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[49.6MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vits_fp16.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vits_fp16.safetensors" + }, + { + "name": "kijai/DepthAnythingV2 (vitb/fp32)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[99.2MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vits_fp32.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vits_fp32.safetensors" } ] } diff --git a/node_db/dev/custom-node-list.json b/node_db/dev/custom-node-list.json index 870b57f3..c50b054b 100644 --- a/node_db/dev/custom-node-list.json +++ b/node_db/dev/custom-node-list.json @@ -8,36 +8,655 @@ "install_type": "git-clone", "description": "If you see this message, your ComfyUI-Manager is outdated.\nDev channel provides only the list of the developing nodes. If you want to find the complete node list, please go to the Default channel." }, - + + + { - "author": "huchenlei", - "title": "ComfyUI-IC-Light [WIP]", - "reference": "https://github.com/huchenlei/ComfyUI-IC-Light", + "author": "zhulu111", + "title": "ComfyUI_Bxb [UNSAFE]", + "id": "ComfyUI_Bxb", + "reference": "https://github.com/zhulu111/ComfyUI_Bxb", "files": [ - "https://github.com/huchenlei/ComfyUI-IC-Light" + "https://github.com/zhulu111/ComfyUI_Bxb" ], "install_type": "git-clone", - "description": "ComfyUI-IC-Light" + "description": "sdBxb, a tool that converts ComfyUI workflows into WeChat Mini Program, Douyin Mini Program, and H5 with one click, and supports payments." }, { - "author": "Levy1417", - "title": "Universal-Data-Processing-Kit [UNSAFE]", - "reference": "https://github.com/Levy1417/Universal-Data-Processing-Kit", + "author": "mingqizhang", + "title": "ComfyUI_tool_zmq", + "id": "tool-zmq", + "reference": "https://github.com/mingqizhang/ComfyUI_tool_zmq", "files": [ - "https://github.com/Levy1417/Universal-Data-Processing-Kit" + "https://github.com/mingqizhang/ComfyUI_tool_zmq" ], "install_type": "git-clone", - "description": "Nodes:DPK - Any Eval, DPK - Extract Array, DPK - Run External Program, DPK - Any Literals, DPK - Set Node States, DPK - Realtime Text Preview, DPK - Dynamic Action, DPK - Object To Json, DPK - Json To Object\n[w/This extension includes the ability to execute arbitrary code and programs.]" + "description": "Nodes:ImageConcat, ImageFlip, DWposeTransform, PoseFilter, DrawPose, ReplaceImgae, LoadImageFromPath." }, { - "author": "runtime44", - "title": "Runtime44 ComfyUI Nodes", - "reference": "https://github.com/runtime44/comfyui_r44_nodes", + "author": "kijai", + "title": "ComfyUI-LuminaWrapper [WIP]", + "id": "luminawrapper", + "reference": "https://github.com/kijai/ComfyUI-LuminaWrapper", "files": [ - "https://github.com/runtime44/comfyui_r44_nodes" + "https://github.com/kijai/ComfyUI-LuminaWrapper" ], "install_type": "git-clone", - "description": "Nodes: Runtime44Upscaler, Runtime44ColorMatch, Runtime44DynamicKSampler, Runtime44ImageOverlay, Runtime44ImageResizer, Runtime44ImageToNoise, Runtime44MaskSampler, Runtime44TiledMaskSampler, Runtime44IterativeUpscaleFactor, Runtime44ImageEnhance" + "description": "NOTE:Currently requires flash_attn!" + }, + { + "author": "pzzmyc", + "title": "comfyui-sd3-simple-simpletuner", + "id": "simpletuner", + "reference": "https://github.com/pzzmyc/comfyui-sd3-simple-simpletuner", + "files": [ + "https://github.com/pzzmyc/comfyui-sd3-simple-simpletuner" + ], + "install_type": "git-clone", + "description": "Nodes:sd3 simple simpletuner by hhy." + }, + { + "author": "horidream", + "title": "ComfyUI-Horidream", + "id": "horidream", + "reference": "https://github.com/horidream/ComfyUI-Horidream", + "files": [ + "https://github.com/horidream/ComfyUI-Horidream" + ], + "install_type": "git-clone", + "description": "Nodes:Pass Through With Sound." + }, + { + "author": "kijai", + "title": "ComfyUI-DiffusersSD3Wrapper", + "id": "diffusers-sd3-wrapper", + "reference": "https://github.com/kijai/ComfyUI-DiffusersSD3Wrapper", + "files": [ + "https://github.com/kijai/ComfyUI-DiffusersSD3Wrapper" + ], + "install_type": "git-clone", + "description": "Nodes:Load SD3DiffusersPipeline, SD3 ControlNet Sampler" + }, + { + "author": "AustinMroz", + "title": "ComfyUI-SD3-Medium-CN-Diffusers [WIP]", + "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-SD3-Medium-CN-Diffusers", + "files": [ + "https://github.com/AustinMroz/ComfyUI-WorkflowCheckpointing" + ], + "install_type": "git-clone", + "description": "ComfyUI SD3-Medium ControlNet (Diffusers)" + }, + { + "author": "redhottensors", + "title": "ComfyUI-ODE", + "id": "ode", + "reference": "https://github.com/redhottensors/ComfyUI-ODE", + "files": [ + "https://github.com/redhottensors/ComfyUI-ODE" + ], + "install_type": "git-clone", + "description": "ODE Solvers for ComfyUI\nThis node enables use of torchdiffeq ODE solvers with models. Intended for use with Stable Diffusion 3 and similar flow models." + }, + { + "author": "maruhidd", + "title": "Transparent Background for ComfyUI", + "id": "transparent-bg", + "reference": "https://github.com/maruhidd/ComfyUI_Transparent-Background", + "files": [ + "https://github.com/maruhidd/ComfyUI_Transparent-Background" + ], + "install_type": "git-clone", + "description": "Nodes:Remove Background, Fill Transparent" + }, + { + "author": "baicai99", + "title": "ComfyUI-FrameSkipping", + "id": "frame-skipping", + "reference": "https://github.com/baicai99/ComfyUI-FrameSkipping", + "files": [ + "https://github.com/baicai99/ComfyUI-FrameSkipping" + ], + "install_type": "git-clone", + "description": "This plugin can precisely control the rendering between frames, completing the synthesis of multiple frames in a single load. My homepage includes my attached workflow." + }, + { + "author": "ejektaflex", + "title": "ComfyUI - Ty", + "id": "ty-nodes", + "reference": "https://github.com/ejektaflex/ComfyUI-Ty", + "files": [ + "https://github.com/ejektaflex/ComfyUI-Ty" + ], + "install_type": "git-clone", + "description": "Nodes:Lora Block Weight Regex Loader" + }, + { + "author": "jtydhr88", + "title": "ComfyUI-Unique3D [WIP]", + "id": "unique3d", + "reference": "https://github.com/jtydhr88/ComfyUI-Unique3D", + "files": [ + "https://github.com/jtydhr88/ComfyUI-Unique3D" + ], + "install_type": "git-clone", + "description": "ComfyUI Unique3D is custom nodes that running [a/AiuniAI/Unique3D](https://github.com/AiuniAI/Unique3D) into ComfyUI." + }, + { + "author": "kycg", + "title": "comfyui-Kwtoolset", + "id": "kwtoolset", + "reference": "https://github.com/kycg/comfyui-Kwtoolset", + "files": [ + "https://github.com/kycg/comfyui-Kwtoolset" + ], + "install_type": "git-clone", + "description": "Nodes:KwtoolsetLoraLoaderwithpreview, KwtoolsetCheckpointLoaderwithpreview, KwtoolsetLoadCheckpointsBatch, KwtoolsetGrowMaskPlus, KwtoolsetGetHipMask, KwtoolsetGetHipMasktest, KwtoolsetGetImageSize, KWPositiveString, KWNagetiveString, KWanywhereString, KwtoolsetChangeOpenpose, ..." + }, + { + "author": "mashb1t", + "title": "ComfyUI mashb1t nodes", + "id": "mashb1t", + "reference": "https://github.com/mashb1t/comfyui-nodes-mashb1t", + "files": [ + "https://github.com/mashb1t/comfyui-nodes-mashb1t" + ], + "install_type": "git-clone", + "description": "This Python script is an optional add-on to the Comfy UI stable diffusion client." + }, + { + "author": "immersiveexperience", + "title": "ie-comfyui-color-nodes", + "reference": "https://github.com/immersiveexperience/ie-comfyui-color-nodes", + "files": [ + "https://github.com/immersiveexperience/ie-comfyui-color-nodes" + ], + "install_type": "git-clone", + "description": "Custom ComfyUI nodes for simple color correction." + }, + { + "author": "LZpenguin", + "title": "ComfyUI-Text", + "id": "comfy-text", + "reference": "https://github.com/LZpenguin/ComfyUI-Text", + "files": [ + "https://github.com/LZpenguin/ComfyUI-Text" + ], + "install_type": "git-clone", + "description": "Nodes:Add_text_by_mask.[w/This custom node cannot be installed simultaneously as it has the same repository name as MarkoCa1/ComfyUI-Text.]" + }, + { + "author": "yushan777", + "title": "Y7 Nodes for ComfyUI", + "id": "y7nodes", + "reference": "https://github.com/yushan777/ComfyUI-Y7Nodes", + "files": [ + "https://github.com/yushan777/ComfyUI-Y7Nodes" + ], + "install_type": "git-clone", + "description": "Nodes:Count_Tokens_(Y7)" + }, + { + "author": "norgeous", + "title": "UI Builder [WIP]", + "id": "norgeous", + "reference": "https://github.com/norgeous/ComfyUI-UI-Builder", + "files": [ + "https://github.com/norgeous/ComfyUI-UI-Builder" + ], + "install_type": "git-clone", + "description": "Alternative configurable React UI overlay for Comfy UI." + }, + { + "author": "Shinsplat", + "title": "ComfyUI-Shinsplat [UNSAFE]", + "id": "shinsplat", + "reference": "https://github.com/Shinsplat/ComfyUI-Shinsplat", + "files": [ + "https://github.com/Shinsplat/ComfyUI-Shinsplat" + ], + "install_type": "git-clone", + "description": "Nodes: Clip Text Encode (Shinsplat), Clip Text Encode SDXL (Shinsplat), Lora Loader (Shinsplat).\n[w/This extension poses a risk of executing arbitrary commands through workflow execution. Please be cautious.]" + }, + { + "author": "NitramDom", + "title": "ComfyUI_FacialFlip", + "id": "facialflip", + "reference": "https://github.com/NitramDom/ComfyUI_FacialFlip", + "files": [ + "https://github.com/NitramDom/ComfyUI_FacialFlip" + ], + "install_type": "git-clone", + "description": "Nodes:Swapper" + }, + { + "author": "hy134300", + "title": "comfyui-hydit", + "reference": "https://github.com/hy134300/comfyui-hydit", + "files": [ + "https://github.com/hy134300/comfyui-hydit" + ], + "install_type": "git-clone", + "description": "This repository contains a customized node and workflow designed specifically for HunYuan DIT. The official tests conducted on DDPM, DDIM, and DPMMS have consistently yielded results that align with those obtained through the Diffusers library. However, it's important to note that we cannot assure the consistency of results from other ComfyUI native samplers with the Diffusers inference. We cordially invite users to explore our workflow and are open to receiving any inquiries or suggestions you may have." + }, + { + "author": "corbin-hayden13", + "title": "ComfyUI-Better-Dimensions", + "id": "better-dim", + "reference": "https://github.com/corbin-hayden13/ComfyUI-Better-Dimensions", + "files": [ + "https://github.com/corbin-hayden13/ComfyUI-Better-Dimensions" + ], + "install_type": "git-clone", + "description": "Nodes:BetterImageDimensions, SDXLDimensions, PureRatio" + }, + { + "author": "endman100", + "title": "ComfyUI Nodes: SaveConditioning and LoadConditioning", + "id": "save-load-conditioning", + "reference": "https://github.com/endman100/ComfyUI-SaveAndLoadPromptCondition", + "files": [ + "https://github.com/endman100/ComfyUI-SaveAndLoadPromptCondition" + ], + "install_type": "git-clone", + "description": "The SaveConditioning node is designed to save conditioning data to binary files. This is useful for storing and reusing conditioning information across different sessions or applications.\n[w/This node can only handle very limited conditioning at the text prompt level.]" + }, + { + "author": "marduk191", + "title": "comfyui-marnodes", + "id": "marnodes", + "reference": "https://github.com/marduk191/comfyui-marnodes", + "files": [ + "https://github.com/marduk191/comfyui-marnodes" + ], + "install_type": "git-clone", + "description": "Nodes:marduk191_workflow_settings" + }, + { + "author": "kijai", + "title": "ComfyUI-CV-VAE", + "id": "cv-vae", + "reference": "https://github.com/kijai/ComfyUI-CV-VAE", + "files": [ + "https://github.com/kijai/ComfyUI-CV-VAE" + ], + "install_type": "git-clone", + "description": "Nodes:CV_VAE_Load, CV_VAE_Encode, CV_VAE_Decode" + }, + { + "author": "GentlemanHu", + "title": "ComfyUI Notifier", + "id": "notifier", + "reference": "https://github.com/GentlemanHu/ComfyUI-Notifier", + "files": [ + "https://github.com/GentlemanHu/ComfyUI-Notifier" + ], + "install_type": "git-clone", + "description": "Nodes:GentlemanHu_Notifier" + }, + { + "author": "jimmm-ai", + "title": "TimeUi a ComfyUI Timeline Node System [WIP]", + "id": "timeline", + "reference": "https://github.com/jimmm-ai/TimeUi-a-ComfyUi-Timeline-Node", + "files": [ + "https://github.com/jimmm-ai/TimeUi-a-ComfyUi-Timeline-Node" + ], + "install_type": "git-clone", + "description": "I've been working on the UX/UI of a timeline custom node system for ComfyUI over the past two weeks. The goal is to create a timeline similar to video/animation editing tools, without relying on traditional timeframe code. You can effortlessly add, delete, or rearrange rows, providing a streamlined user experience." + }, + { + "author": "jh-leon-kim", + "title": "ComfyUI-JHK-utils", + "id": "jhk", + "reference": "https://github.com/jh-leon-kim/ComfyUI-JHK-utils", + "files": [ + "https://github.com/jh-leon-kim/ComfyUI-JHK-utils" + ], + "install_type": "git-clone", + "description": "Nodes:JHK_Utils_LoadEmbed, JHK_Utils_string_merge, JHK_Utils_ImageRemoveBackground" + }, + { + "author": "StartHua", + "title": "Comfyui_CXH_CRM", + "id": "cxh-crm", + "reference": "https://github.com/StartHua/Comfyui_CXH_CRM", + "files": [ + "https://github.com/StartHua/Comfyui_CXH_CRM" + ], + "install_type": "git-clone", + "description": "Nodes:CRM" + }, + { + "author": "comfypod", + "title": "ComfyUI-Comflow", + "id": "comflow", + "reference": "https://github.com/comfypod/ComfyUI-Comflow", + "files": [ + "https://github.com/comfypod/ComfyUI-Comflow" + ], + "install_type": "git-clone", + "description": "ComfyUI-Comflow." + }, + { + "author": "AI2lab", + "title": "comfyUI-tool-2lab", + "id": "tool2lab", + "reference": "https://github.com/AI2lab/comfyUI-tool-2lab", + "files": [ + "https://github.com/AI2lab/comfyUI-tool-2lab" + ], + "install_type": "git-clone", + "description": "simple tool set for developing workflow and publish to web api server" + }, + { + "author": "pamparamm", + "title": "ComfyUI-ppm", + "id": "ppm", + "reference": "https://github.com/pamparamm/ComfyUI-ppm", + "files": [ + "https://github.com/pamparamm/ComfyUI-ppm" + ], + "install_type": "git-clone", + "description": "Nodes:Empty Latent Image (Aspect Ratio), Token Counter, Random Prompt Generator, StableCascade_AutoCompLatent, CLIPTextEncode, CLIPMicroConditioning, CLIPNegPip" + }, + { + "author": "Scorpinaus", + "title": "ComfyUI-DiffusersLoader", + "id": "diffusersloader", + "reference": "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader", + "files": [ + "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader" + ], + "install_type": "git-clone", + "description": "The purpose of this package is to understand how loading of diffusers format checkpoints are done in comfyUI and to create a loader that works for SDXL." + }, + { + "author": "FoundD-oka", + "title": "ComfyUI KISEKAE-OOTD", + "id": "kisekae-ootd", + "reference": "https://github.com/FoundD-oka/ComfyUI-kisekae-OOTD", + "files": [ + "https://github.com/FoundD-oka/ComfyUI-kisekae-OOTD" + ], + "install_type": "git-clone", + "description": "Nodes:LoadOOTDPipeline, LoadOOTDPipelineHub, LoadOOTDPipelineHub." + }, + { + "author": "bruce007lee", + "title": "comfyui-tiny-utils", + "id": "tiny-utils", + "reference": "https://github.com/bruce007lee/comfyui-tiny-utils", + "files": [ + "https://github.com/bruce007lee/comfyui-tiny-utils" + ], + "install_type": "git-clone", + "description": "Nodes:FaceAlign, FaceAlignImageProcess, FaceAlignMaskProcess" + }, + { + "author": "zmwv823", + "title": "ComfyUI-AnyText [UNSTABLE]", + "id": "anytext", + "reference": "https://github.com/zmwv823/ComfyUI-AnyText", + "files": [ + "https://github.com/zmwv823/ComfyUI-AnyText" + ], + "install_type": "git-clone", + "description": "Unofficial Simple And Rough Implementation Of [a/AnyText](https://github.com/tyxsspa/AnyText)" + }, + { + "author": "brycegoh", + "title": "brycegoh/comfyui-custom-nodes", + "reference": "https://github.com/brycegoh/comfyui-custom-nodes", + "files": [ + "https://github.com/brycegoh/comfyui-custom-nodes" + ], + "install_type": "git-clone", + "description": "Nodes:MaskAreaComparisonSegment, FillMaskedArea, OCRAndMask, CombineTwoImageIntoOne" + }, + { + "author": "LykosAI", + "title": "ComfyUI Nodes for Inference.Core", + "id": "inference-core", + "reference": "https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes", + "files": [ + "https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes" + ], + "install_type": "git-clone", + "description": "Primary Nodes for Inference.Core and Stability Matrix. With a focus on not impacting startup performance and using fully qualified Node names. [w/This custom node is likely to conflict with many other nodes.]" + }, + { + "author": "blepping", + "title": "comfyui_overly_complicated_sampling", + "reference": "https://github.com/blepping/comfyui_overly_complicated_sampling", + "files": [ + "https://github.com/blepping/comfyui_overly_complicated_sampling" + ], + "install_type": "git-clone", + "description": "Very unstable, experimental and mathematically unsound sampling for ComfyUI.\nCurrent status: In flux, not suitable for general use." + }, + { + "author": "tracerstar", + "title": "comfyui-p5js-node", + "id": "p5js", + "reference": "https://github.com/tracerstar/comfyui-p5js-node", + "files": [ + "https://github.com/tracerstar/comfyui-p5js-node" + ], + "install_type": "git-clone", + "description": "A simple proof of concept node to pass a p5js canvas through ComfyUI for img2img generation use." + }, + { + "author": "chaojie", + "title": "ComfyUI-mobvoi-openapi", + "id": "mobvoi-openapi", + "reference": "https://github.com/chaojie/ComfyUI-mobvoi-openapi", + "files": [ + "https://github.com/chaojie/ComfyUI-mobvoi-openapi" + ], + "install_type": "git-clone", + "description": "Nodes:MobvoiOpenapiMetamanText, MobvoiOpenapiMetamanAudio, MobvoiOpenapiTts, HtmlViewer, OssUploadImage, OssUploadAudio" + }, + { + "author": "immersiveexperience", + "title": "ie-comfyui-color-nodes", + "id": "ie-color-nodes", + "reference": "https://github.com/immersiveexperience/ie-comfyui-color-nodes", + "files": [ + "https://github.com/immersiveexperience/ie-comfyui-color-nodes" + ], + "install_type": "git-clone", + "description": "Custom ComfyUI nodes for simple color correction." + }, + { + "author": "beyastard", + "title": "ComfyUI_BeySoft", + "reference": "https://github.com/beyastard/ComfyUI_BeySoft", + "files": [ + "https://github.com/beyastard/ComfyUI_BeySoft" + ], + "install_type": "git-clone", + "description": "Nodes:BeySoft" + }, + { + "author": "christian-byrne", + "title": "🌌 Infinite Parallax Nodes [WIP]", + "reference": "https://github.com/christian-byrne/infinite-zoom-parallax-nodes", + "files": [ + "https://github.com/christian-byrne/infinite-zoom-parallax-nodes" + ], + "install_type": "git-clone", + "description": "Nodes:Parallax Config, Load Parallax Frame, Save Parallax Object Layers, Layer Shifter for Parallax Outpainting, Save Parallax Frame, Shrink and Pad for Outpainting, Create Infinite Zoom Video" + }, + { + "author": "flyingdogsoftware", + "title": "Gyre for ComfyUI", + "id": "gyre", + "reference": "https://github.com/flyingdogsoftware/gyre_for_comfyui", + "files": [ + "https://github.com/flyingdogsoftware/gyre_for_comfyui" + ], + "install_type": "git-clone", + "description": "Nodes:GyreLoopStart, GyreLoopEnd, GyreIfElse" + }, + { + "author": "githubYiheng", + "title": "comfyui_median_filter", + "id": "median-filter", + "reference": "https://github.com/githubYiheng/comfyui_median_filter", + "files": [ + "https://github.com/githubYiheng/comfyui_median_filter" + ], + "install_type": "git-clone", + "description": "Nodes:Apply Median Filter. [w/This has been updated to be equivalent to the comfyui_kmeans_filter node. Mistake?]" + }, + { + "author": "nat-chan", + "title": "comfyui-eval [UNSAFE]", + "id": "evalnode", + "reference": "https://github.com/nat-chan/comfyui-eval", + "files": [ + "https://github.com/nat-chan/comfyui-eval" + ], + "install_type": "git-clone", + "description": "Nodes:EvalNode [w/Please do not use the node that executes arbitrary code and outputs in any type, as it is dangerous.]" + }, + { + "author": "haofanwang", + "title": "ComfyUI-InstantStyle", + "id": "instantstyle", + "reference": "https://github.com/haofanwang/ComfyUI-InstantStyle", + "files": [ + "https://github.com/haofanwang/ComfyUI-InstantStyle" + ], + "install_type": "git-clone", + "description": "Nodes:PromptLoader, BaseModelLoader, InstantStyleLoader, InstantStyleGenerationNode" + }, + { + "author": "jp0215", + "title": "comfyUI_padding-resize_node", + "reference": "https://github.com/jp0215/comfyUI_padding-resize_node", + "files": [ + "https://github.com/jp0215/comfyUI_padding-resize_node/raw/main/PaddingNode.py", + "https://github.com/jp0215/comfyUI_padding-resize_node/raw/main/ResizeNode.py" + ], + "install_type": "copy", + "description": "Padding image to 8x: input image and mask, if the side length is not an integer multiple of 8, expand the side length to the smallest multiple of 8 greater than the original side length. Output padding image and mask. Resize to the origin: input the generated image and the original image, crop the generated image to the size of the original image, output the cropped image." + }, + { + "author": "Quasimondo", + "title": "ComfyUI-QuasimondoNodes [WIP]", + "id": "quasimondo-nodes", + "reference": "https://github.com/Quasimondo/ComfyUI-QuasimondoNodes", + "files": [ + "https://github.com/Quasimondo/ComfyUI-QuasimondoNodes" + ], + "install_type": "git-clone", + "description": "Nodes:Custom Shader, Spring Mesh" + }, + { + "author": "TSFSean", + "title": "ComfyUI-TSFNodes", + "id": "tsfnodes", + "reference": "https://github.com/TSFSean/ComfyUI-TSFNodes", + "files": [ + "https://github.com/TSFSean/ComfyUI-TSFNodes" + ], + "install_type": "git-clone", + "description": "Nodes:GyroOSC" + }, + { + "author": "blib-la", + "title": "ComfyUI-Captain-Extensions", + "id": "captain", + "reference": "https://github.com/blib-la/ComfyUI-Captain-Extensions", + "files": [ + "https://github.com/blib-la/ComfyUI-Captain-Extensions" + ], + "install_type": "git-clone", + "description": "ComfyUI extensions for better [a/Captain](https://github.com/blib-la/captain) integration." + }, + { + "author": "ejektaflex", + "title": "ComfyUI-Ty", + "reference": "https://github.com/ejektaflex/ComfyUI-Ty", + "files": [ + "https://github.com/ejektaflex/ComfyUI-Ty" + ], + "install_type": "git-clone", + "description": "Nodes:Lora Block Weight Regex Loader" + }, + { + "author": "christian-byrne", + "title": "Python Interpreter ComfyUI Node [UNSAFE]", + "reference": "https://github.com/christian-byrne/python-interpreter-node", + "files": [ + "https://github.com/christian-byrne/python-interpreter-node" + ], + "install_type": "git-clone", + "description": "For debugging, parsing data, generating random values, converting types, testing custom nodes faster.\nReference and use variables in the code using the same names as the inputs in the UI\nWrapper class around tensors with operator overloading for doing common image manipulation tasks.I might remove this aspect\n[w/This extension allows you to run programs through Python code in your workflow, which may not be secure. Use with caution.]" + }, + { + "author": "sofakid", + "title": "dandy [UNSAFE]", + "reference": "https://github.com/sofakid/dandy", + "files": [ + "https://github.com/sofakid/dandy" + ], + "install_type": "git-clone", + "description": "Dandy is a JavaScript bridge for ComfyUI. It includes everything you need to make JavaScript enabled extensions, or just load and code in little editor nodes right in ComfyUI.[w/This code can cause security issues because it allows for the execution of arbitrary JavaScript input.]" + }, + { + "author": "tachyon-beep", + "title": "comfyui-simplefeed [UNSAFE]", + "reference": "https://github.com/tachyon-beep/comfyui-simplefeed", + "files": [ + "https://github.com/tachyon-beep/comfyui-simplefeed" + ], + "install_type": "git-clone", + "description": "A simple image feed for comfyUI which is easily configurable and easily extensible.\nUse the filter button to select which nodes write to the feed. Under settings, there are options that allow you: Position the feed. Set a max iamge count for the feed. Set oldest to newest or newest to oldest." + }, + { + "author": "shadowcz007", + "title": "ComfyUI-PuLID [TEST]", + "reference": "https://github.com/shadowcz007/ComfyUI-PuLID-Test", + "files": [ + "https://github.com/shadowcz007/ComfyUI-PuLID-Test" + ], + "install_type": "git-clone", + "description": "[a/PuLID](https://github.com/ToTheBeginning/PuLID) ComfyUI native implementation." + }, + { + "author": "sangeet", + "title": "comfyui-testui [TEST]", + "reference": "https://github.com/sangeet/comfyui-testui", + "files": [ + "https://github.com/sangeet/comfyui-testui" + ], + "install_type": "git-clone", + "description": "Simple Frontend For ComfyUI workflow" + }, + { + "author": "Elawphant", + "title": "ComfyUI-MusicGen [WIP]", + "id": "musicgen", + "reference": "https://github.com/Elawphant/ComfyUI-MusicGen", + "files": [ + "https://github.com/Elawphant/ComfyUI-MusicGen" + ], + "install_type": "git-clone", + "description": "ComfyUI for Meta MusicGen." + }, + { + "author": "jtscmw01", + "title": "ComfyUI-DiffBIR", + "id": "diffbir", + "reference": "https://github.com/jtscmw01/ComfyUI-DiffBIR", + "files": [ + "https://github.com/jtscmw01/ComfyUI-DiffBIR" + ], + "install_type": "git-clone", + "description": "This extension provides [a/DiffBIR](https://github.com/XPixelGroup/DiffBIR) feature." }, { "author": "ericbeyer", @@ -329,16 +948,6 @@ "install_type": "git-clone", "description": "Generator for StyleGAN 3" }, - { - "author": "christian-byrne", - "title": "elimination-nodes", - "reference": "https://github.com/christian-byrne/elimination-nodes", - "files": [ - "https://github.com/christian-byrne/elimination-nodes" - ], - "install_type": "git-clone", - "description": "Nodes:Paste Cutout on Base Image" - }, { "author": "A719689614", "title": "ComfyUI_AC_FUNV8Beta1", @@ -519,16 +1128,6 @@ "install_type": "git-clone", "description": "Download [a/CLIPSeg](https://huggingface.co/CIDAS/clipseg-rd64-refined/tree/main), move to : models/clipseg" }, - { - "author": "dezi-ai", - "title": "ComfyUI Animate LCM", - "reference": "https://github.com/dezi-ai/ComfyUI-AnimateLCM", - "files": [ - "https://github.com/dezi-ai/ComfyUI-AnimateLCM" - ], - "install_type": "git-clone", - "description": "ComfyUI implementation for [a/AnimateLCM](https://animatelcm.github.io/) [[a/paper](https://arxiv.org/abs/2402.00769)].\b[w/This extension includes a large number of nodes imported from the existing custom nodes, increasing the likelihood of conflicts.]" - }, { "author": "stutya", "title": "ComfyUI-Terminal [UNSAFE]", @@ -839,16 +1438,6 @@ "install_type": "git-clone", "description": "After discovering @storyicon implementation here of Segment Anything, I realized its potential as a powerful tool for ComfyUI if implemented correctly. I delved into the SAM and Dino models. The following is my own adaptation of sam_hq for ComfyUI." }, - { - "author": "phineas-pta", - "title": "comfy-trt-test [WIP]", - "reference": "https://github.com/phineas-pta/comfy-trt-test", - "files": [ - "https://github.com/phineas-pta/comfy-trt-test" - ], - "install_type": "git-clone", - "description": "Test project for ComfyUI TensorRT Support.\nNOT WORKING YET.\nnot automatic yet, do not use ComfyUI-Manager to install !!!.\nnot beginner-friendly yet, still intended to technical users\nNOTE: The reason for registration in the Manager is for guidance, and for detailed installation instructions, please visit the repository." - }, { "author": "Brandelan", "title": "ComfyUI_bd_customNodes", diff --git a/node_db/dev/extension-node-map.json b/node_db/dev/extension-node-map.json index fdedee10..607c449f 100644 --- a/node_db/dev/extension-node-map.json +++ b/node_db/dev/extension-node-map.json @@ -171,10 +171,17 @@ [ "> Clear Text", "> Float to Int", + "> Get Mean Color", "> Int", "> Int to Text", + "> Light Source Mask", "> Load Image", "> Load Image From Folder", + "> Mask Curves", + "> NIKSampler", + "> Noise From Image", + "> Normal Map Lighting", + "> RGB Color", "> Resolution by Aspect Ratio", "> Rotate Image", "> Save Image", @@ -280,6 +287,15 @@ "title_aux": "ComfyUI_LineBreakInserter" } ], + "https://github.com/Elawphant/ComfyUI-MusicGen": [ + [ + "AudioLoader", + "MusicGen" + ], + { + "title_aux": "ComfyUI-MusicGen [WIP]" + } + ], "https://github.com/ExponentialML/ComfyUI_LiveDirector": [ [ "LiveDirector" @@ -313,6 +329,29 @@ "title_aux": "ComfyUI-Notifier" } ], + "https://github.com/GraftingRayman/ComfyUI_GR_PromptSelector": [ + [ + "GR Flip Tile Random Inverted", + "GR Flip Tile Random Red Ring", + "GR Image Details Displayer", + "GR Image Details Saver", + "GR Image Resize", + "GR Image Resize Methods", + "GR Image Size", + "GR Mask Create", + "GR Mask Create Random", + "GR Mask Resize", + "GR Multi Mask Create", + "GR Prompt Selector", + "GR Prompt Selector Multi", + "GR Stack Image", + "GR Tile and Border Image", + "GR Tile and Border Image Random Flip" + ], + { + "title_aux": "ComfyUI-GR" + } + ], "https://github.com/GrindHouse66/ComfyUI-GH_Tools": [ [ "GHImg_Sizer", @@ -354,6 +393,14 @@ "title_aux": "comfy-consistency-vae" } ], + "https://github.com/LZpenguin/ComfyUI-Text": [ + [ + "Add_text_by_mask" + ], + { + "title_aux": "ComfyUI-Text" + } + ], "https://github.com/LarryJane491/ComfyUI-ModelUnloader": [ [ "Model Unloader" @@ -370,6 +417,79 @@ "title_aux": "ComfyUI simple ChatGPT completion [UNSAFE]" } ], + "https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes": [ + [ + "AIO_Preprocessor", + "AnimalPosePreprocessor", + "AnimeFace_SemSegPreprocessor", + "AnimeLineArtPreprocessor", + "BAE-NormalMapPreprocessor", + "BinaryPreprocessor", + "CannyEdgePreprocessor", + "ColorPreprocessor", + "DWPreprocessor", + "DensePosePreprocessor", + "DepthAnythingPreprocessor", + "DiffusionEdge_Preprocessor", + "FacialPartColoringFromPoseKps", + "FakeScribblePreprocessor", + "HEDPreprocessor", + "HintImageEnchance", + "ImageGenResolutionFromImage", + "ImageGenResolutionFromLatent", + "ImageIntensityDetector", + "ImageLuminanceDetector", + "InpaintPreprocessor", + "LayeredDiffusionApply", + "LayeredDiffusionCondApply", + "LayeredDiffusionCondJointApply", + "LayeredDiffusionDecode", + "LayeredDiffusionDecodeRGBA", + "LayeredDiffusionDecodeSplit", + "LayeredDiffusionDiffApply", + "LayeredDiffusionJointApply", + "LeReS-DepthMapPreprocessor", + "LineArtPreprocessor", + "LineartStandardPreprocessor", + "M-LSDPreprocessor", + "Manga2Anime_LineArt_Preprocessor", + "MaskOptFlow", + "MediaPipe-FaceMeshPreprocessor", + "MeshGraphormer-DepthMapPreprocessor", + "MiDaS-DepthMapPreprocessor", + "MiDaS-NormalMapPreprocessor", + "ModelMergeBlockNumber", + "ModelMergeSDXL", + "ModelMergeSDXLDetailedTransformers", + "ModelMergeSDXLTransformers", + "ModelSamplerTonemapNoiseTest", + "OneFormer-ADE20K-SemSegPreprocessor", + "OneFormer-COCO-SemSegPreprocessor", + "OpenposePreprocessor", + "PiDiNetPreprocessor", + "PixelPerfectResolution", + "PromptExpansion", + "ReferenceOnlySimple", + "RescaleClassifierFreeGuidanceTest", + "SAMPreprocessor", + "SavePoseKpsAsJsonFile", + "ScribblePreprocessor", + "Scribble_XDoG_Preprocessor", + "SemSegPreprocessor", + "ShufflePreprocessor", + "TEEDPreprocessor", + "TilePreprocessor", + "TonemapNoiseWithRescaleCFG", + "UniFormer-SemSegPreprocessor", + "Unimatch_OptFlowPreprocessor", + "Zoe-DepthMapPreprocessor", + "Zoe_DepthAnythingPreprocessor" + ], + { + "author": "tstandley", + "title_aux": "ComfyUI Nodes for Inference.Core" + } + ], "https://github.com/MrAdamBlack/CheckProgress": [ [ "CHECK_PROGRESS" @@ -386,6 +506,14 @@ "title_aux": "DJZ-Nodes" } ], + "https://github.com/NitramDom/ComfyUI_FacialFlip": [ + [ + "Swapper" + ], + { + "title_aux": "ComfyUI_FacialFlip" + } + ], "https://github.com/PluMaZero/ComfyUI-SpaceFlower": [ [ "SpaceFlower_HangulPrompt", @@ -395,6 +523,22 @@ "title_aux": "ComfyUI-SpaceFlower" } ], + "https://github.com/Quasimondo/ComfyUI-QuasimondoNodes": [ + [ + "Color Match", + "Custom Shader", + "Folder Queue Manager", + "Image Blend by Mask (Batch)", + "Image Noise Generator", + "Perlin Noise Generator", + "Random Image Generator", + "Spring Mesh", + "Video Queue Manager" + ], + { + "title_aux": "ComfyUI-QuasimondoNodes [WIP]" + } + ], "https://github.com/SadaleNet/ComfyUI-Prompt-To-Prompt": [ [ "CLIPTextEncodePromptToPrompt", @@ -421,15 +565,73 @@ "title_aux": "ComfyUI-MS-Nodes [WIP]" } ], + "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader": [ + [ + "CombinedDiffusersLoader", + "CombinedDiffusersSD15Loader", + "CombinedDiffusersSDXLLoader", + "DiffusersClipLoader", + "DiffusersUNETLoader", + "DiffusersVAELoader", + "SD15CLIPLoader", + "SD15UNETLoader", + "SD15VAELoader", + "SDXLCLIPLoader", + "SDXLUNETLoader", + "SDXLVAELoader" + ], + { + "title_aux": "ComfyUI-DiffusersLoader" + } + ], "https://github.com/SeedV/ComfyUI-SeedV-Nodes": [ [ "CheckpointLoaderSimpleShared //SeedV", + "ControlNetLoaderAdvancedShared", + "LoraLoader //SeedV", "Script" ], { "title_aux": "ComfyUI-SeedV-Nodes [UNSAFE]" } ], + "https://github.com/Shinsplat/ComfyUI-Shinsplat": [ + [ + "Clip Text Encode (Shinsplat)", + "Clip Text Encode SD3 (Shinsplat)", + "Clip Text Encode SDXL (Shinsplat)", + "Green Box (Shinsplat)", + "Lora Loader (Shinsplat)", + "Python (Shinsplat)", + "Python - More Inputs (Shinsplat)", + "String Interpolated (Shinsplat)", + "Sum Wrap (Shinsplat)", + "Variables (Shinsplat)" + ], + { + "author": "Shinsplat", + "description": "", + "nickname": "shinsplat", + "title": "ComfyUI-Shinsplat", + "title_aux": "ComfyUI-Shinsplat [UNSAFE]" + } + ], + "https://github.com/StartHua/Comfyui_CXH_CRM": [ + [ + "CRM" + ], + { + "title_aux": "Comfyui_CXH_CRM" + } + ], + "https://github.com/TSFSean/ComfyUI-TSFNodes": [ + [ + "GyroOSC" + ], + { + "title_aux": "ComfyUI-TSFNodes" + } + ], "https://github.com/Video3DGenResearch/comfyui-batch-input-node": [ [ "BatchImageAndPrompt", @@ -472,6 +674,14 @@ "title_aux": "ComfyUI-AnyText [WIP]" } ], + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PuLID-ZHO": [ + [ + "PuLID_Zho" + ], + { + "title_aux": "ComfyUI-PuLID-ZHO [WIP]" + } + ], "https://github.com/alt-key-project/comfyui-dream-video-batches": [ [ "Blended Transition [DVB]", @@ -512,6 +722,26 @@ "title_aux": "Dream Project Video Batches [WIP]" } ], + "https://github.com/baicai99/ComfyUI-FrameSkipping": [ + [ + "FrameSkipping", + "FrameTruncating", + "IntOperationsNode", + "MaskFrameSkipping", + "WhiteMaskGenerator" + ], + { + "title_aux": "ComfyUI-FrameSkipping" + } + ], + "https://github.com/beyastard/ComfyUI_BeySoft": [ + [ + "BeySoft" + ], + { + "title_aux": "ComfyUI_BeySoft" + } + ], "https://github.com/birnam/ComfyUI-GenData-Pack": [ [ "Checkpoint From String \ud83d\udc69\u200d\ud83d\udcbb", @@ -552,6 +782,15 @@ "title_aux": "Gen Data Tester [WIP]" } ], + "https://github.com/blepping/comfyui_overly_complicated_sampling": [ + [ + "ComposableSampler", + "ComposableStepSampler" + ], + { + "title_aux": "comfyui_overly_complicated_sampling" + } + ], "https://github.com/bruce007lee/comfyui-cleaner": [ [ "cleaner" @@ -560,6 +799,29 @@ "title_aux": "comfyui-cleaner" } ], + "https://github.com/bruce007lee/comfyui-tiny-utils": [ + [ + "CropImageByMask", + "FaceAlign", + "FaceAlignImageProcess", + "FaceAlignMaskProcess", + "ImageFillColorByMask" + ], + { + "title_aux": "comfyui-tiny-utils" + } + ], + "https://github.com/brycegoh/comfyui-custom-nodes": [ + [ + "CombineTwoImageIntoOne", + "FillMaskedArea", + "MaskAreaComparisonSegment", + "OCRAndMask" + ], + { + "title_aux": "brycegoh/comfyui-custom-nodes" + } + ], "https://github.com/chaojie/ComfyUI-DynamiCrafter": [ [ "DynamiCrafter Simple", @@ -571,6 +833,42 @@ "title_aux": "ComfyUI DynamiCrafter" } ], + "https://github.com/chaojie/ComfyUI-mobvoi-openapi": [ + [ + "HtmlViewer", + "MobvoiOpenapiMetamanAudio", + "MobvoiOpenapiMetamanText", + "MobvoiOpenapiTts", + "OssUploadAudio", + "OssUploadImage" + ], + { + "title_aux": "ComfyUI-mobvoi-openapi" + } + ], + "https://github.com/christian-byrne/infinite-zoom-parallax-nodes": [ + [ + "Create Parallax Video", + "Layer Shifter for Parallax Outpainting", + "Load Most Recent Image in Folder", + "Load Parallax Frame", + "Load Random Image-Pose Pair", + "Parallax Config", + "Save Parallax Frame", + "Shrink and Pad for Outpainting" + ], + { + "title_aux": "\ud83c\udf0c Infinite Parallax Nodes [WIP]" + } + ], + "https://github.com/christian-byrne/python-interpreter-node": [ + [ + "Exec Python Code Script" + ], + { + "title_aux": "Python Interpreter ComfyUI Node [UNSAFE]" + } + ], "https://github.com/comfyanonymous/ComfyUI": [ [ "AddNoise", @@ -587,6 +885,7 @@ "CLIPSetLastLayer", "CLIPTextEncode", "CLIPTextEncodeControlnet", + "CLIPTextEncodeSD3", "CLIPTextEncodeSDXL", "CLIPTextEncodeSDXLRefiner", "CLIPVisionEncode", @@ -616,6 +915,7 @@ "DualCLIPLoader", "EmptyImage", "EmptyLatentImage", + "EmptySD3LatentImage", "ExponentialScheduler", "FeatherMask", "FlipSigmas", @@ -683,6 +983,7 @@ "ModelMergeSubtract", "ModelSamplingContinuousEDM", "ModelSamplingDiscrete", + "ModelSamplingSD3", "ModelSamplingStableCascade", "Morphology", "PatchModelAddDownscale", @@ -711,6 +1012,7 @@ "SamplerDPMPP_3M_SDE", "SamplerDPMPP_SDE", "SamplerEulerAncestral", + "SamplerLCMUpscale", "SamplerLMS", "SaveAnimatedPNG", "SaveAnimatedWEBP", @@ -722,6 +1024,7 @@ "SolidMask", "SplitImageWithAlpha", "SplitSigmas", + "SplitSigmasDenoise", "StableCascade_EmptyLatentImage", "StableCascade_StageB_Conditioning", "StableCascade_StageC_VAEEncode", @@ -732,6 +1035,7 @@ "StyleModelLoader", "ThresholdMask", "TomePatchModel", + "TripleCLIPLoader", "UNETLoader", "UNetCrossAttentionMultiply", "UNetSelfAttentionMultiply", @@ -747,6 +1051,7 @@ "VPScheduler", "VideoLinearCFGGuidance", "VideoTriangleCFGGuidance", + "WebcamCapture", "unCLIPCheckpointLoader", "unCLIPConditioning" ], @@ -754,51 +1059,38 @@ "title_aux": "ComfyUI" } ], - "https://github.com/dezi-ai/ComfyUI-AnimateLCM": [ + "https://github.com/comfypod/ComfyUI-Comflow": [ [ - "ADE_AdjustPEFullStretch", - "ADE_AdjustPEManual", - "ADE_AdjustPESweetspotStretch", - "ADE_AnimateDiffCombine", - "ADE_AnimateDiffKeyframe", - "ADE_AnimateDiffLoRALoader", - "ADE_AnimateDiffLoaderGen1", - "ADE_AnimateDiffLoaderV1Advanced", - "ADE_AnimateDiffLoaderWithContext", - "ADE_AnimateDiffModelSettings", - "ADE_AnimateDiffModelSettingsAdvancedAttnStrengths", - "ADE_AnimateDiffModelSettingsSimple", - "ADE_AnimateDiffModelSettings_Release", - "ADE_AnimateDiffSamplingSettings", - "ADE_AnimateDiffSettings", - "ADE_AnimateDiffUniformContextOptions", - "ADE_AnimateDiffUnload", - "ADE_ApplyAnimateDiffModel", - "ADE_ApplyAnimateDiffModelSimple", - "ADE_BatchedContextOptions", - "ADE_EmptyLatentImageLarge", - "ADE_IterationOptsDefault", - "ADE_IterationOptsFreeInit", - "ADE_LoadAnimateDiffModel", - "ADE_LoopedUniformContextOptions", - "ADE_LoopedUniformViewOptions", - "ADE_MaskedLoadLora", - "ADE_MultivalDynamic", - "ADE_MultivalScaledMask", - "ADE_NoiseLayerAdd", - "ADE_NoiseLayerAddWeighted", - "ADE_NoiseLayerReplace", - "ADE_StandardStaticContextOptions", - "ADE_StandardStaticViewOptions", - "ADE_StandardUniformContextOptions", - "ADE_StandardUniformViewOptions", - "ADE_UseEvolvedSampling", - "ADE_ViewsOnlyContextOptions", - "AnimateDiffLoaderV1", - "CheckpointLoaderSimpleWithNoiseSelect" + "ComflowInputBoolean", + "ComflowInputCheckpoint", + "ComflowInputImage", + "ComflowInputImageAlpha", + "ComflowInputImageBatch", + "ComflowInputLora", + "ComflowInputNumber", + "ComflowInputNumberInt", + "ComflowInputNumberSlider", + "ComflowInputText", + "ComflowInputVid", + "ComflowInputVideo", + "ComflowWebsocketImageInput", + "ComflowWebsocketImageOutput" ], { - "title_aux": "ComfyUI Animate LCM" + "description": "", + "nickname": "Comflow", + "title": "comflow", + "title_aux": "ComfyUI-Comflow" + } + ], + "https://github.com/corbin-hayden13/ComfyUI-Better-Dimensions": [ + [ + "BetterImageDimensions", + "PureRatio", + "SDXLDimensions" + ], + { + "title_aux": "ComfyUI-Better-Dimensions" } ], "https://github.com/dfl/comfyui-stylegan": [ @@ -880,6 +1172,31 @@ "title_aux": "ComfyUI-audio" } ], + "https://github.com/ejektaflex/ComfyUI-Ty": [ + [ + "Lora Block Weight Regex Loader // Ty" + ], + { + "title_aux": "ComfyUI-Ty" + } + ], + "https://github.com/endman100/ComfyUI-SaveAndLoadPromptCondition": [ + [ + "LoadContditioning", + "SaveConditioning" + ], + { + "title_aux": "ComfyUI Nodes: SaveConditioning and LoadConditioning" + } + ], + "https://github.com/ericbeyer/guidance_interval": [ + [ + "Guidance Interval" + ], + { + "title_aux": "guidance_interval" + } + ], "https://github.com/flowtyone/comfyui-flowty-lcm": [ [ "LCMSampler" @@ -888,6 +1205,17 @@ "title_aux": "comfyui-flowty-lcm" } ], + "https://github.com/flyingdogsoftware/gyre_for_comfyui": [ + [ + "BackgroundRemoval", + "GyreIfElse", + "GyreLoopEnd", + "GyreLoopStart" + ], + { + "title_aux": "Gyre for ComfyUI" + } + ], "https://github.com/foglerek/comfyui-cem-tools": [ [ "ProcessImageBatch" @@ -907,6 +1235,25 @@ "title_aux": "ComfyUI_stable_fast" } ], + "https://github.com/githubYiheng/comfyui_median_filter": [ + [ + "ImageMedianFilter" + ], + { + "title_aux": "comfyui_median_filter" + } + ], + "https://github.com/haofanwang/ComfyUI-InstantStyle": [ + [ + "BaseModelLoader", + "InstantStyleGenerationNode", + "InstantStyleLoader", + "PromptLoader" + ], + { + "title_aux": "ComfyUI-InstantStyle" + } + ], "https://github.com/houdinii/comfy-magick": [ [ "AdaptiveBlur", @@ -972,6 +1319,18 @@ "title_aux": "comfyui-hb-node" } ], + "https://github.com/hy134300/comfyui-hydit": [ + [ + "DiffusersClipTextEncode", + "DiffusersModelMakeup", + "DiffusersPipelineLoader", + "DiffusersSampler", + "DiffusersSchedulerLoader" + ], + { + "title_aux": "comfyui-hydit" + } + ], "https://github.com/ilovejohnwhite/UncleBillyGoncho": [ [ "CannyEdgePreprocessor", @@ -992,6 +1351,36 @@ "title_aux": "TatToolkit" } ], + "https://github.com/immersiveexperience/ie-comfyui-color-nodes": [ + [ + "Average Color", + "Complementary Color", + "Hex Color to Image", + "Hex to Color Name", + "Random String" + ], + { + "title_aux": "ie-comfyui-color-nodes" + } + ], + "https://github.com/jh-leon-kim/ComfyUI-JHK-utils": [ + [ + "JHK_Utils_ImageRemoveBackground", + "JHK_Utils_LoadEmbed", + "JHK_Utils_string_merge" + ], + { + "title_aux": "ComfyUI-JHK-utils" + } + ], + "https://github.com/jimmm-ai/TimeUi-a-ComfyUi-Timeline-Node": [ + [ + "utils/TimelineUI" + ], + { + "title_aux": "TimeUi a ComfyUI Timeline Node System [WIP]" + } + ], "https://github.com/jn-jairo/jn_node_suite_comfyui": [ [ "JN_AreaInfo", @@ -1069,6 +1458,35 @@ "title_aux": "jn_node_suite_comfyui [WIP]" } ], + "https://github.com/jp0215/comfyUI_padding-resize_node/raw/main/PaddingNode.py": [ + [ + "function" + ], + { + "title_aux": "comfyUI_padding-resize_node" + } + ], + "https://github.com/jtscmw01/ComfyUI-DiffBIR": [ + [ + "DiffBIR_sample", + "DiffBIR_sample_advanced", + "Simple_load", + "Stage1_load", + "Stage2_load" + ], + { + "title_aux": "ComfyUI-DiffBIR" + } + ], + "https://github.com/jtydhr88/ComfyUI-Unique3D": [ + [ + "Unique3DLoadPipeline", + "Unique3DRun" + ], + { + "title_aux": "ComfyUI-Unique3D" + } + ], "https://github.com/kadirnar/ComfyUI-Adapter": [ [ "GarmentSegLoader" @@ -1116,6 +1534,16 @@ "title_aux": "ComfyUI_Usability (WIP)" } ], + "https://github.com/kijai/ComfyUI-CV-VAE": [ + [ + "CV_VAE_Decode", + "CV_VAE_Encode", + "CV_VAE_Load" + ], + { + "title_aux": "ComfyUI-CV-VAE" + } + ], "https://github.com/kijai/ComfyUI-DeepSeek-VL": [ [ "deepseek_vl_inference", @@ -1134,6 +1562,25 @@ "title_aux": "ComfyUI_Prompt_Template_CustomNodes" } ], + "https://github.com/kycg/comfyui-Kwtoolset": [ + [ + "KWNagetiveString", + "KWPositiveString", + "KWanywhereString", + "KwtoolsetChangeOpenpose", + "KwtoolsetCheckpointLoaderwithpreview", + "KwtoolsetGetHipMask", + "KwtoolsetGetHipMasktest", + "KwtoolsetGetImageSize", + "KwtoolsetGrowMaskPlus", + "KwtoolsetLoadCheckpointsBatch", + "KwtoolsetLoraLoaderwithpreview", + "LatentMatch" + ], + { + "title_aux": "comfyui-Kwtoolset" + } + ], "https://github.com/laksjdjf/ssd-1b-comfyui": [ [ "SSD-1B-Loader" @@ -1152,6 +1599,15 @@ "title_aux": "ComfyUI-MotionThiefExperiment" } ], + "https://github.com/longgui0318/comfyui-one-more-step": [ + [ + "Calculate More Step Latent", + "Load More Step Model" + ], + { + "title_aux": "comfyui-one-more-step [WIP]" + } + ], "https://github.com/ltdrdata/ComfyUI-Workflow-Component": [ [ "ComboToString", @@ -1178,6 +1634,37 @@ "title_aux": "ComfyUI-BuildPath" } ], + "https://github.com/marduk191/comfyui-marnodes": [ + [ + "marduk191_5_text_string", + "marduk191_5way_text_switch", + "marduk191_workflow_settings" + ], + { + "author": "\u02f6marduk191", + "description": "A node to set workflow settings.", + "nickname": "marduk191 workflow settings", + "title": "marduk191 workflow settings", + "title_aux": "comfyui-marnodes" + } + ], + "https://github.com/maruhidd/ComfyUI_Transparent-Background": [ + [ + "FillTransparentNode", + "RemoveBackgroundNode" + ], + { + "title_aux": "Transparent Background for ComfyUI" + } + ], + "https://github.com/mashb1t/comfyui-nodes-mashb1t": [ + [ + "mashb1t: LoadImage" + ], + { + "title_aux": "ComfyUI mashb1t nodes" + } + ], "https://github.com/mut-ex/comfyui-gligengui-node": [ [ "GLIGEN_GUI" @@ -1239,18 +1726,32 @@ "title_aux": "ComfyUI-TrollSuite" } ], - "https://github.com/phineas-pta/comfy-trt-test": [ + "https://github.com/oztrkoguz/ComfyUI_Kosmos2_BBox_Cutter": [ [ - "TRT_Lora_Loader", - "TRT_Torch_Compile", - "TRT_Unet_Loader" + "Kosmos2SamplerSimple", + "KosmosLoader", + "Write" ], { - "author": "PTA", - "description": "attempt to use TensorRT with ComfyUI, not yet compatible with ComfyUI-Manager, see README for instructions", - "nickname": "comfy trt test", - "title": "TensorRT with ComfyUI (work-in-progress)", - "title_aux": "comfy-trt-test [WIP]" + "title_aux": "Kosmos2_BBox_Cutter Models" + } + ], + "https://github.com/pamparamm/ComfyUI-ppm": [ + [ + "AttentionCouplePPM", + "CLIPMicroConditioning", + "CLIPNegPip", + "CLIPTextEncodeBREAK", + "CLIPTokenCounter", + "EmptyLatentImageAR", + "EmptyLatentImageARAdvanced", + "LatentToMaskBB", + "LatentToWidthHeight", + "RandomPromptGenerator", + "StableCascade_AutoCompLatent" + ], + { + "title_aux": "ComfyUI-ppm" } ], "https://github.com/poisenbery/NudeNet-Detector-Provider": [ @@ -1269,6 +1770,51 @@ "title_aux": "prism-tools" } ], + "https://github.com/redhottensors/ComfyUI-ODE": [ + [ + "Blended Transition [DVB]", + "Calculation [DVB]", + "Create Frame Set [DVB]", + "Divide [DVB]", + "Fade From Black [DVB]", + "Fade To Black [DVB]", + "Float Input [DVB]", + "For Each Done [DVB]", + "For Each Filename [DVB]", + "Frame Set Append [DVB]", + "Frame Set Frame Dimensions Scaled [DVB]", + "Frame Set Index Offset [DVB]", + "Frame Set Merger [DVB]", + "Frame Set Reindex [DVB]", + "Frame Set Repeat [DVB]", + "Frame Set Reverse [DVB]", + "Frame Set Split Beginning [DVB]", + "Frame Set Split End [DVB]", + "Frame Set Splitter [DVB]", + "Generate Inbetween Frames [DVB]", + "Int Input [DVB]", + "Linear Camera Pan [DVB]", + "Linear Camera Roll [DVB]", + "Linear Camera Zoom [DVB]", + "Load Image From Path [DVB]", + "Multiply [DVB]", + "ODESamplerSelect", + "Sine Camera Pan [DVB]", + "Sine Camera Roll [DVB]", + "Sine Camera Zoom [DVB]", + "String Input [DVB]", + "Text Input [DVB]", + "Trace Memory Allocation [DVB]", + "Unwrap Frame Set [DVB]" + ], + { + "author": "RedHotTensors", + "description": "Adaptive ODE Solvers for ComfyUI", + "nickname": "ComfyUI-ODE", + "title": "ComfyUI-ODE", + "title_aux": "ComfyUI-ODE" + } + ], "https://github.com/sdfxai/SDFXBridgeForComfyUI": [ [ "SDFXClipTextEncode" @@ -1277,6 +1823,17 @@ "title_aux": "SDFXBridgeForComfyUI - ComfyUI Custom Node for SDFX Integration" } ], + "https://github.com/shadowcz007/ComfyUI-PuLID-Test": [ + [ + "ApplyPulid", + "PulidEvaClipLoader", + "PulidInsightFaceLoader", + "PulidModelLoader" + ], + { + "title_aux": "ComfyUI-PuLID [TEST]" + } + ], "https://github.com/shadowcz007/comfyui-CLIPSeg": [ [ "CLIPSeg_", @@ -1288,7 +1845,9 @@ ], "https://github.com/shadowcz007/comfyui-musicgen": [ [ - "Musicgen" + "AudioPlay", + "Musicgen_", + "StableAudio_" ], { "title_aux": "comfyui-musicgen" @@ -1302,6 +1861,50 @@ "title_aux": "CLIPTextEncodeAndEnhancev4 (shirazdesigner)" } ], + "https://github.com/sofakid/dandy": [ + [ + "DandyBooleanCollector", + "DandyBooleanPreview", + "DandyBooleanSplitter", + "DandyCss", + "DandyCssLoader", + "DandyEditorSettings", + "DandyFloatCollector", + "DandyFloatPreview", + "DandyFloatSplitter", + "DandyGradient", + "DandyHtml", + "DandyHtmlLoader", + "DandyImageCollector", + "DandyIntCollector", + "DandyIntPreview", + "DandyIntSplitter", + "DandyJs", + "DandyJsLoader", + "DandyJson", + "DandyJsonLoader", + "DandyLand", + "DandyMaskCollector", + "DandyP5JsDraw", + "DandyP5JsLoader", + "DandyP5JsSetup", + "DandyPixelsJs", + "DandyPixiJs", + "DandyPrompt", + "DandyString", + "DandyStringArrayCollector", + "DandyStringArraySplitter", + "DandyStringCatCollector", + "DandyStringPreview", + "DandyUrlLoader", + "DandyWasmLoader", + "DandyYaml", + "DandyYamlLoader" + ], + { + "title_aux": "dandy [UNSAFE]" + } + ], "https://github.com/stutya/ComfyUI-Terminal": [ [ "Terminal" @@ -1327,6 +1930,14 @@ "title_aux": "my-useful-comfyui-custom-nodes" } ], + "https://github.com/tracerstar/comfyui-p5js-node": [ + [ + "HYPE_P5JSImage" + ], + { + "title_aux": "comfyui-p5js-node" + } + ], "https://github.com/tuckerdarby/ComfyUI-TDNodes": [ [ "HandTrackerNode", @@ -1389,5 +2000,13 @@ { "title_aux": "comfyui-wormley-nodes" } + ], + "https://github.com/yushan777/ComfyUI-Y7Nodes": [ + [ + "Count_Tokens_(Y7)" + ], + { + "title_aux": "Y7 Nodes for ComfyUI" + } ] } \ No newline at end of file diff --git a/node_db/dev/github-stats.json b/node_db/dev/github-stats.json index fb33e461..d444454e 100644 --- a/node_db/dev/github-stats.json +++ b/node_db/dev/github-stats.json @@ -1,350 +1,712 @@ { - "https://github.com/longgui0318/comfyui-one-more-step": { - "stars": 0, - "last_update": "2024-04-28 10:33:08" - }, - "https://github.com/TemryL/ComfyUI-IDM-VTON": { - "stars": 11, - "last_update": "2024-04-28 23:39:01" - }, - "https://github.com/shirazdesigner/CLIPTextEncodeAndEnhancev4": { - "stars": 0, - "last_update": "2024-04-27 13:25:08" - }, - "https://github.com/umisetokikaze/comfyui_mergekit": { - "stars": 0, - "last_update": "2024-04-28 07:21:00" - }, - "https://github.com/Video3DGenResearch/comfyui-batch-input-node": { - "stars": 1, - "last_update": "2024-04-28 15:21:17" - }, - "https://github.com/kijai/ComfyUI-DeepSeek-VL": { - "stars": 12, - "last_update": "2024-04-23 18:10:42" - }, - "https://github.com/GentlemanHu/ComfyUI-Notifier": { - "stars": 1, - "last_update": "2024-04-26 04:22:25" - }, - "https://github.com/nat-chan/comfyui-in-memory-transceiver": { - "stars": 1, - "last_update": "2024-04-24 04:11:05" - }, - "https://github.com/DrMWeigand/ComfyUI_LineBreakInserter": { - "stars": 0, - "last_update": "2024-04-19 11:37:19" - }, - "https://github.com/WilliamStanford/visuallabs_comfyui_nodes": { - "stars": 1, - "last_update": "2024-04-16 21:53:02" - }, - "https://github.com/bruce007lee/comfyui-cleaner": { - "stars": 2, - "last_update": "2024-04-20 15:36:03" - }, - "https://github.com/ExponentialML/ComfyUI_LiveDirector": { - "stars": 32, - "last_update": "2024-04-09 19:01:49" - }, - "https://github.com/logtd/ComfyUI-MotionThiefExperiment": { - "stars": 34, - "last_update": "2024-04-09 01:00:51" - }, - "https://github.com/hy134300/comfyui-hb-node": { - "stars": 0, - "last_update": "2024-04-09 09:56:22" - }, - "https://github.com/gameltb/io_comfyui": { - "stars": 3, - "last_update": "2024-04-06 04:40:05" - }, - "https://github.com/ALatentPlace/ComfyUI_yanc": { - "stars": 4, - "last_update": "2024-04-16 19:03:34" - }, - "https://github.com/Jiffies-64/ComfyUI-SaveImagePlus": { - "stars": 0, - "last_update": "2024-04-01 10:52:59" - }, - "https://github.com/kadirnar/ComfyUI-Adapter": { - "stars": 3, - "last_update": "2024-04-03 12:05:39" - }, - "https://github.com/Beinsezii/comfyui-amd-go-fast": { - "stars": 3, - "last_update": "2024-03-31 01:17:57" - }, - "https://github.com/sugarkwork/comfyui_psd": { - "stars": 0, - "last_update": "2024-03-26 08:24:56" - }, - "https://github.com/SadaleNet/ComfyUI-Prompt-To-Prompt": { - "stars": 15, - "last_update": "2024-03-17 04:30:01" - }, - "https://github.com/MushroomFleet/DJZ-Nodes": { - "stars": 3, - "last_update": "2024-03-18 11:18:42" - }, - "https://github.com/stavsap/ComfyUI-React-SDK": { - "stars": 5, - "last_update": "2024-03-17 21:54:21" - }, - "https://github.com/chaojie/ComfyUI-DynamiCrafter": { - "stars": 86, - "last_update": "2024-03-16 19:08:28" - }, - "https://github.com/cubiq/Comfy_Dungeon": { - "stars": 134, - "last_update": "2024-04-26 11:00:58" - }, - "https://github.com/dfl/comfyui-stylegan": { - "stars": 1, - "last_update": "2024-03-14 14:34:25" - }, - "https://github.com/christian-byrne/elimination-nodes": { - "stars": 4, - "last_update": "2024-04-09 18:51:29" + "https://github.com/17Retoucher/ComfyUI_Fooocus": { + "stars": 51, + "last_update": "2024-02-24 07:33:29", + "author_account_age_days": 162 }, "https://github.com/A719689614/ComfyUI_AC_FUNV8Beta1": { - "stars": 12, - "last_update": "2024-03-08 10:11:44" - }, - "https://github.com/houdinii/comfy-magick": { - "stars": 4, - "last_update": "2024-03-11 06:40:54" - }, - "https://github.com/tjorbogarden/my-useful-comfyui-custom-nodes": { - "stars": 0, - "last_update": "2024-03-05 13:31:31" - }, - "https://github.com/DeTK/ComfyUI-Switch": { - "stars": 0, - "last_update": "2024-03-04 11:52:04" - }, - "https://github.com/GrindHouse66/ComfyUI-GH_Tools": { - "stars": 0, - "last_update": "2024-03-10 13:27:14" - }, - "https://github.com/sdfxai/SDFXBridgeForComfyUI": { - "stars": 2, - "last_update": "2024-04-12 14:09:45" - }, - "https://github.com/SeedV/ComfyUI-SeedV-Nodes": { - "stars": 1, - "last_update": "2024-04-23 07:56:19" - }, - "https://github.com/mut-ex/comfyui-gligengui-node": { - "stars": 24, - "last_update": "2024-02-28 02:46:05" - }, - "https://github.com/unanan/ComfyUI-Dist": { - "stars": 4, - "last_update": "2024-02-28 10:03:50" - }, - "https://github.com/NicholasKao1029/comfyui-hook": { - "stars": 0, - "last_update": "2024-03-07 05:50:56" - }, - "https://github.com/Extraltodeus/Conditioning-token-experiments-for-ComfyUI": { "stars": 13, - "last_update": "2024-03-10 01:04:02" + "last_update": "2024-03-08 10:11:44", + "author_account_age_days": 305 }, - "https://github.com/shadowcz007/comfyui-llamafile": { - "stars": 10, - "last_update": "2024-04-29 08:35:31" + "https://github.com/AI2lab/comfyUI-tool-2lab": { + "stars": 5, + "last_update": "2024-06-06 16:16:11", + "author_account_age_days": 183 }, - "https://github.com/gameltb/ComfyUI_paper_playground": { - "stars": 7, - "last_update": "2024-04-06 10:30:44" + "https://github.com/AIGODLIKE/ComfyUI-Studio": { + "stars": 202, + "last_update": "2024-06-05 00:52:46", + "author_account_age_days": 492 }, - "https://github.com/huizhang0110/ComfyUI_Easy_Nodes_hui": { - "stars": 2, - "last_update": "2024-02-27 08:22:49" - }, - "https://github.com/tuckerdarby/ComfyUI-TDNodes": { - "stars": 3, - "last_update": "2024-02-19 17:00:55" - }, - "https://github.com/shadowcz007/comfyui-musicgen": { - "stars": 0, - "last_update": "2024-02-13 08:45:12" - }, - "https://github.com/shadowcz007/comfyui-CLIPSeg": { - "stars": 0, - "last_update": "2024-02-08 02:16:24" - }, - "https://github.com/dezi-ai/ComfyUI-AnimateLCM": { - "stars": 127, - "last_update": "2024-02-07 17:34:39" - }, - "https://github.com/stutya/ComfyUI-Terminal": { - "stars": 0, - "last_update": "2024-02-05 16:47:28" - }, - "https://github.com/marcueberall/ComfyUI-BuildPath": { - "stars": 0, - "last_update": "2024-02-06 07:57:33" - }, - "https://github.com/LotzF/ComfyUI-Simple-Chat-GPT-completion": { - "stars": 0, - "last_update": "2024-02-04 21:15:22" - }, - "https://github.com/kappa54m/ComfyUI_Usability": { - "stars": 0, - "last_update": "2024-02-05 14:49:45" - }, - "https://github.com/17Retoucher/ComfyUI_Fooocus": { - "stars": 50, - "last_update": "2024-02-24 07:33:29" - }, - "https://github.com/nkchocoai/ComfyUI-PromptUtilities": { - "stars": 6, - "last_update": "2024-02-21 14:47:42" + "https://github.com/ALatentPlace/ComfyUI_yanc": { + "stars": 15, + "last_update": "2024-06-14 09:04:57", + "author_account_age_days": 1450 }, "https://github.com/BadCafeCode/execution-inversion-demo-comfyui": { "stars": 3, - "last_update": "2024-03-23 23:53:13" + "last_update": "2024-03-23 23:53:13", + "author_account_age_days": 421 }, - "https://github.com/unanan/ComfyUI-clip-interrogator": { - "stars": 18, - "last_update": "2024-02-01 09:46:57" - }, - "https://github.com/prismwastaken/comfyui-tools": { - "stars": 0, - "last_update": "2024-03-05 14:34:56" - }, - "https://github.com/poisenbery/NudeNet-Detector-Provider": { - "stars": 1, - "last_update": "2024-02-26 02:11:27" - }, - "https://github.com/LarryJane491/ComfyUI-ModelUnloader": { - "stars": 1, - "last_update": "2024-01-14 08:22:39" - }, - "https://github.com/AIGODLIKE/ComfyUI-Studio": { - "stars": 185, - "last_update": "2024-04-03 03:59:31" - }, - "https://github.com/MrAdamBlack/CheckProgress": { - "stars": 1, - "last_update": "2024-01-10 08:02:18" - }, - "https://github.com/birnam/ComfyUI-GenData-Pack": { - "stars": 0, - "last_update": "2024-03-25 01:25:23" - }, - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-AnyText": { - "stars": 38, - "last_update": "2024-01-07 11:48:05" - }, - "https://github.com/nidefawl/ComfyUI-nidefawl": { - "stars": 0, - "last_update": "2024-01-16 18:16:41" - }, - "https://github.com/kadirnar/comfyui_helpers": { - "stars": 2, - "last_update": "2024-03-04 16:25:30" - }, - "https://github.com/foglerek/comfyui-cem-tools": { - "stars": 1, - "last_update": "2024-01-13 23:22:07" - }, - "https://github.com/talesofai/comfyui-supersave": { - "stars": 1, - "last_update": "2023-12-27 02:05:53" - }, - "https://github.com/Sai-ComfyUI/ComfyUI-MS-Nodes": { - "stars": 2, - "last_update": "2024-02-22 08:34:44" - }, - "https://github.com/eigenpunk/ComfyUI-audio": { - "stars": 44, - "last_update": "2024-03-03 21:14:14" - }, - "https://github.com/Jaxkr/comfyui-terminal-command": { - "stars": 1, - "last_update": "2023-12-03 10:31:40" + "https://github.com/Beinsezii/comfyui-amd-go-fast": { + "stars": 8, + "last_update": "2024-05-10 00:48:37", + "author_account_age_days": 2217 }, "https://github.com/BlueDangerX/ComfyUI-BDXNodes": { "stars": 1, - "last_update": "2023-12-10 04:01:19" - }, - "https://github.com/ilovejohnwhite/UncleBillyGoncho": { - "stars": 0, - "last_update": "2024-02-29 00:16:42" - }, - "https://github.com/IvanZhd/comfyui-codeformer": { - "stars": 0, - "last_update": "2023-12-02 20:51:52" - }, - "https://github.com/alt-key-project/comfyui-dream-video-batches": { - "stars": 46, - "last_update": "2023-12-03 10:31:55" - }, - "https://github.com/oyvindg/ComfyUI-TrollSuite": { - "stars": 0, - "last_update": "2023-11-21 01:46:07" - }, - "https://github.com/romeobuilderotti/ComfyUI-EZ-Pipes": { - "stars": 3, - "last_update": "2023-11-15 22:00:49" - }, - "https://github.com/wormley/comfyui-wormley-nodes": { - "stars": 0, - "last_update": "2023-11-12 19:05:11" - }, - "https://github.com/dnl13/ComfyUI-dnl13-seg": { - "stars": 17, - "last_update": "2024-01-08 10:52:13" - }, - "https://github.com/phineas-pta/comfy-trt-test": { - "stars": 77, - "last_update": "2024-03-10 21:17:56" + "last_update": "2023-12-10 04:01:19", + "author_account_age_days": 237 }, "https://github.com/Brandelan/ComfyUI_bd_customNodes": { "stars": 1, - "last_update": "2023-10-09 00:40:26" + "last_update": "2023-10-09 00:40:26", + "author_account_age_days": 4142 + }, + "https://github.com/DeTK/ComfyUI-Switch": { + "stars": 0, + "last_update": "2024-03-04 11:52:04", + "author_account_age_days": 2022 + }, + "https://github.com/DrMWeigand/ComfyUI_LineBreakInserter": { + "stars": 0, + "last_update": "2024-04-19 11:37:19", + "author_account_age_days": 1022 + }, + "https://github.com/Elawphant/ComfyUI-MusicGen": { + "stars": 4, + "last_update": "2024-05-11 13:33:24", + "author_account_age_days": 2579 + }, + "https://github.com/ExponentialML/ComfyUI_LiveDirector": { + "stars": 34, + "last_update": "2024-04-09 19:01:49", + "author_account_age_days": 1614 + }, + "https://github.com/Extraltodeus/Conditioning-token-experiments-for-ComfyUI": { + "stars": 13, + "last_update": "2024-03-10 01:04:02", + "author_account_age_days": 3140 + }, + "https://github.com/FoundD-oka/ComfyUI-kisekae-OOTD": { + "stars": 0, + "last_update": "2024-06-02 06:13:42", + "author_account_age_days": 428 + }, + "https://github.com/GentlemanHu/ComfyUI-Notifier": { + "stars": 3, + "last_update": "2024-06-04 10:05:38", + "author_account_age_days": 2374 + }, + "https://github.com/GraftingRayman/ComfyUI_GR_PromptSelector": { + "stars": 9, + "last_update": "2024-06-14 09:06:14", + "author_account_age_days": 154 + }, + "https://github.com/GrindHouse66/ComfyUI-GH_Tools": { + "stars": 0, + "last_update": "2024-03-10 13:27:14", + "author_account_age_days": 615 + }, + "https://github.com/IvanZhd/comfyui-codeformer": { + "stars": 0, + "last_update": "2023-12-02 20:51:52", + "author_account_age_days": 2569 + }, + "https://github.com/Jaxkr/comfyui-terminal-command": { + "stars": 1, + "last_update": "2023-12-03 10:31:40", + "author_account_age_days": 4618 + }, + "https://github.com/Jiffies-64/ComfyUI-SaveImagePlus": { + "stars": 0, + "last_update": "2024-04-01 10:52:59", + "author_account_age_days": 882 }, "https://github.com/Jordach/comfy-consistency-vae": { "stars": 68, - "last_update": "2023-11-06 20:50:40" + "last_update": "2023-11-06 20:50:40", + "author_account_age_days": 4503 }, - "https://github.com/gameltb/ComfyUI_stable_fast": { - "stars": 174, - "last_update": "2024-04-01 13:30:57" - }, - "https://github.com/jn-jairo/jn_node_suite_comfyui": { + "https://github.com/LZpenguin/ComfyUI-Text": { "stars": 5, - "last_update": "2024-01-11 20:39:36" + "last_update": "2024-06-15 07:11:12", + "author_account_age_days": 1970 + }, + "https://github.com/LarryJane491/ComfyUI-ModelUnloader": { + "stars": 1, + "last_update": "2024-01-14 08:22:39", + "author_account_age_days": 154 + }, + "https://github.com/LotzF/ComfyUI-Simple-Chat-GPT-completion": { + "stars": 0, + "last_update": "2024-02-04 21:15:22", + "author_account_age_days": 920 + }, + "https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes": { + "stars": 14, + "last_update": "2024-04-05 05:11:51", + "author_account_age_days": 369 + }, + "https://github.com/MrAdamBlack/CheckProgress": { + "stars": 1, + "last_update": "2024-01-10 08:02:18", + "author_account_age_days": 2711 + }, + "https://github.com/MushroomFleet/DJZ-Nodes": { + "stars": 4, + "last_update": "2024-03-18 11:18:42", + "author_account_age_days": 3712 + }, + "https://github.com/NicholasKao1029/comfyui-hook": { + "stars": 0, + "last_update": "2024-03-07 05:50:56", + "author_account_age_days": 2021 + }, + "https://github.com/NitramDom/ComfyUI_FacialFlip": { + "stars": 2, + "last_update": "2024-06-07 14:56:55", + "author_account_age_days": 3163 }, "https://github.com/PluMaZero/ComfyUI-SpaceFlower": { "stars": 4, - "last_update": "2023-12-09 05:55:15" + "last_update": "2023-12-09 05:55:15", + "author_account_age_days": 1049 }, - "https://github.com/laksjdjf/ssd-1b-comfyui": { + "https://github.com/Quasimondo/ComfyUI-QuasimondoNodes": { + "stars": 0, + "last_update": "2024-06-01 21:27:18", + "author_account_age_days": 5266 + }, + "https://github.com/SadaleNet/ComfyUI-Prompt-To-Prompt": { + "stars": 19, + "last_update": "2024-03-17 04:30:01", + "author_account_age_days": 4030 + }, + "https://github.com/Sai-ComfyUI/ComfyUI-MS-Nodes": { + "stars": 2, + "last_update": "2024-02-22 08:34:44", + "author_account_age_days": 200 + }, + "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader": { + "stars": 3, + "last_update": "2024-06-14 09:02:43", + "author_account_age_days": 1101 + }, + "https://github.com/SeedV/ComfyUI-SeedV-Nodes": { "stars": 1, - "last_update": "2023-10-27 20:05:06" + "last_update": "2024-06-05 10:01:47", + "author_account_age_days": 1116 }, - "https://github.com/flowtyone/comfyui-flowty-lcm": { - "stars": 62, - "last_update": "2023-10-23 12:08:55" + "https://github.com/Shinsplat/ComfyUI-Shinsplat": { + "stars": 10, + "last_update": "2024-06-15 11:05:38", + "author_account_age_days": 1015 + }, + "https://github.com/StartHua/Comfyui_CXH_CRM": { + "stars": 24, + "last_update": "2024-06-06 14:15:14", + "author_account_age_days": 2826 + }, + "https://github.com/TSFSean/ComfyUI-TSFNodes": { + "stars": 4, + "last_update": "2024-05-18 00:59:06", + "author_account_age_days": 3463 + }, + "https://github.com/TemryL/ComfyUI-IDM-VTON": { + "stars": 184, + "last_update": "2024-05-30 12:21:57", + "author_account_age_days": 859 + }, + "https://github.com/Video3DGenResearch/comfyui-batch-input-node": { + "stars": 1, + "last_update": "2024-04-28 15:21:17", + "author_account_age_days": 97 + }, + "https://github.com/WSJUSA/Comfyui-StableSR": { + "stars": 36, + "last_update": "2023-10-18 12:40:30", + "author_account_age_days": 1415 + }, + "https://github.com/WilliamStanford/visuallabs_comfyui_nodes": { + "stars": 1, + "last_update": "2024-04-16 21:53:02", + "author_account_age_days": 1760 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-AnyText": { + "stars": 44, + "last_update": "2024-05-22 14:30:05", + "author_account_age_days": 330 + }, + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-PuLID-ZHO": { + "stars": 182, + "last_update": "2024-05-22 13:38:23", + "author_account_age_days": 330 + }, + "https://github.com/alt-key-project/comfyui-dream-video-batches": { + "stars": 50, + "last_update": "2024-05-22 20:52:05", + "author_account_age_days": 651 + }, + "https://github.com/baicai99/ComfyUI-FrameSkipping": { + "stars": 1, + "last_update": "2024-06-15 04:48:19", + "author_account_age_days": 822 + }, + "https://github.com/beyastard/ComfyUI_BeySoft": { + "stars": 0, + "last_update": "2024-05-26 22:44:55", + "author_account_age_days": 4277 + }, + "https://github.com/birnam/ComfyUI-GenData-Pack": { + "stars": 0, + "last_update": "2024-03-25 01:25:23", + "author_account_age_days": 5000 + }, + "https://github.com/blepping/comfyui_overly_complicated_sampling": { + "stars": 5, + "last_update": "2024-06-12 01:05:41", + "author_account_age_days": 145 + }, + "https://github.com/blib-la/ComfyUI-Captain-Extensions": { + "stars": 0, + "last_update": "2024-05-17 23:27:25", + "author_account_age_days": 264 + }, + "https://github.com/bruce007lee/comfyui-cleaner": { + "stars": 3, + "last_update": "2024-04-20 15:36:03", + "author_account_age_days": 4503 + }, + "https://github.com/bruce007lee/comfyui-tiny-utils": { + "stars": 0, + "last_update": "2024-06-07 03:44:47", + "author_account_age_days": 4503 + }, + "https://github.com/brycegoh/comfyui-custom-nodes": { + "stars": 0, + "last_update": "2024-06-05 09:30:06", + "author_account_age_days": 3099 + }, + "https://github.com/chaojie/ComfyUI-DynamiCrafter": { + "stars": 108, + "last_update": "2024-06-14 10:23:59", + "author_account_age_days": 4824 + }, + "https://github.com/chaojie/ComfyUI-mobvoi-openapi": { + "stars": 2, + "last_update": "2024-05-29 09:02:52", + "author_account_age_days": 4824 + }, + "https://github.com/christian-byrne/infinite-zoom-parallax-nodes": { + "stars": 3, + "last_update": "2024-05-27 01:51:24", + "author_account_age_days": 1339 + }, + "https://github.com/christian-byrne/python-interpreter-node": { + "stars": 19, + "last_update": "2024-06-01 06:00:47", + "author_account_age_days": 1339 + }, + "https://github.com/comfyanonymous/ComfyUI": { + "stars": 38239, + "last_update": "2024-06-15 07:12:27", + "author_account_age_days": 540 + }, + "https://github.com/comfypod/ComfyUI-Comflow": { + "stars": 0, + "last_update": "2024-06-14 16:01:27", + "author_account_age_days": 14 + }, + "https://github.com/corbin-hayden13/ComfyUI-Better-Dimensions": { + "stars": 6, + "last_update": "2024-06-12 17:45:21", + "author_account_age_days": 1806 + }, + "https://github.com/cubiq/Comfy_Dungeon": { + "stars": 169, + "last_update": "2024-04-26 11:00:58", + "author_account_age_days": 5002 + }, + "https://github.com/dezi-ai/ComfyUI-AnimateLCM": { + "stars": 147, + "last_update": "2024-02-07 17:34:39", + "author_account_age_days": 168 + }, + "https://github.com/dfl/comfyui-stylegan": { + "stars": 1, + "last_update": "2024-03-14 14:34:25", + "author_account_age_days": 5965 + }, + "https://github.com/dnl13/ComfyUI-dnl13-seg": { + "stars": 16, + "last_update": "2024-01-08 10:52:13", + "author_account_age_days": 4209 }, "https://github.com/doucx/ComfyUI_WcpD_Utility_Kit": { "stars": 1, - "last_update": "2024-01-06 19:07:45" + "last_update": "2024-01-06 19:07:45", + "author_account_age_days": 2314 }, - "https://github.com/WSJUSA/Comfyui-StableSR": { - "stars": 32, - "last_update": "2023-10-18 12:40:30" + "https://github.com/eigenpunk/ComfyUI-audio": { + "stars": 58, + "last_update": "2024-03-03 21:14:14", + "author_account_age_days": 916 + }, + "https://github.com/ejektaflex/ComfyUI-Ty": { + "stars": 0, + "last_update": "2024-06-12 16:08:16", + "author_account_age_days": 2763 + }, + "https://github.com/endman100/ComfyUI-SaveAndLoadPromptCondition": { + "stars": 0, + "last_update": "2024-06-06 06:07:49", + "author_account_age_days": 2464 + }, + "https://github.com/ericbeyer/guidance_interval": { + "stars": 2, + "last_update": "2024-04-16 03:24:01", + "author_account_age_days": 2585 + }, + "https://github.com/flowtyone/comfyui-flowty-lcm": { + "stars": 62, + "last_update": "2023-10-23 12:08:55", + "author_account_age_days": 264 + }, + "https://github.com/flyingdogsoftware/gyre_for_comfyui": { + "stars": 0, + "last_update": "2024-06-13 23:39:25", + "author_account_age_days": 2003 + }, + "https://github.com/foglerek/comfyui-cem-tools": { + "stars": 1, + "last_update": "2024-01-13 23:22:07", + "author_account_age_days": 4029 + }, + "https://github.com/gameltb/ComfyUI_paper_playground": { + "stars": 8, + "last_update": "2024-06-05 07:13:23", + "author_account_age_days": 4046 + }, + "https://github.com/gameltb/ComfyUI_stable_fast": { + "stars": 182, + "last_update": "2024-06-06 12:43:16", + "author_account_age_days": 4046 + }, + "https://github.com/gameltb/io_comfyui": { + "stars": 3, + "last_update": "2024-04-06 04:40:05", + "author_account_age_days": 4046 + }, + "https://github.com/githubYiheng/comfyui_median_filter": { + "stars": 0, + "last_update": "2024-05-24 15:21:40", + "author_account_age_days": 3894 + }, + "https://github.com/haofanwang/ComfyUI-InstantStyle": { + "stars": 5, + "last_update": "2024-05-23 16:11:13", + "author_account_age_days": 2968 + }, + "https://github.com/houdinii/comfy-magick": { + "stars": 4, + "last_update": "2024-03-11 06:40:54", + "author_account_age_days": 3511 + }, + "https://github.com/huchenlei/ComfyUI_densediffusion": { + "stars": 44, + "last_update": "2024-06-11 00:39:28", + "author_account_age_days": 2866 + }, + "https://github.com/huchenlei/ComfyUI_omost": { + "stars": 281, + "last_update": "2024-06-14 12:45:52", + "author_account_age_days": 2866 + }, + "https://github.com/huizhang0110/ComfyUI_Easy_Nodes_hui": { + "stars": 2, + "last_update": "2024-02-27 08:22:49", + "author_account_age_days": 2446 + }, + "https://github.com/hy134300/comfyui-hb-node": { + "stars": 0, + "last_update": "2024-04-09 09:56:22", + "author_account_age_days": 1752 + }, + "https://github.com/hy134300/comfyui-hydit": { + "stars": 5, + "last_update": "2024-06-07 09:52:15", + "author_account_age_days": 1752 + }, + "https://github.com/ilovejohnwhite/UncleBillyGoncho": { + "stars": 0, + "last_update": "2024-02-29 00:16:42", + "author_account_age_days": 864 + }, + "https://github.com/immersiveexperience/ie-comfyui-color-nodes": { + "stars": 1, + "last_update": "2024-06-12 12:25:42", + "author_account_age_days": 260 + }, + "https://github.com/jh-leon-kim/ComfyUI-JHK-utils": { + "stars": 0, + "last_update": "2024-06-04 08:57:52", + "author_account_age_days": 163 + }, + "https://github.com/jimmm-ai/TimeUi-a-ComfyUi-Timeline-Node": { + "stars": 186, + "last_update": "2024-06-12 20:10:22", + "author_account_age_days": 11 + }, + "https://github.com/jn-jairo/jn_node_suite_comfyui": { + "stars": 5, + "last_update": "2024-06-08 05:15:33", + "author_account_age_days": 3975 + }, + "https://github.com/jtscmw01/ComfyUI-DiffBIR": { + "stars": 59, + "last_update": "2024-05-21 05:28:34", + "author_account_age_days": 493 + }, + "https://github.com/jtydhr88/ComfyUI-Unique3D": { + "stars": 7, + "last_update": "2024-06-13 03:03:45", + "author_account_age_days": 4744 + }, + "https://github.com/kadirnar/ComfyUI-Adapter": { + "stars": 3, + "last_update": "2024-04-03 12:05:39", + "author_account_age_days": 2320 + }, + "https://github.com/kadirnar/comfyui_helpers": { + "stars": 2, + "last_update": "2024-03-04 16:25:30", + "author_account_age_days": 2320 + }, + "https://github.com/kappa54m/ComfyUI_Usability": { + "stars": 0, + "last_update": "2024-02-05 14:49:45", + "author_account_age_days": 1502 + }, + "https://github.com/kijai/ComfyUI-CV-VAE": { + "stars": 8, + "last_update": "2024-06-03 21:46:49", + "author_account_age_days": 2174 + }, + "https://github.com/kijai/ComfyUI-DeepSeek-VL": { + "stars": 19, + "last_update": "2024-05-21 16:43:40", + "author_account_age_days": 2174 + }, + "https://github.com/kycg/comfyui-Kwtoolset": { + "stars": 0, + "last_update": "2024-06-12 17:04:09", + "author_account_age_days": 931 + }, + "https://github.com/laksjdjf/ssd-1b-comfyui": { + "stars": 1, + "last_update": "2023-10-27 20:05:06", + "author_account_age_days": 2822 + }, + "https://github.com/logtd/ComfyUI-MotionThiefExperiment": { + "stars": 36, + "last_update": "2024-05-22 00:12:06", + "author_account_age_days": 113 + }, + "https://github.com/longgui0318/comfyui-one-more-step": { + "stars": 0, + "last_update": "2024-05-07 08:40:56", + "author_account_age_days": 4155 }, "https://github.com/ltdrdata/ComfyUI-Workflow-Component": { - "stars": 181, - "last_update": "2024-04-26 01:39:09" + "stars": 192, + "last_update": "2024-04-26 01:39:09", + "author_account_age_days": 453 }, - "https://github.com/comfyanonymous/ComfyUI": { - "stars": 33530, - "last_update": "2024-04-29 00:08:28" + "https://github.com/marcueberall/ComfyUI-BuildPath": { + "stars": 0, + "last_update": "2024-02-06 07:57:33", + "author_account_age_days": 1773 + }, + "https://github.com/marduk191/comfyui-marnodes": { + "stars": 0, + "last_update": "2024-06-14 10:24:11", + "author_account_age_days": 4405 + }, + "https://github.com/maruhidd/ComfyUI_Transparent-Background": { + "stars": 0, + "last_update": "2024-06-14 07:02:56", + "author_account_age_days": 2246 + }, + "https://github.com/mashb1t/comfyui-nodes-mashb1t": { + "stars": 0, + "last_update": "2024-06-11 15:55:53", + "author_account_age_days": 3526 + }, + "https://github.com/mut-ex/comfyui-gligengui-node": { + "stars": 29, + "last_update": "2024-02-28 02:46:05", + "author_account_age_days": 2849 + }, + "https://github.com/nat-chan/comfyui-eval": { + "stars": 1, + "last_update": "2024-05-28 11:56:37", + "author_account_age_days": 2984 + }, + "https://github.com/nat-chan/comfyui-in-memory-transceiver": { + "stars": 1, + "last_update": "2024-05-01 10:03:01", + "author_account_age_days": 2984 + }, + "https://github.com/nidefawl/ComfyUI-nidefawl": { + "stars": 0, + "last_update": "2024-01-16 18:16:41", + "author_account_age_days": 4859 + }, + "https://github.com/nkchocoai/ComfyUI-PromptUtilities": { + "stars": 6, + "last_update": "2024-05-22 23:10:42", + "author_account_age_days": 150 + }, + "https://github.com/norgeous/ComfyUI-UI-Builder": { + "stars": 2, + "last_update": "2024-06-15 11:15:59", + "author_account_age_days": 4020 + }, + "https://github.com/oyvindg/ComfyUI-TrollSuite": { + "stars": 0, + "last_update": "2024-05-22 21:32:03", + "author_account_age_days": 2320 + }, + "https://github.com/oztrkoguz/ComfyUI_Kosmos2_BBox_Cutter": { + "stars": 13, + "last_update": "2024-05-03 10:52:29", + "author_account_age_days": 832 + }, + "https://github.com/pamparamm/ComfyUI-ppm": { + "stars": 2, + "last_update": "2024-06-09 15:42:30", + "author_account_age_days": 2122 + }, + "https://github.com/phineas-pta/comfy-trt-test": { + "stars": 83, + "last_update": "2024-06-04 21:09:17", + "author_account_age_days": 2279 + }, + "https://github.com/poisenbery/NudeNet-Detector-Provider": { + "stars": 1, + "last_update": "2024-02-26 02:11:27", + "author_account_age_days": 1228 + }, + "https://github.com/prismwastaken/comfyui-tools": { + "stars": 0, + "last_update": "2024-03-05 14:34:56", + "author_account_age_days": 148 + }, + "https://github.com/redhottensors/ComfyUI-ODE": { + "stars": 2, + "last_update": "2024-06-15 03:29:48", + "author_account_age_days": 130 + }, + "https://github.com/romeobuilderotti/ComfyUI-EZ-Pipes": { + "stars": 3, + "last_update": "2023-11-15 22:00:49", + "author_account_age_days": 281 + }, + "https://github.com/runtime44/comfyui_r44_nodes": { + "stars": 26, + "last_update": "2024-06-11 10:49:02", + "author_account_age_days": 158 + }, + "https://github.com/sangeet/comfyui-testui": { + "stars": 2, + "last_update": "2024-05-15 00:55:17", + "author_account_age_days": 5071 + }, + "https://github.com/sdfxai/SDFXBridgeForComfyUI": { + "stars": 4, + "last_update": "2024-06-14 10:26:56", + "author_account_age_days": 225 + }, + "https://github.com/shadowcz007/ComfyUI-PuLID-Test": { + "stars": 8, + "last_update": "2024-05-12 14:37:28", + "author_account_age_days": 3305 + }, + "https://github.com/shadowcz007/comfyui-CLIPSeg": { + "stars": 0, + "last_update": "2024-02-08 02:16:24", + "author_account_age_days": 3305 + }, + "https://github.com/shadowcz007/comfyui-llamafile": { + "stars": 15, + "last_update": "2024-05-21 19:47:56", + "author_account_age_days": 3305 + }, + "https://github.com/shadowcz007/comfyui-musicgen": { + "stars": 21, + "last_update": "2024-06-14 10:26:44", + "author_account_age_days": 3305 + }, + "https://github.com/shirazdesigner/CLIPTextEncodeAndEnhancev4": { + "stars": 0, + "last_update": "2024-04-27 13:25:08", + "author_account_age_days": 3953 + }, + "https://github.com/sofakid/dandy": { + "stars": 30, + "last_update": "2024-05-27 21:46:18", + "author_account_age_days": 4044 + }, + "https://github.com/stavsap/ComfyUI-React-SDK": { + "stars": 6, + "last_update": "2024-03-17 21:54:21", + "author_account_age_days": 4074 + }, + "https://github.com/stutya/ComfyUI-Terminal": { + "stars": 0, + "last_update": "2024-02-05 16:47:28", + "author_account_age_days": 3829 + }, + "https://github.com/sugarkwork/comfyui_psd": { + "stars": 1, + "last_update": "2024-03-26 08:24:56", + "author_account_age_days": 866 + }, + "https://github.com/tachyon-beep/comfyui-simplefeed": { + "stars": 3, + "last_update": "2024-05-22 03:30:57", + "author_account_age_days": 4912 + }, + "https://github.com/talesofai/comfyui-supersave": { + "stars": 1, + "last_update": "2023-12-27 02:05:53", + "author_account_age_days": 546 + }, + "https://github.com/tjorbogarden/my-useful-comfyui-custom-nodes": { + "stars": 0, + "last_update": "2024-03-05 13:31:31", + "author_account_age_days": 104 + }, + "https://github.com/tracerstar/comfyui-p5js-node": { + "stars": 25, + "last_update": "2024-05-30 18:33:55", + "author_account_age_days": 5189 + }, + "https://github.com/tuckerdarby/ComfyUI-TDNodes": { + "stars": 3, + "last_update": "2024-02-19 17:00:55", + "author_account_age_days": 2929 + }, + "https://github.com/umisetokikaze/comfyui_mergekit": { + "stars": 0, + "last_update": "2024-04-28 07:21:00", + "author_account_age_days": 1814 + }, + "https://github.com/unanan/ComfyUI-Dist": { + "stars": 5, + "last_update": "2024-02-28 10:03:50", + "author_account_age_days": 2889 + }, + "https://github.com/unanan/ComfyUI-clip-interrogator": { + "stars": 21, + "last_update": "2024-02-01 09:46:57", + "author_account_age_days": 1021 + }, + "https://github.com/wormley/comfyui-wormley-nodes": { + "stars": 0, + "last_update": "2023-11-12 19:05:11", + "author_account_age_days": 2464 + }, + "https://github.com/yushan777/ComfyUI-Y7Nodes": { + "stars": 0, + "last_update": "2024-06-15 11:49:59", + "author_account_age_days": 508 + }, + "https://github.com/zmwv823/ComfyUI-AnyText": { + "stars": 34, + "last_update": "2024-06-14 10:18:27", + "author_account_age_days": 3260 } } \ No newline at end of file diff --git a/node_db/forked/custom-node-list.json b/node_db/forked/custom-node-list.json index 76b4f038..55459114 100644 --- a/node_db/forked/custom-node-list.json +++ b/node_db/forked/custom-node-list.json @@ -1,5 +1,15 @@ { "custom_nodes": [ + { + "author": "meimeilook", + "title": "ComfyUI_IPAdapter_plus.old [backward compatbility]", + "reference": "https://github.com/meimeilook/ComfyUI_IPAdapter_plus.old", + "files": [ + "https://github.com/meimeilook/ComfyUI_IPAdapter_plus.old" + ], + "install_type": "git-clone", + "description": "This repo is created to provide backward compatibility for workflows configured with the old IPAdapter." + }, { "author": "ZHO-ZHO-ZHO", "title": "Dr.Lt.Data/ComfyUI-YoloWorld-EfficientSAM", diff --git a/node_db/legacy/custom-node-list.json b/node_db/legacy/custom-node-list.json index 1083f8d4..220034e5 100644 --- a/node_db/legacy/custom-node-list.json +++ b/node_db/legacy/custom-node-list.json @@ -10,6 +10,165 @@ }, + + { + "author": "udi0510", + "title": "comfyui-slicer [REMOVED]", + "id": "slicer", + "reference": "https://github.com/udi0510/comfyui-slicer", + "files": [ + "https://github.com/udi0510/comfyui-slicer" + ], + "install_type": "git-clone", + "description": "Nodes:SlicerNode" + }, + { + "author": "logtd", + "title": "ComfyUI-FLATTEN [REMOVED]", + "id": "flatten", + "reference": "https://github.com/logtd/ComfyUI-FlattenFlow", + "files": [ + "https://github.com/logtd/ComfyUI-FlattenFlow" + ], + "install_type": "git-clone", + "description": "An alternate trajectory processor for ComfyUI-FLATTEN\nNOTE:When using this trajectory type FLATTEN will use roughly 1/4 VRAM and be ~20% faster at the cost of some consistency (especially when injection_steps are low)." + }, + { + "author": "MackinationsAi", + "title": "ComfyUi_Stuctured-Outputs [REMOVED]", + "id": "struct-output", + "reference": "https://github.com/MackinationsAi/ComfyUi_Stuctured-Outputs", + "files": [ + "https://github.com/MackinationsAi/ComfyUi_Stuctured-Outputs" + ], + "install_type": "git-clone", + "description": "This repository contains a custom node for ComfyUI that allows users to save generative image outputs with custom filenames and folder structures. The filenames are padded to four digits, and the positive and negative prompts are embedded in the image metadata." + }, + { + "author": "laksjdjf", + "title": "attention-couple-ComfyUI [DEPRECATED]", + "id": "attention-couple", + "reference": "https://github.com/laksjdjf/attention-couple-ComfyUI", + "files": [ + "https://github.com/laksjdjf/attention-couple-ComfyUI" + ], + "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.\nNOTE: This has been integrated with cgem156-ComfyUI." + }, + { + "author": "phineas-pta", + "title": "comfy-trt-test [DEPRECATED]", + "reference": "https://github.com/phineas-pta/comfy-trt-test", + "files": [ + "https://github.com/phineas-pta/comfy-trt-test" + ], + "install_type": "git-clone", + "description": "Test project for ComfyUI TensorRT Support.\nNOT WORKING YET.\nnot automatic yet, do not use ComfyUI-Manager to install !!!.\nnot beginner-friendly yet, still intended to technical users\nNOTE: The reason for registration in the Manager is for guidance, and for detailed installation instructions, please visit the repository.\nNOTE: Use 'TensorRT Node for ComfyUI' instead of this." + }, + { + "author": "dezi-ai", + "title": "ComfyUI Animate LCM [NOT MAINTAINED]", + "reference": "https://github.com/dezi-ai/ComfyUI-AnimateLCM", + "files": [ + "https://github.com/dezi-ai/ComfyUI-AnimateLCM" + ], + "install_type": "git-clone", + "description": "ComfyUI implementation for [a/AnimateLCM](https://animatelcm.github.io/) [[a/paper](https://arxiv.org/abs/2402.00769)].\b[w/This extension includes a large number of nodes imported from the existing custom nodes, increasing the likelihood of conflicts.]" + }, + { + "author": "christian-byrne", + "title": "elimination-nodes [REMOVED]", + "reference": "https://github.com/christian-byrne/elimination-nodes", + "files": [ + "https://github.com/christian-byrne/elimination-nodes" + ], + "install_type": "git-clone", + "description": "Nodes:Paste Cutout on Base Image" + }, + { + "author": "Levy1417", + "title": "Universal-Data-Processing-Kit [UNSAFE] [REMOVED]", + "reference": "https://github.com/Levy1417/Universal-Data-Processing-Kit", + "files": [ + "https://github.com/Levy1417/Universal-Data-Processing-Kit" + ], + "install_type": "git-clone", + "description": "Nodes:DPK - Any Eval, DPK - Extract Array, DPK - Run External Program, DPK - Any Literals, DPK - Set Node States, DPK - Realtime Text Preview, DPK - Dynamic Action, DPK - Object To Json, DPK - Json To Object\n[w/This extension includes the ability to execute arbitrary code and programs.]" + }, + { + "author": "liusida", + "title": "ComfyUI-Sida-Remove-Image [UNSAFE] [REMOVED]", + "reference": "https://github.com/liusida/ComfyUI-Sida-Remove-Image", + "files": [ + "https://github.com/liusida/ComfyUI-Sida-Remove-Image" + ], + "install_type": "git-clone", + "description": "Nodes: LoadImageWithPrivacy, RemoveImage.[w/This extension is not secure because it provides the capability to delete files from arbitrary paths.]" + }, + { + "author": "88IO", + "title": "ComfyUI Image Reordering Plugins [REMOVED]", + "reference": "https://github.com/88IO/ComfyUI-ImageReorder", + "files": [ + "https://github.com/88IO/ComfyUI-ImageReorder" + ], + "install_type": "git-clone", + "description": "A custom node reorder multiple image frames based on indexes or curves." + }, + { + "author": "jtydhr88", + "title": "ComfyUI-InstantMesh [DEPRECATED]", + "id": "instant-mesh", + "reference": "https://github.com/jtydhr88/ComfyUI-InstantMesh", + "files": [ + "https://github.com/jtydhr88/ComfyUI-InstantMesh" + ], + "install_type": "git-clone", + "description": "ComfyUI InstantMesh is custom nodes that running TencentARC/InstantMesh into ComfyUI, this extension depends on ComfyUI-3D-Pack. Please refer to Readme carefully to install.\nNOTE: This repo is archived due to ComfyUI-3D-Pack supports InstantMesh, please check 3D-Pack directly if you need it" + }, + { + "author": "biegert", + "title": "CLIPSeg [NOT MAINTAINED]", + "id": "clipseg", + "reference": "https://github.com/biegert/ComfyUI-CLIPSeg", + "files": [ + "https://github.com/biegert/ComfyUI-CLIPSeg/raw/main/custom_nodes/clipseg.py" + ], + "install_type": "copy", + "description": "The CLIPSeg node generates a binary mask for a given input image and text prompt." + }, + { + "author": "tankucc1no", + "title": "ComfyUI-Dragdiffusion [REMOVED]", + "id": "dragdiffusion", + "reference": "https://github.com/tankucc1no/ComfyUI-Dragdiffusion", + "files": [ + "https://github.com/tankucc1no/ComfyUI-Dragdiffusion" + ], + "install_type": "git-clone", + "description": "Implementation of [a/Dragdiffusion](https://github.com/Yujun-Shi/DragDiffusion) in ComfyUI." + }, + { + "author": "wibur0620", + "title": "ComfyUI Ollama (wibur) [REMOVED]", + "id": "ollama-wibur", + "reference": "https://github.com/wibur0620/comfyui-ollama-wibur", + "files": [ + "https://github.com/wibur0620/comfyui-ollama-wibur" + ], + "install_type": "git-clone", + "description": "Custom ComfyUI Nodes for interacting with [a/Ollama](https://ollama.com/) using the ollama python client.\nIntegrate the power of LLMs into ComfyUI workflows easily or just experiment with GPT.\nNOTE: To use this properly, you would need a running Ollama server reachable from the host that is running ComfyUI." + }, + { + "author": "IKHOR", + "title": "ikhor-nodes [REMOVED]", + "reference": "https://github.com/IKHOR/ComfyUI-IKHOR-Jam-Nodes", + "files": [ + "https://github.com/IKHOR/ComfyUI-IKHOR-Jam-Nodes" + ], + "install_type": "git-clone", + "description": "Nodes:LoadFromS3, LoadBatchFromS3, SaveToS3, SaveBatchToS3" + }, { "author": "kijai", "title": "ComfyUI wrapper nodes for IC-light [DEPRECATED]", @@ -60,16 +219,6 @@ "install_type": "git-clone", "description": "Please note that the ImageTextOverlay project is no longer supported and has been moved to a new repository. For ongoing developments, contributions, and issues, please refer to the new repository at: [a/https://github.com/Big-Idea-Technology/ComfyUI-Book-Tools](https://github.com/Big-Idea-Technology/ComfyUI-Book-Tools)" }, - { - "author": "meimeilook", - "title": "ComfyUI_IPAdapter_plus.old [backward compatbility]", - "reference": "https://github.com/meimeilook/ComfyUI_IPAdapter_plus.old", - "files": [ - "https://github.com/meimeilook/ComfyUI_IPAdapter_plus.old" - ], - "install_type": "git-clone", - "description": "This repo is created to provide backward compatibility for workflows configured with the old IPAdapter." - }, { "author": "mlinmg", "title": "LaMa Preprocessor [DEPRECATED]", diff --git a/node_db/new/custom-node-list.json b/node_db/new/custom-node-list.json index 1e5e5bc1..c3ce3687 100644 --- a/node_db/new/custom-node-list.json +++ b/node_db/new/custom-node-list.json @@ -3,719 +3,696 @@ { "author": "#NOTICE_1.13", "title": "NOTICE: This channel is not the default channel.", - "reference": "https://github.com/ltdrdata/ComfyUI-Manager", - "files": [], + "reference": "https://github.com/ltdrdata/ComfyUI-Manager","files": [], "install_type": "git-clone", "description": "If you see this message, your ComfyUI-Manager is outdated.\nRecent channel provides only the list of the latest nodes. If you want to find the complete node list, please go to the Default channel.\nMaking LoRA has never been easier!" }, - - + + + + + + { + "author": "kadirnar", + "title": "ComfyUI-YOLO", + "id": "comfy-yolo", + "reference": "https://github.com/kadirnar/ComfyUI-YOLO", + "files": [ + "https://github.com/kadirnar/ComfyUI-YOLO" + ], + "install_type": "git-clone", + "description": "Nodes:Load Ultralytics Model, Ultralytics Inference, Ultralytics Visualization, Convert to Dictionary, BBox to XYWH" + }, + { + "author": "chris-the-wiz", + "title": "EmbeddingsCurveEditor_ComfyUI", + "id": "embeddings-curve-editor", + "reference": "https://github.com/chris-the-wiz/EmbeddingsCurveEditor_ComfyUI", + "files": [ + "https://github.com/chris-the-wiz/EmbeddingsCurveEditor_ComfyUI" + ], + "install_type": "git-clone", + "description": "Edit embeddings with a curve. Actually should work on any 1D input tensor. Tested with IPAdapter-Plus." + }, + { + "author": "AustinMroz", + "title": "ComfyUI-WorkflowCheckpointing", + "id": "workflowcheckpointing", + "reference": "https://github.com/AustinMroz/ComfyUI-WorkflowCheckpointing", + "files": [ + "https://github.com/AustinMroz/ComfyUI-WorkflowCheckpointing" + ], + "install_type": "git-clone", + "description": "Automatically creates checkpoints during workflow execution. If If an workflow is canceled or ComfyUI crashes mid-execution, then these checkpoints are used when the workflow is re-queued to resume execution with minimal progress loss." + }, + { + "author": "TRI3D-LC", + "title": "ComfyUI-MiroBoard", + "id": "miroboard", + "reference": "https://github.com/TRI3D-LC/ComfyUI-MiroBoard", + "files": [ + "https://github.com/TRI3D-LC/ComfyUI-MiroBoard" + ], + "install_type": "git-clone", + "description": "Nodes: add-image-miro-board." + }, + { + "author": "SamKhoze", + "title": "DeepFuze", + "id": "deepfuze", + "reference": "https://github.com/SamKhoze/ComfyUI-DeepFuze", + "files": [ + "https://github.com/SamKhoze/ComfyUI-DeepFuze" + ], + "install_type": "git-clone", + "description": "DeepFuze is a state-of-the-art deep learning tool that seamlessly integrates with ComfyUI to revolutionize facial transformations, lipsyncing, video generation, voice cloning, face swapping, and lipsync translation. Leveraging advanced algorithms, DeepFuze enables users to combine audio and video with unparalleled realism, ensuring perfectly synchronized facial movements. This innovative solution is ideal for content creators, animators, developers, and anyone seeking to elevate their video editing projects with sophisticated AI-driven features." + }, + { + "author": "AIFSH", + "title": "ComfyUI-UniAnimate", + "id": "unianimate", + "reference": "https://github.com/AIFSH/ComfyUI-UniAnimate", + "files": [ + "https://github.com/AIFSH/ComfyUI-UniAnimate" + ], + "install_type": "git-clone", + "description": "a comfyui custom node for [a/UniAnimate](https://github.com/ali-vilab/UniAnimate)" + }, + { + "author": "AIFSH", + "title": "ComfyUI-Hallo", + "id": "hallo", + "reference": "https://github.com/AIFSH/ComfyUI-Hallo", + "files": [ + "https://github.com/AIFSH/ComfyUI-Hallo" + ], + "install_type": "git-clone", + "description": "a comfyui custom node for [a/hallo](https://github.com/fudan-generative-vision/hallo)" + }, + { + "author": "superyoman", + "title": "comfyui_lumaAPI", + "id": "luma", + "reference": "https://github.com/superyoman/comfyui_lumaAPI", + "files": [ + "https://github.com/superyoman/comfyui_lumaAPI" + ], + "install_type": "git-clone", + "description": "Unofficial Luma API-ComfyUI version.[w/WARN: This project is for learning purpose only!]" + }, + { + "author": "nuanarchy", + "title": "ComfyUI-NuA-BIRD", + "id": "nua-bird", + "reference": "https://github.com/nuanarchy/ComfyUI-NuA-BIRD", + "files": [ + "https://github.com/nuanarchy/ComfyUI-NuA-BIRD" + ], + "install_type": "git-clone", + "description": "ComfyUI implementation of '[a/Blind Image Restoration via Fast Diffusion Inversion](https://github.com/hamadichihaoui/BIRD)' Original [a/article](https://arxiv.org/abs/2405.19572)" + }, + { + "author": "SuperMasterBlasterLaser", + "title": "ComfyUI_YOLO_Classifiers", + "id": "yolo-classifier", + "reference": "https://github.com/SuperMasterBlasterLaser/ComfyUI_YOLO_Classifiers", + "files": [ + "https://github.com/SuperMasterBlasterLaser/ComfyUI_YOLO_Classifiers" + ], + "install_type": "git-clone", + "description": "Nodes:YOLO Classifier Model Loader, YOLO Classify." + }, { "author": "kijai", - "title": "ComfyUI-IC-Light", - "id": "ic-light", - "reference": "https://github.com/kijai/ComfyUI-IC-Light", + "title": "ComfyUI-B-LoRA", + "id": "b-lora", + "reference": "https://github.com/liusida/ComfyUI-B-LoRA", "files": [ - "https://github.com/kijai/ComfyUI-IC-Light" + "https://github.com/liusida/ComfyUI-B-LoRA" ], "install_type": "git-clone", - "description": "ComfyUI native nodes for IC-Light" + "description": "Load and apply B-LoRA models, currently B-LoRA models only works with SDXL (sdxl_base_1.0)." }, { - "author": "Suplex", - "title": "Suplex Misc ComfyUI Nodes", - "id": "suplex", - "reference": "https://github.com/saftle/suplex_comfy_nodes", + "author": "koopke", + "title": "ComfyUI-websocket-data-channel", + "id": "websocket-data-channel", + "reference": "https://github.com/koopke/ComfyUI-websocket-data-channel", "files": [ - "https://github.com/saftle/suplex_comfy_nodes" + "https://github.com/koopke/ComfyUI-websocket-data-channel" ], "install_type": "git-clone", - "description": "Misc Nodes: ControlNet Selector Node, Load Optional ControlNet Model" + "description": "Sending Data from a ComfyUI workflow to the websocket." }, { - "author": "SaltAI", - "title": "SaltAI_LlamaIndex", - "id": "saltai-llamaindex", - "reference": "https://github.com/get-salt-AI/SaltAI_LlamaIndex", + "author": "baicai99", + "title": "ComfyUI-FrameSkipping", + "id": "FrameSkipping", + "reference": "https://github.com/baicai99/ComfyUI-FrameSkipping", "files": [ - "https://github.com/get-salt-AI/SaltAI_LlamaIndex" + "https://github.com/baicai99/ComfyUI-FrameSkipping" ], "install_type": "git-clone", - "description": "An implementation of the RAG LlamaIndex with Agents from AutoGen" + "description": "Used to process video redrawing, frame skipping, frame ending early, etc." }, { - "author": "ITurchenko", - "title": "ComfyUI-SizeFromArray", - "id": "sizefromarray", - "reference": "https://github.com/ITurchenko/ComfyUI-SizeFromArray", + "author": "AIFSH", + "title": "ComfyUI-MimicBrush", + "id": "mimicbrush", + "reference": "https://github.com/AIFSH/ComfyUI-MimicBrush", "files": [ - "https://github.com/ITurchenko/ComfyUI-SizeFromArray" + "https://github.com/AIFSH/ComfyUI-MimicBrush" ], "install_type": "git-clone", - "description": "Nodes:SizeFromArray" + "description": "a comfyui custom node for [a/MimicBrush](https://github.com/ali-vilab/MimicBrush),then inpainting with reference image." }, { - "author": "KewkLW", - "title": "ComfyUI-kewky_tools", - "id": "kewky-tools", - "reference": "https://github.com/KewkLW/ComfyUI-kewky_tools", + "author": "dicksondickson", + "title": "ComfyUI-Dickson-Nodes", + "id": "dicksonnodes", + "reference": "https://github.com/dicksondickson/ComfyUI-Dickson-Nodes", "files": [ - "https://github.com/KewkLW/ComfyUI-kewky_tools" + "https://github.com/dicksondickson/ComfyUI-Dickson-Nodes" ], "install_type": "git-clone", - "description": "Nodes:TensorDebugPlus, FormattedTextOutput" + "description": "Custom nodes for ComfyUI by DicksonDickson." }, { - "author": "Fihade", - "title": "IC-Light-ComfyUI-Node", - "reference": "https://github.com/Fihade/IC-Light-ComfyUI-Node", + "author": "G-370", + "title": "ComfyUI-SD3-Powerlab", + "id": "sd3-powerlab", + "reference": "https://github.com/G-370/ComfyUI-SD3-Powerlab", "files": [ - "https://github.com/Fihade/IC-Light-ComfyUI-Node" + "https://github.com/G-370/ComfyUI-SD3-Powerlab" ], "install_type": "git-clone", - "description": "Original repo: [a/https://github.com/lllyasviel/IC-Light](https://github.com/lllyasviel/IC-Light)\nModels: [a/https://huggingface.co/lllyasviel/ic-light/tree/main](https://huggingface.co/lllyasviel/ic-light/tree/main), [a/https://huggingface.co/digiplay/Photon_v1/tree/main](https://huggingface.co/digiplay/Photon_v1/tree/main)\nmodels go into ComfyUI/models/unet" + "description": "Nodes:Render SD3 Attention, SD3 Attention To Image, SD3 Image Into Attention." }, { - "author": "githubYiheng", - "title": "ComfyUI_GetFileNameFromURL", - "reference": "https://github.com/githubYiheng/ComfyUI_GetFileNameFromURL", + "author": "TylerZoro", + "title": "SD3-Scaling", + "id": "sd3-scaling", + "reference": "https://github.com/TylerZoro/SD3-Scaling", "files": [ - "https://github.com/githubYiheng/ComfyUI_GetFileNameFromURL" + "https://github.com/TylerZoro/SD3-Scaling" ], "install_type": "git-clone", - "description": "GetFileNameFromURL is a ComfyUI custom node that extracts the filename from a URL. It can handle various URLs and is capable of handling redirects." + "description": "Tools for scaling images and latents appropriate to SD3 in ComfyUI." }, { - "author": "cubiq", - "title": "PuLID_ComfyUI", - "id": "pulid", - "reference": "https://github.com/cubiq/PuLID_ComfyUI", + "author": "ShmuelRonen", + "title": "ComfyUI_Gemini_Flash", + "id": "gemini-flash", + "reference": "https://github.com/ShmuelRonen/ComfyUI_Gemini_Flash", "files": [ - "https://github.com/cubiq/PuLID_ComfyUI" + "https://github.com/ShmuelRonen/ComfyUI_Gemini_Flash" ], "install_type": "git-clone", - "description": "[a/PuLID](https://github.com/ToTheBeginning/PuLID) ComfyUI native implementation." + "description": "ComfyUI_Gemini_Flash is a custom node for ComfyUI, integrating the capabilities of the Gemini 1.5 Flash model. This node supports text and vision-based prompts, allowing users to analyze and adapt images to text prompts for text2image tasks." + }, + { + "author": "nagolinc", + "title": "comfyui_openai_node", + "reference": "https://github.com/nagolinc/comfyui_openai_node", + "files": [ + "https://github.com/nagolinc/comfyui_openai_node" + ], + "install_type": "git-clone", + "description": "This provides a single node openai > Open AI query node\nthat takes a system prompt and user message and sends them to chatGPT 3.5\nNote, you MUST have an OPEN AI API key stored in the environment variable OPENAI_API_KEY in order for this to work." + }, + { + "author": "juehackr", + "title": "comfyui_fk_server", + "id": "fk-server", + "reference": "https://github.com/juehackr/comfyui_fk_server", + "files": [ + "https://github.com/juehackr/comfyui_fk_server" + ], + "install_type": "git-clone", + "description": "🤗🤗🤗Comfyui Universal Translation Plugin (no longer requires adding various nodes, directly add translation function on the existing nodes), allowing Comfyui to support Chinese input and automatic translation for any long text input box, while adding error translation function (calling Baidu Translate), achieving translation freedom!" + }, + { + "author": "Yanick112", + "title": "ComfyUI-ToSVG", + "id": "tosvg", + "reference": "https://github.com/Yanick112/ComfyUI-ToSVG", + "files": [ + "https://github.com/Yanick112/ComfyUI-ToSVG" + ], + "install_type": "git-clone", + "description": "This project converts raster images into SVG format using the [a/VTracer](https://github.com/visioncortex/vtracer) library. It's a handy tool for designers and developers who need to work with vector graphics programmatically." + }, + { + "author": "logtd", + "title": "ComfyUI-FLATTEN", + "id": "flatten", + "reference": "https://github.com/logtd/ComfyUI-FlattenFlow", + "files": [ + "https://github.com/logtd/ComfyUI-FlattenFlow" + ], + "install_type": "git-clone", + "description": "An alternate trajectory processor for ComfyUI-FLATTEN\nNOTE:When using this trajectory type FLATTEN will use roughly 1/4 VRAM and be ~20% faster at the cost of some consistency (especially when injection_steps are low)." + }, + { + "author": "toxicwind", + "title": "TTools for ComfyUI", + "id": "ttools", + "reference": "https://github.com/toxicwind/ComfyUI-TTools", + "files": [ + "https://github.com/toxicwind/ComfyUI-TTools" + ], + "install_type": "git-clone", + "description": "Text Randomization and Formatting, JSON Extraction and Processing, SD3 Resolution Solver" + }, + { + "author": "ljleb", + "title": "Mecha Merge Node Pack", + "id": "mecha", + "reference": "https://github.com/ljleb/comfy-mecha", + "files": [ + "https://github.com/ljleb/comfy-mecha" + ], + "install_type": "git-clone", + "description": "Model merging node pack with a focus on low memory footprint." + }, + { + "author": "Michael Standen", + "title": "Ollama Prompt Encode", + "id": "ollamapromptencode", + "reference": "https://github.com/ScreamingHawk/comfyui-ollama-prompt-encode", + "files": [ + "https://github.com/ScreamingHawk/comfyui-ollama-prompt-encode" + ], + "install_type": "git-clone", + "description": "A prompt generator and CLIP encoder using AI provided by Ollama." }, { "author": "smthemex", - "title": "ComfyUI_Llama3_8B", - "reference": "https://github.com/smthemex/ComfyUI_Llama3_8B", + "title": "ComfyUI_Pops", + "id": "pops", + "reference": "https://github.com/smthemex/ComfyUI_Pops", "files": [ - "https://github.com/smthemex/ComfyUI_Llama3_8B" + "https://github.com/smthemex/ComfyUI_Pops" ], "install_type": "git-clone", - "description": "Llama3_8B for comfyUI, using pipeline workflow." + "description": "You can use [a/Popspaper](https://popspaper.github.io/pOps/) method in comfyUI" }, { - "author": "Sida Liu", - "title": "ComfyUI-AutoCropFaces", - "reference": "https://github.com/liusida/ComfyUI-AutoCropFaces", + "author": "Late Night Labs", + "title": "LNL Frame Selector", + "id": "lnlframeselector", + "reference": "https://github.com/latenightlabs/ComfyUI-LNL", "files": [ - "https://github.com/liusida/ComfyUI-AutoCropFaces" + "https://github.com/latenightlabs/ComfyUI-LNL" ], "install_type": "git-clone", - "description": "Use RetinaFace to detect and automatically crop faces." + "description": "Frame Selector & Sequence Selection Node for ComfyUI." }, { - "author": "AIFSH", - "title": "ComfyUI-XTTS", - "reference": "https://github.com/AIFSH/ComfyUI-XTTS", + "author": "shobhitic", + "title": "PlusMinusTextClip - Single node for Positive and Negative Prompts", + "id": "plusminustextclip", + "reference": "https://github.com/shobhitic/ComfyUI-PlusMinusTextClip", "files": [ - "https://github.com/AIFSH/ComfyUI-XTTS" + "https://github.com/shobhitic/ComfyUI-PlusMinusTextClip" ], "install_type": "git-clone", - "description": "a custom comfyui node for [a/coqui-ai/TTS](https://github.com/coqui-ai/TTS.git)'s xtts module! support 17 languages voice cloning and tts" + "description": "This adds a node that has both the positive and negative prompts as input in one node. You can just add one node and be done with both Positive and Negative prompts, in place of adding two different nodes for them." }, { - "author": "chenpx976", - "title": "ComfyUI-RunRunRun", - "reference": "https://github.com/chenpx976/ComfyUI-RunRunRun", + "author": "huchenlei", + "title": "ComfyUI_omost", + "id": "omost", + "reference": "https://github.com/huchenlei/ComfyUI_omost", "files": [ - "https://github.com/chenpx976/ComfyUI-RunRunRun" + "https://github.com/huchenlei/ComfyUI_omost" ], "install_type": "git-clone", - "description": "add http api http://127.0.0.1:8188/comfyui-run/run use in other llm project." + "description": "ComfyUI implementation of [a/Omost](https://github.com/lllyasviel/Omost), and everything about regional prompt.\nNOTE: You need to install ComfyUI_densediffusion to use this node." }, { - "author": "AI2lab", - "title": "comfyUI-DeepSeek-2lab", - "reference": "https://github.com/AI2lab/comfyUI-DeepSeek-2lab", + "author": "huchenlei", + "title": "ComfyUI DenseDiffusion", + "id": "densediffusion", + "reference": "https://github.com/huchenlei/ComfyUI_densediffusion", "files": [ - "https://github.com/AI2lab/comfyUI-DeepSeek-2lab" + "https://github.com/huchenlei/ComfyUI_densediffusion" ], "install_type": "git-clone", - "description": "Unofficial implementation of DeepSeek for ComfyUI" + "description": "[a/DenseDiffusion](https://github.com/naver-ai/DenseDiffusion) custom node for ComfyUI." }, + { - "author": "ZeDarkAdam", - "title": "ComfyUI-Embeddings-Tools", - "reference": "https://github.com/ZeDarkAdam/ComfyUI-Embeddings-Tools", + "author": "ZHO-ZHO-ZHO", + "title": "ComfyUI-Qwen-2", + "id": "qwen-2", + "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-2", "files": [ - "https://github.com/ZeDarkAdam/ComfyUI-Embeddings-Tools" + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-2" ], "install_type": "git-clone", - "description": "EmbeddingsNameLoader, EmbendingList" + "description": "Using Qwen-2 in ComfyUI" }, { - "author": "KoreTeknology", - "title": "ComfyUI Universal Styler", - "reference": "https://github.com/KoreTeknology/ComfyUI-Universal-Styler", + "author": "BenNarum", + "title": "SigmaWaveFormNodes", + "id": "sigmawaveform", + "reference": "https://github.com/BenNarum/SigmaWaveFormNode", "files": [ - "https://github.com/KoreTeknology/ComfyUI-Universal-Styler" + "https://github.com/BenNarum/SigmaWaveFormNode" ], "install_type": "git-clone", - "description": "A research Node based project on Artificial Intelligence using ComfyUI visual editor with Stable diffusion Local processing focus in mind. This custom node is intended to serve the purpose to offer a large palette of prompting scenrarios, based on Public Checkpoint Models OR/AND Private custom Models and LoRas. It includes an integrated learning machine process as well as a set of workflows." - }, - { - "author": "chaojie", - "title": "ComfyUI-Video-Editing-X-Attention", - "reference": "https://github.com/chaojie/ComfyUI-Video-Editing-X-Attention", - "files": [ - "https://github.com/chaojie/ComfyUI-Video-Editing-X-Attention" - ], - "install_type": "git-clone", - "description": "Investigating the Effectiveness of Cross Attention to Unlock Zero-Shot Editing of Text-to-Video Diffusion Models" - }, - { - "author": "philz1337x", - "title": "✨ Clarity AI - Creative Image Upscaler and Enhancer for ComfyUI", - "reference": "https://github.com/philz1337x/ComfyUI-ClarityAI", - "files": ["https://github.com/philz1337x/ComfyUI-ClarityAI"], - "install_type": "git-clone", - "description": "[a/Clarity AI](https://clarityai.cc) is a creative image enhancer and is able to upscale to high resolution. [w/NOTE: This is a Magnific AI alternative for ComfyUI.] \nCreate an API key on [a/ClarityAI.cc/api](https://clarityai.cc/api) and add to environment variable 'CAI_API_KEY'\nAlternatively you can write your API key to file 'cai_platform_key.txt'\nYou can also use and/or override the above by entering your API key in the 'api_key_override' field of the node." - }, - { - "author": "AIFSH", - "title": "ComfyUI-FishSpeech", - "reference": "https://github.com/AIFSH/ComfyUI-FishSpeech", - "files": [ - "https://github.com/AIFSH/ComfyUI-FishSpeech" - ], - "install_type": "git-clone", - "description": "a custom comfyui node for [a/fish-speech](https://github.com/fishaudio/fish-speech.git)" - }, - { - "author": "osiworx", - "title": "ComfyUI_Prompt-Quill", - "reference": "https://github.com/osi1880vr/prompt_quill_comfyui", - "files": [ - "https://github.com/osi1880vr/prompt_quill_comfyui" - ], - "install_type": "git-clone", - "description": "Nodes:Use Prompt Quill in Comfyui" - }, - { - "author": "runtime44", - "title": "Runtime44 ComfyUI Nodes", - "reference": "https://github.com/runtime44/comfyui_r44_nodes", - "files": [ - "https://github.com/runtime44/comfyui_r44_nodes" - ], - "install_type": "git-clone", - "description": "Nodes: Runtime44Upscaler, Runtime44ColorMatch, Runtime44DynamicKSampler, Runtime44ImageOverlay, Runtime44ImageResizer, Runtime44ImageToNoise, Runtime44MaskSampler, Runtime44TiledMaskSampler, Runtime44IterativeUpscaleFactor, Runtime44ImageEnhance" - }, - { - "author": "BAIS1C", - "title": "ComfyUI_RSS_Feed_Reader", - "reference": "https://github.com/BAIS1C/ComfyUI_RSS_Feed_Reader", - "files": [ - "https://github.com/BAIS1C/ComfyUI_RSS_Feed_Reader" - ], - "install_type": "git-clone", - "description": "A Simple Python RSS Feed Reader to create Prompts in Comfy UI" - }, - { - "author": "curiousjp", - "title": "ComfyUI-MaskBatchPermutations", - "reference": "https://github.com/curiousjp/ComfyUI-MaskBatchPermutations", - "files": [ - "https://github.com/curiousjp/ComfyUI-MaskBatchPermutations" - ], - "install_type": "git-clone", - "description": "Permutes a mask batch to present possible additive combinations. Passing a mask batch (e.g. out of [a/SEGS to Mask Batch](https://github.com/ltdrdata/ComfyUI-Impact-Pack)) will return a new mask batch representing all the possible combinations of the included masks. So, a mask batch with two mask sections, 'A' and 'B', will return a batch containing an empty mask, an empty mask & A, an empty mask & B, and an empty mask & A & B." - }, - { - "author": "yuvraj108c", - "title": "ComfyUI Upscaler TensorRT", - "reference": "https://github.com/yuvraj108c/ComfyUI-Upscaler-Tensorrt", - "files": [ - "https://github.com/yuvraj108c/ComfyUI-Upscaler-Tensorrt" - ], - "install_type": "git-clone", - "description": "This project provides a Tensorrt implementation for fast image upscaling inside ComfyUI (3-4x faster)" + "description": "A set of tools for generating and altering sigmas in ComfyUI." }, { "author": "alessandrozonta", - "title": "Bounding Box Crop Node for ComfyUI", - "reference": "https://github.com/alessandrozonta/ComfyUI-CenterNode", + "title": "OpenPose Node", + "id": "openpose-alessandrozonta", + "reference": "https://github.com/alessandrozonta/ComfyUI-OpenPose", "files": [ - "https://github.com/alessandrozonta/ComfyUI-CenterNode" + "https://github.com/alessandrozonta/ComfyUI-OpenPose" ], "install_type": "git-clone", "description": "This extension contains a custom node for ComfyUI. The node, called 'Bounding Box Crop', is designed to compute the top-left coordinates of a cropped bounding box based on input coordinates and dimensions of the final cropped image. It does so computing the center of the cropping area and then computing where the top-left coordinates would be." }, { - "author": "Gourieff", - "title": "ComfyUI-FutureWarningIgnore", - "reference": "https://github.com/Gourieff/ComfyUI-FutureWarningIgnore", + "author": "GavChap", + "title": "ComfyUI-SD3LatentSelectRes", + "id": "sd3latent-select-res", + "reference": "https://github.com/GavChap/ComfyUI-SD3LatentSelectRes", "files": [ - "https://github.com/Gourieff/ComfyUI-FutureWarningIgnore/raw/main/0_FutureWarningIgnore.py" + "https://github.com/GavChap/ComfyUI-SD3LatentSelectRes" + ], + "install_type": "git-clone", + "description": "You'll get a new node called SD3 Latent Select Resolution, you can pick the x and y sizes from a list." + }, + { + "author": "Jin Liu", + "title": "ComfyUI-LJNodes", + "id": "ComfyUI-LJNodes", + "reference": "https://github.com/coolzilj/ComfyUI-LJNodes", + "files": [ + "https://github.com/coolzilj/ComfyUI-LJNodes" + ], + "install_type": "git-clone", + "description": "A variety of custom nodes to enhance ComfyUI for a buttery smooth experience." + }, + { + "author": "marduk191", + "title": "marduk191 workflow settings", + "id": "marnodes", + "reference": "https://github.com/marduk191/comfyui-marnodes", + "files": [ + "https://github.com/marduk191/comfyui-marnodes" + ], + "install_type": "git-clone", + "description": "A node to set workflow settings." + }, + { + "author": "denfrost", + "title": "Den_ComfyUI_Workflows", + "id": "den", + "reference": "https://github.com/denfrost/Den_ComfyUI_Workflow", + "files": [ + "https://github.com/denfrost/Den_ComfyUI_Workflow" + ], + "install_type": "git-clone", + "description": "Custom nodes make easy Advanced Workflows. Focus on Image/Video and ControlNet efficiency and performances. Manipulation of Latent Space, Automatic pipeline with a bit efforts." + }, + { + "author": "seghier", + "title": "ComfyUI_LibreTranslate", + "reference": "https://github.com/seghier/ComfyUI_LibreTranslate", + "files": [ + "https://github.com/seghier/ComfyUI_LibreTranslate/raw/main/translate_node.py" ], "install_type": "copy", - "description": "This extension collapses 'future warning'" + "description": "Use LibreTranslation in ComfyUI [a/https://github.com/LibreTranslate/LibreTranslate](https://github.com/LibreTranslate/LibreTranslate)" }, { - "author": "kealiu", - "title": "ComfyUI-Zero123-Porting", - "reference": "https://github.com/kealiu/ComfyUI-Zero123-Porting", + "author": "Limbicnation", + "title": "ComfyUIDepthEstimation", + "reference": "https://github.com/Limbicnation/ComfyUIDepthEstimation", "files": [ - "https://github.com/kealiu/ComfyUI-Zero123-Porting" + "https://github.com/Limbicnation/ComfyUIDepthEstimation/raw/main/depth_estimation_node.py" ], - "install_type": "git-clone", - "description": "Zero-1-to-3: Zero-shot One Image to 3D Object, unofficial porting of original [Zero123](https://github.com/cvlab-columbia/zero123)" + "pip": ["transformers"], + "install_type": "copy", + "description": "A custom depth estimation node for ComfyUI using transformer models. It integrates depth estimation with automatic gamma correction, contrast adjustment, and edge detection, based on the [a/TransformDepth](https://github.com/Limbicnation/TransformDepth) repository." }, { - "author": "TemryL", - "title": "ComfyUI-IDM-VTON", - "reference": "https://github.com/TemryL/ComfyUI-IDM-VTON", + "author": "shadowcz007", + "title": "comfyui-sound-lab", + "id": "soundlab", + "reference": "https://github.com/shadowcz007/comfyui-sound-lab", "files": [ - "https://github.com/TemryL/ComfyUI-IDM-VTON" + "https://github.com/shadowcz007/comfyui-sound-lab" ], "install_type": "git-clone", - "description": "ComfyUI adaptation of [a/IDM-VTON](https://github.com/yisol/IDM-VTON) for virtual try-on." + "description": "Nodes:Music Gen, Audio Play, Stable Audio" }, { - "author": "sugarkwork", - "title": "comfyui_cohere", - "reference": "https://github.com/sugarkwork/comfyui_cohere", + "author": "DannyStone1999", + "title": "ComfyUI-Depth2Mask", + "reference": "https://github.com/DannyStone1999/ComfyUI-Depth2Mask", "files": [ - "https://github.com/sugarkwork/comfyui_cohere" + "https://github.com/DannyStone1999/ComfyUI-Depth2Mask/raw/main/Depth2Mask.py" ], - "install_type": "git-clone", - "description": "This is a node for using cohere (Command R+) from ComfyUI. You need to edit the startup .bat file of ComfyUI and describe the API key obtained from Cohere as follows." - }, - { - "author": "NStor", - "title": "ComfyUI-RUS localization", - "reference": "https://github.com/Nestorchik/NStor-ComfyUI-Translation", - "files": [ - "https://github.com/Nestorchik/NStor-ComfyUI-Translation" - ], - "install_type": "git-clone", - "description": "Russian localization of ComfyUI, ComafyUI-Manager & more..." - }, - { - "author": "jax-explorer", - "title": "fast_video_comfyui", - "reference": "https://github.com/jax-explorer/fast_video_comfyui", - "files": [ - "https://github.com/jax-explorer/fast_video_comfyui" - ], - "install_type": "git-clone", - "description": "Nodes:FastImageListToImageBatch" - }, - { - "author": "GentlemanHu", - "title": "ComfyUI Suno API", - "reference": "https://github.com/GentlemanHu/ComfyUI-SunoAI", - "files": [ - "https://github.com/GentlemanHu/ComfyUI-SunoAI" - ], - "install_type": "git-clone", - "description": "An unofficial Python library for [a/Suno AI](https://www.suno.ai/) API" - }, - { - "author": "AIFSH", - "title": "ComfyUI-RVC", - "reference": "https://github.com/AIFSH/ComfyUI-RVC", - "files": [ - "https://github.com/AIFSH/ComfyUI-RVC" - ], - "install_type": "git-clone", - "description": "a comfyui custom node for [a/Retrieval-based-Voice-Conversion-WebUI](https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI.git), you can Voice-Conversion in comfyui now!\nNOTE: make sure ffmpeg is worked in your commandline for Linux" - }, - { - "author": "web3nomad", - "title": "ComfyUI Invisible Watermark", - "reference": "https://github.com/web3nomad/ComfyUI_Invisible_Watermark", - "files": [ - "https://github.com/web3nomad/ComfyUI_Invisible_Watermark" - ], - "install_type": "git-clone", - "description": "Nodes: InvisibleWatermarkEncode" - }, - { - "author": "JettHu", - "title": "ComfyUI-TCD", - "reference": "https://github.com/JettHu/ComfyUI-TCD", - "files": [ - "https://github.com/JettHu/ComfyUI-TCD" - ], - "install_type": "git-clone", - "description": "ComfyUI implementation for [a/TCD](https://github.com/jabir-zheng/TCD)." - }, - { - "author": "florestefano1975", - "title": "ComfyUI HiDiffusion", - "reference": "https://github.com/florestefano1975/ComfyUI-HiDiffusion", - "files": [ - "https://github.com/florestefano1975/ComfyUI-HiDiffusion" - ], - "install_type": "git-clone", - "description": "Simple custom nodes for testing and use HiDiffusion technology: https://github.com/megvii-research/HiDiffusion/" - }, - { - "author": "nat-chan", - "title": "ComfyUI-Transceiver📡", - "reference": "https://github.com/nat-chan/comfyui-transceiver", - "files": [ - "https://github.com/nat-chan/comfyui-transceiver" - ], - "install_type": "git-clone", - "description": "Transceiver is a python library that swiftly exchanges fundamental data structures, specifically numpy arrays, between processes, optimizing AI inference tasks that utilize ComfyUI." - }, - { - "author": "blepping", - "title": "ComfyUI jank HiDiffusion", - "reference": "https://github.com/blepping/comfyui_jankhidiffusion", - "files": [ - "https://github.com/blepping/comfyui_jankhidiffusion" - ], - "install_type": "git-clone", - "description": "Janky experimental attempt at implementing [a/HiDiffusion](https://github.com/megvii-research/HiDiffusion) for ComfyUI." - }, - { - "author": "ZHO-ZHO-ZHO", - "title": "Phi-3-mini in ComfyUI", - "reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Phi-3-mini", - "files": [ - "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Phi-3-mini" - ], - "install_type": "git-clone", - "description": "Nodes:Phi3mini_4k_ModelLoader_Zho, Phi3mini_4k_Zho, Phi3mini_4k_Chat_Zho" - }, - { - "author": "da2el-ai", - "title": "D2 Steps", - "reference": "https://github.com/da2el-ai/ComfyUI-d2-steps", - "files": [ - "https://github.com/da2el-ai/ComfyUI-d2-steps" - ], - "install_type": "git-clone", - "description": "A handy custom node for using Refiner (switching to a different checkpoint midway) When you specify the end of the base checkpoint, you can extract refiner_start which is end + 1. The output is fixed as an INT, so it can be passed to the handy custom node, Anything Everywhere? Since it only outputs a numerical value, it can also be used for other purposes." - }, - { - "author": "da2el-ai", - "title": "D2 Size Selector", - "reference": "https://github.com/da2el-ai/ComfyUI-d2-size-selector", - "files": [ - "https://github.com/da2el-ai/ComfyUI-d2-size-selector" - ], - "install_type": "git-clone", - "description": "This is a custom node that allows you to easily call up and set image size presets. Settings can be made by editing the included config.yaml. It is almost identical to Comfyroll Studio's CR AspectRatio. I created it because I wanted to easily edit the presets." - }, - { - "author": "cfreilich", - "title": "Virtuoso Nodes for ComfyUI", - "reference": "https://github.com/chrisfreilich/virtuoso-nodes", - "files": [ - "https://github.com/chrisfreilich/virtuoso-nodes" - ], - "install_type": "git-clone", - "description": "Photoshop type functions and adjustment layers: 30 blend modes, Selective Color, Blend If, Color Balance, Solid Color Images, Black and White, Hue/Saturation, Levels, and RGB Splitting and Merging." - }, - { - "author": "Shinsplat", - "title": "ComfyUI-Shinsplat", - "reference": "https://github.com/Shinsplat/ComfyUI-Shinsplat", - "files": [ - "https://github.com/Shinsplat/ComfyUI-Shinsplat" - ], - "install_type": "git-clone", - "description": "Nodes: Clip Text Encode (Shinsplat), Clip Text Encode SDXL (Shinsplat), Lora Loader (Shinsplat)." - }, - { - "author": "daxcay", - "title": "ComfyUI-DRMN", - "reference": "https://github.com/daxcay/ComfyUI-DRMN", - "files": [ - "https://github.com/daxcay/ComfyUI-DRMN" - ], - "install_type": "git-clone", - "description": "Data Research And Manipulators Nodes for Model Trainers, Artists, Designers and Animators. Captions, Visualizer, Text Manipulator" - }, - { - "author": "kealiu", - "title": "ComfyUI-ZeroShot-MTrans", - "reference": "https://github.com/kealiu/ComfyUI-ZeroShot-MTrans", - "files": [ - "https://github.com/kealiu/ComfyUI-ZeroShot-MTrans" - ], - "install_type": "git-clone", - "description": "An unofficial ComfyUI custom node for [a/Zero-Shot Material Transfer from a Single Image](https://ttchengab.github.io/zest), Given an input image (e.g., a photo of an apple) and a single material exemplar image (e.g., a golden bowl), ZeST can transfer the gold material from the exemplar onto the apple with accurate lighting cues while making everything else consistent." - }, - { - "author": "fofr", - "title": "ComfyUI-HyperSDXL1StepUnetScheduler (ByteDance)", - "id": "hypersdxl", - "reference": "https://github.com/fofr/ComfyUI-HyperSDXL1StepUnetScheduler", - "files": [ - "https://github.com/fofr/ComfyUI-HyperSDXL1StepUnetScheduler" - ], - "install_type": "git-clone", - "description": "Original author is ByteDance.\nComfyUI sampler for HyperSDXL UNet\nPorted from: [a/https://huggingface.co/ByteDance/Hyper-SD](https://huggingface.co/ByteDance/Hyper-SD)" - }, - { - "author": "TaiTair", - "title": "Simswap Node for ComfyUI", - "id": "simswap", - "reference": "https://github.com/TaiTair/comfyui-simswap", - "files": [ - "https://github.com/TaiTair/comfyui-simswap" - ], - "install_type": "git-clone", - "description": "A hacky implementation of Simswap based on [a/Comfyui ReActor Node 0.5.1](https://github.com/Gourieff/comfyui-reactor-node) and [a/Simswap](https://github.com/neuralchen/SimSwap)." - }, - { - "author": "jeffy5", - "title": "comfyui-fb-utils", - "reference": "https://github.com/jeffy5/comfyui-faceless-node", - "files": [ - "https://github.com/jeffy5/comfyui-faceless-node" - ], - "install_type": "git-clone", - "description": "Nodes:Load Video, Load Frames, Save Video, Face Swap, Face Restore, Face Swap (Video), Face Restore (Video)" - }, - { - "author": "chaojie", - "title": "ComfyUI-SimDA", - "reference": "https://github.com/chaojie/ComfyUI-SimDA", - "files": [ - "https://github.com/chaojie/ComfyUI-SimDA" - ], - "install_type": "git-clone", - "description": "Nodes:SimDATrain, SimDALoader, SimDARun, VHS_FILENAMES_STRING_SimDA" - }, - { - "author": "randjtw", - "title": "advance-aesthetic-score", - "reference": "https://github.com/randjtw/advance-aesthetic-score", - "files": [ - "https://github.com/randjtw/advance-aesthetic-score" - ], - "install_type": "git-clone", - "description": "Nodes:Advance Aesthetic Score" - }, - { - "author": "shinich39", - "title": "comfyui-local-db", - "reference": "https://github.com/shinich39/comfyui-local-db", - "files": [ - "https://github.com/shinich39/comfyui-local-db" - ], - "install_type": "git-clone", - "description": "Store text to Key-Values pair json." - }, - { - "author": "FredBill1", - "title": "comfyui-fb-utils", - "reference": "https://github.com/FredBill1/comfyui-fb-utils", - "files": [ - "https://github.com/FredBill1/comfyui-fb-utils" - ], - "install_type": "git-clone", - "description": "Nodes:FBStringJoin, FBStringSplit, FBMultilineStringList, FBMultilineString" - }, - { - "author": "lquesada", - "title": "ComfyUI-Prompt-Combinator", - "reference": "https://github.com/lquesada/ComfyUI-Prompt-Combinator", - "files": [ - "https://github.com/lquesada/ComfyUI-Prompt-Combinator" - ], - "install_type": "git-clone", - "description": "'🔢 Prompt Combinator' is a node that generates all possible combinations of prompts from several lists of strings." - }, - { - "author": "huchenlei", - "title": "ComfyUI-openpose-editor", - "reference": "https://github.com/huchenlei/ComfyUI-openpose-editor", - "files": [ - "https://github.com/huchenlei/ComfyUI-openpose-editor" - ], - "install_type": "git-clone", - "description": "Port of [a/https://github.com/huchenlei/sd-webui-openpose-editor](https://github.com/huchenlei/sd-webui-openpose-editor) in ComfyUI" - }, - { - "author": "longgui0318", - "title": "comfyui-magic-clothing", - "reference": "https://github.com/longgui0318/comfyui-magic-clothing", - "files": [ - "https://github.com/longgui0318/comfyui-magic-clothing" - ], - "install_type": "git-clone", - "description": "The comfyui supported version of the [a/Magic Clothing](https://github.com/ShineChen1024/MagicClothing) project, not the diffusers version, allows direct integration with modules such as ipadapter" - }, - { - "author": "ty0x2333", - "title": "ComfyUI-Dev-Utils", - "reference": "https://github.com/ty0x2333/ComfyUI-Dev-Utils", - "files": [ - "https://github.com/ty0x2333/ComfyUI-Dev-Utils" - ], - "install_type": "git-clone", - "description": "Execution Time Analysis, Reroute Enhancement, Node collection for developers." - }, - { - "author": "chaojie", - "title": "ComfyUI-LaVIT", - "reference": "https://github.com/chaojie/ComfyUI-LaVIT", - "files": [ - "https://github.com/chaojie/ComfyUI-LaVIT" - ], - "install_type": "git-clone", - "description": "Nodes:VideoLaVITLoader, VideoLaVITT2V, VideoLaVITI2V, VideoLaVITI2VLong, VideoLaVITT2VLong, VideoLaVITI2I" + "install_type": "copy", + "description": "Nodes:Depth2Mask" }, { "author": "smthemex", - "title": "ComfyUI_Pipeline_Tool", - "reference": "https://github.com/smthemex/ComfyUI_Pipeline_Tool", + "title": "ComfyUI_StableAudio_Open", + "id": "stable-audio-open-1.0", + "reference": "https://github.com/smthemex/ComfyUI_StableAudio_Open", "files": [ - "https://github.com/smthemex/ComfyUI_Pipeline_Tool" + "https://github.com/smthemex/ComfyUI_StableAudio_Open" ], "install_type": "git-clone", - "description": "A tool for novice users in Chinese Mainland to call the huggingface hub and download the huggingface models." + "description": "You can use stable-audio-open-1.0 in comfyUI" }, { - "author": "blueraincoatli", - "title": "comfyUI_SillyNodes", - "reference": "https://github.com/blueraincoatli/comfyUI_SillyNodes", + "author": "nuanarchy", + "title": "ComfyUI-NuA-FlashFace", + "id": "nua-flashface", + "reference": "https://github.com/nuanarchy/ComfyUI-NuA-FlashFace", "files": [ - "https://github.com/blueraincoatli/comfyUI_SillyNodes" + "https://github.com/nuanarchy/ComfyUI-NuA-FlashFace" ], "install_type": "git-clone", - "description": "Using rgthree's fast_group_muter and bookmark nodes, introduce the pyautogui library to simulate clicks and hotkeys, and run groups in sequence. screen manipulation is involved" + "description": "ComfyUI implementation of [a/FlashFace: Human Image Personalization with High-fidelity Identity Preservation](https://github.com/ali-vilab/FlashFace)\nNOTE: You need to downalod models manually." }, { - "author": "Fannovel16", - "title": "ComfyUI-MagickWand", - "reference": "https://github.com/Fannovel16/ComfyUI-MagickWand", + "author": "FrankChieng", + "title": "ComfyUI_llm_easyanimiate", + "id": "llm-easyanimate", + "nodename_pattern": "^FrankChiengEasyAnimate", + "reference": "https://github.com/frankchieng/ComfyUI_llm_easyanimiate", "files": [ - "https://github.com/Fannovel16/ComfyUI-MagickWand" + "https://github.com/frankchieng/ComfyUI_llm_easyanimiate" ], "install_type": "git-clone", - "description": "Proper implementation of ImageMagick - the famous software suite for editing and manipulating digital images to ComfyUI using [a/wandpy](https://github.com/emcconville/wand).\nNOTE: You need to install ImageMagick, manually." + "description": "implementation easyanimate with llama3-8b-6bit instruction LLM generation prompt help" }, { - "author": "MinusZoneAI", - "title": "ComfyUI-Prompt-MZ", - "reference": "https://github.com/MinusZoneAI/ComfyUI-Prompt-MZ", + "author": "chakib-belgaid", + "title": "ComfyUI-autosize", + "id": "autosize", + "reference": "https://github.com/chakib-belgaid/ComfyUI-autosize", "files": [ - "https://github.com/MinusZoneAI/ComfyUI-Prompt-MZ" + "https://github.com/chakib-belgaid/ComfyUI-autosize" ], "install_type": "git-clone", - "description": "Use llama.cpp to help generate some nodes for prompt word related work" + "description": "A ComfyUI utility plugin designed to optimize the latent space for generating high-quality results. It approximates the closest size model for better generation results." }, { - "author": "AIFSH", - "title": "ComfyUI-WhisperX", - "reference": "https://github.com/AIFSH/ComfyUI-WhisperX", + "author": "DataCTE", + "title": "Prompt Injection Node for ComfyUI", + "id": "prompt-injection", + "reference": "https://github.com/DataCTE/prompt_injection", "files": [ - "https://github.com/AIFSH/ComfyUI-WhisperX" + "https://github.com/DataCTE/prompt_injection" ], "install_type": "git-clone", - "description": "a comfyui cuatom node for audio subtitling based on [a/whisperX](https://github.com/m-bain/whisperX.git) and [a/translators](https://github.com/UlionTse/translators)" + "description": "This custom node for ComfyUI allows you to inject specific prompts at specific blocks of the Stable Diffusion UNet, providing fine-grained control over the generated image. It is based on the concept that the content/subject understanding of the model is primarily contained within the MID0 and MID1 blocks, as demonstrated in the B-Lora (Content Style implicit separation) paper. Features.\nInject different prompts into specific UNet blocks Three different node variations for flexible workflow integration Customize the learning rate of specific blocks to focus on content, lighting, style, or other aspects Potential for developing a 'Mix of Experts' approach by swapping blocks on-the-fly based on prompt content" }, { - "author": "aburahamu", - "title": "ComfyUI-RequestPoster", - "reference": "https://github.com/aburahamu/ComfyUI-RequestsPoster", + "author": "lks-ai", + "title": "ComfyUI Stable Audio Open 1.0 Sampler", + "id": "stableaudiosampler", + "reference": "https://github.com/lks-ai/ComfyUI-StableAudioSampler", "files": [ - "https://github.com/aburahamu/ComfyUI-RequestsPoster" + "https://github.com/lks-ai/ComfyUI-StableAudioSampler" ], "install_type": "git-clone", - "description": "This extension can send HTTP Requests. You can request image generation to StableDiffusion3 and post images to X (Twitter) and Discord." + "description": "Nodes: StableAudioSampler. Wraps the new Stable Audio Open Model in the sampler that dropped Jun 5th. See Github for Features" }, { - "author": "DarKDinDoN", - "title": "ComfyUI Checkpoint Automatic Config", - "reference": "https://github.com/DarKDinDoN/comfyui-checkpoint-automatic-config", + "author": "luandev", + "title": "ComfyUI CrewAI", + "id": "crewai", + "reference": "https://github.com/luandev/ComfyUI-CrewAI", "files": [ - "https://github.com/DarKDinDoN/comfyui-checkpoint-automatic-config" + "https://github.com/luandev/ComfyUI-CrewAI" ], "install_type": "git-clone", - "description": "This node was designed to help with checkpoint configuration." + "description": "ComfyUI-CrewAI aims to integrate Crew AI's multi-agent collaboration framework into the ComfyUI environment. By combining the strengths of Crew AI's role-based, collaborative AI agent system with ComfyUI's intuitive interface, we will create a robust platform for managing and executing complex AI tasks seamlessly" }, { - "author": "if-ai", - "title": "ComfyUI-IF_AI_WishperSpeechNode", - "reference": "https://github.com/if-ai/ComfyUI-IF_AI_WishperSpeechNode", + "author": "Tool Of North america", + "title": "Easy automatic (square) image cropper using Yolo", + "id": "tooldigital", + "reference": "https://github.com/tooldigital/ComfyUI-Yolo-Cropper", "files": [ - "https://github.com/if-ai/ComfyUI-IF_AI_WishperSpeechNode" + "https://github.com/tooldigital/ComfyUI-Yolo-Cropper" ], "install_type": "git-clone", - "description": "This repository hosts a Text-to-Speech (TTS) application that leverages Whisper Speech for voice synthesis, allowing users to train a voice model on-the-fly. It is built on ComfyUI and supports rapid training and inference processes." + "description": "A very simple and easy to use node to automaticaaly create (square) image crops and masks using YoloV8. This can be very useful when using controlnet and ip adapters" }, { - "author": "Big-Idea-Technology", - "title": "ComfyUI-Book-Tools Nodes for ComfyUI", - "reference": "https://github.com/Big-Idea-Technology/ComfyUI-Book-Tools", + "author": "11dogzi", + "title": "Comfyui-ergouzi-samplers", + "id": "ergouzi-samplers", + "reference": "https://github.com/11dogzi/Comfyui-ergouzi-samplers", "files": [ - "https://github.com/Big-Idea-Technology/ComfyUI-Book-Tools" + "https://github.com/11dogzi/Comfyui-ergouzi-samplers" ], "install_type": "git-clone", - "description": "ComfyUI-Book-Tools is a set o new nodes for ComfyUI that allows users to easily add text overlays to images within their ComfyUI projects. This Node leverages Python Imaging Library (PIL) and PyTorch to dynamically render text on images, supporting a wide range of customization options including font size, alignment, color, and padding. Loop with any parameters (*), prompt batch schedule with prompt selector, end queue for automatic ending current queue." + "description": "Partial redraw sampler and variant seed sampler" }, { - "author": "TencentQQGYLab", - "title": "ComfyUI-ELLA", - "reference": "https://github.com/TencentQQGYLab/ComfyUI-ELLA", + "author": "prodogape", + "title": "ComfyUI-OmDet", + "id": "omdet", + "reference": "https://github.com/prodogape/ComfyUI-OmDet", "files": [ - "https://github.com/TencentQQGYLab/ComfyUI-ELLA" + "https://github.com/prodogape/ComfyUI-OmDet" ], "install_type": "git-clone", - "description": "ComfyUI implementation for [a/ELLA](https://github.com/TencentQQGYLab/ELLA)." + "description": "This node is mainly based on [a/OmDet](https://github.com/om-ai-lab/OmDet) for object detection, and it outputs related images, masks, and Labelme JSON information." }, { - "author": "turkyden", - "title": "ComfyUI-Comic", - "reference": "https://github.com/turkyden/ComfyUI-Comic", + "author": "risunobushi", + "title": "comfyUI_FrequencySeparation_RGB-HSV", + "id": "freq-sep", + "reference": "https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV", "files": [ - "https://github.com/turkyden/ComfyUI-Comic" + "https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV" ], "install_type": "git-clone", - "description": "a comfyui plugin for image to comic" + "description": "A collection of simple nodes for Frequency Separation / Frequency Recombine with RGB and HSV methods" }, { - "author": "Intersection98", - "title": "ComfyUI-MX-post-processing-nodes", - "reference": "https://github.com/Intersection98/ComfyUI_MX_post_processing-nodes", + "author": "chandlergis", + "title": "ComfyUI_EmojiOverlay", + "id": "emoji-overlay", + "reference": "https://github.com/chandlergis/ComfyUI_EmojiOverlay", "files": [ - "https://github.com/Intersection98/ComfyUI_MX_post_processing-nodes" + "https://github.com/chandlergis/ComfyUI_EmojiOverlay" ], "install_type": "git-clone", - "description": "A collection of post processing nodes for ComfyUI, dds image post-processing adjustment capabilities to the ComfyUI." + "description": "Nodes:Image Emoji Overlay" }, { - "author": "florestefano1975", - "title": "ComfyUI StabilityAI Suite", - "reference": "https://github.com/florestefano1975/ComfyUI-StabilityAI-Suite", + "author": "JayLyu", + "title": "ComfyUI_BaiKong_Node", + "id": "baikong", + "reference": "https://github.com/JayLyu/ComfyUI_BaiKong_Node", "files": [ - "https://github.com/florestefano1975/ComfyUI-StabilityAI-Suite" + "https://github.com/JayLyu/ComfyUI_BaiKong_Node" ], "install_type": "git-clone", - "description": "This fork of the official StabilityAI repository contains a number of enhancements and implementations." + "description": "Nodes:BK Img To Color, BK Color Selector" }, { - "author": "hay86", - "title": "ComfyUI MiniCPM-V", - "reference": "https://github.com/hay86/ComfyUI_MiniCPM-V", + "author": "zohac", + "title": "ComfyUI_ZC_DrawShape", + "id": "drawshape", + "reference": "https://github.com/zohac/ComfyUI_ZC_DrawShape", "files": [ - "https://github.com/hay86/ComfyUI_MiniCPM-V" + "https://github.com/zohac/ComfyUI_ZC_DrawShape" ], "install_type": "git-clone", - "description": "Unofficial implementation of [a/MiniCPM-V](https://github.com/OpenBMB/MiniCPM-V) for ComfyUI" + "description": "Nodes:ZC DrawShape Node" + }, + { + "author": "ThereforeGames", + "title": "ComfyUI-Unprompted", + "id": "unprompted", + "reference": "https://github.com/ThereforeGames/ComfyUI-Unprompted", + "files": [ + "https://github.com/ThereforeGames/ComfyUI-Unprompted" + ], + "install_type": "git-clone", + "description": "This is a ComfyUI node that processes your input text with the [a/Unprompted templating language](https://github.com/ThereforeGames/unprompted). Early alpha release.\n" + }, + { + "author": "Scorpinaus", + "title": "Loaders for Diffusers-format checkpoints", + "id": "diffusersloader", + "reference": "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader", + "files": [ + "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader" + ], + "install_type": "git-clone", + "description": "This node pack allows loading of CLIP, MODEL, VAE aspects for both SD1.5 and SDXL checkpoints that is converted to diffusers format." + }, + { + "author": "chakib-belgaid", + "title": "ComfyUI Style Plugin", + "id": "style-plugin", + "reference": "https://github.com/chakib-belgaid/Comfyui_Prompt_styler", + "files": [ + "https://github.com/chakib-belgaid/Comfyui_Prompt_styler" + ], + "install_type": "git-clone", + "description": "This is a simple plugin for ComfyUI that allows you to import A1111 CSV styles into ComfyUI prompts." + }, + { + "author": "tiankuan93", + "title": "V-Express: Conditional Dropout for Progressive Training of Portrait Video Generation", + "id": "v-express", + "reference": "https://github.com/tiankuan93/ComfyUI-V-Express", + "files": [ + "https://github.com/tiankuan93/ComfyUI-V-Express" + ], + "install_type": "git-clone", + "description": "[Original] In the field of portrait video generation, the use of single images to generate portrait videos has become increasingly prevalent. A common approach involves leveraging generative models to enhance adapters for controlled generation. However, control signals can vary in strength, including text, audio, image reference, pose, depth map, etc. Among these, weaker conditions often struggle to be effective due to interference from stronger conditions, posing a challenge in balancing these conditions. In our work on portrait video generation, we identified audio signals as particularly weak, often overshadowed by stronger signals such as pose and original image. However, direct training with weak signals often leads to difficulties in convergence. To address this, we propose V-Express, a simple method that balances different control signals through a series of progressive drop operations. Our method gradually enables effective control by weak conditions, thereby achieving generation capabilities that simultaneously take into account pose, input image, and audio.\nNOTE: You need to downdload [a/model_ckpts](https://huggingface.co/tk93/V-Express/tree/main) manually." + }, + { + "author": "CMonk", + "title": "Stable Projectorz Bridge", + "id": "projectorz", + "reference": "https://github.com/tianlang0704/ComfyUI-StableProjectorzBridge", + "files": [ + "https://github.com/tianlang0704/ComfyUI-StableProjectorzBridge" + ], + "install_type": "git-clone", + "description": "This custom nodes enables Stable Projectorz to work with ComfyUI Directly." + }, + { + "author": "comfyanonymous", + "title": "TensorRT Node for ComfyUI", + "id": "tensorrt", + "reference": "https://github.com/comfyanonymous/ComfyUI_TensorRT", + "files": [ + "https://github.com/comfyanonymous/ComfyUI_TensorRT" + ], + "install_type": "git-clone", + "description": "This node enables the best performance on NVIDIA RTX™ Graphics Cards (GPUs) for Stable Diffusion by leveraging NVIDIA TensorRT." + }, + { + "author": "fexploit", + "title": "ComfyUI-Classifier", + "id": "classifier", + "reference": "https://github.com/fexploit/ComfyUI-Classifier", + "files": [ + "https://github.com/fexploit/ComfyUI-Classifier" + ], + "install_type": "git-clone", + "description": "ComfyUI-Classifier is a custom node for ComfyUI that uses a zero-shot classification model to classify text inputs based on a set of candidate labels. This node leverages the power of Hugging Face Transformers to provide accurate and flexible text classification." } ] -} \ No newline at end of file +} diff --git a/node_db/new/extension-node-map.json b/node_db/new/extension-node-map.json index 3504d78b..1e9ef905 100644 --- a/node_db/new/extension-node-map.json +++ b/node_db/new/extension-node-map.json @@ -31,8 +31,7 @@ ], "https://github.com/1038lab/ComfyUI-GPT2P": [ [ - "GPT2PNode", - "ShowText_GPT2P" + "GPT2PNode" ], { "title_aux": "ComfyUI-GPT2P" @@ -92,6 +91,16 @@ "title_aux": "Comfyui-ergouzi-Nodes" } ], + "https://github.com/11dogzi/Comfyui-ergouzi-samplers": [ + [ + "EGBYZZCYQ", + "EGCYQJB", + "EGCYQJBCJ" + ], + { + "title_aux": "Comfyui-ergouzi-samplers" + } + ], "https://github.com/1mckw/Comfyui-Gelbooru": [ [ "Gelbooru (ID)", @@ -126,12 +135,19 @@ "GPT4VCaptioner", "Image Load with Metadata", "SAMIN String Attribute Selector", + "SANMIN Adapt Coordinates", + "SANMIN AdjustTransparency", + "SANMIN BlurMaskArea", "SANMIN ChineseToCharacter", "SANMIN ClothingWildcards", "SANMIN ConvertToEnglish", + "SANMIN EditWildcards", + "SANMIN Float", "SANMIN LoadPathImagesPreview", + "SANMIN SCALE AND FILL BLACK", "SANMIN SanmiSaveImageToLocal", "SANMIN SimpleWildcards", + "SANMIN Upscale And Original Size", "Samin Counter", "Samin Load Image Batch" ], @@ -198,6 +214,24 @@ "title_aux": "ComfyUI-PixelOE" } ], + "https://github.com/AARG-FAN/Image-Raster-for-ComfyUI": [ + [ + "AIraster" + ], + { + "title_aux": "Image-vector-for-ComfyUI" + } + ], + "https://github.com/AIFSH/ComfyUI-3d-photo-inpainting": [ + [ + "LoadImagePath", + "PreViewVideo", + "TreeDNode" + ], + { + "title_aux": "ComfyUI-3d-photo-inpainting" + } + ], "https://github.com/AIFSH/ComfyUI-FishSpeech": [ [ "FishSpeech_INFER", @@ -223,6 +257,17 @@ "title_aux": "ComfyUI-GPT_SoVITS" } ], + "https://github.com/AIFSH/ComfyUI-Hallo": [ + [ + "HalloNode", + "LoadAudioPath", + "LoadImagePath", + "PreViewVideo" + ], + { + "title_aux": "ComfyUI-Hallo" + } + ], "https://github.com/AIFSH/ComfyUI-IP_LAP": [ [ "CombineAudioVideo", @@ -234,6 +279,23 @@ "title_aux": "ComfyUI-IP_LAP" } ], + "https://github.com/AIFSH/ComfyUI-Live2DViewer": [ + [ + "Live2DViewer", + "LoadAudio" + ], + { + "title_aux": "ComfyUI-Live2DViewer" + } + ], + "https://github.com/AIFSH/ComfyUI-MimicBrush": [ + [ + "MimicBrushNode" + ], + { + "title_aux": "ComfyUI-MimicBrush" + } + ], "https://github.com/AIFSH/ComfyUI-MuseTalk_FSH": [ [ "CombineAudioVideo", @@ -268,6 +330,18 @@ "title_aux": "ComfyUI-UVR5" } ], + "https://github.com/AIFSH/ComfyUI-UniAnimate": [ + [ + "LoadImagePath", + "LoadVideo", + "PoseAlignNode", + "PreViewVideo", + "UniAnimateNode" + ], + { + "title_aux": "ComfyUI-UniAnimate" + } + ], "https://github.com/AIFSH/ComfyUI-WhisperX": [ [ "LoadAudio", @@ -290,6 +364,19 @@ "title_aux": "ComfyUI-XTTS" } ], + "https://github.com/AIFSH/ComfyUI_V-Express": [ + [ + "CombineAudioVideo", + "LoadAudio", + "LoadImagePath", + "LoadVideo", + "PreViewVideo", + "VExpress" + ], + { + "title_aux": "ComfyUI_V-Express" + } + ], "https://github.com/AIGCTeam/ComfyUI_kkTranslator_nodes": [ [ "LoadMarianMTCheckPoint", @@ -324,6 +411,14 @@ "title_aux": "ComfyUI-CUP" } ], + "https://github.com/AIGODLIKE/ComfyUI-ToonCrafter": [ + [ + "ToonCrafterNode" + ], + { + "title_aux": "ComfyUI-ToonCrafter" + } + ], "https://github.com/AInseven/ComfyUI-fastblend": [ [ "FillDarkMask", @@ -358,10 +453,17 @@ [ "> Clear Text", "> Float to Int", + "> Get Mean Color", "> Int", "> Int to Text", + "> Light Source Mask", "> Load Image", "> Load Image From Folder", + "> Mask Curves", + "> NIKSampler", + "> Noise From Image", + "> Normal Map Lighting", + "> RGB Color", "> Resolution by Aspect Ratio", "> Rotate Image", "> Save Image", @@ -416,6 +518,7 @@ "IntToString-badger", "IntToStringAdvanced-badger", "LoadImageAdvanced-badger", + "LoadImagesFromDirListAdvanced-badger", "SegmentToMaskByPoint-badger", "SimpleBoolean-badger", "StringToFizz-badger", @@ -452,10 +555,19 @@ "https://github.com/Acly/comfyui-tooling-nodes": [ [ "ETN_ApplyMaskToImage", + "ETN_AttentionMask", + "ETN_BackgroundRegion", "ETN_CropImage", + "ETN_DefineRegion", + "ETN_ExtractImageTile", + "ETN_ExtractMaskTile", + "ETN_GenerateTileMask", + "ETN_ListRegionMasks", "ETN_LoadImageBase64", "ETN_LoadMaskBase64", - "ETN_SendImageWebSocket" + "ETN_MergeImageTile", + "ETN_SendImageWebSocket", + "ETN_TileLayout" ], { "title_aux": "ComfyUI Nodes for External Tooling" @@ -475,12 +587,30 @@ "title_aux": "ComfyUI-Aimidi-nodes" } ], + "https://github.com/AlekPet/ComfyUI_Custom_Nodes_AlekPet": [ + [ + "ArgosTranslateCLIPTextEncodeNode", + "ArgosTranslateTextNode", + "DeepTranslatorCLIPTextEncodeNode", + "DeepTranslatorTextNode", + "GoogleTranslateCLIPTextEncodeNode", + "GoogleTranslateTextNode", + "PainterNode", + "PoseNode", + "PreviewTextNode" + ], + { + "title_aux": "AlekPet/ComfyUI_Custom_Nodes_AlekPet" + } + ], "https://github.com/Alysondao/Comfyui-Yolov8-JSON": [ [ "Apply Yolov8 Model", "Apply Yolov8 Model Seg", + "Draw Labelme Json", "Load Yolov8 Model", - "Load Yolov8 Model From Path" + "Load Yolov8 Model From Path", + "Save Labelme Json" ], { "title_aux": "Comfyui-Yolov8-JSON" @@ -496,6 +626,14 @@ "title_aux": "Jovimetrix Composition Nodes" } ], + "https://github.com/AonekoSS/ComfyUI-LoRA-Tuner": [ + [ + "LoraTuner" + ], + { + "title_aux": "ComfyUI-LoRA-Tuner" + } + ], "https://github.com/AonekoSS/ComfyUI-SimpleCounter": [ [ "Simple Counter" @@ -504,15 +642,19 @@ "title_aux": "ComfyUI-SimpleCounter" } ], - "https://github.com/AppleBotzz/ComfyUI_LLMVISION": [ + "https://github.com/ArcherFMY/Diffusion360_ComfyUI": [ [ - "CLAUDE_CHAT", - "CLAUDE_VISION", - "GPT4_CHAT", - "GPT4_VISION" + "Diffusion360LoaderImage2Pano", + "Diffusion360LoaderText2Pano", + "Diffusion360Sampler", + "Diffusion360SamplerImage2Pano", + "Diffusion360SamplerText2Pano", + "InputImage", + "InputText", + "VAEDecodeTiledBlended" ], { - "title_aux": "ComfyUI_LLMVISION" + "title_aux": "Diffusion360_ComfyUI" } ], "https://github.com/ArdeniusAI/CPlus_Ardenius": [ @@ -559,6 +701,16 @@ "title_aux": "AnimateDiff" } ], + "https://github.com/AshMartian/ComfyUI-DirGir": [ + [ + "Dir_Gir_Looper", + "Dir_Gir_Picker", + "Gir_Image_Nabber" + ], + { + "title_aux": "Dir Gir" + } + ], "https://github.com/AuroBit/ComfyUI-AnimateAnyone-reproduction": [ [ "AnimateAnyone" @@ -567,6 +719,16 @@ "title_aux": "ComfyUI-AnimateAnyone-reproduction" } ], + "https://github.com/AustinMroz/ComfyUI-DynamicOversampling": [ + [ + "DynamicSampler", + "MeasuredSampler", + "ResolveMaskPromise" + ], + { + "title_aux": "DynamicOversampling" + } + ], "https://github.com/AustinMroz/ComfyUI-SpliceTools": [ [ "LogSigmas", @@ -579,6 +741,14 @@ "title_aux": "SpliceTools" } ], + "https://github.com/Auttasak-L/ComfyUI-ImageCropper": [ + [ + "ImageCropper" + ], + { + "title_aux": "ComfyUI-ImageCropper" + } + ], "https://github.com/BAIS1C/ComfyUI_RSS_Feed_Reader": [ [ "RSSFeedNode" @@ -654,6 +824,19 @@ "title_aux": "bsz-cui-extras" } ], + "https://github.com/BenNarum/SigmaWaveFormNode": [ + [ + "AttenuatorNode", + "FourierFilterNode", + "PhaseLockedLoopNode", + "SigmaWaveFormNode", + "SigmaWaveFormNodeAdvanced", + "SigmaWaveFormNodeSimple" + ], + { + "title_aux": "SigmaWaveFormNodes" + } + ], "https://github.com/BennyKok/comfyui-deploy": [ [ "ComfyDeployWebscoketImageInput", @@ -666,6 +849,7 @@ "ComfyUIDeployExternalLora", "ComfyUIDeployExternalNumber", "ComfyUIDeployExternalNumberInt", + "ComfyUIDeployExternalNumberSlider", "ComfyUIDeployExternalText", "ComfyUIDeployExternalVid", "ComfyUIDeployExternalVideo" @@ -995,6 +1179,14 @@ "title_aux": "Comfy Couple" } ], + "https://github.com/DannyStone1999/ComfyUI-Depth2Mask/raw/main/Depth2Mask.py": [ + [ + "Depth2Mask" + ], + { + "title_aux": "ComfyUI-Depth2Mask" + } + ], "https://github.com/DarKDinDoN/comfyui-checkpoint-automatic-config": [ [ "CheckpointAutomaticConfig", @@ -1004,6 +1196,17 @@ "title_aux": "ComfyUI Checkpoint Automatic Config" } ], + "https://github.com/DataCTE/prompt_injection": [ + [ + "AdvancedPromptInjection", + "PromptInjection", + "SVDPromptInjection", + "SimplePromptInjection" + ], + { + "title_aux": "Prompt Injection Node for ComfyUI" + } + ], "https://github.com/Derfuu/Derfuu_ComfyUI_ModdedNodes": [ [], { @@ -1107,11 +1310,21 @@ [ "Automatic CFG", "Automatic CFG - Advanced", + "Automatic CFG - Attention modifiers", + "Automatic CFG - Attention modifiers tester", + "Automatic CFG - Custom attentions", + "Automatic CFG - Excellent attention", "Automatic CFG - Negative", "Automatic CFG - Post rescale only", + "Automatic CFG - Preset Loader", "Automatic CFG - Unpatch function", "Automatic CFG - Warp Drive", - "SAG delayed activation" + "SAG delayed activation", + "Temperature separate settings CLIP SDXL", + "Temperature settings CLIP", + "Temperature settings SD 1.5", + "Temperature settings SDXL", + "Zero Uncond CFG - standalone patch (incompatible with the others)" ], { "title_aux": "ComfyUI-AutomaticCFG" @@ -1125,6 +1338,23 @@ "title_aux": "LoadLoraWithTags" } ], + "https://github.com/Extraltodeus/Stable-Diffusion-temperature-settings": [ + [ + "CLIP Temperature", + "Unet Temperature" + ], + { + "title_aux": "Stable-Diffusion-temperature-settings" + } + ], + "https://github.com/Extraltodeus/Uncond-Zero-for-ComfyUI": [ + [ + "Uncond Zero" + ], + { + "title_aux": "Uncond-Zero-for-ComfyUI" + } + ], "https://github.com/Extraltodeus/Vector_Sculptor_ComfyUI": [ [ "CLIP Vector Sculptor text encode", @@ -1148,6 +1378,7 @@ "https://github.com/Extraltodeus/sigmas_tools_and_the_golden_scheduler": [ [ "Aligned Scheduler", + "Gaussian Tail Scheduler", "Get sigmas as float", "Graph sigmas", "Manual scheduler", @@ -1167,7 +1398,6 @@ [ "AMT VFI", "CAIN VFI", - "EISAI VFI", "FILM VFI", "FLAVR VFI", "GMFSS Fortuna VFI", @@ -1348,6 +1578,7 @@ "AnimalPosePreprocessor", "AnimeFace_SemSegPreprocessor", "AnimeLineArtPreprocessor", + "AnyLineArtPreprocessor_aux", "BAE-NormalMapPreprocessor", "BinaryPreprocessor", "CannyEdgePreprocessor", @@ -1357,6 +1588,7 @@ "DWPreprocessor", "DensePosePreprocessor", "DepthAnythingPreprocessor", + "DepthAnythingV2Preprocessor", "DiffusionEdge_Preprocessor", "FacialPartColoringFromPoseKps", "FakeScribblePreprocessor", @@ -1376,6 +1608,9 @@ "MediaPipe-FaceMeshPreprocessor", "MeshGraphormer+ImpactDetector-DepthMapPreprocessor", "MeshGraphormer-DepthMapPreprocessor", + "Metric3D-DepthMapPreprocessor", + "Metric3D-NormalMapPreprocessor", + "Metric_DepthAnythingV2Preprocessor", "MiDaS-DepthMapPreprocessor", "MiDaS-NormalMapPreprocessor", "OneFormer-ADE20K-SemSegPreprocessor", @@ -1396,6 +1631,7 @@ "TilePreprocessor", "UniFormer-SemSegPreprocessor", "Unimatch_OptFlowPreprocessor", + "UpperBodyTrackingFromPoseKps", "Zoe-DepthMapPreprocessor", "Zoe_DepthAnythingPreprocessor" ], @@ -1455,6 +1691,14 @@ "title_aux": "ComfyUI's ControlNet Auxiliary Preprocessors" } ], + "https://github.com/Fantaxico/ComfyUI-GCP-Storage": [ + [ + "GCPStorageNode" + ], + { + "title_aux": "ComfyUI-GCP-Storage" + } + ], "https://github.com/Feidorian/feidorian-ComfyNodes": [ [], { @@ -1568,6 +1812,18 @@ "title_aux": "NX_PromptStyler" } ], + "https://github.com/G-370/ComfyUI-SD3-Powerlab": [ + [ + "G370SD3PowerLab_AttentionToImage", + "G370SD3PowerLab_ImageIntoAttention", + "G370SD3PowerLab_ImageIntoLayer", + "G370SD3PowerLab_LayerToImage", + "G370SD3PowerLab_RenderAttention" + ], + { + "title_aux": "ComfyUI-SD3-Powerlab" + } + ], "https://github.com/GMapeSplat/ComfyUI_ezXY": [ [ "ConcatenateString", @@ -1603,6 +1859,14 @@ "title_aux": "ComfyUI-GTSuya-Nodes" } ], + "https://github.com/GavChap/ComfyUI-SD3LatentSelectRes": [ + [ + "SD3LatentSelectRes" + ], + { + "title_aux": "ComfyUI-SD3LatentSelectRes" + } + ], "https://github.com/GentlemanHu/ComfyUI-SunoAI": [ [ "GentlemanHu_SunoAI", @@ -1612,6 +1876,14 @@ "title_aux": "ComfyUI Suno API" } ], + "https://github.com/Goktug/comfyui-saveimage-plus": [ + [ + "SaveImagePlus" + ], + { + "title_aux": "Save Image Plus for ComfyUI" + } + ], "https://github.com/Gourieff/comfyui-reactor-node": [ [ "ImageRGBA2RGB", @@ -1630,12 +1902,37 @@ "title_aux": "ReActor Node for ComfyUI" } ], + "https://github.com/GraftingRayman/ComfyUI_GraftingRayman": [ + [ + "GR Flip Tile Random Inverted", + "GR Flip Tile Random Red Ring", + "GR Image Details Displayer", + "GR Image Details Saver", + "GR Image Resize", + "GR Image Resize Methods", + "GR Image Size", + "GR Image/Depth Mask", + "GR Mask Create", + "GR Mask Create Random", + "GR Mask Resize", + "GR Multi Mask Create", + "GR Prompt Selector", + "GR Prompt Selector Multi", + "GR Stack Image", + "GR Text Overlay", + "GR Tile and Border Image", + "GR Tile and Border Image Random Flip" + ], + { + "title_aux": "GraftingRayman" + } + ], "https://github.com/Guillaume-Fgt/ComfyUI_StableCascadeLatentRatio": [ [ "StableCascadeLatentRatio" ], { - "title_aux": "ComfyUI-ScenarioPrompt" + "title_aux": "ComfyUI_StableCascadeLatentRatio" } ], "https://github.com/HAL41/ComfyUI-aichemy-nodes": [ @@ -1740,13 +2037,16 @@ "IG Cross Fade Images", "IG Explorer", "IG Float", + "IG Float List", "IG Folder", "IG Int", + "IG Interpolate", "IG Load Image", "IG Load Images", "IG Multiply", "IG Path Join", "IG String", + "IG String List", "IG ZFill" ], { @@ -1757,17 +2057,6 @@ "title_aux": "IG Interpolation Nodes" } ], - "https://github.com/IKHOR/ComfyUI-IKHOR-Jam-Nodes": [ - [ - "LoadBatchFromS3", - "LoadFromS3", - "SaveBatchToS3", - "SaveToS3" - ], - { - "title_aux": "ikhor-nodes" - } - ], "https://github.com/ITurchenko/ComfyUI-SizeFromArray": [ [ "SizeFromArray" @@ -1940,6 +2229,7 @@ "JNodes_BooleanSelectorWithString", "JNodes_BreakMediaInfo", "JNodes_CheckpointSelectorWithString", + "JNodes_CreateStereoscopicImageFromDepth", "JNodes_GetOutputDirectory", "JNodes_GetParameterFromList", "JNodes_GetParameterGlobal", @@ -1965,6 +2255,7 @@ "JNodes_SearchAndReplace", "JNodes_SearchAndReplaceFromFile", "JNodes_SearchAndReplaceFromList", + "JNodes_SelectRandomFileFromDirectory", "JNodes_SetNegativePromptInMetaData", "JNodes_SetPositivePromptInMetaData", "JNodes_SplitAndJoin", @@ -1980,6 +2271,16 @@ "title_aux": "ComfyUI-JNodes" } ], + "https://github.com/JayLyu/ComfyUI_BaiKong_Node": [ + [ + "BK_ColorSelector", + "BK_GradientImage", + "BK_Img2Color" + ], + { + "title_aux": "ComfyUI_BaiKong_Node" + } + ], "https://github.com/JcandZero/ComfyUI_GLM4Node": [ [ "GLM3_turbo_CHAT", @@ -2101,6 +2402,9 @@ "ACN_SparseCtrlMergedLoaderAdvanced", "ACN_SparseCtrlRGBPreprocessor", "ACN_SparseCtrlSpreadMethodNode", + "ACN_SparseCtrlWeightExtras", + "ACN_TimestepKeyframeFromStrengthList", + "ACN_TimestepKeyframeInterpolation", "ControlNetLoaderAdvanced", "CustomControlNetWeights", "CustomT2IAdapterWeights", @@ -2148,6 +2452,7 @@ "ADE_ApplyAnimateDiffModel", "ADE_ApplyAnimateDiffModelSimple", "ADE_ApplyAnimateDiffModelWithCameraCtrl", + "ADE_ApplyAnimateDiffModelWithPIA", "ADE_ApplyAnimateLCMI2VModel", "ADE_AttachLoraHookToCLIP", "ADE_AttachLoraHookToConditioning", @@ -2167,6 +2472,9 @@ "ADE_CustomCFGKeyframe", "ADE_EmptyLatentImageLarge", "ADE_InjectI2VIntoAnimateDiffModel", + "ADE_InjectPIAIntoAnimateDiffModel", + "ADE_InputPIA_Multival", + "ADE_InputPIA_PaperPresets", "ADE_IterationOptsDefault", "ADE_IterationOptsFreeInit", "ADE_LoadAnimateDiffModel", @@ -2178,12 +2486,16 @@ "ADE_LoraHookKeyframe", "ADE_LoraHookKeyframeFromStrengthList", "ADE_LoraHookKeyframeInterpolation", - "ADE_MaskedLoadLora", + "ADE_MultivalConvertToMask", "ADE_MultivalDynamic", + "ADE_MultivalDynamicFloatInput", "ADE_MultivalScaledMask", "ADE_NoiseLayerAdd", "ADE_NoiseLayerAddWeighted", "ADE_NoiseLayerReplace", + "ADE_NoisedImageInjectOptions", + "ADE_NoisedImageInjection", + "ADE_PIA_AnimateDiffKeyframe", "ADE_PairedConditioningSetMask", "ADE_PairedConditioningSetMaskAndCombine", "ADE_PairedConditioningSetUnmaskedAndCombine", @@ -2344,7 +2656,7 @@ "Image Remove Background (rembg)" ], { - "title_aux": "Rembg Background Removal Node for ComfyUI" + "title_aux": "Rembg Background Removal Node for ComfyUI (Better)" } ], "https://github.com/LonicaMewinsky/ComfyUI-MakeFrame": [ @@ -2383,79 +2695,6 @@ "title_aux": "Anime Character Segmentation node for comfyui" } ], - "https://github.com/LykosAI/ComfyUI-Inference-Core-Nodes": [ - [ - "AIO_Preprocessor", - "AnimalPosePreprocessor", - "AnimeFace_SemSegPreprocessor", - "AnimeLineArtPreprocessor", - "BAE-NormalMapPreprocessor", - "BinaryPreprocessor", - "CannyEdgePreprocessor", - "ColorPreprocessor", - "DWPreprocessor", - "DensePosePreprocessor", - "DepthAnythingPreprocessor", - "DiffusionEdge_Preprocessor", - "FacialPartColoringFromPoseKps", - "FakeScribblePreprocessor", - "HEDPreprocessor", - "HintImageEnchance", - "ImageGenResolutionFromImage", - "ImageGenResolutionFromLatent", - "ImageIntensityDetector", - "ImageLuminanceDetector", - "InpaintPreprocessor", - "LayeredDiffusionApply", - "LayeredDiffusionCondApply", - "LayeredDiffusionCondJointApply", - "LayeredDiffusionDecode", - "LayeredDiffusionDecodeRGBA", - "LayeredDiffusionDecodeSplit", - "LayeredDiffusionDiffApply", - "LayeredDiffusionJointApply", - "LeReS-DepthMapPreprocessor", - "LineArtPreprocessor", - "LineartStandardPreprocessor", - "M-LSDPreprocessor", - "Manga2Anime_LineArt_Preprocessor", - "MaskOptFlow", - "MediaPipe-FaceMeshPreprocessor", - "MeshGraphormer-DepthMapPreprocessor", - "MiDaS-DepthMapPreprocessor", - "MiDaS-NormalMapPreprocessor", - "ModelMergeBlockNumber", - "ModelMergeSDXL", - "ModelMergeSDXLDetailedTransformers", - "ModelMergeSDXLTransformers", - "ModelSamplerTonemapNoiseTest", - "OneFormer-ADE20K-SemSegPreprocessor", - "OneFormer-COCO-SemSegPreprocessor", - "OpenposePreprocessor", - "PiDiNetPreprocessor", - "PixelPerfectResolution", - "PromptExpansion", - "ReferenceOnlySimple", - "RescaleClassifierFreeGuidanceTest", - "SAMPreprocessor", - "SavePoseKpsAsJsonFile", - "ScribblePreprocessor", - "Scribble_XDoG_Preprocessor", - "SemSegPreprocessor", - "ShufflePreprocessor", - "TEEDPreprocessor", - "TilePreprocessor", - "TonemapNoiseWithRescaleCFG", - "UniFormer-SemSegPreprocessor", - "Unimatch_OptFlowPreprocessor", - "Zoe-DepthMapPreprocessor", - "Zoe_DepthAnythingPreprocessor" - ], - { - "author": "tstandley", - "title_aux": "ComfyUI Nodes for Inference.Core" - } - ], "https://github.com/M1kep/ComfyLiterals": [ [ "Checkpoint", @@ -2555,6 +2794,14 @@ "title_aux": "ComfyUI-mnemic-nodes" } ], + "https://github.com/Makeezi/ComfyUI-promptLAB": [ + [ + "PromptLAB" + ], + { + "title_aux": "ComfyUI-promptLAB" + } + ], "https://github.com/Mamaaaamooooo/batchImg-rembg-ComfyUI-nodes": [ [ "Image Remove Background (rembg)" @@ -2576,6 +2823,46 @@ "title_aux": "ComfyI2I" } ], + "https://github.com/MaraScott/ComfyUI_MaraScott_Nodes": [ + [ + "MaraScottAnyBusNode", + "MaraScottAnyBus_v2", + "MaraScottDisplayInfoNode", + "MaraScottDisplayInfo_v1", + "MaraScottPasteInpaintingByMask_v1", + "MaraScottPromptFromImage_v1", + "MaraScottSetInpaintingByMask_v1", + "MaraScottUpscalerRefinerNode_v2", + "MaraScottUpscalerRefinerNode_v3", + "MaraScott_Kijai_TokenCounter_v1" + ], + { + "title_aux": "\ud83d\udc30 MaraScott Nodes" + } + ], + "https://github.com/MarcusNyne/m9-prompts-comfyui": [ + [ + "ScramblePrompts_m9", + "TweakWeights_m9" + ], + { + "title_aux": "m9-prompts-comfyui" + } + ], + "https://github.com/MariusKM/ComfyUI-BadmanNodes": [ + [ + "BadmanIO", + "BadmanIntUtil", + "Badman_Blend", + "Badman_Concat_String", + "Badman_HexGenerator", + "Badman_Print", + "Badman_String" + ], + { + "title_aux": "ComfyUI-BadmanNodes" + } + ], "https://github.com/MarkoCa1/ComfyUI-Text": [ [ "CombinationText", @@ -2584,7 +2871,7 @@ "ShowText" ], { - "title_aux": "ComfyUI_Text" + "title_aux": "ComfyUI-Text" } ], "https://github.com/MarkoCa1/ComfyUI_Segment_Mask": [ @@ -2595,6 +2882,19 @@ "title_aux": "ComfyUI_Segment_Mask" } ], + "https://github.com/Mason-McGough/ComfyUI-Mosaica": [ + [ + "ApplyLUTToLabelImage", + "KMeans", + "LoadLUTFromMatplotlib", + "MeanShift", + "RandomLUT", + "Watershed" + ], + { + "title_aux": "Mosaica" + } + ], "https://github.com/Miosp/ComfyUI-FBCNN": [ [ "JPEG artifacts removal FBCNN" @@ -2619,6 +2919,7 @@ "AnimeCosplayDir", "AspectRatioCondition", "Colors", + "CombinedCrop", "ConnectFloat", "ConnectImage", "ConnectInteger", @@ -2628,16 +2929,22 @@ "DoubleClipTextEncode", "EmbeddingLoader", "FilmCharDir", + "FuseImages", + "FuseImages2", "HashText", "HueSatLum", "HueShift", "ImageDimensions", + "ImageOverlayResized", "ImageResizeLong", + "ImageZigzag", "IndoorBackgrounds", "IndoorDir", "IntEvaluate", "IntFloatDict", "IntStringDict", + "JsonSearch", + "KillWorkflow", "LandscapeBackgrounds", "LandscapeDir", "MakeupStylesDir", @@ -2648,11 +2955,20 @@ "PhotomontageB", "PhotomontageC", "PostSamplerCrop", + "PresetLoad", + "PresetRemove", + "PresetSave", + "PromptSwitcher", + "RandomString", "SDXLEmptyLatent", + "SavePrompt", "SaveWithMetaData", "SaveWithMetaData2", + "SearchReplace", "SimplePrompts", "SpecificStylesDir", + "SplitImages", + "StringJoin", "TimeStamp", "TricolorComposition", "WorkflowSettings", @@ -2660,7 +2976,8 @@ "X_In_a_Dress", "X_In_a_Suit", "X_In_a_Suit)", - "ZoomCrop" + "ZoomCrop", + "imageborder" ], { "title_aux": "Node Pack mostly for manipulating strings and integers" @@ -2969,6 +3286,14 @@ "title_aux": "pfaeff-comfyui" } ], + "https://github.com/PnthrLeo/comfyUI-image-search": [ + [ + "CloseImagesSearcher" + ], + { + "title_aux": "comfyUI-image-search" + } + ], "https://github.com/Pos13/comfyui-cyclist": [ [ "CyclistCompare", @@ -3055,6 +3380,14 @@ "title_aux": "Advanced Latent Control" } ], + "https://github.com/Ron-Digital/ComfyUI-SceneGenerator": [ + [ + "Scene Generator" + ], + { + "title_aux": "ComfyUI-SceneGenerator" + } + ], "https://github.com/Ryuukeisyou/comfyui_face_parsing": [ [ "BBoxListItemSelect(FaceParsing)", @@ -3158,6 +3491,43 @@ "title_aux": "ComfyUI A1111-like Prompt Custom Node Solution" } ], + "https://github.com/SamKhoze/ComfyUI-DeepFuze": [ + [ + "DeepFuzeAdavance", + "DeepFuzeFaceSwap", + "DeepfuzePreview", + "LLM_node", + "PlayBackAudio", + "SaveVideo [n-suite]", + "TTS_generation" + ], + { + "title_aux": "DeepFuze" + } + ], + "https://github.com/SayanoAI/Comfy-RVC": [ + [ + "AudioBatchValueNode", + "AudioTranscriptionNode", + "DownloadAudio", + "ImageRepeatInterleavedNode", + "LatentRepeatInterleavedNode", + "LoadAudio", + "LoadHubertModel", + "LoadPitchExtractionParams", + "LoadRVCModelNode", + "LoadWhisperModelNode", + "MergeAudioNode", + "MergeImageBatches", + "MergeLatentBatches", + "PreviewAudio", + "RVCNode", + "UVR5Node" + ], + { + "title_aux": "Comfy-RVC" + } + ], "https://github.com/Scholar01/ComfyUI-Keyframe": [ [ "KeyframeApply", @@ -3168,6 +3538,37 @@ "title_aux": "SComfyUI-Keyframe" } ], + "https://github.com/Scorpinaus/ComfyUI-DiffusersLoader": [ + [ + "CombinedDiffusersLoader", + "CombinedDiffusersSD15Loader", + "CombinedDiffusersSDXLLoader", + "DiffusersClipLoader", + "DiffusersUNETLoader", + "DiffusersVAELoader", + "SD15CLIPLoader", + "SD15UNETLoader", + "SD15VAELoader", + "SDXLCLIPLoader", + "SDXLUNETLoader", + "SDXLVAELoader" + ], + { + "title_aux": "Loaders for Diffusers-format checkpoints" + } + ], + "https://github.com/ScreamingHawk/comfyui-ollama-prompt-encode": [ + [ + "OllamaCLIPTextEncode" + ], + { + "author": "Michael Standen", + "description": "Use AI to generate prompts and perform CLIP text encoding", + "nickname": "Ollama Prompt Encode", + "title": "Ollama Prompt Encode", + "title_aux": "Ollama Prompt Encode" + } + ], "https://github.com/SeaArtLab/ComfyUI-Long-CLIP": [ [ "SeaArtLongClip", @@ -3443,22 +3844,13 @@ "Round Float to String", "SaveImageToFolder", "Select ControlNet", + "Select Model 20", "Simple Load Image Batch" ], { "title_aux": "Eagleshadow Custom Nodes" } ], - "https://github.com/Shinsplat/ComfyUI-Shinsplat": [ - [ - "Clip Text Encode (Shinsplat)", - "Clip Text Encode SDXL (Shinsplat)", - "Lora Loader (Shinsplat)" - ], - { - "title_aux": "ComfyUI-Shinsplat" - } - ], "https://github.com/ShmuelRonen/ComfyUI-SVDResizer": [ [ "SVDRsizer" @@ -3467,6 +3859,22 @@ "title_aux": "ComfyUI-SVDResizer" } ], + "https://github.com/ShmuelRonen/ComfyUI_Gemini_Flash": [ + [ + "Gemini_Flash" + ], + { + "title_aux": "ComfyUI_Gemini_Flash" + } + ], + "https://github.com/ShmuelRonen/ComfyUI_wav2lip": [ + [ + "Wav2Lip" + ], + { + "title_aux": "Wav2Lip Node for ComfyUI" + } + ], "https://github.com/Shraknard/ComfyUI-Remover": [ [ "Remover" @@ -3488,6 +3896,17 @@ "title_aux": "Lazy Pony Prompter" } ], + "https://github.com/Smirnov75/ComfyUI-mxToolkit": [ + [ + "mxSeed", + "mxSlider", + "mxSlider2D", + "mxStop" + ], + { + "title_aux": "ComfyUI-mxToolkit" + } + ], "https://github.com/Smuzzies/comfyui_chatbox_overlay/raw/main/chatbox_overlay.py": [ [ "Chatbox Overlay" @@ -3537,6 +3956,17 @@ "title_aux": "MBM's Music Visualizer" } ], + "https://github.com/SozeInc/ComfyUI-Mobile": [ + [ + "Mobile_Settings_Launcher_Data", + "Send Notification (Mobile)", + "Settings Launcher (Mobile)", + "Ultimate Concat (Mobile)" + ], + { + "title_aux": "ComfyUI-Mobile" + } + ], "https://github.com/SpaceKendo/ComfyUI-svd_txt2vid": [ [ "SVD_txt2vid_ConditioningwithLatent" @@ -3547,10 +3977,13 @@ ], "https://github.com/Stability-AI/ComfyUI-SAI_API": [ [ + "Stability Conservative Upscale", "Stability Control Skech", "Stability Control Structure", "Stability Creative Upscale", + "Stability Erase", "Stability Image Core", + "Stability Image Ultra", "Stability Inpainting", "Stability Outpainting", "Stability Remove Background", @@ -3579,6 +4012,14 @@ "title_aux": "ComfyUI_OOTDiffusion_CXH" } ], + "https://github.com/StartHua/ComfyUI_PCDMs": [ + [ + "PCDMS_CXH" + ], + { + "title_aux": "ComfyUI_PCDMs" + } + ], "https://github.com/StartHua/ComfyUI_Seg_VITON": [ [ "segformer_agnostic", @@ -3613,12 +4054,22 @@ "Image Batch Manager (SuperBeasts.AI)", "Make Resized Mask Batch (SuperBeasts.AI)", "Mask Batch Manager (SuperBeasts.AI)", - "Pixel Deflicker (SuperBeasts.AI)" + "Pixel Deflicker (SuperBeasts.AI)", + "String List Manager (SuperBeasts.AI)" ], { "title_aux": "ComfyUI-SuperBeasts" } ], + "https://github.com/SuperMasterBlasterLaser/ComfyUI_YOLO_Classifiers": [ + [ + "YOLO Classifier Model Loader", + "YOLO Classify" + ], + { + "title_aux": "ComfyUI_YOLO_Classifiers" + } + ], "https://github.com/Suzie1/ComfyUI_Comfyroll_CustomNodes": [ [ "CR 8 Channel In", @@ -3920,6 +4371,24 @@ "title_aux": "comfyUI_TJ_NormalLighting" } ], + "https://github.com/TMElyralab/Comfyui-MusePose": [ + [ + "filenamestring", + "musepose", + "museposealign" + ], + { + "title_aux": "Comfyui-MusePose" + } + ], + "https://github.com/TRI3D-LC/ComfyUI-MiroBoard": [ + [ + "add-image-miro-board" + ], + { + "title_aux": "ComfyUI-MiroBoard" + } + ], "https://github.com/TRI3D-LC/tri3d-comfyui-nodes": [ [ "get_histogram_limits", @@ -3931,10 +4400,13 @@ "tri3d-adjust-neck", "tri3d-atr-parse", "tri3d-atr-parse-batch", + "tri3d-clear-memory", "tri3d-clipdrop-bgremove-api", + "tri3d-clipdrop-bgreplace-api", "tri3d-composite-image-splitter", "tri3d-dwpose", "tri3d-extract-hand", + "tri3d-extract-masks-batch", "tri3d-extract-parts-batch", "tri3d-extract-parts-batch2", "tri3d-extract-parts-mask-batch", @@ -3970,6 +4442,24 @@ "title_aux": "tri3d-comfyui-nodes" } ], + "https://github.com/TW-CUI/TW-CUI-Util": [ + [ + "TWCUI_Util_CommonSDXLResolutions", + "TWCUI_Util_FloatLiteral", + "TWCUI_Util_GenerationParameters", + "TWCUI_Util_GenerationPrompts", + "TWCUI_Util_IntLiteral", + "TWCUI_Util_ModelVAELORALoader", + "TWCUI_Util_ModelVAELoader", + "TWCUI_Util_MultilineStringLiteral", + "TWCUI_Util_SaveImage", + "TWCUI_Util_SaveImageAdvanced", + "TWCUI_Util_StringLiteral" + ], + { + "title_aux": "TW-CUI-Util" + } + ], "https://github.com/TaiTair/comfyui-simswap": [ [ "Simswap", @@ -4006,6 +4496,15 @@ "title_aux": "ComfyUI String Tools" } ], + "https://github.com/Taremin/webui-monaco-prompt": [ + [ + "WebuiMonacoPromptFind", + "WebuiMonacoPromptReplace" + ], + { + "title_aux": "WebUI Monaco Prompt" + } + ], "https://github.com/TeaCrab/ComfyUI-TeaNodes": [ [ "TC_ColorFill", @@ -4082,10 +4581,27 @@ "title_aux": "comfyui-upscale-by-model" } ], + "https://github.com/TheMistoAI/ComfyUI-Anyline": [ + [ + "AnyLinePreprocessor" + ], + { + "title_aux": "Anyline" + } + ], + "https://github.com/ThereforeGames/ComfyUI-Unprompted": [ + [ + "Unprompted" + ], + { + "title_aux": "ComfyUI-Unprompted" + } + ], "https://github.com/TinyTerra/ComfyUI_tinyterraNodes": [ [ "ttN KSampler_v2", "ttN advPlot range", + "ttN advPlot string", "ttN advanced xyPlot", "ttN compareInput", "ttN concat", @@ -4118,13 +4634,14 @@ "ttN text", "ttN text3BOX_3WAYconcat", "ttN text7BOX_concat", + "ttN textCycleLine", "ttN textDebug", "ttN tinyLoader", "ttN xyPlot" ], { "author": "tinyterra", - "description": "This extension offers various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.", + "description": "This extension offers extensive xyPlot, various pipe nodes, fullscreen image viewer based on node history, dynamic widgets, interface customization, and more.", "nickname": "\ud83c\udf0f", "nodename_pattern": "^ttN ", "title": "tinyterraNodes", @@ -4202,6 +4719,14 @@ "title_aux": "ComfyUI Neural Network Latent Upscale" } ], + "https://github.com/TylerZoro/SD3-Scaling": [ + [ + "SD3ImageScaleToTotalPixels" + ], + { + "title_aux": "SD3-Scaling" + } + ], "https://github.com/Umikaze-job/select_folder_path_easy": [ [ "SelectFolderPathEasy" @@ -4476,6 +5001,7 @@ "Text Dictionary To Text", "Text Dictionary Update", "Text File History Loader", + "Text Find", "Text Find and Replace", "Text Find and Replace Input", "Text Find and Replace by Dictionary", @@ -4485,12 +5011,14 @@ "Text List to Text", "Text Load Line From File", "Text Multiline", + "Text Multiline (Code Compatible)", "Text Parse A1111 Embeddings", "Text Parse Noodle Soup Prompts", "Text Parse Tokens", "Text Random Line", "Text Random Prompt", "Text Shuffle", + "Text Sort", "Text String", "Text String Truncate", "Text to Conditioning", @@ -4630,6 +5158,15 @@ "title_aux": "ComfyUI-TacoNodes" } ], + "https://github.com/Yanick112/ComfyUI-ToSVG": [ + [ + "ConvertRasterToVector", + "SaveSVG" + ], + { + "title_aux": "ComfyUI-ToSVG" + } + ], "https://github.com/YinBailiang/MergeBlockWeighted_fo_ComfyUI": [ [ "MergeBlockWeighted" @@ -4648,6 +5185,14 @@ "title_aux": "APISR IN COMFYUI" } ], + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Animated-optical-illusions": [ + [ + "AOI_Processing_Zho" + ], + { + "title_aux": "ComfyUI-Animated-optical-illusions" + } + ], "https://github.com/ZHO-ZHO-ZHO/ComfyUI-ArtGallery": [ [ "ArtGallery_Zho", @@ -4766,6 +5311,16 @@ "title_aux": "ComfyUI-Q-Align" } ], + "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-2": [ + [ + "Qwen2_Chat_Zho", + "Qwen2_ModelLoader_Zho", + "Qwen2_Zho" + ], + { + "title_aux": "ComfyUI-Qwen-2" + } + ], "https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen-VL-API": [ [ "QWenVL_API_S_Multi_Zho", @@ -4869,6 +5424,14 @@ "title_aux": "ComfyUI-AudioScheduler" } ], + "https://github.com/aburahamu/ComfyUI-IsNiceParts": [ + [ + "NiceHand" + ], + { + "title_aux": "ComfyUI-IsNiceParts" + } + ], "https://github.com/aburahamu/ComfyUI-RequestsPoster": [ [ "GetImageFromSD3byI2I", @@ -4883,6 +5446,7 @@ ], "https://github.com/abyz22/image_control": [ [ + "abyz22_AddPrompt", "abyz22_Convertpipe", "abyz22_Editpipe", "abyz22_FirstNonNull", @@ -4892,7 +5456,9 @@ "abyz22_ImpactWildcardEncode_GetPrompt", "abyz22_Ksampler", "abyz22_Padding Image", + "abyz22_RandomMask", "abyz22_RemoveControlnet", + "abyz22_ResizeOpenpose", "abyz22_SaveImage", "abyz22_SetQueue", "abyz22_ToBasicPipe", @@ -4900,6 +5466,7 @@ "abyz22_blend_onecolor", "abyz22_blendimages", "abyz22_bypass", + "abyz22_censoring", "abyz22_drawmask", "abyz22_lamaInpaint", "abyz22_lamaPreprocessor", @@ -4984,12 +5551,30 @@ "title_aux": "ComfyUI-styles-all" } ], + "https://github.com/ai-liam/comfyui-liam": [ + [ + "AiStoreAzureGPTLiam", + "GetBetterDepthImage", + "LiamLibFillImage", + "LiamLibImageToGray", + "LiamLibLoadImage", + "LiamLibSaveImg", + "LiamLibSaveText", + "OllamaApiTNodeLiam", + "PreviewReliefImage", + "SpeechRecognitionLiam", + "SpeechSynthesisLiam" + ], + { + "title_aux": "LiamUtil" + } + ], "https://github.com/ai-liam/comfyui_liam_util": [ [ "LiamLoadImage" ], { - "title_aux": "LiamUtil" + "title_aux": "LiamUtil (single node)" } ], "https://github.com/aianimation55/ComfyUI-FatLabels": [ @@ -5016,6 +5601,24 @@ "title_aux": "Bounding Box Crop Node for ComfyUI" } ], + "https://github.com/alessandrozonta/ComfyUI-Layers": [ + [ + "LayersSaver - Save Layer", + "LayersSaver - Save Layer From Images" + ], + { + "title_aux": "Save Layers Node for ComfyUI" + } + ], + "https://github.com/alessandrozonta/ComfyUI-OpenPose": [ + [ + "OpenPose - Get poses" + ], + { + "author": "joe", + "title_aux": "OpenPose Node" + } + ], "https://github.com/alexopus/ComfyUI-Image-Saver": [ [ "Cfg Literal (Image Saver)", @@ -5024,7 +5627,10 @@ "Image Saver", "Int Literal (Image Saver)", "Sampler Selector (Image Saver)", + "Scheduler Selector (Comfy) (Image Saver)", "Scheduler Selector (Image Saver)", + "SchedulerComfyToString (Image Saver)", + "SchedulerToString (Image Saver)", "Seed Generator (Image Saver)", "String Literal (Image Saver)", "Width/Height Literal (Image Saver)" @@ -5033,12 +5639,13 @@ "title_aux": "ComfyUI Image Saver" } ], - "https://github.com/alisson-anjos/ComfyUI-LLaVA-Describer": [ + "https://github.com/alisson-anjos/ComfyUI-Ollama-Describer": [ [ - "LLaVaDescriber" + "LLaVaDescriber", + "OllamaDescriber" ], { - "title_aux": "ComfyUI-LLaVA-Describer" + "title_aux": "ComfyUI-Ollama-Describer" } ], "https://github.com/alpertunga-bile/prompt-generator-comfyui": [ @@ -5230,6 +5837,7 @@ "LoRAScheduler", "PCApplySettings", "PCPromptFromSchedule", + "PCScheduleAddMasks", "PCScheduleSettings", "PCSplitSampling", "PCWrapGuider", @@ -5267,6 +5875,18 @@ "title_aux": "Core ML Suite for ComfyUI" } ], + "https://github.com/audioscavenger/ComfyUI-Thumbnails": [ + [ + "LoadImageThumbnails" + ], + { + "author": "AudioscavengeR", + "description": "Load Image thumbnails and show input subfolders.", + "nickname": "ComfyUI Thumbnails", + "title": "ComfyUI Thumbnails", + "title_aux": "ComfyUI Thumbnails" + } + ], "https://github.com/audioscavenger/save-image-extended-comfyui": [ [ "SaveImageExtended" @@ -5307,7 +5927,10 @@ "Bedrock - Claude", "Bedrock - Claude Multimodal", "Bedrock - SDXL", - "Bedrock - Titan Image", + "Bedrock - Titan Inpainting", + "Bedrock - Titan Outpainting", + "Bedrock - Titan Text to Image", + "Bedrock - Titan Variation", "Image From S3", "Image From URL", "Image To S3", @@ -5331,6 +5954,15 @@ "title_aux": "ComfyUI-ClipScore-Nodes" } ], + "https://github.com/badayvedat/ComfyUI-fal-Connector": [ + [ + "RemoteCheckpointLoader_fal", + "RemoteLoraLoader_fal" + ], + { + "title_aux": "ComfyUI-fal-Connector" + } + ], "https://github.com/badjeff/comfyui_lora_tag_loader": [ [ "LoraTagLoader" @@ -5339,15 +5971,38 @@ "title_aux": "LoRA Tag Loader for ComfyUI" } ], + "https://github.com/baicai99/ComfyUI-FrameSkipping": [ + [ + "FrameSelector", + "FrameSkipping", + "FrameTruncating", + "IntOperationsNode", + "MaskFrameSkipping", + "MaskGenerator", + "MaskSelector" + ], + { + "title_aux": "ComfyUI-FrameSkipping" + } + ], "https://github.com/banodoco/steerable-motion": [ [ "BatchCreativeInterpolation", - "IpaConfiguration" + "IpaConfiguration", + "RemoveAndInterpolateFrames" ], { "title_aux": "Steerable Motion" } ], + "https://github.com/barckley75/comfyUI_DaVinciResolve/raw/main/custom_nodes/node_text_to_speech.py": [ + [ + "TextToSpeech" + ], + { + "title_aux": "comfyUI_DaVinciResolve" + } + ], "https://github.com/bash-j/mikey_nodes": [ [ "AddMetaData", @@ -5380,6 +6035,8 @@ "Mikey Sampler Base Only Advanced", "Mikey Sampler Tiled", "Mikey Sampler Tiled Base Only", + "MikeyLatentTileSampler", + "MikeyLatentTileSamplerCustom", "MikeySamplerTiledAdvanced", "MikeySamplerTiledAdvancedBaseOnly", "MosaicExpandImage", @@ -5393,6 +6050,7 @@ "Range Integer", "Ratio Advanced", "Resize Image for SDXL", + "SD3TextConditioningWithOptionsOnePrompt", "SRFloatPromptInput", "SRIntPromptInput", "SRStringPromptInput", @@ -5409,6 +6067,7 @@ "TextCombinations", "TextCombinations3", "TextConcat", + "TextPadderMikey", "TextPreserve", "Upscale Tile Calculator", "Wildcard Processor", @@ -5433,15 +6092,6 @@ "title_aux": "ComfyUI_NAIDGenerator" } ], - "https://github.com/biegert/ComfyUI-CLIPSeg/raw/main/custom_nodes/clipseg.py": [ - [ - "CLIPSeg", - "CombineSegMasks" - ], - { - "title_aux": "CLIPSeg" - } - ], "https://github.com/bilal-arikan/ComfyUI_TextAssets": [ [ "LoadTextAsset" @@ -5450,6 +6100,21 @@ "title_aux": "ComfyUI_TextAssets" } ], + "https://github.com/bitaffinity/ComfyUI_HF_Inference": [ + [ + "Classification", + "FeatureExtraction", + "Generation", + "ObjectDetection", + "QuestionAnswering", + "Segmentation", + "TextToImage", + "Translation" + ], + { + "title_aux": "ComfyUI_HF_Inference" + } + ], "https://github.com/bkunbargi/BrevImage/raw/main/BrevLoadImage.py": [ [ "BrevImage" @@ -5484,10 +6149,14 @@ "SamplerSonarDPMPPSDE", "SamplerSonarEuler", "SamplerSonarEulerA", + "SonarCompositeNoise", "SonarCustomNoise", "SonarGuidanceConfig", + "SonarGuidedNoise", "SonarModulatedNoise", - "SonarRepeatedNoise" + "SonarRandomNoise", + "SonarRepeatedNoise", + "SonarScheduledNoise" ], { "title_aux": "ComfyUI-sonar" @@ -5692,6 +6361,7 @@ ], "https://github.com/bobmagicii/comfykit-custom-nodes": [ [ + "LoraThree", "LoraWithMeta", "TypecasterImage", "TypecasterLatent" @@ -5713,11 +6383,8 @@ "CLIPTextEncodeSDXL-Multi-IO", "CLIPTextEncodeSDXL-Pipe", "Empty Latent Image from Aspect-Ratio", - "Random Find and Replace", - "VAE Decode Pipe", - "VAE Decode Tiled Pipe", - "VAE Encode Pipe", - "VAE Encode Tiled Pipe" + "Interval Sampler", + "Random Find and Replace" ], { "title_aux": "braintacles-nodes" @@ -5866,6 +6533,7 @@ "ImageDirIterator", "Modelscopet2v", "Modelscopev2v", + "TextFileLineIterator", "VidDirIterator" ], { @@ -5880,6 +6548,39 @@ "title_aux": "ComfyUI LLaVA Captioner" } ], + "https://github.com/chakib-belgaid/ComfyUI-autosize": [ + [ + "CustomAutoSize", + "SDXLAutoSize" + ], + { + "title_aux": "ComfyUI-autosize" + } + ], + "https://github.com/chakib-belgaid/Comfyui_Prompt_styler": [ + [ + "Prompt_Styler" + ], + { + "title_aux": "ComfyUI Style Plugin" + } + ], + "https://github.com/chandlergis/ComfyUI-IMG_Query": [ + [ + "ImageRequestNode" + ], + { + "title_aux": "ComfyUI-IMG_Query" + } + ], + "https://github.com/chandlergis/ComfyUI_EmojiOverlay": [ + [ + "Image Emoji Overlay" + ], + { + "title_aux": "ComfyUI_EmojiOverlay" + } + ], "https://github.com/chaojie/ComfyUI-AniPortrait": [ [ "AniPortraitLoader", @@ -6320,6 +7021,14 @@ "title_aux": "Chaosaiart-Nodes" } ], + "https://github.com/chesnokovivan/ComfyUI-Novakid": [ + [ + "Novakid Styler" + ], + { + "title_aux": "ComfyUI-Novakid" + } + ], "https://github.com/chflame163/ComfyUI_FaceSimilarity": [ [ "Face Similarity" @@ -6330,6 +7039,7 @@ ], "https://github.com/chflame163/ComfyUI_LayerStyle": [ [ + "LayerColor: AutoAdjust", "LayerColor: AutoBrightness", "LayerColor: Brightness & Contrast", "LayerColor: Color of Shadow & Highlight", @@ -6344,9 +7054,11 @@ "LayerColor: Levels", "LayerColor: RGB", "LayerColor: YUV", + "LayerFilter: AddGrain", "LayerFilter: ChannelShake", "LayerFilter: ColorMap", "LayerFilter: Film", + "LayerFilter: FilmV2", "LayerFilter: GaussianBlur", "LayerFilter: HDREffects", "LayerFilter: LightLeak", @@ -6358,22 +7070,27 @@ "LayerMask: BiRefNetUltra", "LayerMask: BlendIf Mask", "LayerMask: CreateGradientMask", + "LayerMask: ImageToMask", "LayerMask: MaskBoxDetect", + "LayerMask: MaskByColor", "LayerMask: MaskByDifferent", "LayerMask: MaskEdgeShrink", "LayerMask: MaskEdgeUltraDetail", "LayerMask: MaskEdgeUltraDetail V2", "LayerMask: MaskGradient", + "LayerMask: MaskGrain", "LayerMask: MaskGrow", "LayerMask: MaskInvert", "LayerMask: MaskMotionBlur", "LayerMask: MaskPreview", "LayerMask: MaskStroke", + "LayerMask: MediapipeFacialSegment", "LayerMask: PersonMaskUltra", "LayerMask: PersonMaskUltra V2", "LayerMask: PixelSpread", "LayerMask: RemBgUltra", "LayerMask: RmBgUltra V2", + "LayerMask: SegformerB2ClothesUltra", "LayerMask: SegmentAnythingUltra", "LayerMask: SegmentAnythingUltra V2", "LayerMask: Shadow & Highlight Mask", @@ -6392,14 +7109,19 @@ "LayerStyle: OuterGlow V2", "LayerStyle: Stroke", "LayerStyle: Stroke V2", + "LayerUtility: AddBlindWaterMark", + "LayerUtility: BatchSelector", "LayerUtility: Boolean", "LayerUtility: BooleanOperator", + "LayerUtility: BooleanOperatorV2", "LayerUtility: ColorImage", "LayerUtility: ColorImage V2", "LayerUtility: ColorPicker", + "LayerUtility: CreateQRCode", "LayerUtility: CropBoxResolve", "LayerUtility: CropByMask", "LayerUtility: CropByMask V2", + "LayerUtility: DecodeQRCode", "LayerUtility: ExtendCanvas", "LayerUtility: ExtendCanvasV2", "LayerUtility: Float", @@ -6408,6 +7130,8 @@ "LayerUtility: GetImageSize", "LayerUtility: GradientImage", "LayerUtility: GradientImage V2", + "LayerUtility: HLFrequencyDetailRestore", + "LayerUtility: If", "LayerUtility: ImageAutoCrop", "LayerUtility: ImageAutoCrop V2", "LayerUtility: ImageBlend", @@ -6431,23 +7155,34 @@ "LayerUtility: LaMa", "LayerUtility: LayerImageTransform", "LayerUtility: LayerMaskTransform", + "LayerUtility: LoadPSD", "LayerUtility: NumberCalculator", + "LayerUtility: NumberCalculatorV2", "LayerUtility: PrintInfo", "LayerUtility: PromptEmbellish", "LayerUtility: PromptTagger", + "LayerUtility: PurgeVRAM", "LayerUtility: QWenImage2Prompt", + "LayerUtility: RGB Value", "LayerUtility: RestoreCropBox", + "LayerUtility: SD3NegativeConditioning", + "LayerUtility: SaveImagePlus", + "LayerUtility: Seed", + "LayerUtility: ShowBlindWaterMark", "LayerUtility: SimpleTextImage", + "LayerUtility: String", + "LayerUtility: StringCondition", + "LayerUtility: SwitchCase", "LayerUtility: TextBox", "LayerUtility: TextImage", "LayerUtility: TextJoin", "LayerUtility: XY to Percent" ], { - "author": "Chris Freilich", - "description": "This extension provides a blend modes node with 30 blend modes.", - "nickname": "Virtuoso Pack - Blend Nodes", - "title": "Virtuoso Pack - Blend Modes", + "author": "chflame", + "description": "A set of nodes for ComfyUI that can composite layer and mask to achieve Photoshop like functionality.", + "nickname": "LayerStyle", + "title": "LayerStyle", "title_aux": "ComfyUI Layer Style" } ], @@ -6507,6 +7242,14 @@ "title_aux": "Comfy-Topaz" } ], + "https://github.com/chris-the-wiz/EmbeddingsCurveEditor_ComfyUI": [ + [ + "Embeddings Curve Editor" + ], + { + "title_aux": "EmbeddingsCurveEditor_ComfyUI" + } + ], "https://github.com/chrisfreilich/virtuoso-nodes": [ [ "BlackAndWhite", @@ -6571,6 +7314,27 @@ "title_aux": "Use Everywhere (UE Nodes)" } ], + "https://github.com/christian-byrne/img2colors-comfyui-node": [ + [ + "bmy_Img2ColorNode" + ], + { + "author": "christian-byrne", + "description": "", + "nickname": "img2color", + "title": "Img2Color Node - Detect and describe color palettes in images", + "title_aux": "img2colors-comfyui-node" + } + ], + "https://github.com/christian-byrne/size-match-compositing-nodes": [ + [ + "Composite Alpha Layer", + "Size Match Images/Masks" + ], + { + "title_aux": "Node - Size Matcher" + } + ], "https://github.com/city96/ComfyUI_ColorMod": [ [ "CV2Tonemap", @@ -6612,11 +7376,20 @@ "DiTCondLabelSelect", "DitCheckpointLoader", "ExtraVAELoader", + "HYDiTCheckpointLoader", + "HYDiTSrcSizeCond", + "HYDiTTextEncode", + "HYDiTTextEncodeSimple", + "HYDiTTextEncoderLoader", + "MiaoBiCLIPLoader", + "MiaoBiDiffusersLoader", "PixArtCheckpointLoader", + "PixArtCheckpointLoaderSimple", "PixArtControlNetCond", "PixArtLoraLoader", "PixArtResolutionCond", "PixArtResolutionSelect", + "PixArtT5FromSD3CLIP", "PixArtT5TextEncode", "T5TextEncode", "T5v11Loader" @@ -6680,6 +7453,14 @@ "title_aux": "comfy-nodes" } ], + "https://github.com/claussteinmassl/ComfyUI-CS-CustomNodes": [ + [ + "CS Transform" + ], + { + "title_aux": "CS Transform Node for ComfyUI" + } + ], "https://github.com/comfyanonymous/ComfyUI": [ [ "AddNoise", @@ -6696,6 +7477,7 @@ "CLIPSetLastLayer", "CLIPTextEncode", "CLIPTextEncodeControlnet", + "CLIPTextEncodeSD3", "CLIPTextEncodeSDXL", "CLIPTextEncodeSDXLRefiner", "CLIPVisionEncode", @@ -6724,7 +7506,9 @@ "DualCFGGuider", "DualCLIPLoader", "EmptyImage", + "EmptyLatentAudio", "EmptyLatentImage", + "EmptySD3LatentImage", "ExponentialScheduler", "FeatherMask", "FlipSigmas", @@ -6776,6 +7560,7 @@ "LatentSubtract", "LatentUpscale", "LatentUpscaleBy", + "LoadAudio", "LoadImage", "LoadImageMask", "LoadLatent", @@ -6791,7 +7576,9 @@ "ModelMergeSimple", "ModelMergeSubtract", "ModelSamplingContinuousEDM", + "ModelSamplingContinuousV", "ModelSamplingDiscrete", + "ModelSamplingSD3", "ModelSamplingStableCascade", "Morphology", "PatchModelAddDownscale", @@ -6824,6 +7611,7 @@ "SamplerLMS", "SaveAnimatedPNG", "SaveAnimatedWEBP", + "SaveAudio", "SaveImage", "SaveImageWebsocket", "SaveLatent", @@ -6843,14 +7631,17 @@ "StyleModelLoader", "ThresholdMask", "TomePatchModel", + "TripleCLIPLoader", "UNETLoader", "UNetCrossAttentionMultiply", "UNetSelfAttentionMultiply", "UNetTemporalAttentionMultiply", "UpscaleModelLoader", "VAEDecode", + "VAEDecodeAudio", "VAEDecodeTiled", "VAEEncode", + "VAEEncodeAudio", "VAEEncodeForInpaint", "VAEEncodeTiled", "VAELoader", @@ -6858,6 +7649,7 @@ "VPScheduler", "VideoLinearCFGGuidance", "VideoTriangleCFGGuidance", + "WebcamCapture", "unCLIPCheckpointLoader", "unCLIPConditioning" ], @@ -6865,6 +7657,16 @@ "title_aux": "ComfyUI" } ], + "https://github.com/comfyanonymous/ComfyUI_TensorRT": [ + [ + "DYNAMIC_TRT_MODEL_CONVERSION", + "STATIC_TRT_MODEL_CONVERSION", + "TensorRTLoader" + ], + { + "title_aux": "TensorRT Node for ComfyUI" + } + ], "https://github.com/comfyanonymous/ComfyUI_experiments": [ [ "ModelMergeBlockNumber", @@ -6890,6 +7692,18 @@ "title_aux": "ConCarneNode" } ], + "https://github.com/conquestace/ComfyUI-ImageUploader": [ + [ + "ImageUploader" + ], + { + "author": "ConquestAce", + "description": "Upload to temporary websites with API.", + "nickname": "Image Uploader", + "title": "Image Uploader", + "title_aux": "Image Uploader" + } + ], "https://github.com/coreyryanhanson/ComfyQR": [ [ "comfy-qr-by-image-size", @@ -6950,9 +7764,12 @@ ], "https://github.com/cubiq/ComfyUI_FaceAnalysis": [ [ + "FaceAlign", "FaceAnalysisModels", "FaceBoundingBox", - "FaceEmbedDistance" + "FaceEmbedDistance", + "FaceSegmentation", + "FaceWarp" ], { "title_aux": "Face Analysis for ComfyUI" @@ -6968,6 +7785,7 @@ "IPAdapterCombineParams", "IPAdapterCombineWeights", "IPAdapterEmbeds", + "IPAdapterEmbedsBatch", "IPAdapterEncoder", "IPAdapterFaceID", "IPAdapterFromParams", @@ -7019,6 +7837,7 @@ ], "https://github.com/cubiq/ComfyUI_essentials": [ [ + "ApplyCLIPSeg+", "BatchCount+", "CLIPTextEncodeSDXL+", "ConditioningCombineMultiple+", @@ -7030,6 +7849,7 @@ "ImageApplyLUT+", "ImageBatchMultiple+", "ImageCASharpening+", + "ImageColorMatch+", "ImageCompositeFromMaskBatch+", "ImageCrop+", "ImageDesaturate+", @@ -7037,17 +7857,24 @@ "ImageExpandBatch+", "ImageFlip+", "ImageFromBatch+", + "ImageHistogramMatch+", "ImageListToBatch+", "ImagePosterize+", + "ImageRandomTransform+", + "ImageRemoveAlpha+", "ImageRemoveBackground+", "ImageResize+", "ImageSeamCarving+", + "ImageTile+", + "ImageToDevice+", "KSamplerVariationsStochastic+", "KSamplerVariationsWithNoise+", + "LoadCLIPSegModels+", "MaskBatch+", "MaskBlur+", "MaskBoundingBox+", "MaskExpandBatch+", + "MaskFix+", "MaskFlip+", "MaskFromBatch+", "MaskFromColor+", @@ -7057,10 +7884,10 @@ "MaskPreview+", "MaskSmooth+", "ModelCompile+", - "NoiseFromImage~", "PixelOEPixelize+", "RemBGSession+", "RemoveLatentMask+", + "SD3NegativeConditioning+", "SDXLEmptyLatentSizePicker+", "SimpleMath+", "TransitionMask+" @@ -7072,6 +7899,7 @@ "https://github.com/cubiq/PuLID_ComfyUI": [ [ "ApplyPulid", + "ApplyPulidAdvanced", "PulidEvaClipLoader", "PulidInsightFaceLoader", "PulidModelLoader" @@ -7080,9 +7908,19 @@ "title_aux": "PuLID_ComfyUI" } ], + "https://github.com/cuongloveit/comfy_http_request": [ + [ + "Send Http Request", + "Send Http request" + ], + { + "title_aux": "comfy_http_request" + } + ], "https://github.com/curiousjp/ComfyUI-MaskBatchPermutations": [ [ "CombinatorialDetailer", + "FlattenAgainstOriginal", "PermuteMaskBatch" ], { @@ -7127,14 +7965,22 @@ ], "https://github.com/dagthomas/comfyui_dagthomas": [ [ - "CSL", - "CSVPromptGenerator", + "PGSD3LatentGenerator", "PromptGenerator" ], { "title_aux": "SDXL Auto Prompter" } ], + "https://github.com/daniabib/ComfyUI_ProPainter_Nodes": [ + [ + "ProPainterInpaint", + "ProPainterOutpaint" + ], + { + "title_aux": "ComfyUI ProPainter Nodes" + } + ], "https://github.com/daniel-lewis-ab/ComfyUI-Llama": [ [ "Call LLM Advanced", @@ -7181,22 +8027,6 @@ "title_aux": "DarkPrompts" } ], - "https://github.com/davask/ComfyUI_MaraScott_Nodes": [ - [ - "MaraScottAnyBusNode", - "MaraScottDisplayInfoNode", - "MaraScottUpscalerRefinerNode_v2", - "MarasitAnyBusNode", - "MarasitBusNode", - "MarasitDisplayInfoNode", - "MarasitUniversalBusNode", - "MarasitUpscalerRefinerNode", - "MarasitUpscalerRefinerNode_v2" - ], - { - "title_aux": "\ud83d\udc30 MaraScott Nodes" - } - ], "https://github.com/dave-palt/comfyui_DSP_imagehelpers": [ [ "dsp-imagehelpers-concat" @@ -7214,19 +8044,23 @@ "title_aux": "KSampler GPU" } ], - "https://github.com/daxcay/ComfyUI-DRMN": [ + "https://github.com/daxcay/ComfyUI-DataSet": [ [ - "DRMN_CaptionVisualizer", - "DRMN_SearchAndReplace", - "DRMN_TXTFileSaver", - "DRMN_TagManipulatorByImageNames" + "DATASET_CaptionVisualizer", + "DATASET_OpenAIChat", + "DATASET_OpenAIChatImage", + "DATASET_SearchAndReplace", + "DATASET_TXTFileLoader", + "DATASET_TXTFileSaver", + "DATASET_TagManipulatorByImageNames", + "DATASET_xCopy" ], { "author": "Daxton Caylor", - "description": "Data Research And Manipulators Nodes for Model Trainers, Artists, Designers and Animators.", - "nickname": "ComfyUI-DRMN", - "title": "ComfyUI-DRMN", - "title_aux": "ComfyUI-DRMN" + "description": "Data Research, Preparation And Manipulators Nodes for Model Trainers, Artists, Designers and Animators.", + "nickname": "ComfyUI-DataSet", + "title": "ComfyUI-DataSet", + "title_aux": "ComfyUI-DataSet" } ], "https://github.com/daxcay/ComfyUI-JDCN": [ @@ -7243,14 +8077,18 @@ "JDCN_BatchLatentLoadFromDir", "JDCN_BatchLatentLoadFromList", "JDCN_BatchSaveLatent", + "JDCN_BoolInt", + "JDCN_EnableDisable", "JDCN_FileMover", "JDCN_ImageSaver", "JDCN_ListToString", "JDCN_ReBatch", "JDCN_SeamlessExperience", + "JDCN_ShowAny", "JDCN_SplitString", "JDCN_StringManipulator", "JDCN_StringToList", + "JDCN_SwapInputs", "JDCN_TXTFileSaver", "JDCN_VHSFileMover" ], @@ -7272,11 +8110,11 @@ ], "https://github.com/dchatel/comfyui_facetools": [ [ - "AlignFaces", + "BiSeNetMask", "CropFaces", "DetectFaces", - "FaceDetails", "GenderFaceFilter", + "JonathandinuMask", "MergeWarps", "OrderedFaceFilter", "WarpFacesBack" @@ -7285,6 +8123,40 @@ "title_aux": "comfyui_facetools" } ], + "https://github.com/denfrost/Den_ComfyUI_Workflow": [ + [ + "Den_BatchIndex_AS", + "Den_CropImage_AS", + "Den_Eval_AS", + "Den_FaceRestoreCFWithModel", + "Den_GPTLoaderSimple_llama", + "Den_GPTSampler_llama", + "Den_ImageMixMasked_As", + "Den_ImageToLatentSpace", + "Den_ImageToMask_AS", + "Den_Int2Any_AS", + "Den_LatentAdd_AS", + "Den_LatentMixMasked_As", + "Den_LatentMix_AS", + "Den_LatentToImages_AS", + "Den_LoadLatent_AS", + "Den_MapRange_AS", + "Den_MaskToImage_AS", + "Den_Math_AS", + "Den_NoiseImage_AS", + "Den_Number2Float_AS", + "Den_Number2Int_AS", + "Den_Number_AS", + "Den_SVD_img2vid", + "Den_SaveLatent_AS", + "Den_TextToImage_AS", + "Den_TextWildcardList_AS", + "Increment_AS" + ], + { + "title_aux": "Den_ComfyUI_Workflows" + } + ], "https://github.com/deroberon/StableZero123-comfyui": [ [ "SDZero ImageSplit", @@ -7338,6 +8210,20 @@ "title_aux": "ComfyUI Frame Maker" } ], + "https://github.com/dicksondickson/ComfyUI-Dickson-Nodes": [ + [ + "DicksonColorMatch", + "TTPlanet_Tile_Preprocessor_GF", + "TTPlanet_Tile_Preprocessor_Simple", + "TTPlanet_Tile_Preprocessor_cufoff" + ], + { + "description": "This is a set of custom nodes that I've either written myself or adapted from other authors for my own convenience. Currently includes color matching node forked from StableSR and TTPlanet's controlnet preprocessor. https://github.com/dicksondickson", + "nickname": "Dickson Nodes", + "title": "Dickson Nodes", + "title_aux": "ComfyUI-Dickson-Nodes" + } + ], "https://github.com/digitaljohn/comfyui-propost": [ [ "ProPostApplyLUT", @@ -7403,6 +8289,7 @@ ], "https://github.com/djbielejeski/a-person-mask-generator": [ [ + "APersonFaceLandmarkMaskGenerator", "APersonMaskGenerator" ], { @@ -7563,6 +8450,7 @@ ], "https://github.com/edenartlab/eden_comfy_pipelines": [ [ + "Animation_RGB_Mask", "CLIP_Interrogator", "ConvertToGrayscale", "Eden_Bool", @@ -7570,7 +8458,11 @@ "Eden_DebugPrint", "Eden_Float", "Eden_Int", + "Eden_Lora_Loader", "Eden_String", + "FolderScanner", + "GetRandomFile", + "Get_Prefixed_Imgs", "HistogramMatching", "IMG_blender", "IMG_padder", @@ -7578,15 +8470,22 @@ "IMG_scaler", "IMG_unpadder", "If ANY execute A else B", + "ImageDescriptionNode", "LatentTypeConversion", + "Linear_Combine_IP_Embeds", + "LoadImagesByFilename", "LoadRandomImage", + "Load_Embeddings_From_Folder", "MaskFromRGB", "MaskFromRGB_KMeans", + "Random_Style_Mixture", "SaveImageAdvanced", - "VAEDecode_to_folder" + "SavePosEmbeds", + "VAEDecode_to_folder", + "VideoFrameSelector" ], { - "title_aux": "eden_comfy_pipelines" + "title_aux": "Various custom nodes by Eden.art" } ], "https://github.com/evanspearman/ComfyMath": [ @@ -7647,6 +8546,25 @@ "title_aux": "ComfyMath" } ], + "https://github.com/exdysa/comfyui-selector": [ + [ + "Fork", + "ForkClip", + "Recourse", + "Recourse+/-", + "RecourseCkpt", + "RecourseImage", + "Selector", + "Unite" + ], + { + "author": "\"\u02f6\ud835\udfa2\u292c\u2ad2\u2d56s\u143c\u02f6\"", + "description": "\"Selector & Recourse. Presets & failsafes. Work flow.\"", + "nickname": "\"Selector\"", + "title": "\"Selector\"", + "title_aux": "comfyui-selector" + } + ], "https://github.com/fearnworks/ComfyUI_FearnworksNodes/raw/main/fw_nodes.py": [ [ "Count Files in Directory (FW)", @@ -7694,6 +8612,30 @@ "title_aux": "fexli-util-node-comfyui" } ], + "https://github.com/fexploit/ComfyUI-AutoLabel": [ + [ + "AutoLabel" + ], + { + "title_aux": "ComfyUI-AutoLabel" + } + ], + "https://github.com/fexploit/ComfyUI-AutoTrimBG": [ + [ + "RonLayers/TrimBg: RonLayersTrimBgUltraV2" + ], + { + "title_aux": "ComfyUI-AutoTrimBG" + } + ], + "https://github.com/fexploit/ComfyUI-Classifier": [ + [ + "ClassifierNode" + ], + { + "title_aux": "ComfyUI-Classifier" + } + ], "https://github.com/filipemeneses/comfy_pixelization": [ [ "Pixelization" @@ -7711,14 +8653,24 @@ "FL_CodeNode", "FL_DirectoryCrawl", "FL_Glitch", + "FL_HalftonePattern", "FL_HexagonalPattern", "FL_ImageCaptionSaver", + "FL_ImageCollage", "FL_ImageDimensionDisplay", "FL_ImageDurationSync", + "FL_ImageNotes", "FL_ImagePixelator", "FL_ImageRandomizer", + "FL_InfiniteZoom", + "FL_NFTGenerator", + "FL_PaperDrawn", + "FL_PixelArtShader", "FL_PixelSort", - "FL_Ripple" + "FL_PromptSelector", + "FL_RandomNumber", + "FL_Ripple", + "FL_Shadertoy" ], { "title_aux": "ComfyUI_Fill-Nodes" @@ -7847,6 +8799,17 @@ "title_aux": "As_ComfyUI_CustomNodes" } ], + "https://github.com/fmatray/ComfyUI_BattlemapGrid": [ + [ + "Battlemap Grid", + "Compass", + "Map Generator", + "Map Generator(Outdoors)" + ], + { + "title_aux": "ComfyUI_BattlemapGrid" + } + ], "https://github.com/fofr/ComfyUI-HyperSDXL1StepUnetScheduler": [ [ "HyperSDXL1StepUnetScheduler" @@ -7904,7 +8867,6 @@ [ "AniPortrait_Audio2Video", "AniPortrait_Audio_Path", - "AniPortrait_Generate_Ref_Pose", "AniPortrait_LoadVideoPath", "AniPortrait_Pose_Gen_Video", "AniPortrait_Ref_Image_Path", @@ -7924,6 +8886,22 @@ "title_aux": "ComfyUI_MagicClothing" } ], + "https://github.com/frankchieng/ComfyUI_llm_easyanimiate": [ + [], + { + "nodename_pattern": "^FrankChiengEasyAnimate", + "title_aux": "ComfyUI_llm_easyanimiate" + } + ], + "https://github.com/fsdymy1024/ComfyUI_fsdymy": [ + [ + "Preview Image Without Metadata", + "Save Image Without Metadata" + ], + { + "title_aux": "ComfyUI_fsdymy" + } + ], "https://github.com/gemell1/ComfyUI_GMIC": [ [ "GmicCliWrapper", @@ -7981,15 +8959,211 @@ "SAIStringRegexSearchMatch", "SAIStringRegexSearchReplace", "SaltAIStableVideoDiffusion", + "SaltBatchCropDataExtractor", + "SaltCLIPSegLoader", + "SaltCLIPSegMasking", + "SaltCropImageLocation", + "SaltDisplayAny", + "SaltImagePasteCrop", "SaltInfo", "SaltInput", + "SaltLoadImageZip", + "SaltMaskCropRegion", + "SaltMasksToImages", "SaltOutput", + "SaltRGBAFromMask", "ScheduledImageAdjust" ], { "title_aux": "SaltAI-Open-Resources" } ], + "https://github.com/get-salt-AI/SaltAI_Language_Toolkit": [ + [ + "AddTool", + "ChangeSystemMessage", + "ClearMemory", + "ConversableAgentCreator", + "ConversableAgentCreatorAdvanced", + "ConvertAgentAsTool", + "ConvertAgentToLlamaindex", + "CreateTavilySearchTool", + "Example", + "GenerateReply", + "GroupChat", + "GroupChatAdvanced", + "GroupChatManagerCreator", + "LLMCSVReader", + "LLMChat", + "LLMChatBot", + "LLMChatEngine", + "LLMChatMessageConcat", + "LLMChatMessages", + "LLMChatMessagesAdv", + "LLMComplete", + "LLMCustomNodeComposer", + "LLMDirectoryReader", + "LLMDocumentListAppend", + "LLMDocxReader", + "LLMEpubReader", + "LLMFlatReader", + "LLMHTMLTagReader", + "LLMHWPReader", + "LLMHtmlComposer", + "LLMHtmlRepair", + "LLMIPYNBReader", + "LLMImageCaptionReader", + "LLMImageTabularChartReader", + "LLMImageTextReader", + "LLMImageVisionLLMReader", + "LLMInputToDocuments", + "LLMJsonComposer", + "LLMJsonRepair", + "LLMLLaVANextImageEvaluator", + "LLMLLaVANextModelLoader", + "LLMMarkdownComposer", + "LLMMarkdownReader", + "LLMMarkdownRepair", + "LLMMboxReader", + "LLMMultiModalImageEvaluation", + "LLMNotionReader", + "LLMOpenAIModel", + "LLMOpenAIModelOpts", + "LLMPDFReader", + "LLMPagedCSVReader", + "LLMPandasCSVReader", + "LLMParquetDatasetSearcher", + "LLMPostProcessDocuments", + "LLMPptxReader", + "LLMPyMuPDFReader", + "LLMQueryEngine", + "LLMQueryEngineAdv", + "LLMQueryEngineAsTool", + "LLMRTFReader", + "LLMRegexCreator", + "LLMRegexRepair", + "LLMRssReaderNode", + "LLMSaltWebCrawler", + "LLMScaleSERPSearch", + "LLMSemanticSplitterNodeParser", + "LLMSentenceSplitterNodeCreator", + "LLMServiceContextAdv", + "LLMServiceContextDefault", + "LLMSimpleWebPageReader", + "LLMSimpleWebPageReaderAdv", + "LLMSummaryIndex", + "LLMTavilyResearch", + "LLMTrafilaturaWebReader", + "LLMTrafilaturaWebReaderAdv", + "LLMTreeIndex", + "LLMUnstructuredReader", + "LLMVectorStoreIndex", + "LLMVectorStoreIndexAdv", + "LLMVideoAudioReader", + "LLMXMLReader", + "LLMYamlComposer", + "LLMYamlRepair", + "SaltJSONQueryEngine", + "SendMessage", + "SimpleChat" + ], + { + "title_aux": "SaltAI Language Toolkit" + } + ], + "https://github.com/get-salt-AI/SaltAI_LlamaIndex": [ + [ + "AddTool", + "ChangeSystemMessage", + "ClearMemory", + "ConversableAgentCreator", + "ConversableAgentCreatorAdvanced", + "ConvertAgentAsTool", + "ConvertAgentToLlamaindex", + "CreateTavilySearchTool", + "Example", + "GenerateReply", + "GroupChat", + "GroupChatAdvanced", + "GroupChatManagerCreator", + "LLMCSVReader", + "LLMChat", + "LLMChatBot", + "LLMChatEngine", + "LLMChatMessageConcat", + "LLMChatMessages", + "LLMChatMessagesAdv", + "LLMComplete", + "LLMCustomNodeComposer", + "LLMDirectoryReader", + "LLMDocumentListAppend", + "LLMDocxReader", + "LLMEpubReader", + "LLMFlatReader", + "LLMHTMLTagReader", + "LLMHWPReader", + "LLMHtmlComposer", + "LLMHtmlRepair", + "LLMIPYNBReader", + "LLMImageCaptionReader", + "LLMImageTabularChartReader", + "LLMImageTextReader", + "LLMImageVisionLLMReader", + "LLMInputToDocuments", + "LLMJsonComposer", + "LLMJsonRepair", + "LLMLLaVANextImageEvaluator", + "LLMLLaVANextModelLoader", + "LLMMarkdownComposer", + "LLMMarkdownReader", + "LLMMarkdownRepair", + "LLMMboxReader", + "LLMMultiModalImageEvaluation", + "LLMNotionReader", + "LLMOpenAIModel", + "LLMOpenAIModelOpts", + "LLMPDFReader", + "LLMPagedCSVReader", + "LLMPandasCSVReader", + "LLMParquetDatasetSearcher", + "LLMPostProcessDocuments", + "LLMPptxReader", + "LLMPyMuPDFReader", + "LLMQueryEngine", + "LLMQueryEngineAdv", + "LLMQueryEngineAsTool", + "LLMRTFReader", + "LLMRegexCreator", + "LLMRegexRepair", + "LLMRssReaderNode", + "LLMSaltWebCrawler", + "LLMScaleSERPSearch", + "LLMSemanticSplitterNodeParser", + "LLMSentenceSplitterNodeCreator", + "LLMServiceContextAdv", + "LLMServiceContextDefault", + "LLMSimpleWebPageReader", + "LLMSimpleWebPageReaderAdv", + "LLMSummaryIndex", + "LLMTavilyResearch", + "LLMTrafilaturaWebReader", + "LLMTrafilaturaWebReaderAdv", + "LLMTreeIndex", + "LLMUnstructuredReader", + "LLMVectorStoreIndex", + "LLMVectorStoreIndexAdv", + "LLMVideoAudioReader", + "LLMXMLReader", + "LLMYamlComposer", + "LLMYamlRepair", + "SaltJSONQueryEngine", + "SendMessage", + "SimpleChat" + ], + { + "title_aux": "SaltAI_LlamaIndex" + } + ], "https://github.com/giriss/comfy-image-saver": [ [ "Cfg Literal", @@ -8006,6 +9180,14 @@ "title_aux": "Save Image with Generation Metadata" } ], + "https://github.com/githubYiheng/ComfyUI_Change_IMAGE_BOREDER": [ + [ + "ChangeImageBorder" + ], + { + "title_aux": "ComfyUI_Change_IMAGE_BOREDER" + } + ], "https://github.com/githubYiheng/ComfyUI_GetFileNameFromURL": [ [ "GetFileNameFromURL" @@ -8014,6 +9196,31 @@ "title_aux": "ComfyUI_GetFileNameFromURL" } ], + "https://github.com/githubYiheng/comfyui_kmeans_filter": [ + [ + "ImageKmeansFilter" + ], + { + "title_aux": "comfyui_kmeans_filter" + } + ], + "https://github.com/githubYiheng/comfyui_meanshift_filter": [ + [ + "ImageMeanshiftFilter" + ], + { + "title_aux": "comfyui_meanshift_filter" + } + ], + "https://github.com/githubYiheng/comfyui_private_postprocessor": [ + [ + "ImageCPostprocessor", + "PrivateImageMask" + ], + { + "title_aux": "comfyui_private_postprocessor" + } + ], "https://github.com/glibsonoran/Plush-for-ComfyUI": [ [ "AdvPromptEnhancer", @@ -8032,6 +9239,8 @@ [ "GlifConsistencyDecoder", "GlifPatchConsistencyDecoderTiled", + "GlifVariable", + "HFHubEmbeddingLoader", "HFHubLoraLoader", "ImageToMultipleOf", "SDXLAspectRatio" @@ -8094,6 +9303,8 @@ "LLMPromptGenerator", "LLMSampler", "LLava Loader Simple", + "LLavaOptionalMemoryFreeAdvanced", + "LLavaOptionalMemoryFreeSimple", "LLavaPromptGenerator", "LLavaSamplerAdvanced", "LLavaSamplerSimple", @@ -8114,6 +9325,85 @@ "title_aux": "VLM_nodes" } ], + "https://github.com/gonzalu/ComfyUI_YFG_Comical": [ + [ + "Image10Switcher_node", + "Image15Switcher_node", + "Image20Switcher_node", + "Image3Switcher_node", + "Image5Switcher_node", + "MonoClip_node", + "PixelArt_node", + "VAEDecodePreview_node", + "image2contrastMask_node", + "image2imbgg_node", + "image_halftone", + "image_histograms_node", + "image_histograms_node_compact", + "images_side_by_side", + "imgbbLoader_node", + "smartCheckpointLoader_node", + "storeURL_node", + "textMaskOverlay_node" + ], + { + "author": "YFG", + "description": "This extension loads a model checkpoint file and extracts the model state dictionary or the entire model, treating all checkpoints as if they are in the root directory.", + "nickname": "\ud83e\udde0 YFG Smart Checkpoint Loader", + "title": "YFG Smart Checkpoint Loader", + "title_aux": "\ud83d\ude38 YFG Comical Nodes" + } + ], + "https://github.com/griptape-ai/ComfyUI-Griptape": [ + [ + "AudioTranscriptionTask", + "Calculator", + "CreateAgent", + "DateTime", + "EnvironmentConfig", + "ExpandAgent", + "ImageQueryTask", + "MergeTexts", + "ParallelImageQueryTask", + "PromptImageGenerationTask", + "PromptImageVariationTask", + "PromptTask", + "Rule", + "RunAgent", + "TextSummaryTask", + "ToolList", + "ToolTask", + "ToolkitTask", + "WebScraper", + "gtAudioTranscriptionClient", + "gtUIAmazonBedrockStableDiffusionImageGenerationDriver", + "gtUIAmazonBedrockStructureConfig", + "gtUIAmazonBedrockTitanImageGenerationDriver", + "gtUIAnthropicStructureConfig", + "gtUICLIPTextEncode", + "gtUIFetchImage", + "gtUIFileManager", + "gtUIGoogleStructureConfig", + "gtUIInputNode", + "gtUIKnowledgeBaseTool", + "gtUILeonardoImageGenerationDriver", + "gtUILoadAudio", + "gtUIOpenAiAudioTranscriptionDriver", + "gtUIOpenAiImageGenerationDriver", + "gtUIOpenAiStructureConfig", + "gtUIOutputImageNode", + "gtUIOutputStringNode", + "gtUITextToClipEncode", + "gtUIWebSearch" + ], + { + "author": "Jason Schleifer", + "description": "This extension offers various nodes that allow you to work with LLMs using the Griptape Python Framework (https://griptape.ai)", + "nickname": "ComfyUI-Griptape", + "title": "ComfyUI Griptape Nodes", + "title_aux": "ComfyUI Griptape Nodes" + } + ], "https://github.com/guill/abracadabra-comfyui": [ [ "AbracadabraNode", @@ -8142,8 +9432,17 @@ "title_aux": "ComfyUI-Image-Matting" } ], + "https://github.com/haohaocreates/ComfyUI-HH-Image-Selector": [ + [ + "Image Selector" + ], + { + "title_aux": "ComfyUI-HH-Image-Selector" + } + ], "https://github.com/hay86/ComfyUI_AceNodes": [ [ + "ACE_AnyInputSwitchBool", "ACE_AudioLoad", "ACE_AudioPlay", "ACE_AudioSave", @@ -8151,12 +9450,14 @@ "ACE_Float", "ACE_ImageColorFix", "ACE_ImageConstrain", + "ACE_ImageFaceCrop", "ACE_ImageGetSize", "ACE_ImageLoadFromCloud", "ACE_ImageQA", "ACE_ImageRemoveBackground", "ACE_ImageSaveToCloud", "ACE_Integer", + "ACE_MaskBlur", "ACE_Seed", "ACE_Text", "ACE_TextConcatenate", @@ -8201,22 +9502,40 @@ "https://github.com/hay86/ComfyUI_OpenVoice": [ [ "D_OpenVoice_STS", - "D_OpenVoice_TTS" + "D_OpenVoice_TTS", + "D_OpenVoice_TTS_V2" ], { "title_aux": "ComfyUI OpenVoice" } ], + "https://github.com/hben35096/ComfyUI-ToolBox": [ + [ + "AutoDLDownload", + "FolderDeleter", + "FolderViewe" + ], + { + "title_aux": "ComfyUI-ToolBox" + } + ], "https://github.com/heshengtao/comfyui_LLM_party": [ [ + "About_us", "CLIPTextEncode_party", + "Dingding", + "Dingding_tool", "KSampler_party", "LLM", + "LLM_api_loader", "LLM_local", + "LLM_local_loader", + "LLavaLoader", "VAEDecode_party", "accuweather_tool", "api_tool", "arxiv_tool", + "bing_tool", "check_web_tool", "classify_function", "classify_function_plus", @@ -8226,26 +9545,42 @@ "ebd_tool", "end_dialog", "end_workflow", + "feishu", + "feishu_tool", "file_combine", "file_combine_plus", + "get_string", + "github_tool", "google_tool", "interpreter_tool", + "keyword_tool", "load_embeddings", + "load_excel", "load_file", "load_file_folder", + "load_keyword", + "load_name", "load_persona", "load_url", "load_wikipedia", "new_interpreter_tool", + "omost_decode", + "omost_setting", + "openai_tts", + "play_audio", "show_text_party", "start_dialog", "start_workflow", "string_logic", + "substring", "time_tool", "tool_combine", "tool_combine_plus", "weather_tool", "wikipedia_tool", + "work_wechat", + "work_wechat_tool", + "workflow_tool", "workflow_transfer" ], { @@ -8304,6 +9639,37 @@ "title_aux": "ComfyUI-ModelDownloader" } ], + "https://github.com/huagetai/ComfyUI-Gaffer": [ + [ + "ApplyICLight", + "CalculateNormalMap", + "GrayScaler", + "ICLightModelLoader", + "LightSource" + ], + { + "title_aux": "comfyui's gaffer(ComfyUI native implementation of IC-Light. )" + } + ], + "https://github.com/huagetai/ComfyUI_LightGradient": [ + [ + "ImageGradient", + "MaskGradient" + ], + { + "title_aux": "Light Gradient for ComfyUI" + } + ], + "https://github.com/huchenlei/ComfyUI-IC-Light-Native": [ + [ + "ICLightApplyMaskGrey", + "ICLightAppply", + "VAEEncodeArgMax" + ], + { + "title_aux": "ComfyUI-IC-Light-Native" + } + ], "https://github.com/huchenlei/ComfyUI-layerdiffuse": [ [ "LayeredDiffusionApply", @@ -8327,6 +9693,31 @@ "title_aux": "ComfyUI_DanTagGen" } ], + "https://github.com/huchenlei/ComfyUI_densediffusion": [ + [ + "DenseDiffusionAddCondNode", + "DenseDiffusionApplyNode" + ], + { + "title_aux": "ComfyUI DenseDiffusion" + } + ], + "https://github.com/huchenlei/ComfyUI_omost": [ + [ + "OmostDenseDiffusionLayoutNode", + "OmostGreedyBagsTextEmbeddingNode", + "OmostLLMChatNode", + "OmostLLMHTTPServerNode", + "OmostLLMLoaderNode", + "OmostLayoutCondNode", + "OmostLoadCanvasConditioningNode", + "OmostLoadCanvasPythonCodeNode", + "OmostRenderCanvasConditioningNode" + ], + { + "title_aux": "ComfyUI_omost" + } + ], "https://github.com/hughescr/ComfyUI-OpenPose-Keypoint-Extractor": [ [ "Openpose Keypoint Extractor" @@ -8367,6 +9758,24 @@ "title_aux": "Eagle PNGInfo" } ], + "https://github.com/iFREEGROUP/comfyui-undistort": [ + [ + "IG_LoadCheckerboardImageForCalibrateCamera", + "IG_MatrixAndDistCoefToText", + "IG_Undistort" + ], + { + "title_aux": "comfyui-undistort" + } + ], + "https://github.com/icesun963/ComfyUI_HFDownLoad": [ + [ + "HFDownLoad_Tool" + ], + { + "title_aux": "HFDownLoad Node for ComfyUI" + } + ], "https://github.com/idrirap/ComfyUI-Lora-Auto-Trigger-Words": [ [ "FusionText", @@ -8385,6 +9794,29 @@ "title_aux": "ComfyUI-Lora-Auto-Trigger-Words" } ], + "https://github.com/iemesowum/ComfyUI_IsaacNodes": [ + [ + "I_BinaryAmplitudeGate", + "I_UnmixAudio", + "I_WeightsListToWeights" + ], + { + "author": "Isaac Emesowum", + "description": "This extension offers automatic drums extraction from audio files, as well as a few helper nodes to support my audio synchronization AnimateDiff workflows.", + "nickname": "Isaac's Nodes", + "title": "Isaac's Nodes", + "title_aux": "Isaac's Nodes" + } + ], + "https://github.com/if-ai/ComfyUI-IF_AI_HFDownloaderNode": [ + [ + "IF_HFDownload", + "IF_HFDownloadNode" + ], + { + "title_aux": "ComfyUI-IF_AI_HFDownloaderNode" + } + ], "https://github.com/if-ai/ComfyUI-IF_AI_WishperSpeechNode": [ [ "IF_WhisperSpeech" @@ -8487,7 +9919,6 @@ "YoloSEGdetectionNode", "YoloSegNode", "color_drop", - "my unique name", "xy_Tiling_KSampler" ], { @@ -8651,13 +10082,19 @@ "FacelessFaceRestore", "FacelessFaceSwap", "FacelessLoadFrames", + "FacelessLoadImageUrl", "FacelessLoadVideo", + "FacelessLoadVideoUrl", + "FacelessMergeVideos", + "FacelessRemoveBackground", "FacelessSaveVideo", + "FacelessUploadVideo", "FacelessVideoFaceRestore", - "FacelessVideoFaceSwap" + "FacelessVideoFaceSwap", + "FacelessVideoRemoveBackground" ], { - "title_aux": "comfyui-fb-utils" + "title_aux": "Faceless Node for ComfyUI" } ], "https://github.com/jesenzhang/ComfyUI_StreamDiffusion": [ @@ -8736,13 +10173,15 @@ "title_aux": "ComfyUI-JaRue" } ], - "https://github.com/jtydhr88/ComfyUI-InstantMesh": [ + "https://github.com/jtydhr88/ComfyUI-LayerDivider": [ [ - "InstantMeshLoader", - "InstantMeshRun" + "LayerDivider - Color Base", + "LayerDivider - Divide Layer", + "LayerDivider - Load SAM Mask Generator", + "LayerDivider - Segment Mask" ], { - "title_aux": "ComfyUI-InstantMesh" + "title_aux": "ComfyUI LayerDivider" } ], "https://github.com/ka-puna/comfyui-yanc": [ @@ -8758,6 +10197,14 @@ "title_aux": "comfyui-yanc" } ], + "https://github.com/kaanyalova/ComfyUI_ExtendedImageFormats": [ + [ + "ExtendedSaveImage" + ], + { + "title_aux": "Extended Image Formats for ComfyUI" + } + ], "https://github.com/kadirnar/ComfyUI-Transformers": [ [ "DepthEstimationPipeline", @@ -8769,6 +10216,18 @@ "title_aux": "ComfyUI-Transformers" } ], + "https://github.com/kadirnar/ComfyUI-YOLO": [ + [ + "BBoxToXYWH", + "ConvertToDict", + "LoadUltralytics", + "UltralyticsInference", + "UltralyticsVisualization" + ], + { + "title_aux": "ComfyUI-YOLO" + } + ], "https://github.com/kale4eat/ComfyUI-path-util": [ [ "path_util_PathAbspath", @@ -8883,6 +10342,14 @@ "title_aux": "ComfyUI-text-file-util" } ], + "https://github.com/katalist-ai/comfyUI-nsfw-detection": [ + [ + "NudenetDetector" + ], + { + "title_aux": "comfyUI-nsfw-detection" + } + ], "https://github.com/kealiu/ComfyUI-S3-Tools": [ [ "Load Image From S3", @@ -8995,6 +10462,15 @@ "title_aux": "ComfyUI-DDColor" } ], + "https://github.com/kijai/ComfyUI-DepthAnythingV2": [ + [ + "DepthAnything_V2", + "DownloadAndLoadDepthAnythingV2Model" + ], + { + "title_aux": "ComfyUI-DepthAnythingV2" + } + ], "https://github.com/kijai/ComfyUI-DiffusionLight": [ [ "chrome_ball_to_envmap", @@ -9006,9 +10482,14 @@ ], "https://github.com/kijai/ComfyUI-DynamiCrafterWrapper": [ [ + "DownloadAndLoadCLIPModel", + "DownloadAndLoadCLIPVisionModel", + "DownloadAndLoadDynamiCrafterModel", "DynamiCrafterBatchInterpolation", "DynamiCrafterI2V", - "DynamiCrafterModelLoader" + "DynamiCrafterModelLoader", + "ToonCrafterDecode", + "ToonCrafterInterpolation" ], { "title_aux": "ComfyUI-DynamiCrafterWrapper" @@ -9035,6 +10516,20 @@ "title_aux": "Geowizard depth and normal estimation in ComfyUI" } ], + "https://github.com/kijai/ComfyUI-IC-Light": [ + [ + "BackgroundScaler", + "CalculateNormalsFromImages", + "DetailTransfer", + "ICLightConditioning", + "LightSource", + "LoadAndApplyICLightUnet", + "LoadHDRImage" + ], + { + "title_aux": "ComfyUI-IC-Light" + } + ], "https://github.com/kijai/ComfyUI-KJNodes": [ [ "AddLabel", @@ -9047,6 +10542,7 @@ "BboxToInt", "BboxVisualize", "CameraPoseVisualizer", + "CheckpointPerturbWeights", "ColorMatch", "ColorToMask", "CondPassThrough", @@ -9059,15 +10555,19 @@ "CreateFadeMask", "CreateFadeMaskAdvanced", "CreateFluidMask", + "CreateGradientFromCoords", "CreateGradientMask", "CreateInstanceDiffusionTracking", "CreateMagicMask", + "CreateShapeImageOnPath", "CreateShapeMask", "CreateShapeMaskOnPath", "CreateTextMask", + "CreateTextOnPath", "CreateVoronoiMask", "CrossFadeImages", "CustomSigmas", + "DownloadAndLoadCLIPSeg", "DrawInstanceDiffusionTracking", "DummyLatentOut", "EmptyLatentImagePresets", @@ -9080,21 +10580,27 @@ "GenerateNoise", "GetImageRangeFromBatch", "GetImageSizeAndCount", + "GetImagesFromBatchIndexed", "GetLatentsFromBatchIndexed", "GetMaskSizeAndCount", + "GradientToFloat", "GrowMaskWithBlur", "INTConstant", + "ImageAddMulti", "ImageAndMaskPreview", "ImageBatchMulti", "ImageBatchRepeatInterleaving", "ImageBatchTestPattern", "ImageConcanate", + "ImageConcatMulti", "ImageGrabPIL", "ImageGridComposite2x2", "ImageGridComposite3x3", "ImageNormalize_Neg1_To_1", "ImagePadForOutpaintMasked", + "ImagePadForOutpaintTargetSize", "ImagePass", + "ImageResizeKJ", "ImageTransformByNormalizedAmplitude", "ImageUpscaleWithModelBatched", "InjectNoiseToLatent", @@ -9104,11 +10610,12 @@ "Intrinsic_lora_sampling", "JoinStringMulti", "JoinStrings", - "LoadICLightUnet", + "LoadAndResizeImage", "LoadResAdapterNormalization", "MaskBatchMulti", "MaskOrImageToWeight", "MergeImageChannels", + "ModelPassThrough", "NormalizedAmplitudeToFloatList", "NormalizedAmplitudeToMask", "OffsetMask", @@ -9160,6 +10667,9 @@ "ColorizeDepthmap", "MarigoldDepthEstimation", "MarigoldDepthEstimationVideo", + "MarigoldDepthEstimation_v2", + "MarigoldDepthEstimation_v2_video", + "MarigoldModelLoader", "RemapDepth", "SaveImageOpenEXR" ], @@ -9176,6 +10686,7 @@ "SUPIR_first_stage", "SUPIR_model_loader", "SUPIR_model_loader_v2", + "SUPIR_model_loader_v2_clip", "SUPIR_sample", "SUPIR_tiles" ], @@ -9183,14 +10694,6 @@ "title_aux": "ComfyUI-SUPIR" } ], - "https://github.com/kijai/ComfyUI-SVD": [ - [ - "SVDimg2vid" - ], - { - "title_aux": "ComfyUI-SVD" - } - ], "https://github.com/kijai/ComfyUI-depth-fm": [ [ "Depth_fm" @@ -9342,6 +10845,18 @@ "title_aux": "abg-comfyui" } ], + "https://github.com/l20richo/ComfyUI-Azure-Blob-Storage": [ + [ + "DownloadFileBLOB", + "LoadImageBLOB", + "SaveImageBLOB", + "SaveVideoFilesBLOB", + "UploadFileBLOB" + ], + { + "title_aux": "ComfyUI-Azure-Blob-Storage" + } + ], "https://github.com/laksjdjf/Batch-Condition-ComfyUI": [ [ "Batch String", @@ -9369,14 +10884,6 @@ "title_aux": "LoRTnoC-ComfyUI" } ], - "https://github.com/laksjdjf/attention-couple-ComfyUI": [ - [ - "Attention couple" - ], - { - "title_aux": "attention-couple-ComfyUI" - } - ], "https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI": [ [ "CDTuner", @@ -9387,6 +10894,19 @@ "title_aux": "cd-tuner_negpip-ComfyUI" } ], + "https://github.com/laksjdjf/cgem156-ComfyUI": [ + [ + "GradualLatentSampler", + "LCMSamplerRCFG", + "LoadAestheticShadow", + "PredictAesthetic", + "TCDSampler", + "TextScheduler" + ], + { + "title_aux": "cgem156-ComfyUI\ud83c\udf4c" + } + ], "https://github.com/laksjdjf/pfg-ComfyUI": [ [ "PFG" @@ -9395,6 +10915,31 @@ "title_aux": "pfg-ComfyUI" } ], + "https://github.com/larsupb/LoRA-Merger-ComfyUI": [ + [ + "PM LoRA Apply", + "PM LoRA Loader", + "PM LoRA Merger", + "PM LoRA Resizer", + "PM LoRA SVD Merger", + "PM LoRA Save", + "XY: PM LoRA Modes", + "XY: PM LoRA SVD Rank", + "XY: PM LoRA Strengths" + ], + { + "title_aux": "LoRA Power-Merger ComfyUI" + } + ], + "https://github.com/latenightlabs/ComfyUI-LNL": [ + [ + "LNL_FrameSelector", + "LNL_FrameSelectorV2" + ], + { + "title_aux": "LNL Frame Selector" + } + ], "https://github.com/leoleelxh/ComfyUI-LLMs": [ [ "\ud83d\uddbc\ufe0f LLMs_Vison_Ali", @@ -9407,16 +10952,14 @@ "title_aux": "ComfyUI-LLMs" } ], - "https://github.com/lilly1987/ComfyUI_node_Lilly": [ + "https://github.com/linshier/comfyui-remote-tools": [ [ - "CheckpointLoaderSimpleText", - "LoraLoaderText", - "LoraLoaderTextRandom", - "Random_Sampler", - "VAELoaderDecode" + "LoadBase64(js)", + "LoadBase64FromRemote", + "SendBase64ToRemote" ], { - "title_aux": "simple wildcard for ComfyUI" + "title_aux": "comfyui-remote-tools" } ], "https://github.com/liusida/ComfyUI-AutoCropFaces": [ @@ -9427,6 +10970,14 @@ "title_aux": "ComfyUI-AutoCropFaces" } ], + "https://github.com/liusida/ComfyUI-B-LoRA": [ + [ + "LoadBLoRA" + ], + { + "title_aux": "ComfyUI-B-LoRA" + } + ], "https://github.com/liusida/ComfyUI-Debug": [ [ "DebugInspectorNode", @@ -9437,15 +10988,66 @@ "title_aux": "ComfyUI-Debug" } ], + "https://github.com/liusida/ComfyUI-Login": [ + [ + "LoadImageIncognito" + ], + { + "title_aux": "ComfyUI-Login" + } + ], + "https://github.com/liusida/ComfyUI-SD3-nodes": [ + [ + "SD3EmptyLatent", + "SD3LoadCLIPs", + "SD3LoadCheckpoint" + ], + { + "title_aux": "ComfyUI-SD3-nodes" + } + ], "https://github.com/ljleb/comfy-mecha": [ [ "Blocks Mecha Hyper", - "Custom Code Mecha Recipe", + "Float Mecha Hyper", + "Lora Mecha Recipe", "Mecha Merger", + "Mecha Recipe List", "Model Mecha Recipe" ], { - "title_aux": "comfy-mecha" + "title_aux": "Mecha Merge Node Pack" + } + ], + "https://github.com/lks-ai/ComfyUI-StableAudioSampler": [ + [ + "StableAudioConditioning", + "StableAudioLoadModel", + "StableAudioPrompt", + "StableAudioSampler" + ], + { + "author": "lks-ai", + "description": "A Simple integration of Stable Audio Diffusion with knobs and stuff!", + "nickname": "stableaudio", + "title": "StableAudioSampler", + "title_aux": "ComfyUI Stable Audio Open 1.0 Sampler" + } + ], + "https://github.com/lks-ai/anynode": [ + [ + "AnyNode", + "AnyNodeCodeViewer", + "AnyNodeExport", + "AnyNodeGemini", + "AnyNodeLocal" + ], + { + "author": "newsbubbles", + "description": "This single node uses an LLM to generate a functionality based on your request. You can make the node do anything.", + "nickname": "AnyNode", + "title": "AnyNode v0.1", + "title_aux": "ComfyUI AnyNode: Any Node you ask for" } ], "https://github.com/lldacing/comfyui-easyapi-nodes": [ @@ -9468,7 +11070,9 @@ "MaskImageToBase64", "MaskToBase64", "MaskToBase64Image", + "SDBaseVerNumber", "SamAutoMaskSEGS", + "ShowBoolean", "ShowFloat", "ShowInt", "ShowNumber", @@ -9557,10 +11161,15 @@ "https://github.com/longgui0318/comfyui-magic-clothing": [ [ "Add Magic Clothing Attention", + "Change Pipeline Dtype And Device", "Change Pixel Value Normalization", - "LOAD OMS", + "Diffusers Model Makeup &MC", + "Diffusers Scheduler Loader &MC", + "Load Magic Clothing Adapter", "Load Magic Clothing Model", - "RUN OMS" + "Load Magic Clothing Pipeline", + "Load Magic Clothing Pipeline With Path", + "RUN Magic Clothing Diffusers Model" ], { "title_aux": "comfyui-magic-clothing" @@ -9570,11 +11179,17 @@ [ "Image Adaptive Crop M&R", "Image Adaptive Crop With Mask", + "Image Change DType", "Image Change Device", "Image Resolution Adaptive With X", "Image Resolution Limit With 8K", + "Load Image With Name", + "Mask Change DType", "Mask Change Device", "Mask Selection Of Masks", + "Model Change Device", + "Model Change Device Repeaters", + "Output Image To Input", "Split Masks" ], { @@ -9584,10 +11199,15 @@ "https://github.com/longgui0318/comfyui-oms-diffusion": [ [ "Add Magic Clothing Attention", + "Change Pipeline Dtype And Device", "Change Pixel Value Normalization", - "LOAD OMS", + "Diffusers Model Makeup &MC", + "Diffusers Scheduler Loader &MC", + "Load Magic Clothing Adapter", "Load Magic Clothing Model", - "RUN OMS" + "Load Magic Clothing Pipeline", + "Load Magic Clothing Pipeline With Path", + "RUN Magic Clothing Diffusers Model" ], { "title_aux": "comfyui-oms-diffusion" @@ -9601,9 +11221,21 @@ "title_aux": "Wildcards" } ], + "https://github.com/lquesada/ComfyUI-Inpaint-CropAndStitch": [ + [ + "InpaintCrop", + "InpaintExtendOutpaint", + "InpaintResize", + "InpaintStitch" + ], + { + "title_aux": "ComfyUI-Inpaint-CropAndStitch" + } + ], "https://github.com/lquesada/ComfyUI-Prompt-Combinator": [ [ "PromptCombinator", + "PromptCombinatorExportGallery", "PromptCombinatorMerger" ], { @@ -9670,6 +11302,7 @@ "ImpactControlNetApplySEGS", "ImpactControlNetClearSEGS", "ImpactConvertDataType", + "ImpactCount_Elts_in_SEGS", "ImpactDecomposeSEGS", "ImpactDilateMask", "ImpactDilateMaskInSEGS", @@ -9831,8 +11464,12 @@ "ChangeLatentBatchSize //Inspire", "CheckpointLoaderSimpleShared //Inspire", "ColorMapToMasks //Inspire", + "ColorMaskToDepthMask //Inspire", "Color_Preprocessor_Provider_for_SEGS //Inspire", + "CompositeNoise //Inspire", "ConcatConditioningsWithMultiplier //Inspire", + "ConditioningStretch //Inspire", + "ConditioningUpscale //Inspire", "DWPreprocessor_Provider_for_SEGS //Inspire", "FakeScribblePreprocessor_Provider_for_SEGS //Inspire", "FloatRange //Inspire", @@ -9871,7 +11508,10 @@ "OpenPose_Preprocessor_Provider_for_SEGS //Inspire", "PromptBuilder //Inspire", "PromptExtractor //Inspire", + "RGB_HexToHSV //Inspire", "RandomGeneratorForList //Inspire", + "RandomNoise //Inspire", + "RegionalCFG //Inspire", "RegionalConditioningColorMask //Inspire", "RegionalConditioningSimple //Inspire", "RegionalIPAdapterColorMask //Inspire", @@ -9909,6 +11549,21 @@ "title_aux": "ComfyUI Inspire Pack" } ], + "https://github.com/luandev/ComfyUI-CrewAI": [ + [ + "\ud83d\udcceCrewAI Agent", + "\ud83d\udcceCrewAI Agent List", + "\ud83d\udcceCrewAI Crew", + "\ud83d\udcceCrewAI LLM Chat GPT", + "\ud83d\udcceCrewAI LLM Hugging Face", + "\ud83d\udcceCrewAI LLM OpenAI", + "\ud83d\udcceCrewAI Task", + "\ud83d\udcceCrewAI Task List" + ], + { + "title_aux": "ComfyUI CrewAI" + } + ], "https://github.com/m-sokes/ComfyUI-Sokes-Nodes": [ [ "Custom Date Format | sokes \ud83e\uddac", @@ -9949,6 +11604,20 @@ "title_aux": "ComfyUI-SubjectStyle-CSV" } ], + "https://github.com/marduk191/comfyui-marnodes": [ + [ + "marduk191_5_text_string", + "marduk191_5way_text_switch", + "marduk191_workflow_settings" + ], + { + "author": "\u02f6marduk191", + "description": "A node to set workflow settings.", + "nickname": "marduk191 workflow settings", + "title": "marduk191 workflow settings", + "title_aux": "marduk191 workflow settings" + } + ], "https://github.com/marhensa/sdxl-recommended-res-calc": [ [ "RecommendedResCalc" @@ -10005,6 +11674,15 @@ "title_aux": "ComfyUI-HF" } ], + "https://github.com/mbrostami/ComfyUI-TITrain": [ + [ + "TextualInversionTraining", + "TextualInversionTrainingSDXL" + ], + { + "title_aux": "ComfyUI-TITrain" + } + ], "https://github.com/mcmonkeyprojects/sd-dynamic-thresholding": [ [ "DynamicThresholdingFull", @@ -10107,6 +11785,48 @@ "title_aux": "MTB Nodes" } ], + "https://github.com/mephisto83/petty-paint-comfyui-node": [ + [ + "PettyImageImageColorToMask", + "PettyPaintAppend", + "PettyPaintApplyLoRAStack", + "PettyPaintBlurs", + "PettyPaintComponent", + "PettyPaintConditioningSetMaskAndCombine", + "PettyPaintConvert", + "PettyPaintCountFiles", + "PettyPaintEnsureDirectory", + "PettyPaintExec", + "PettyPaintFakeConvert", + "PettyPaintFileExists", + "PettyPaintImageColorsToMasks", + "PettyPaintImageCompositeMasked", + "PettyPaintImagePlacement", + "PettyPaintImageSave", + "PettyPaintImageStore", + "PettyPaintImageToMask", + "PettyPaintImagesToMasks", + "PettyPaintJsonMap", + "PettyPaintJsonRead", + "PettyPaintJsonReadArray", + "PettyPaintLoRAStack", + "PettyPaintLoadImage", + "PettyPaintLoadImages", + "PettyPaintMap", + "PettyPaintMasksToImages", + "PettyPaintNot", + "PettyPaintPassThroughNode", + "PettyPaintProcessor", + "PettyPaintRemoveAddText", + "PettyPaintSDTurboScheduler", + "PettyPaintText", + "PettyPaintTexts_to_Conditioning", + "PettyPaintToJson" + ], + { + "title_aux": "petty-paint-comfyui-node" + } + ], "https://github.com/meshmesh-io/ComfyUI-MeshMesh": [ [ "ColorPicker", @@ -10174,6 +11894,7 @@ "CreateCircleMask", "CreateMaskWithCanvas", "CreateNestedPNGMask", + "CreateSimpleMask", "CreateTillingPNGMask", "CreateWatermarkRemovalMask", "EightBooleanTrigger", @@ -10191,6 +11912,7 @@ "IntSubtraction", "IntToFloatMultiplication", "LogicNot", + "NoneToZero", "NumeralToString", "OneFloat", "PngColorMasksToMaskList", @@ -10201,6 +11923,9 @@ "PngRectanglesToMaskList", "RandomNestedLayouts", "RandomTillingLayouts", + "SN74HC1G86", + "SN74HC86", + "SN74LVC1G125", "SeedGenerator", "SingleBooleanTrigger", "SixBooleanTrigger", @@ -10226,6 +11951,17 @@ "title_aux": "Preset Dimensions" } ], + "https://github.com/moyi7712/ComfyUI_Seamless_Patten": [ + [ + "SeamlessApply", + "SeamlessKSampler", + "SeamlessKSamplerAdvanced", + "SeamlessVae" + ], + { + "title_aux": "ComfyUI_Seamless_Patten" + } + ], "https://github.com/mpiquero7164/ComfyUI-SaveImgPrompt": [ [ "Save IMG Prompt" @@ -10234,6 +11970,15 @@ "title_aux": "SaveImgPrompt" } ], + "https://github.com/muzi12888/ComfyUI-PoseKeypoint-Mask": [ + [ + "Image Brightness", + "Openpose Keypoint Mask" + ], + { + "title_aux": "PoseKeypoint Mask" + } + ], "https://github.com/nagolinc/ComfyUI_FastVAEDecorder_SDXL": [ [ "FastLatentToImage" @@ -10242,6 +11987,14 @@ "title_aux": "ComfyUI_FastVAEDecorder_SDXL" } ], + "https://github.com/nagolinc/comfyui_openai_node": [ + [ + "OpenAINode" + ], + { + "title_aux": "comfyui_openai_node" + } + ], "https://github.com/natto-maki/ComfyUI-NegiTools": [ [ "NegiTools_CompositeImages", @@ -10268,7 +12021,8 @@ ], "https://github.com/nickve28/ComfyUI-Nich-Utils": [ [ - "Image from Dir Selector (Nich)" + "Image from Dir Selector (Nich)", + "Select Text with Regular Expression (Nich)" ], { "title_aux": "ComfyUI Nich Utils" @@ -10291,15 +12045,37 @@ "title_aux": "comfyui-NDI" } ], + "https://github.com/nirbhay-faaya/ImgProcessing_ComfyUI": [ + [ + "ImageConcat", + "ImageCropMultEight", + "ImageCut", + "LightingPreprocessor" + ], + { + "title_aux": "ImgProcessing_ComfyUI" + } + ], + "https://github.com/nirex0/ComfyUI_pytorch_openpose": [ + [ + "pytorch_openpose" + ], + { + "title_aux": "ComfyUI_pytorch_openpose" + } + ], "https://github.com/nkchocoai/ComfyUI-Dart": [ [ "DanbooruTagsTransformerBanTagsFromRegex", "DanbooruTagsTransformerComposePrompt", + "DanbooruTagsTransformerComposePromptV2", "DanbooruTagsTransformerDecode", "DanbooruTagsTransformerDecodeBySplitedParts", "DanbooruTagsTransformerGenerate", "DanbooruTagsTransformerGenerateAdvanced", "DanbooruTagsTransformerGenerationConfig", + "DanbooruTagsTransformerGetAspectRatio", + "DanbooruTagsTransformerLoader", "DanbooruTagsTransformerRearrangedByAnimagine", "DanbooruTagsTransformerRemoveTagToken" ], @@ -10418,17 +12194,42 @@ "title_aux": "ntdviet/comfyui-ext" } ], + "https://github.com/nuanarchy/ComfyUI-NuA-BIRD": [ + [ + "Bird_Deblurring_NuA", + "Bird_Denoising_NuA", + "Bird_Inpainting_NuA", + "Bird_Loader_NuA", + "Bird_Non_Uniform_Deblurring_NuA", + "Bird_Super_Resolution_NuA" + ], + { + "title_aux": "ComfyUI-NuA-BIRD" + } + ], + "https://github.com/nuanarchy/ComfyUI-NuA-FlashFace": [ + [ + "FlashFace_Loader_NuA", + "FlashFace_Sampler_NuA" + ], + { + "title_aux": "ComfyUI-NuA-FlashFace" + } + ], "https://github.com/nullquant/ComfyUI-BrushNet": [ [ "BlendInpaint", "BrushNet", "BrushNetLoader", + "CutForInpaint", "PowerPaint", - "PowerPaintCLIPLoader" + "PowerPaintCLIPLoader", + "RAUNet", + "Terminal" ], { "author": "nullquant", - "description": "This repository contains an custom nodes for inpaint using BrushNet and PowerPaint models", + "description": "These are custom nodes for ComfyUI native implementation of BrushNet, PowerPaint and RAUNet models", "nickname": "BrushName nodes", "title": "BrushNet", "title_aux": "BrushNet" @@ -10544,6 +12345,18 @@ "title_aux": "ComfyUI-TrollSuite" } ], + "https://github.com/oztrkoguz/ComfyUI_StoryCreator": [ + [ + "Kosmos2SamplerSimple2", + "KosmosLoader2", + "StoryLoader", + "StorySamplerSimple", + "Write2" + ], + { + "title_aux": "ComfyUI StoryCreater" + } + ], "https://github.com/palant/extended-saveimage-comfyui": [ [ "SaveImageExtended" @@ -10630,6 +12443,75 @@ "title_aux": "ComfyUI-TemporaryLoader" } ], + "https://github.com/portu-sim/comfyui_bmab": [ + [ + "BMAB Alpha Composit", + "BMAB Basic", + "BMAB Blend", + "BMAB Clip Text Encoder SDXL", + "BMAB Conditioning To Bind", + "BMAB Context", + "BMAB ControlNet", + "BMAB ControlNet IPAdapter", + "BMAB ControlNet Openpose", + "BMAB Crop", + "BMAB Detail Anything", + "BMAB Detect And Mask", + "BMAB Detection Crop", + "BMAB Detector", + "BMAB Edge", + "BMAB Extractor", + "BMAB Face Detailer", + "BMAB Google Gemini Prompt", + "BMAB Import Integrator", + "BMAB Integrator", + "BMAB KSampler", + "BMAB KSamplerHiresFix", + "BMAB KSamplerHiresFixWithUpscaler", + "BMAB KSamplerKohyaDeepShrink", + "BMAB Lama Inpaint", + "BMAB LoRA Loader", + "BMAB Load Image", + "BMAB Load Output Image", + "BMAB Masks To Images", + "BMAB Model To Bind", + "BMAB Noise Generator", + "BMAB Openpose Hand Detailer", + "BMAB Person Detailer", + "BMAB Preview Text", + "BMAB Prompt", + "BMAB Remove Background", + "BMAB Resize By Person", + "BMAB Resize By Ratio", + "BMAB Resize and Fill", + "BMAB SD-WebUI API BMAB Extension", + "BMAB SD-WebUI API ControlNet", + "BMAB SD-WebUI API I2I", + "BMAB SD-WebUI API Server", + "BMAB SD-WebUI API T2I", + "BMAB SD-WebUI API T2I Hires.Fix", + "BMAB Save Image", + "BMAB SeedGenerator", + "BMAB Segment Anything", + "BMAB Simple Hand Detailer", + "BMAB Subframe Hand Detailer", + "BMAB Text", + "BMAB Upscale With Model", + "BMAB Upscaler", + "BMAB Watermark" + ], + { + "title_aux": "comfyui_bmab" + } + ], + "https://github.com/prodogape/ComfyUI-EasyOCR": [ + [ + "Apply EasyOCR" + ], + { + "title_aux": "ComfyUI-EasyOCR" + } + ], "https://github.com/prodogape/ComfyUI-Minio": [ [ "Load Image From Minio", @@ -10640,6 +12522,14 @@ "title_aux": "Comfyui-Minio" } ], + "https://github.com/prodogape/ComfyUI-OmDet": [ + [ + "Apply OmDet" + ], + { + "title_aux": "ComfyUI-OmDet" + } + ], "https://github.com/pythongosssss/ComfyUI-Custom-Scripts": [ [ "CheckpointLoader|pysssss", @@ -10654,7 +12544,8 @@ "ReroutePrimitive|pysssss", "SaveText|pysssss", "ShowText|pysssss", - "StringFunction|pysssss" + "StringFunction|pysssss", + "SystemNotification|pysssss" ], { "title_aux": "pythongosssss/ComfyUI-Custom-Scripts" @@ -10736,6 +12627,7 @@ ], "https://github.com/receyuki/comfyui-prompt-reader-node": [ [ + "SDAnyConverter", "SDBatchLoader", "SDLoraLoader", "SDLoraSelector", @@ -10748,7 +12640,7 @@ ], { "author": "receyuki", - "description": "ComfyUI node version of the SD Prompt Reader", + "description": "The ultimate solution for managing image metadata and multi-tool compatibility. ComfyUI node version of the SD Prompt Reader", "nickname": "SD Prompt Reader", "title": "SD Prompt Reader", "title_aux": "SD Prompt Reader" @@ -10758,12 +12650,18 @@ [ "AvoidErasePrediction", "CFGPrediction", + "CharacteristicGuidancePrediction", "CombinePredictions", "ConditionedPrediction", + "EarlyMiddleLatePrediction", + "InterpolatePredictions", + "LogSigmas", "PerpNegPrediction", "SamplerCustomPrediction", "ScalePrediction", "ScaledGuidancePrediction", + "SelectSigmas", + "SplitAtSigma", "SwitchPredictions" ], { @@ -10801,7 +12699,6 @@ [ "RL_Crop_Resize", "RL_Crop_Resize_Batch", - "RL_Depth16", "RL_Finetune_Analyze", "RL_Finetune_Analyze_Batch", "RL_Finetune_Variable", @@ -10821,6 +12718,17 @@ "title_aux": "comfyui-ricklove" } ], + "https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": [ + [ + "FrequencyCombination", + "FrequencyCombinationHSV", + "FrequencySeparation", + "FrequencySeparationHSV" + ], + { + "title_aux": "comfyUI_FrequencySeparation_RGB-HSV" + } + ], "https://github.com/rklaffehn/rk-comfy-nodes": [ [ "RK_CivitAIAddHashes", @@ -10854,6 +12762,17 @@ "title_aux": "ComfyUI-Tara-LLM-Integration" } ], + "https://github.com/royceschultz/ComfyUI-Notifications": [ + [ + "Notif-PlaySound", + "Notif-SystemNotification", + "Notif-UnifiedNotification", + "Notif-Webhook" + ], + { + "title_aux": "ComfyUI-Notifications" + } + ], "https://github.com/royceschultz/ComfyUI-TranscriptionTools": [ [ "TT-AudioSink", @@ -10878,10 +12797,42 @@ "title_aux": "RUI-Nodes" } ], + "https://github.com/ruiqutech/ComfyUI-RuiquNodes": [ + [ + "EvaluateListMultiple1", + "EvaluateListMultiple3", + "EvaluateListMultiple6", + "EvaluateListMultiple9", + "EvaluateMultiple1", + "EvaluateMultiple3", + "EvaluateMultiple6", + "EvaluateMultiple9", + "ImageDilate", + "ImageErode", + "ListPath", + "MaskDilate", + "MaskErode", + "PreviewMask", + "RangeSplit", + "SaveMask", + "StringAsAny", + "StringConcat1", + "StringConcat3", + "StringConcat6", + "StringConcat9", + "StringPathStem", + "TermsToList", + "VAEDecodeSave" + ], + { + "title_aux": "RuiquNodes for ComfyUI" + } + ], "https://github.com/runtime44/comfyui_r44_nodes": [ [ "Runtime44ColorMatch", "Runtime44DynamicKSampler", + "Runtime44FilmGrain", "Runtime44ImageEnhance", "Runtime44ImageOverlay", "Runtime44ImageResizer", @@ -10903,6 +12854,17 @@ "title_aux": "comfy_meh" } ], + "https://github.com/saftle/suplex_comfy_nodes": [ + [ + "ControlNet Selector", + "ControlNetOptionalLoader", + "DiffusersSelector", + "SaveImageJPGNoMeta" + ], + { + "title_aux": "Suplex Misc ComfyUI Nodes" + } + ], "https://github.com/sdfxai/SDFXBridgeForComfyUI": [ [ "SDFXClipTextEncode" @@ -10932,6 +12894,14 @@ "title_aux": "SRL's nodes" } ], + "https://github.com/seghier/ComfyUI_LibreTranslate/raw/main/translate_node.py": [ + [ + "LibreTranslate" + ], + { + "title_aux": "ComfyUI_LibreTranslate" + } + ], "https://github.com/sergekatzmann/ComfyUI_Nimbus-Pack": [ [ "AdjustAndRoundDimensions", @@ -10962,17 +12932,25 @@ "title_aux": "Consistency Decoder" } ], + "https://github.com/shadowcz007/comfyui-edit-mask": [ + [ + "EditMask" + ], + { + "title_aux": "comfyui-edit-mask" + } + ], "https://github.com/shadowcz007/comfyui-mixlab-nodes": [ [ "3DImage", "AppInfo", "ApplyVisualStylePrompting_", "AreaToMask", + "AudioPlay", "CenterImage", - "CharacterInText", - "ChatGPTOpenAI", "CkptNames_", "Color", + "ComparingTwoFrames_", "CompositeImages_", "DynamicDelayProcessor", "EmbeddingPrompt", @@ -10983,7 +12961,6 @@ "FloatingVideo", "Font", "GLIGENTextBoxApply_Advanced", - "GamePal", "GetImageSize_", "GradientImage", "GridDisplayAndSave", @@ -10991,7 +12968,7 @@ "GridOutput", "ImageColorTransfer", "ImageCropByAlpha", - "ImageListReplace_", + "ImageListToBatch_", "ImagesPrompt_", "IncrementingListNode_", "IntNumber", @@ -11001,8 +12978,6 @@ "LoadImagesFromPath", "LoadImagesFromURL", "LoadImagesToBatch", - "LoadTripoSRModel_", - "LoadVideoAndSegment_", "LoraNames_", "LoraPrompt", "MaskListMerge_", @@ -11022,11 +12997,9 @@ "SamplerNames_", "SaveImageAndMetadata_", "SaveImageToLocal", - "SaveTripoSRMesh", "ScreenShare", "Seed_", "ShowLayer", - "ShowTextForGPT", "SmoothMask", "SpeechRecognition", "SpeechSynthesis", @@ -11041,19 +13014,25 @@ "TESTNODE_TOKEN", "TextImage", "TextInput_", - "TextSplitByDelimiter", "TextToNumber", "TransparentImage", - "TripoSRSampler_", "VAEDecodeConsistencyDecoder", - "VAEEncodeForInpaint_Frames", - "VAELoaderConsistencyDecoder", - "VideoCombine_Adv" + "VAELoaderConsistencyDecoder" ], { "title_aux": "comfyui-mixlab-nodes" } ], + "https://github.com/shadowcz007/comfyui-sound-lab": [ + [ + "AudioPlay", + "Musicgen_", + "StableAudio_" + ], + { + "title_aux": "comfyui-sound-lab" + } + ], "https://github.com/shadowcz007/comfyui-ultralytics-yolo": [ [ "DetectByLabel" @@ -11122,6 +13101,14 @@ "title_aux": "ComfyUI-send-Eagle(slim)" } ], + "https://github.com/shobhitic/ComfyUI-PlusMinusTextClip": [ + [ + "PlusMinusTextClip" + ], + { + "title_aux": "PlusMinusTextClip - Single node for Positive and Negative Prompts" + } + ], "https://github.com/shockz0rz/ComfyUI_InterpolateEverything": [ [ "OpenposePreprocessorInterpolate" @@ -11171,6 +13158,8 @@ ], "https://github.com/sipherxyz/comfyui-art-venture": [ [ + "AV_AwsBedrockClaudeApi", + "AV_AwsBedrockMistralApi", "AV_CheckpointMerge", "AV_CheckpointModelsToParametersPipe", "AV_CheckpointSave", @@ -11183,6 +13172,7 @@ "AV_ControlNetPreprocessor", "AV_LLMApiConfig", "AV_LLMChat", + "AV_LLMCompletion", "AV_LLMMessage", "AV_LoraListLoader", "AV_LoraListStacker", @@ -11264,6 +13254,9 @@ ], "https://github.com/smthemex/ComfyUI_ChatGLM_API": [ [ + "Glm_4_9b_Chat", + "Glm_4v_9b", + "Glm_Lcoal_Or_Repo", "ZhipuaiApi_Character", "ZhipuaiApi_Txt", "ZhipuaiApi_img" @@ -11272,10 +13265,38 @@ "title_aux": "ComfyUI_ChatGLM_API" } ], + "https://github.com/smthemex/ComfyUI_CustomNet": [ + [ + "CustomNet_Plus" + ], + { + "title_aux": "ComfyUI_CustomNet" + } + ], + "https://github.com/smthemex/ComfyUI_HiDiffusion_Pro": [ + [ + "HI_Diffusers_Model_Loader", + "Hi_Sampler" + ], + { + "title_aux": "ComfyUI_HiDiffusion_Pro" + } + ], + "https://github.com/smthemex/ComfyUI_ID_Animator": [ + [ + "ID_Animator", + "ID_Repo_Choice" + ], + { + "title_aux": "ComfyUI_ID_Animator" + } + ], "https://github.com/smthemex/ComfyUI_Llama3_8B": [ [ - "ChatQA_1p5_8B", - "Meta_Llama3_8B" + "ChatQA_1p5_8b", + "Local_Or_Repo_Choice", + "Meta_Llama3_8B", + "MiniCPM_Llama3_V25" ], { "title_aux": "ComfyUI_Llama3_8B" @@ -11305,6 +13326,41 @@ "title_aux": "ComfyUI_Pipeline_Tool" } ], + "https://github.com/smthemex/ComfyUI_Pops": [ + [ + "Imgae_To_Path", + "Pops_Controlnet_Sampler", + "Pops_Ipadapter_Sampler", + "Pops_Mean_Sampler", + "Pops_Prior_Embedding", + "Pops_Repo_Choice", + "Pops_Unet_Sampler" + ], + { + "title_aux": "ComfyUI_Pops" + } + ], + "https://github.com/smthemex/ComfyUI_StableAudio_Open": [ + [ + "StableAudio_Open", + "Use_LocalModel_Or_Repo" + ], + { + "title_aux": "ComfyUI_StableAudio_Open" + } + ], + "https://github.com/smthemex/ComfyUI_StoryDiffusion": [ + [ + "Character_Batch", + "Comic_Type", + "Pre_Translate_prompt", + "Storydiffusion_Img2Img", + "Storydiffusion_Text2Img" + ], + { + "title_aux": "ComfyUI_StoryDiffusion" + } + ], "https://github.com/space-nuko/ComfyUI-Disco-Diffusion": [ [ "DiscoDiffusion_DiscoDiffusion", @@ -11350,6 +13406,7 @@ ], "https://github.com/spacepxl/ComfyUI-Image-Filters": [ [ + "AdainFilterLatent", "AdainImage", "AdainLatent", "AlphaClean", @@ -11360,6 +13417,7 @@ "BatchNormalizeImage", "BatchNormalizeLatent", "BetterFilmGrain", + "BilateralFilterImage", "BlurImageFast", "BlurMaskFast", "ClampOutliers", @@ -11369,7 +13427,10 @@ "DilateErodeMask", "EnhanceDetail", "ExposureAdjust", + "FrequencyCombine", + "FrequencySeparate", "GuidedFilterAlpha", + "GuidedFilterImage", "ImageConstant", "ImageConstantHSV", "InstructPixToPixConditioningAdvanced", @@ -11377,15 +13438,19 @@ "Keyer", "LatentNormalizeShuffle", "LatentStats", + "MedianFilterImage", "NormalMapSimple", "OffsetLatentImage", "PrintSigmas", "RelightSimple", "RemapRange", + "RestoreDetail", + "SharpenFilterLatent", "ShuffleChannels", "Tonemap", "UnJitterImage", - "UnTonemap" + "UnTonemap", + "VisualizeLatents" ], { "title_aux": "ComfyUI-Image-Filters" @@ -11404,6 +13469,20 @@ "title_aux": "ComfyUI-RAVE" } ], + "https://github.com/spacepxl/ComfyUI-StyleGan": [ + [ + "BatchAverageStyleGANLatents", + "BlendStyleGANLatents", + "GenerateStyleGANLatent", + "LoadStyleGAN", + "StyleGANInversion", + "StyleGANLatentFromBatch", + "StyleGANSampler" + ], + { + "title_aux": "ComfyUI-StyleGan" + } + ], "https://github.com/spinagon/ComfyUI-seam-carving": [ [ "SeamCarving" @@ -11484,6 +13563,18 @@ "title_aux": "ComfyUI Ollama" } ], + "https://github.com/storyicon/comfyui_musev_evolved": [ + [ + "AnimationZoom (comfyui_musev_evolved)", + "ImageSelector (comfyui_musev_evolved)", + "MuseVImg2Vid V1 (comfyui_musev_evolved)", + "MuseVPredictor V1 (comfyui_musev_evolved)" + ], + { + "author": "infguo", + "title_aux": "ComfyUI MuseV Evolved" + } + ], "https://github.com/storyicon/comfyui_segment_anything": [ [ "GroundingDinoModelLoader (segment anything)", @@ -11534,12 +13625,24 @@ "https://github.com/sugarkwork/comfyui_tag_fillter": [ [ "TagFilter", - "TagRemover" + "TagMerger", + "TagRemover", + "TagReplace", + "TagSwitcher" ], { "title_aux": "comfyui_tag_filter" } ], + "https://github.com/superyoman/comfyui_lumaAPI": [ + [ + "LUMA_API_YoC", + "LUMA_API_result_YoC" + ], + { + "title_aux": "comfyui_lumaAPI" + } + ], "https://github.com/syllebra/bilbox-comfyui": [ [ "BilboXLut", @@ -11653,6 +13756,26 @@ "title_aux": "ComfyUI Browser" } ], + "https://github.com/teward/ComfyUI-Helper-Nodes": [ + [ + "HelperNodes_CfgScale", + "HelperNodes_CheckpointSelector", + "HelperNodes_MultilineStringLiteral", + "HelperNodes_Prompt", + "HelperNodes_SDXLCommonResolutions", + "HelperNodes_SamplerSelector", + "HelperNodes_SaveImage", + "HelperNodes_SchedulerSelector", + "HelperNodes_SeedSelector", + "HelperNodes_Steps", + "HelperNodes_StringLiteral", + "HelperNodes_VAESelector", + "HelperNodes_WidthHeight" + ], + { + "title_aux": "ComfyUI-Helper-Nodes" + } + ], "https://github.com/theUpsider/ComfyUI-Logic": [ [ "Bool", @@ -11695,6 +13818,55 @@ "title_aux": "ComfyUI Stable Video Diffusion" } ], + "https://github.com/tiankuan93/ComfyUI-V-Express": [ + [ + "Load_Audio_Path", + "Load_Audio_Path_From_Video", + "Load_Image_Path", + "Load_Kps_Path", + "Load_Kps_Path_From_Video", + "Load_Video_Path", + "VEINTConstant", + "VEPreview_Video", + "VEStringConstant", + "V_Express_Loader", + "V_Express_Sampler" + ], + { + "title_aux": "V-Express: Conditional Dropout for Progressive Training of Portrait Video Generation" + } + ], + "https://github.com/tianlang0704/ComfyUI-StableProjectorzBridge": [ + [ + "ProjectorzControlnetInput", + "ProjectorzControlnetParameter", + "ProjectorzInitInput", + "ProjectorzOutput", + "ProjectorzParameter", + "ProjectorzStringToFloat", + "ProjectorzStringToInt" + ], + { + "title_aux": "Stable Projectorz Bridge" + } + ], + "https://github.com/time-river/ComfyUI-CLIPSeg/raw/main/custom_nodes/clipseg.py": [ + [ + "CLIPSeg", + "CombineSegMasks" + ], + { + "title_aux": "CLIPSeg" + } + ], + "https://github.com/tmagara/ComfyUI-Prediction-Boost": [ + [ + "PredictionBoost" + ], + { + "title_aux": "ComfyUI-Prediction-Boost" + } + ], "https://github.com/tocubed/ComfyUI-AudioReactor": [ [ "AudioFrameTransformBeats", @@ -11706,6 +13878,24 @@ "title_aux": "ComfyUI-AudioReactor" } ], + "https://github.com/tooldigital/ComfyUI-Yolo-Cropper": [ + [ + "ToolYoloCropper" + ], + { + "title_aux": "Easy automatic (square) image cropper using Yolo" + } + ], + "https://github.com/toxicwind/ComfyUI-TTools": [ + [ + "TTools Extract JSON", + "TTools Randomize And Format String", + "TTools SD3 Resolution Solver" + ], + { + "title_aux": "TTools for ComfyUI" + } + ], "https://github.com/toyxyz/ComfyUI_toyxyz_test_nodes": [ [ "CaptureWebcam", @@ -11729,6 +13919,12 @@ "quadmoonINTConditionalOperation", "quadmoonKSampler", "quadmoonKSamplerAdvanced", + "quadmoonLoadConfigs", + "quadmoonModelLoader", + "quadmoonSaveNeg", + "quadmoonSavePrompt", + "quadmoonSmartNeg", + "quadmoonSmartPrompt", "quadmoonThebutton" ], { @@ -11741,7 +13937,6 @@ ], "https://github.com/trojblue/trNodes": [ [ - "JpgConvertNode", "trColorCorrection", "trLayering", "trRouter", @@ -11785,6 +13980,7 @@ ], "https://github.com/ttulttul/ComfyUI-Tensor-Operations": [ [ + "Fast Image to Noise", "Image Match Normalize", "Latent Match Normalize" ], @@ -11812,7 +14008,7 @@ ], "https://github.com/turkyden/ComfyUI-Comic": [ [ - "Image To Comic" + "ImageToComic" ], { "title_aux": "ComfyUI-Comic" @@ -11820,7 +14016,7 @@ ], "https://github.com/turkyden/ComfyUI-Sticker": [ [ - "Image To Sticker" + "ImageToSticker" ], { "title_aux": "ComfyUI-Sticker" @@ -11829,18 +14025,14 @@ "https://github.com/tusharbhutt/Endless-Nodes": [ [ "ESS Aesthetic Scoring", - "ESS Aesthetic Scoring Auto", "ESS Combo Parameterizer", "ESS Combo Parameterizer & Prompts", - "ESS Eight Input Random", "ESS Eight Input Text Switch", "ESS Float to Integer", "ESS Float to Number", "ESS Float to String", "ESS Float to X", - "ESS Global Envoy", "ESS Image Reward", - "ESS Image Reward Auto", "ESS Image Saver with JSON", "ESS Integer to Float", "ESS Integer to Number", @@ -11853,7 +14045,6 @@ "ESS Parameterizer", "ESS Parameterizer & Prompts", "ESS Six Float Output", - "ESS Six Input Random", "ESS Six Input Text Switch", "ESS Six Integer IO Switch", "ESS Six Integer IO Widget", @@ -11920,6 +14111,22 @@ "title_aux": "unwdef-nodes" } ], + "https://github.com/vanche1212/ComfyUI-ZMG-Nodes": [ + [ + "VC_Load_Video_Path_Unified_Output", + "VC_Load_Video_Upload_Unified_Output", + "VC_Video_Combine_Unified_Output", + "Waveform2Audio", + "\ud83d\ude0bAPI Request Node", + "\ud83d\ude0bJSON Parser Node", + "\ud83d\ude0bOld Photo Colorization Node", + "\ud83d\ude0bOllama Request Node", + "\ud83d\ude0bSave Image Unified Output" + ], + { + "title_aux": "ZMG PLUGIN" + } + ], "https://github.com/vanillacode314/SimpleWildcardsComfyUI": [ [ "SimpleConcat", @@ -11965,6 +14172,14 @@ "title_aux": "ComfyUI-BiRefNet" } ], + "https://github.com/viperyl/ComfyUI-RGT": [ + [ + "RGT_Upscale" + ], + { + "title_aux": "ComfyUI-RGT" + } + ], "https://github.com/vivax3794/ComfyUI-Vivax-Nodes": [ [ "Any String", @@ -11998,6 +14213,14 @@ "title_aux": "Kandinsky 2.2 ComfyUI Plugin" } ], + "https://github.com/vxinhao/color2rgb/raw/main/color2rgb.py": [ + [ + "color2RGB" + ], + { + "title_aux": "color2rgb" + } + ], "https://github.com/wallish77/wlsh_nodes": [ [ "Alternating KSampler (WLSH)", @@ -12148,6 +14371,17 @@ "title_aux": "SDXLResolutionPresets" } ], + "https://github.com/wujm424606/ComfyUi-Ollama-YN": [ + [ + "OllamaGenerate", + "OllamaGenerateAdvance", + "OllamaSpecialGenerateAdvance", + "OllamaVision" + ], + { + "title_aux": "ComfyUi-Ollama-YN" + } + ], "https://github.com/wutipong/ComfyUI-TextUtils": [ [ "Text Utils - Join N-Elements of String List", @@ -12224,7 +14458,7 @@ "title_aux": "hd-nodes-comfyui" } ], - "https://github.com/xliry/ComfyUI_SendDiscord/raw/main/SendDiscord.py": [ + "https://github.com/xliry/ComfyUI_SendDiscord": [ [ "SendDiscord" ], @@ -12232,6 +14466,26 @@ "title_aux": "ComfyUI_SendDiscord" } ], + "https://github.com/xuhongming251/ComfyUI-GPEN": [ + [ + "FaceEnhancement" + ], + { + "title_aux": "ComfyUI-GPEN" + } + ], + "https://github.com/xuhongming251/ComfyUI-MuseTalkUtils": [ + [ + "MuseTalkPostprocess", + "MuseTalkPreprocess", + "MuseTalkTrain", + "MuseTalkTrainPreprocess", + "MuseTalkUncropMask" + ], + { + "title_aux": "ComfyUI-MuseTalkUtils" + } + ], "https://github.com/yffyhk/comfyui_auto_danbooru": [ [ "GetDanbooru", @@ -12262,7 +14516,10 @@ "easy XYPlot", "easy XYPlotAdvanced", "easy a1111Loader", + "easy applyBrushNet", "easy applyFooocusInpaint", + "easy applyInpaint", + "easy applyPowerPaint", "easy boolean", "easy cascadeKSampler", "easy cascadeLoader", @@ -12275,11 +14532,11 @@ "easy controlnetLoader", "easy controlnetLoaderADV", "easy controlnetNames", + "easy controlnetStack", "easy convertAnything", "easy detailerFix", "easy dynamiCrafterLoader", "easy float", - "easy fooocusInpaintLoader", "easy fullCascadeKSampler", "easy fullLoader", "easy fullkSampler", @@ -12288,13 +14545,16 @@ "easy humanSegmentation", "easy icLightApply", "easy if", + "easy imageBatchToImageList", "easy imageChooser", "easy imageColorMatch", "easy imageConcat", "easy imageCount", "easy imageCropFromMask", + "easy imageDetailTransfer", "easy imageInsetCrop", "easy imageInterrogator", + "easy imageListToImageBatch", "easy imagePixelPerfect", "easy imageRatio", "easy imageRemBg", @@ -12355,6 +14615,7 @@ "easy preSamplingLayerDiffusionADDTL", "easy preSamplingNoiseIn", "easy preSamplingSdTurbo", + "easy prompt", "easy promptConcat", "easy promptLine", "easy promptList", @@ -12591,11 +14852,17 @@ "ColorCorrectOfUtils", "ConcatTextOfUtils", "ImageBatchOneOrMore", + "ImageCompositeMaskedWithSwitch", "ImageConcanateOfUtils", "IntAndIntAddOffsetLiteral", "IntMultipleAddLiteral", + "LoadImageMaskWithSwitch", + "LoadImageMaskWithoutListDir", "LoadImageWithSwitch", - "ModifyTextGender" + "LoadImageWithoutListDir", + "MaskFastGrow", + "ModifyTextGender", + "SplitMask" ], { "title_aux": "zhangp365/Some Utils for ComfyUI" @@ -12644,9 +14911,23 @@ "title_aux": "EasyCaptureNode for ComfyUI" } ], + "https://github.com/zohac/ComfyUI_ZC_DrawShape": [ + [ + "ZcDrawShape" + ], + { + "author": "Zohac", + "description": "nodes for artists, designers and animators.", + "nickname": "Zc DrawShape", + "title": "Zc DrawShape", + "title_aux": "ComfyUI_ZC_DrawShape" + } + ], "https://github.com/zombieyang/sd-ppp": [ [ "Get Image From Photoshop Layer", + "Image Times Opacity", + "Mask Times Opacity", "Send Images To Photoshop" ], { diff --git a/node_db/new/model-list.json b/node_db/new/model-list.json index 6b2f22a5..5796816d 100644 --- a/node_db/new/model-list.json +++ b/node_db/new/model-list.json @@ -1,5 +1,388 @@ { "models": [ + { + "name": "TAESD3 Decoder", + "type": "TAESD", + "base": "SDXL", + "save_path": "vae_approx", + "description": "(SD3 Verison) To view the preview in high quality while running samples in ComfyUI, you will need this model.", + "reference": "https://github.com/madebyollin/taesd", + "filename": "taesd3_decoder.pth", + "url": "https://github.com/madebyollin/taesd/raw/main/taesd3_decoder.pth" + }, + { + "name": "TAESD3 Encoder", + "type": "TAESD", + "base": "SDXL", + "save_path": "vae_approx", + "description": "(SD3 Verison) To view the preview in high quality while running samples in ComfyUI, you will need this model.", + "reference": "https://github.com/madebyollin/taesd", + "filename": "taesd3_encoder.pth", + "url": "https://github.com/madebyollin/taesd/raw/main/taesd3_encoder.pth" + }, + + { + "name": "TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic v2 (rank256)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[774MB] Controlnet SDXL Tile model realistic version.", + "reference": "https://huggingface.co/TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic", + "filename": "TTPLANET_Controlnet_Tile_realistic_v2_rank256.safetensors", + "url": "https://huggingface.co/TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic/resolve/main/TTPLANET_Controlnet_Tile_realistic_v2_rank256.safetensors" + }, + + { + "name": "kijai/DepthAnythingV2 (vitb/fp16)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[195MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vitb_fp16.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vitb_fp16.safetensors" + }, + { + "name": "kijai/DepthAnythingV2 (vitb/fp32)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[390MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vitb_fp32.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vitb_fp32.safetensors" + }, + { + "name": "kijai/DepthAnythingV2 (vitl/fp16)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[671MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vitl_fp16.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vitl_fp16.safetensors" + }, + { + "name": "kijai/DepthAnythingV2 (vitl/fp32)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[195MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vitl_fp32.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vitl_fp32.safetensors" + }, + { + "name": "kijai/DepthAnythingV2 (vits/fp16)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[49.6MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vits_fp16.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vits_fp16.safetensors" + }, + { + "name": "kijai/DepthAnythingV2 (vitb/fp32)", + "type": "depthanything", + "base": "depthanything", + "save_path": "depthanything", + "description": "[99.2MB] DepthAnythingV2 model", + "reference": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/tree/main", + "filename": "depth_anything_v2_vits_fp32.safetensors", + "url": "https://huggingface.co/Kijai/DepthAnythingV2-safetensors/resolve/main/depth_anything_v2_vits_fp32.safetensors" + }, + + { + "name": "CN-anytest_v4-marged.safetensors", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[2.5GB] AnyTest Controlnet. A model for style transfer.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v4-marged.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v4-marged.safetensors" + }, + { + "name": "CN-anytest_v4-marged_am_dim256.safetensors (dim256/Animagine)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[774MB] AnyTest Controlnet Lora (dim256) for Animagine. A model for style transfer.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v4-marged_am_dim256.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v4-marged_am_dim256.safetensors" + }, + { + "name": "CN-anytest_v4-marged_am_dim128.safetensors (dim128/Animagine)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[396MB] AnyTest Controlnet Lora (dim128) for Animagine. A model for style transfer.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v4-marged_am_dim128.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v4-marged_am_dim128.safetensors" + }, + { + "name": "CN-anytest_v4-marged_pn_dim256.safetensors (dim256/Pony)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[774MB] AnyTest Controlnet Lora (dim256) for Pony. A model for style transfer.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v4-marged_pn_dim256.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v4-marged_pn_dim256.safetensors" + }, + { + "name": "CN-anytest_v4-marged_pn_dim128.safetensors (dim128/Pony)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[396MB] AnyTest Controlnet Lora (dim128) for Pony. A model for style transfer.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v4-marged_pn_dim128.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v4-marged_pn_dim128.safetensors" + }, + + { + "name": "CN-anytest_v3-50000_fp16.safetensors (fp16)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[2.5GB] AnyTest Controlnet. A strict control model.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v3-50000_fp16.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v3-50000_fp16.safetensors" + }, + { + "name": "CN-anytest_v3-50000_am_dim256.safetensors (dim256/Animagine)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[774MB] AnyTest Controlnet Lora (dim256) for Animagine. A strict control model.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v3-50000_am_dim256.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v3-50000_am_dim256.safetensors" + }, + { + "name": "CN-anytest_v3-50000_am_dim128.safetensors (dim128/Animagine)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[396MB] AnyTest Controlnet Lora (dim128) for Animagine. A strict control model.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v3-50000_am_dim128.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v3-50000_am_dim128.safetensors" + }, + { + "name": "CN-anytest_v3-50000_pn_dim256.safetensors (dim256/Pony)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[774MB] AnyTest Controlnet Lora (dim256) for Pony. A strict control model.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v3-50000_pn_dim256.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v3-50000_pn_dim256.safetensors" + }, + { + "name": "CN-anytest_v3-50000_pn_dim128.safetensors (dim128/Pony)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[396MB] AnyTest Controlnet Lora (dim128) for Pony. A strict control model.", + "reference": "https://huggingface.co/2vXpSwA7/iroiro-lora/tree/main", + "filename": "CN-anytest_v3-50000_pn_dim128.safetensors", + "url": "https://huggingface.co/2vXpSwA7/iroiro-lora/resolve/main/test_controlnet2/CN-anytest_v3-50000_pn_dim128.safetensors" + }, + + { + "name": "Kijai/ToonCrafter model checkpoint (interpolation fp16)", + "type": "checkpoint", + "base": "ToonCrafter", + "save_path": "checkpoints/ToonCrafter", + "description": "[5.25GB] ToonCrafter checkpoint model for ComfyUI-DynamiCrafterWrapper", + "reference": "https://huggingface.co/Kijai/DynamiCrafter_pruned", + "filename": "tooncrafter_512_interp-fp16.safetensors", + "url": "https://huggingface.co/Kijai/DynamiCrafter_pruned/resolve/main/tooncrafter_512_interp-fp16.safetensors" + }, + + { + "name": "xinsir/Controlnet-Scribble-Sdxl-1.0", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL/controlnet-scribble-sdxl-1.0", + "description": "[2.5GB] Controlnet SDXL Scribble model.", + "reference": "https://huggingface.co/xinsir/controlnet-scribble-sdxl-1.0", + "filename": "diffusion_pytorch_model.safetensors", + "url": "https://huggingface.co/xinsir/controlnet-scribble-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors" + }, + { + "name": "xinsir/Controlnet-Canny-Sdxl-1.0 (V2)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL/controlnet-canny-sdxl-1.0", + "description": "[2.5GB] Controlnet SDXL Canny model.", + "reference": "https://huggingface.co/xinsir/controlnet-canny-sdxl-1.0", + "filename": "diffusion_pytorch_model_V2.safetensors", + "url": "https://huggingface.co/xinsir/controlnet-canny-sdxl-1.0/resolve/main/diffusion_pytorch_model_V2.safetensors" + }, + { + "name": "xinsir/Controlnet-Openpose-Sdxl-1.0", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL/controlnet-openpose-sdxl-1.0", + "description": "[2.5GB] Controlnet SDXL Openpose model.", + "reference": "https://huggingface.co/xinsir/controlnet-openpose-sdxl-1.0", + "filename": "diffusion_pytorch_model.safetensors", + "url": "https://huggingface.co/xinsir/controlnet-openpose-sdxl-1.0/resolve/main/diffusion_pytorch_model.safetensors" + }, + { + "name": "xinsir/Controlnet-Openpose-Sdxl-1.0 (Ver. twins)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL/controlnet-openpose-sdxl-1.0", + "description": "[2.5GB] Controlnet SDXL Openpose model. (Ver. twins)", + "reference": "https://huggingface.co/xinsir/controlnet-openpose-sdxl-1.0", + "filename": "diffusion_pytorch_model_twins.safetensors", + "url": "https://huggingface.co/xinsir/controlnet-openpose-sdxl-1.0/resolve/main/diffusion_pytorch_model_twins.safetensors" + }, + { + "name": "xinsir/Controlnet-Scribble-Sdxl-1.0-Anime", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL/controlnet-scribble-sdxl-1.0-anime", + "description": "[2.5GB] Controlnet SDXL Scribble model. (Ver. anime)", + "reference": "https://huggingface.co/xinsir/anime-painter", + "filename": "diffusion_pytorch_model.safetensors", + "url": "https://huggingface.co/xinsir/anime-painter/resolve/main/diffusion_pytorch_model.safetensors" + }, + + { + "name": "Doubiiu/ToonCrafter model checkpoint", + "type": "checkpoint", + "base": "ToonCrafter", + "save_path": "custom_nodes/ComfyUI-ToonCrafter/ToonCrafter/checkpoints/tooncrafter_512_interp_v1", + "description": "[10.5GB] ToonCrafter checkpoint model for ComfyUI-ToonCrafter", + "reference": "https://huggingface.co/Doubiiu/ToonCrafter/tree/main", + "filename": "model.ckpt", + "url": "https://huggingface.co/Doubiiu/ToonCrafter/resolve/main/model.ckpt" + }, + + { + "name": "ViperYX/RGT_S_x2.pth", + "type": "RGT", + "base": "RGT", + "save_path": "RGT/RGT_S", + "description": "[135MB] RGT_S x2 upscale model for ComfyUI-RGT", + "reference": "https://huggingface.co/ViperYX/RGT/tree/main", + "filename": "RGT_S_x2.pth", + "url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT_S/RGT_S_x2.pth" + }, + { + "name": "ViperYX/RGT_S_x3.pth", + "type": "RGT", + "base": "RGT", + "save_path": "RGT/RGT_S", + "description": "[136MB] RGT_S x3 upscale model for ComfyUI-RGT", + "reference": "https://huggingface.co/ViperYX/RGT/tree/main", + "filename": "RGT_S_x3.pth", + "url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT_S/RGT_S_x3.pth" + }, + { + "name": "ViperYX/RGT_S_x4.pth", + "type": "RGT", + "base": "RGT", + "save_path": "RGT/RGT_S", + "description": "[136MB] RGT_S x4 upscale model for ComfyUI-RGT", + "reference": "https://huggingface.co/ViperYX/RGT/tree/main", + "filename": "RGT_S_x4.pth", + "url": "https://huggingface.co/ViperYX/RGT/resolve/main/RGT_S/RGT_S_x4.pth" + }, + + { + "name": "TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic v2 (fp16)", + "type": "controlnet", + "base": "SDXL", + "save_path": "controlnet/SDXL", + "description": "[2.5GB] Controlnet SDXL Tile model realistic version.", + "reference": "https://huggingface.co/TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic", + "filename": "TTPLANET_Controlnet_Tile_realistic_v2_fp16.safetensors", + "url": "https://huggingface.co/TTPlanet/TTPLanet_SDXL_Controlnet_Tile_Realistic/resolve/main/TTPLANET_Controlnet_Tile_realistic_v2_fp16.safetensors" + }, + + { + "name": "TencentARC/CustomNet", + "type": "CustomNet", + "base": "CustomNet", + "save_path": "custom_nodes/ComfyUI_CustomNet/pretrain", + "description": "CustomNet pretrained model for ComfyUI_CustomNet", + "reference": "https://huggingface.co/TencentARC/CustomNet/tree/main", + "filename": "customnet_v1.pt", + "url": "https://huggingface.co/TencentARC/CustomNet/resolve/main/customnet_v1.pt" + }, + + { + "name": "ID-Animator/animator.ckpt", + "type": "ID-Animator", + "base": "SD1.5", + "save_path": "custom_nodes/ComfyUI_ID_Animator/models", + "description": "ID-Animator checkpoint", + "reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator", + "filename": "animator.ckpt", + "url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/animator.ckpt" + }, + { + "name": "ID-Animator/mm_sd_v15_v2.ckpt", + "type": "ID-Animator", + "base": "SD1.5", + "save_path": "custom_nodes/ComfyUI_ID_Animator/models/animatediff_models", + "description": "AnimateDiff checkpoint for ID-Animator", + "reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator", + "filename": "mm_sd_v15_v2.ckpt", + "url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/mm_sd_v15_v2.ckpt" + }, + { + "name": "ID-Animator/image_encoder", + "type": "ID-Animator", + "base": "SD1.5", + "save_path": "custom_nodes/ComfyUI_ID_Animator/models/image_encoder", + "description": "CLIP Image encoder for ID-Animator", + "reference": "https://huggingface.co/spaces/ID-Animator/ID-Animator", + "filename": "model.safetensors", + "url": "https://huggingface.co/spaces/ID-Animator/ID-Animator/resolve/main/image_encoder/model.safetensors" + }, + + { + "name": "IC-Light/fc", + "type": "IC-Light", + "base": "SD1.5", + "save_path": "unet/IC-Light", + "description": "The default relighting model, conditioned on text and foreground", + "reference": "https://huggingface.co/lllyasviel/ic-light", + "filename": "iclight_sd15_fc.safetensors", + "url": "https://huggingface.co/lllyasviel/ic-light/resolve/main/iclight_sd15_fc.safetensors" + }, + { + "name": "IC-Light/fbc", + "type": "IC-Light", + "base": "SD1.5", + "save_path": "unet/IC-Light", + "description": "Relighting model conditioned with text, foreground, and background", + "reference": "https://huggingface.co/lllyasviel/ic-light", + "filename": "iclight_sd15_fbc.safetensors", + "url": "https://huggingface.co/lllyasviel/ic-light/resolve/main/iclight_sd15_fbc.safetensors" + }, + { + "name": "IC-Light/fcon", + "type": "IC-Light", + "base": "SD1.5", + "save_path": "unet/IC-Light", + "description": "Same as iclight_sd15_fc.safetensors, but trained with offset noise", + "reference": "https://huggingface.co/lllyasviel/ic-light", + "filename": "iclight_sd15_fcon.safetensors", + "url": "https://huggingface.co/lllyasviel/ic-light/resolve/main/iclight_sd15_fcon.safetensors" + }, + { "name": "MonsterMMORPG/insightface (for InstantID)", "type": "insightface", @@ -293,414 +676,6 @@ "reference": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/tree/main", "filename": "efficient_sam_s_gpu.jit", "url": "https://huggingface.co/camenduru/YoloWorld-EfficientSAM/resolve/main/efficient_sam_s_gpu.jit" - }, - - { - "name": "stabilityai/comfyui_checkpoints/stable_cascade_stage_b.safetensors", - "type": "checkpoints", - "base": "Stable Cascade", - "save_path": "checkpoints/Stable-Cascade", - "description": "[4.55GB] Stable Cascade stage_b checkpoints", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stable_cascade_stage_b.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/comfyui_checkpoints/stable_cascade_stage_b.safetensors" - }, - { - "name": "stabilityai/comfyui_checkpoints/stable_cascade_stage_c.safetensors", - "type": "checkpoints", - "base": "Stable Cascade", - "save_path": "checkpoints/Stable-Cascade", - "description": "[9.22GB] Stable Cascade stage_c checkpoints", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stable_cascade_stage_c.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/comfyui_checkpoints/stable_cascade_stage_c.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: effnet_encoder.safetensors (VAE)", - "type": "VAE", - "base": "Stable Cascade", - "save_path": "vae/Stable-Cascade", - "description": "[81.5MB] Stable Cascade: effnet_encoder.\nVAE encoder for stage_c latent.", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "effnet_encoder.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/effnet_encoder.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: stage_a.safetensors (VAE)", - "type": "VAE", - "base": "Stable Cascade", - "save_path": "vae/Stable-Cascade", - "description": "[73.7MB] Stable Cascade: stage_a", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stage_a.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_a.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: stage_b.safetensors (UNET)", - "type": "unet", - "base": "Stable Cascade", - "save_path": "unet/Stable-Cascade", - "description": "[6.25GB] Stable Cascade: stage_b", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stage_b.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: stage_b_bf16.safetensors (UNET)", - "type": "unet", - "base": "Stable Cascade", - "save_path": "unet/Stable-Cascade", - "description": "[3.13GB] Stable Cascade: stage_b/bf16", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stage_b_bf16.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b_bf16.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: stage_b_lite.safetensors (UNET)", - "type": "unet", - "base": "Stable Cascade", - "save_path": "unet/Stable-Cascade", - "description": "[2.8GB] Stable Cascade: stage_b/lite", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stage_b_lite.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b_lite.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: stage_b_lite.safetensors (UNET)", - "type": "unet", - "base": "Stable Cascade", - "save_path": "unet/Stable-Cascade", - "description": "[1.4GB] Stable Cascade: stage_b/bf16,lite", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stage_b_lite_bf16.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_b_lite_bf16.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: stage_c.safetensors (UNET)", - "type": "unet", - "base": "Stable Cascade", - "save_path": "unet/Stable-Cascade", - "description": "[14.4GB] Stable Cascade: stage_c", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stage_c.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: stage_c_bf16.safetensors (UNET)", - "type": "unet", - "base": "Stable Cascade", - "save_path": "unet/Stable-Cascade", - "description": "[7.18GB] Stable Cascade: stage_c/bf16", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stage_c_bf16.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c_bf16.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: stage_c_lite.safetensors (UNET)", - "type": "unet", - "base": "Stable Cascade", - "save_path": "unet/Stable-Cascade", - "description": "[4.12GB] Stable Cascade: stage_c/lite", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stage_c_lite.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c_lite.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: stage_c_lite.safetensors (UNET)", - "type": "unet", - "base": "Stable Cascade", - "save_path": "unet/Stable-Cascade", - "description": "[2.06GB] Stable Cascade: stage_c/bf16,lite", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "stage_c_lite_bf16.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/stage_c_lite_bf16.safetensors" - }, - { - "name": "stabilityai/Stable Cascade: text_encoder (CLIP)", - "type": "clip", - "base": "Stable Cascade", - "save_path": "clip/Stable-Cascade", - "description": "[1.39GB] Stable Cascade: text_encoder", - "reference": "https://huggingface.co/stabilityai/stable-cascade", - "filename": "model.safetensors", - "url": "https://huggingface.co/stabilityai/stable-cascade/resolve/main/text_encoder/model.safetensors" - }, - - { - "name": "1k3d68.onnx", - "type": "insightface", - "base": "inswapper", - "save_path": "insightface/models/antelopev2", - "description": "Antelopev2 1k3d68.onnx model for InstantId. (InstantId needs all Antelopev2 models)", - "reference": "https://github.com/cubiq/ComfyUI_InstantID#installation", - "filename": "1k3d68.onnx", - "url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/1k3d68.onnx" - }, - { - "name": "2d106det.onnx", - "type": "insightface", - "base": "inswapper", - "save_path": "insightface/models/antelopev2", - "description": "Antelopev2 2d106det.onnx model for InstantId. (InstantId needs all Antelopev2 models)", - "reference": "https://github.com/cubiq/ComfyUI_InstantID#installation", - "filename": "2d106det.onnx", - "url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/2d106det.onnx" - }, - { - "name": "genderage.onnx", - "type": "insightface", - "base": "inswapper", - "save_path": "insightface/models/antelopev2", - "description": "Antelopev2 genderage.onnx model for InstantId. (InstantId needs all Antelopev2 models)", - "reference": "https://github.com/cubiq/ComfyUI_InstantID#installation", - "filename": "genderage.onnx", - "url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/genderage.onnx" - }, - { - "name": "glintr100.onnx", - "type": "insightface", - "base": "inswapper", - "save_path": "insightface/models/antelopev2", - "description": "Antelopev2 glintr100.onnx model for InstantId. (InstantId needs all Antelopev2 models)", - "reference": "https://github.com/cubiq/ComfyUI_InstantID#installation", - "filename": "glintr100.onnx", - "url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/glintr100.onnx" - }, - { - "name": "scrfd_10g_bnkps.onnx", - "type": "insightface", - "base": "inswapper", - "save_path": "insightface/models/antelopev2", - "description": "Antelopev2 scrfd_10g_bnkps.onnx model for InstantId. (InstantId needs all Antelopev2 models)", - "reference": "https://github.com/cubiq/ComfyUI_InstantID#installation", - "filename": "scrfd_10g_bnkps.onnx", - "url": "https://huggingface.co/MonsterMMORPG/tools/resolve/main/scrfd_10g_bnkps.onnx" - }, - - { - "name": "photomaker-v1.bin", - "type": "photomaker", - "base": "SDXL", - "save_path": "photomaker", - "description": "PhotoMaker model. This model is compatible with SDXL.", - "reference": "https://huggingface.co/TencentARC/PhotoMaker", - "filename": "photomaker-v1.bin", - "url": "https://huggingface.co/TencentARC/PhotoMaker/resolve/main/photomaker-v1.bin" - }, - { - "name": "ip-adapter-faceid_sdxl.bin", - "type": "IP-Adapter", - "base": "SD1.5", - "save_path": "ipadapter", - "description": "IP-Adapter-FaceID Model (SDXL) [ipadapter]", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid_sdxl.bin", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid_sdxl.bin" - }, - { - "name": "ip-adapter-faceid-plusv2_sdxl.bin", - "type": "IP-Adapter", - "base": "SD1.5", - "save_path": "ipadapter", - "description": "IP-Adapter-FaceID Plus Model (SDXL) [ipadapter]", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid-plusv2_sdxl.bin", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sdxl.bin" - }, - { - "name": "ip-adapter-faceid_sdxl_lora.safetensors", - "type": "lora", - "base": "SDXL", - "save_path": "loras/ipadapter", - "description": "IP-Adapter-FaceID LoRA Model (SDXL) [ipadapter]", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid_sdxl_lora.safetensors", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid_sdxl_lora.safetensors" - }, - { - "name": "ip-adapter-faceid-plusv2_sdxl_lora.safetensors", - "type": "lora", - "base": "SDXL", - "save_path": "loras/ipadapter", - "description": "IP-Adapter-FaceID-Plus V2 LoRA Model (SDXL) [ipadapter]", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid-plusv2_sdxl_lora.safetensors", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sdxl_lora.safetensors" - }, - - { - "name": "TencentARC/motionctrl.pth", - "type": "checkpoints", - "base": "MotionCtrl", - "save_path": "checkpoints/motionctrl", - "description": "To use the ComfyUI-MotionCtrl extension, downloading this model is required.", - "reference": "https://huggingface.co/TencentARC/MotionCtrl", - "filename": "motionctrl.pth", - "url": "https://huggingface.co/TencentARC/MotionCtrl/resolve/main/motionctrl.pth" - }, - { - "name": "ip-adapter-faceid-plusv2_sd15.bin", - "type": "IP-Adapter", - "base": "SD1.5", - "save_path": "ipadapter", - "description": "IP-Adapter-FaceID-Plus V2 Model (SD1.5)", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid-plusv2_sd15.bin", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sd15.bin" - }, - { - "name": "ip-adapter-faceid-plusv2_sd15_lora.safetensors", - "type": "lora", - "base": "SD1.5", - "save_path": "loras/ipadapter", - "description": "IP-Adapter-FaceID-Plus V2 LoRA Model (SD1.5)", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid-plusv2_sd15_lora.safetensors", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plusv2_sd15_lora.safetensors" - }, - { - "name": "ip-adapter-faceid-plus_sd15_lora.safetensors", - "type": "lora", - "base": "SD1.5", - "save_path": "loras/ipadapter", - "description": "IP-Adapter-FaceID Plus LoRA Model (SD1.5) [ipadapter]", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid-plus_sd15_lora.safetensors", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plus_sd15_lora.safetensors" - }, - - { - "name": "ControlNet-HandRefiner-pruned (inpaint-depth-hand; fp16)", - "type": "controlnet", - "base": "SD1.5", - "save_path": "default", - "description": "This inpaint-depth controlnet model is specialized for the hand refiner.", - "reference": "https://huggingface.co/hr16/ControlNet-HandRefiner-pruned", - "filename": "control_sd15_inpaint_depth_hand_fp16.safetensors", - "url": "https://huggingface.co/hr16/ControlNet-HandRefiner-pruned/resolve/main/control_sd15_inpaint_depth_hand_fp16.safetensors" - }, - { - "name": "stabilityai/stable-diffusion-x4-upscaler", - "type": "checkpoints", - "base": "upscale", - "save_path": "checkpoints/upscale", - "description": "[3.53GB] This upscaling model is a latent text-guided diffusion model and should be used with SD_4XUpscale_Conditioning and KSampler.", - "reference": "https://huggingface.co/stabilityai/stable-diffusion-x4-upscaler", - "filename": "x4-upscaler-ema.safetensors", - "url": "https://huggingface.co/stabilityai/stable-diffusion-x4-upscaler/resolve/main/x4-upscaler-ema.safetensors" - }, - { - "name": "LDSR(Latent Diffusion Super Resolution)", - "type": "upscale", - "base": "upscale", - "save_path": "upscale_models/ldsr", - "description": "LDSR upscale model. Through the [a/ComfyUI-Flowty-LDSR](https://github.com/flowtyone/ComfyUI-Flowty-LDSR) extension, the upscale model can be utilized.", - "reference": "https://github.com/CompVis/latent-diffusion", - "filename": "last.ckpt", - "url": "https://heibox.uni-heidelberg.de/f/578df07c8fc04ffbadf3/?dl=1" - }, - { - "name": "control_boxdepth_LooseControlfp16 (fp16)", - "type": "controlnet", - "base": "SD1.5", - "save_path": "default", - "description": "Loose ControlNet model", - "reference": "https://huggingface.co/ioclab/LooseControl_WebUICombine", - "filename": "control_boxdepth_LooseControlfp16.safetensors", - "url": "https://huggingface.co/ioclab/LooseControl_WebUICombine/resolve/main/control_boxdepth_LooseControlfp16.safetensors" - }, - - { - "name": "ip-adapter-faceid-portrait_sd15.bin", - "type": "IP-Adapter", - "base": "SD1.5", - "save_path": "ipadapter", - "description": "IP-Adapter-FaceID Portrait Model (SD1.5) [ipadapter]", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid-portrait_sd15.bin", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-portrait_sd15.bin" - }, - { - "name": "ip-adapter-faceid-plus_sd15.bin", - "type": "IP-Adapter", - "base": "SD1.5", - "save_path": "ipadapter", - "description": "IP-Adapter-FaceID Plus Model (SD1.5) [ipadapter]", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid-plus_sd15.bin", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid-plus_sd15.bin" - }, - { - "name": "ip-adapter-faceid_sd15.bin", - "type": "IP-Adapter", - "base": "SD1.5", - "save_path": "ipadapter", - "description": "IP-Adapter-FaceID Model (SD1.5)", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid_sd15.bin", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid_sd15.bin" - }, - { - "name": "ip-adapter-faceid_sd15_lora.safetensors", - "type": "lora", - "base": "SD1.5", - "save_path": "loras/ipadapter", - "description": "IP-Adapter-FaceID LoRA Model (SD1.5)", - "reference": "https://huggingface.co/h94/IP-Adapter-FaceID", - "filename": "ip-adapter-faceid_sd15_lora.safetensors", - "url": "https://huggingface.co/h94/IP-Adapter-FaceID/resolve/main/ip-adapter-faceid_sd15_lora.safetensors" - }, - - { - "name": "LongAnimatediff/lt_long_mm_16_64_frames_v1.1.ckpt (ComfyUI-AnimateDiff-Evolved) (Updated path)", - "type": "animatediff", - "base": "SD1.x", - "save_path": "animatediff_models", - "description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node.", - "reference": "https://huggingface.co/Lightricks/LongAnimateDiff", - "filename": "lt_long_mm_16_64_frames_v1.1.ckpt", - "url": "https://huggingface.co/Lightricks/LongAnimateDiff/resolve/main/lt_long_mm_16_64_frames_v1.1.ckpt" - }, - - { - "name": "animatediff/v3_sd15_sparsectrl_rgb.ckpt (ComfyUI-AnimateDiff-Evolved)", - "type": "controlnet", - "base": "SD1.x", - "save_path": "controlnet/SD1.5/animatediff", - "description": "AnimateDiff SparseCtrl RGB ControlNet model", - "reference": "https://huggingface.co/guoyww/animatediff", - "filename": "v3_sd15_sparsectrl_rgb.ckpt", - "url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_sparsectrl_rgb.ckpt" - }, - { - "name": "animatediff/v3_sd15_sparsectrl_scribble.ckpt", - "type": "controlnet", - "base": "SD1.x", - "save_path": "controlnet/SD1.5/animatediff", - "description": "AnimateDiff SparseCtrl Scribble ControlNet model", - "reference": "https://huggingface.co/guoyww/animatediff", - "filename": "v3_sd15_sparsectrl_scribble.ckpt", - "url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_sparsectrl_scribble.ckpt" - }, - { - "name": "animatediff/v3_sd15_mm.ckpt (ComfyUI-AnimateDiff-Evolved)", - "type": "animatediff", - "base": "SD1.x", - "save_path": "custom_nodes/ComfyUI-AnimateDiff-Evolved/models", - "description": "Pressing 'install' directly downloads the model from the Kosinkadink/ComfyUI-AnimateDiff-Evolved extension node. (Note: Requires ComfyUI-Manager V0.24 or above)", - "reference": "https://huggingface.co/guoyww/animatediff", - "filename": "v3_sd15_mm.ckpt", - "url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_mm.ckpt" - }, - { - "name": "animatediff/v3_sd15_adapter.ckpt", - "type": "lora", - "base": "SD1.x", - "save_path": "loras/SD1.5/animatediff", - "description": "AnimateDiff Adapter LoRA (SD1.5)", - "reference": "https://huggingface.co/guoyww/animatediff", - "filename": "v3_sd15_adapter.ckpt", - "url": "https://huggingface.co/guoyww/animatediff/resolve/main/v3_sd15_adapter.ckpt" } ] } diff --git a/node_db/tutorial/custom-node-list.json b/node_db/tutorial/custom-node-list.json index 19e11ae9..096e0b5e 100644 --- a/node_db/tutorial/custom-node-list.json +++ b/node_db/tutorial/custom-node-list.json @@ -80,16 +80,6 @@ "install_type": "git-clone", "description": "Tutorial nodes" }, - { - "author": "GraftingRayman", - "title": "ComfyUI-Trajectory", - "reference": "https://github.com/GraftingRayman/ComfyUI-Trajectory", - "files": [ - "https://github.com/GraftingRayman/ComfyUI-Trajectory" - ], - "install_type": "git-clone", - "description": "Nodes:GR Trajectory" - }, { "author": "wailovet", "title": "ComfyUI-WW", @@ -188,17 +178,37 @@ "https://github.com/nilor-corp/nilor-nodes" ], "install_type": "git-clone", - "description": "Custom utility nodes for ComfyUI" + "description": "Nodes:Nilor Floats, Nilor Int To List Of Bools, Nilor Bool From List Of Bools, Nilor Int From List Of Ints, Nilor List of Ints, Nilor Count Images In Directory" }, { - "author": "gonzalu", - "title": "ComfyUI YouFunnyGuys Comical Custom Nodes", - "reference": "https://github.com/gonzalu/ComfyUI_YFG_Comical", + "author": "OuticNZ", + "title": "ComfyUI-Simple-Of-Complex", + "reference": "https://github.com/OuticNZ/ComfyUI-Simple-Of-Complex", "files": [ - "https://github.com/gonzalu/ComfyUI_YFG_Comical" + "https://github.com/OuticNZ/ComfyUI-Simple-Of-Complex" ], "install_type": "git-clone", - "description": "This is a repository of ComfyUI custom nodes. I was looking for a node that provided some functionality and did not find one. So I decided to create one myself in order to have the functionality I desired as well as way to teach myself how to code." + "description": "Keeping it simple for starting. Single branch for now and will add development branch later." + }, + { + "author": "jtong", + "title": "comfyui-jtong-workflow", + "reference": "https://github.com/jtong/comfyui-jtong-workflow", + "files": [ + "https://github.com/jtong/comfyui-jtong-workflow" + ], + "install_type": "git-clone", + "description": "Nodes:jtong.Highway, Example" + }, + { + "author": "thinkthinking", + "title": "ComfyUI-Ye", + "reference": "https://github.com/thinkthinking/ComfyUI-Ye", + "files": [ + "https://github.com/thinkthinking/ComfyUI-Ye" + ], + "install_type": "git-clone", + "description": "Nodes:Signature|Ye, CheckpointLoader|Ye, PrintHelloWorld|Ye." } ] } \ No newline at end of file diff --git a/notebooks/comfyui_colab_with_manager.ipynb b/notebooks/comfyui_colab_with_manager.ipynb index 55ee514a..d8b86388 100644 --- a/notebooks/comfyui_colab_with_manager.ipynb +++ b/notebooks/comfyui_colab_with_manager.ipynb @@ -67,8 +67,9 @@ "!echo -= Install dependencies =-\n", "!pip3 install accelerate\n", "!pip3 install einops transformers>=4.25.1 safetensors>=0.3.0 aiohttp pyyaml Pillow scipy tqdm psutil\n", - "!pip3 install xformers!=0.0.18 torch==2.1.0 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121\n", + "!pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121\n", "!pip3 install torchsde\n", + "!pip3 install kornia>=0.7.1 spandrel\n", "\n", "if OPTIONS['USE_COMFYUI_MANAGER']:\n", " %cd custom_nodes\n", diff --git a/prestartup_script.py b/prestartup_script.py index 024634cd..47945f33 100644 --- a/prestartup_script.py +++ b/prestartup_script.py @@ -8,14 +8,16 @@ import re import locale import platform import json - +import ast glob_path = os.path.join(os.path.dirname(__file__), "glob") sys.path.append(glob_path) +import security_check from manager_util import * import cm_global +security_check.security_check() cm_global.pip_downgrade_blacklist = ['torch', 'torchsde', 'torchvision', 'transformers', 'safetensors', 'kornia'] @@ -212,6 +214,9 @@ try: # Handle error raise ValueError("The object does not have a fileno method") + def isatty(self): + return False + def write(self, message): global is_start_mode @@ -427,7 +432,20 @@ def is_installed(name): print(f"[ComfyUI-Manager] skip black listed pip installation: '{name}'") return True - return name.lower() in get_installed_packages() + pkg = get_installed_packages().get(name.lower()) + if pkg is None: + return False # update if not installed + + if match is None: + return True # don't update if version is not specified + + if match.group(2) in ['>', '>=']: + if StrictVersion(pkg) < StrictVersion(match.group(3)): + return False + elif StrictVersion(pkg) > StrictVersion(match.group(3)): + print(f"[SKIP] Downgrading pip package isn't allowed: {name.lower()} (cur={pkg})") + + return True # prevent downgrade if os.path.exists(restore_snapshot_path): @@ -476,8 +494,9 @@ if os.path.exists(restore_snapshot_path): for line in file: package_name = remap_pip_package(line.strip()) if package_name and not is_installed(package_name): - install_cmd = [sys.executable, "-m", "pip", "install", package_name] - this_exit_code += process_wrap(install_cmd, repo_path) + if not package_name.startswith('#'): + install_cmd = [sys.executable, "-m", "pip", "install", package_name] + this_exit_code += process_wrap(install_cmd, repo_path) if os.path.exists(install_script_path) and f'{repo_path}/install.py' not in processed_install: processed_install.add(f'{repo_path}/install.py') @@ -541,7 +560,7 @@ if os.path.exists(script_list_path): executed.add(line) try: - script = eval(line) + script = ast.literal_eval(line) if script[1].startswith('#') and script[1] != '#FORCE': if script[1] == "#LAZY-INSTALL-SCRIPT": diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..4fa1734c --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,15 @@ +[project] +name = "comfyui-manager" +description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI." +version = "2.38.2" +license = "LICENSE" +dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"] + +[project.urls] +Repository = "https://github.com/ltdrdata/ComfyUI-Manager" +# Used by Comfy Registry https://comfyregistry.org + +[tool.comfy] +PublisherId = "drltdata" +DisplayName = "ComfyUI-Manager" +Icon = "" diff --git a/requirements.txt b/requirements.txt index 70a430f7..89f93b41 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,7 @@ GitPython PyGithub matrix-client==0.4.0 transformers -huggingface-hub>0.20 \ No newline at end of file +huggingface-hub>0.20 +typer +rich +typing-extensions \ No newline at end of file diff --git a/scanner.py b/scanner.py index 9fdef9d7..0118768f 100644 --- a/scanner.py +++ b/scanner.py @@ -3,9 +3,10 @@ import re import os import json from git import Repo -from torchvision.datasets.utils import download_url import concurrent import datetime +import concurrent.futures +import requests builtin_nodes = set() @@ -15,6 +16,29 @@ from urllib.parse import urlparse from github import Github +def download_url(url, dest_folder, filename=None): + # Ensure the destination folder exists + if not os.path.exists(dest_folder): + os.makedirs(dest_folder) + + # Extract filename from URL if not provided + if filename is None: + filename = os.path.basename(url) + + # Full path to save the file + dest_path = os.path.join(dest_folder, filename) + + # Download the file + response = requests.get(url, stream=True) + if response.status_code == 200: + with open(dest_path, 'wb') as file: + for chunk in response.iter_content(chunk_size=1024): + if chunk: + file.write(chunk) + else: + raise Exception(f"Failed to download file from {url}") + + # prepare temp dir if len(sys.argv) > 1: temp_dir = sys.argv[1] @@ -37,12 +61,22 @@ else: print(f"TEMP DIR: {temp_dir}") +parse_cnt = 0 + + def extract_nodes(code_text): + global parse_cnt + try: + if parse_cnt % 100 == 0: + print(f".", end="", flush=True) + parse_cnt += 1 + + code_text = re.sub(r'\\[^"\']', '', code_text) parsed_code = ast.parse(code_text) assignments = (node for node in parsed_code.body if isinstance(node, ast.Assign)) - + for assignment in assignments: if isinstance(assignment.targets[0], ast.Name) and assignment.targets[0].id in ['NODE_CONFIG', 'NODE_CLASS_MAPPINGS']: node_class_mappings = assignment.value @@ -51,7 +85,12 @@ def extract_nodes(code_text): node_class_mappings = None if node_class_mappings: - s = set([key.s.strip() for key in node_class_mappings.keys if key is not None]) + s = set() + + for key in node_class_mappings.keys: + if key is not None and isinstance(key.value, str): + s.add(key.value.strip()) + return s else: return set() @@ -77,21 +116,26 @@ def scan_in_file(filename, is_builtin=False): class_dict = {} nodes |= extract_nodes(code) + code = re.sub(r'^#.*?$', '', code, flags=re.MULTILINE) - pattern2 = r'^[^=]*_CLASS_MAPPINGS\["(.*?)"\]' - keys = re.findall(pattern2, code) - for key in keys: - nodes.add(key.strip()) + def extract_keys(pattern, code): + keys = re.findall(pattern, code) + return {key.strip() for key in keys} - pattern3 = r'^[^=]*_CLASS_MAPPINGS\[\'(.*?)\'\]' - keys = re.findall(pattern3, code) - for key in keys: - nodes.add(key.strip()) + def update_nodes(nodes, new_keys): + nodes |= new_keys - pattern4 = r'@register_node\("(.+)",\s*\".+"\)' - keys = re.findall(pattern4, code) - for key in keys: - nodes.add(key.strip()) + patterns = [ + r'^[^=]*_CLASS_MAPPINGS\["(.*?)"\]', + r'^[^=]*_CLASS_MAPPINGS\[\'(.*?)\'\]', + r'@register_node\("(.+)",\s*\".+"\)', + r'"(\w+)"\s*:\s*{"class":\s*\w+\s*' + ] + + with concurrent.futures.ThreadPoolExecutor() as executor: + futures = {executor.submit(extract_keys, pattern, code): pattern for pattern in patterns} + for future in concurrent.futures.as_completed(futures): + update_nodes(nodes, future.result()) matches = regex.findall(code) for match in matches: @@ -259,6 +303,9 @@ def update_custom_nodes(): if is_rate_limit_exceeded(): return + if 'github.com' not in url: + return None + print('.', end="") sys.stdout.flush() try: @@ -270,24 +317,37 @@ def update_custom_nodes(): if len(path_parts) >= 2 and domain == "github.com": owner_repo = "/".join(path_parts[-2:]) repo = g.get_repo(owner_repo) - + owner = repo.owner + now = datetime.datetime.now(datetime.timezone.utc) + author_time_diff = now - owner.created_at + last_update = repo.pushed_at.strftime("%Y-%m-%d %H:%M:%S") if repo.pushed_at else 'N/A' - github_stats[url] = { + item = { "stars": repo.stargazers_count, "last_update": last_update, - "cached_time": datetime.datetime.now().timestamp(), + "cached_time": now.timestamp(), + "author_account_age_days": author_time_diff.days, } - with open(GITHUB_STATS_CACHE_FILENAME, 'w', encoding='utf-8') as file: - json.dump(github_stats, file, ensure_ascii=False, indent=4) + return url, item else: print(f"\nInvalid URL format for GitHub repository: {url}\n") except Exception as e: print(f"\nERROR on {url}\n{e}") + return None + # resolve unresolved urls - for url, title, preemptions, node_pattern in git_url_titles_preemptions: - if url not in github_stats: - renew_stat(url) + with concurrent.futures.ThreadPoolExecutor(11) as executor: + futures = [] + for url, title, preemptions, node_pattern in git_url_titles_preemptions: + if url not in github_stats: + futures.append(executor.submit(renew_stat, url)) + + for future in concurrent.futures.as_completed(futures): + url_item = future.result() + if url_item is not None: + url, item = url_item + github_stats[url] = item # renew outdated cache outdated_urls = [] @@ -296,22 +356,34 @@ def update_custom_nodes(): if elapsed > 60*60*12: # 12 hours outdated_urls.append(k) - for url in outdated_urls: - renew_stat(url) + with concurrent.futures.ThreadPoolExecutor(11) as executor: + for url in outdated_urls: + futures.append(executor.submit(renew_stat, url)) + + for future in concurrent.futures.as_completed(futures): + url_item = future.result() + if url_item is not None: + url, item = url_item + github_stats[url] = item + + with open('github-stats-cache.json', 'w', encoding='utf-8') as file: + json.dump(github_stats, file, ensure_ascii=False, indent=4) with open(GITHUB_STATS_FILENAME, 'w', encoding='utf-8') as file: for v in github_stats.values(): if "cached_time" in v: del v["cached_time"] + github_stats = dict(sorted(github_stats.items())) + json.dump(github_stats, file, ensure_ascii=False, indent=4) print(f"Successfully written to {GITHUB_STATS_FILENAME}.") - - with concurrent.futures.ThreadPoolExecutor(11) as executor: - if not skip_stat_update: - executor.submit(process_git_stats, git_url_titles_preemptions) # One single thread for `process_git_stats()`. Runs concurrently with `process_git_url_title()`. + if not skip_stat_update: + process_git_stats(git_url_titles_preemptions) + + with concurrent.futures.ThreadPoolExecutor(11) as executor: for url, title, preemptions, node_pattern in git_url_titles_preemptions: executor.submit(process_git_url_title, url, title, preemptions, node_pattern) @@ -409,7 +481,13 @@ def gen_json(node_info): git_url, title, preemptions, node_pattern = node_info[extension] with open(node_list_json_path, 'r', encoding='utf-8') as f: - node_list_json = json.load(f) + try: + node_list_json = json.load(f) + except Exception as e: + print(f"\nERROR: Invalid json format '{node_list_json_path}'") + print("------------------------------------------------------") + print(e) + print("------------------------------------------------------") metadata_in_url = {} if git_url not in data: @@ -446,3 +524,4 @@ updated_node_info = update_custom_nodes() print("\n# 'extension-node-map.json' file is generated.\n") gen_json(updated_node_info) +print("\nDONE.\n") \ No newline at end of file