Merge remote-tracking branch 'upstream/main' into image-chooser

This commit is contained in:
Chris 2023-09-25 08:17:50 +10:00
commit b5451c9200
16 changed files with 1408 additions and 401 deletions

View File

@ -45,6 +45,7 @@ This repository provides Colab notebooks that allow you to install and use Comfy
* Support for automatically installing dependencies of custom nodes upon restarting Colab notebooks.
## Changes
* **0.29** Add `Update all` feature
* **0.25** support db channel
* You can directly modify the db channel settings in the `config.ini` file.
* If you want to maintain a new DB channel, please modify the `channels.list` and submit a PR.
@ -95,6 +96,11 @@ This repository provides Colab notebooks that allow you to install and use Comfy
![model-install-dialog](misc/nickname.jpg)
## How to register your custom node into ComfyUI-Manager
* Add an entry to `custom-node-list.json` located in the root of ComfyUI-Manager and submit a Pull Request.
* NOTE: Before submitting the PR after making changes, please check `Use local DB` and ensure that the extension list loads without any issues in the `Install custom nodes` dialog. Occasionally, missing or extra commas can lead to JSON syntax errors.
* The remaining JSON will be updated through scripts in the future, so you don't need to worry about it.
## Custom node support guide
@ -131,6 +137,7 @@ NODE_CLASS_MAPPINGS.update({
"""
```
* **Special purpose files** (optional)
* `node_list.js` - When your custom nodes pattern of NODE_CLASS_MAPPINGS is not conventional, it is used to manually provide a list of nodes for reference. ([example](https://github.com/melMass/comfy_mtb/raw/main/node_list.json))
* `requirements.txt` - When installing, this pip requirements will be installed automatically
@ -155,17 +162,16 @@ NODE_CLASS_MAPPINGS.update({
## Troubleshooting
* If your `git.exe` is installed in a specific location other than system git, please install ComfyUI-Manager and run ComfyUI. Then, specify the path including the file name in `git_exe = ` in the ComfyUI-Manager/config.ini file that is generated.
* If updating ComfyUI-Manager itself fails, please go to the **ComfyUI-Manager** directory and execute the command `git update-ref refs/remotes/origin/main a361cc1 && git fetch --all && git pull`.
* Alternatively, download the update-fix.py script from [update-fix.py](https://github.com/ltdrdata/ComfyUI-Manager/raw/main/scripts/update-fix.py) and place it in the ComfyUI-Manager directory. Then, run it using your Python command.
For the portable version, use `..\..\..\python_embeded\python.exe update-fix.py`.
* If Controlnet is set to skip_v1 true, nodes like `CannyEdgePreprocessor` will appear as extensions of missing nodes, but simply installing them is not enough, and direct modification of the user's config.yaml is required.
* For cases where nodes like `PreviewTextNode` from `ComfyUI_Custom_Nodes_AlekPet` are only supported as front-end nodes, we currently do not provide missing nodes for them.
* Currently, `vid2vid` is not being updated, causing compatibility issues.
## TODO: Unconventional form of custom node list
* https://github.com/bmad4ever/ComfyUI-Bmad-Custom-Nodes
* https://github.com/diontimmer/Sample-Diffusion-ComfyUI-Extension
* https://github.com/senshilabs/NINJA-plugin
@ -175,8 +181,8 @@ NODE_CLASS_MAPPINGS.update({
- [x] category/keyword filter
- [x] Automatic recognition of missing custom nodes
- [x] Automatic installation suggestion of missing custom nodes
- [x] 3rd party repository
- [ ] installation from git url
- [ ] 3rd party repository
- [ ] Specification of custom nodes
- [ ] Specification scanner
- [ ] Search extension by node name

View File

@ -1,9 +1,10 @@
import configparser
import shutil
import folder_paths
import os, sys
import subprocess
import os
import sys
import threading
import subprocess
def handle_stream(stream, prefix):
@ -55,7 +56,7 @@ sys.path.append('../..')
from torchvision.datasets.utils import download_url
# ensure .js
print("### Loading: ComfyUI-Manager (V0.26.2)")
print("### Loading: ComfyUI-Manager (V0.30.4)")
comfy_ui_required_revision = 1240
comfy_ui_revision = "Unknown"
@ -91,6 +92,7 @@ def write_config():
config['default'] = {
'preview_method': get_current_preview_method(),
'badge_mode': get_config()['badge_mode'],
'git_exe': get_config()['git_exe'],
'channel_url': get_config()['channel_url'],
'channel_url_list': get_config()['channel_url_list']
}
@ -120,6 +122,7 @@ def read_config():
return {
'preview_method': default_conf['preview_method'] if 'preview_method' in default_conf else get_current_preview_method(),
'badge_mode': default_conf['badge_mode'] if 'badge_mode' in default_conf else 'none',
'git_exe': default_conf['git_exe'] if 'git_exe' in default_conf else '',
'channel_url': default_conf['channel_url'] if 'channel_url' in default_conf else 'https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main',
'channel_url_list': ch_url_list
}
@ -128,6 +131,7 @@ def read_config():
return {
'preview_method': get_current_preview_method(),
'badge_mode': 'none',
'git_exe': '',
'channel_url': 'https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main',
'channel_url_list': ''
}
@ -236,9 +240,11 @@ print_comfyui_version()
# use subprocess to avoid file system lock by git (Windows)
def __win_check_git_update(path, do_fetch=False):
def __win_check_git_update(path, do_fetch=False, do_update=False):
if do_fetch:
command = [sys.executable, git_script_path, "--fetch", path]
elif do_update:
command = [sys.executable, git_script_path, "--pull", path]
else:
command = [sys.executable, git_script_path, "--check", path]
@ -246,12 +252,29 @@ def __win_check_git_update(path, do_fetch=False):
output, _ = process.communicate()
output = output.decode('utf-8').strip()
if "CUSTOM NODE CHECK: True" in output:
process.wait()
return True
if do_update:
if "CUSTOM NODE PULL: True" in output:
process.wait()
print(f"\rUpdated: {path}")
return True
elif "CUSTOM NODE PULL: None" in output:
process.wait()
return True
else:
print(f"\rUpdate error: {path}")
process.wait()
return False
else:
process.wait()
return False
if "CUSTOM NODE CHECK: True" in output:
process.wait()
return True
elif "CUSTOM NODE CHECK: False" in output:
process.wait()
return False
else:
print(f"\rFetch error: {path}")
process.wait()
return False
def __win_check_git_pull(path):
@ -260,13 +283,18 @@ def __win_check_git_pull(path):
process.wait()
def git_repo_has_updates(path, do_fetch=False):
def git_repo_has_updates(path, do_fetch=False, do_update=False):
if do_fetch:
print(f"\x1b[2K\rFetching: {path}", end='')
elif do_update:
print(f"\x1b[2K\rUpdating: {path}", end='')
# Check if the path is a git repository
if not os.path.exists(os.path.join(path, '.git')):
raise ValueError('Not a git repository')
if platform.system() == "Windows":
return __win_check_git_update(path, do_fetch)
return __win_check_git_update(path, do_fetch, do_update)
else:
# Fetch the latest commits from the remote repository
repo = git.Repo(path)
@ -277,11 +305,28 @@ def git_repo_has_updates(path, do_fetch=False):
remote_name = 'origin'
remote = repo.remote(name=remote_name)
if do_fetch:
# Get the current commit hash
commit_hash = repo.head.commit.hexsha
if do_fetch or do_update:
remote.fetch()
# Get the current commit hash and the commit hash of the remote branch
commit_hash = repo.head.commit.hexsha
if do_update:
try:
remote.pull(rebase=True)
repo.git.submodule('update', '--init', '--recursive')
new_commit_hash = repo.head.commit.hexsha
if commit_hash != new_commit_hash:
print(f"\x1b[2K\rUpdated: {path}")
return True
else:
return False
except Exception as e:
print(f"\nUpdating failed: {path}\n{e}", file=sys.stderr)
# Get commit hash of the remote branch
remote_commit_hash = repo.refs[f'{remote_name}/{branch_name}'].object.hexsha
# Compare the commit hashes to determine if the local repository is behind the remote repository
@ -350,9 +395,20 @@ def setup_js():
print(f"### ComfyUI-Manager: Copy .js from '{js_src_path}' to '{js_dest_path}'")
shutil.copy(js_src_path, js_dest_path)
setup_js()
def setup_environment():
git_exe = get_config()['git_exe']
if git_exe != '':
git.Git().update_environment(GIT_PYTHON_GIT_EXECUTABLE=git_exe)
setup_environment()
# Expand Server api
import server
@ -408,7 +464,7 @@ def get_model_path(data):
return os.path.join(base_model, data['filename'])
def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True):
def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True, do_update=False):
item['installed'] = 'None'
if item['install_type'] == 'git-clone' and len(item['files']) == 1:
@ -416,7 +472,7 @@ def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True):
dir_path = os.path.join(custom_nodes_path, dir_name)
if os.path.exists(dir_path):
try:
if do_update_check and git_repo_has_updates(dir_path, do_fetch):
if do_update_check and git_repo_has_updates(dir_path, do_fetch, do_update):
item['installed'] = 'Update'
else:
item['installed'] = 'True'
@ -448,9 +504,27 @@ def check_a_custom_node_installed(item, do_fetch=False, do_update_check=True):
item['installed'] = 'False'
def check_custom_nodes_installed(json_obj, do_fetch=False, do_update_check=True):
def check_custom_nodes_installed(json_obj, do_fetch=False, do_update_check=True, do_update=False):
if do_fetch:
print("Start fetching...", end="")
elif do_update:
print("Start updating...", end="")
elif do_update_check:
print("Start update check...", end="")
for item in json_obj['custom_nodes']:
check_a_custom_node_installed(item, do_fetch, do_update_check)
check_a_custom_node_installed(item, do_fetch, do_update_check, do_update)
if do_fetch:
print(f"\x1b[2K\rFetching done.")
elif do_update:
update_exists = any(item['installed'] == 'Update' for item in json_obj['custom_nodes'])
if update_exists:
print(f"\x1b[2K\rUpdate done.")
else:
print(f"\x1b[2K\rAll extensions are already up-to-date.")
elif do_update_check:
print(f"\x1b[2K\rUpdate check done.")
@server.PromptServer.instance.routes.get("/customnode/getmappings")
@ -487,6 +561,27 @@ async def fetch_updates(request):
return web.Response(status=400)
@server.PromptServer.instance.routes.get("/customnode/update_all")
async def update_all(request):
try:
if request.rel_url.query["mode"] == "local":
uri = local_db_custom_node_list
else:
uri = get_config()['channel_url'] + '/custom-node-list.json'
json_obj = await get_data(uri)
check_custom_nodes_installed(json_obj, do_update=True)
update_exists = any(item['installed'] == 'Update' for item in json_obj['custom_nodes'])
if update_exists:
return web.Response(status=201)
return web.Response(status=200)
except:
return web.Response(status=400)
@server.PromptServer.instance.routes.get("/customnode/getlist")
async def fetch_customnode_list(request):
if "skip_update" in request.rel_url.query and request.rel_url.query["skip_update"] == "true":
@ -582,7 +677,7 @@ def unzip_install(files):
os.remove(temp_filename)
except Exception as e:
print(f"Install(unzip) error: {url} / {e}")
print(f"Install(unzip) error: {url} / {e}", file=sys.stderr)
return False
print("Installation was successful.")
@ -605,7 +700,7 @@ def download_url_with_agent(url, save_path):
f.write(data)
except Exception as e:
print(f"Download error: {url} / {e}")
print(f"Download error: {url} / {e}", file=sys.stderr)
return False
print("Installation was successful.")
@ -624,7 +719,7 @@ def copy_install(files, js_path_name=None):
download_url(url, path)
except Exception as e:
print(f"Install(copy) error: {url} / {e}")
print(f"Install(copy) error: {url} / {e}", file=sys.stderr)
return False
print("Installation was successful.")
@ -643,7 +738,7 @@ def copy_uninstall(files, js_path_name='.'):
elif os.path.exists(file_path + ".disabled"):
os.remove(file_path + ".disabled")
except Exception as e:
print(f"Uninstall(copy) error: {url} / {e}")
print(f"Uninstall(copy) error: {url} / {e}", file=sys.stderr)
return False
print("Uninstallation was successful.")
@ -672,7 +767,7 @@ def copy_set_active(files, is_disable, js_path_name='.'):
os.rename(current_name, new_name)
except Exception as e:
print(f"{action_name}(copy) error: {url} / {e}")
print(f"{action_name}(copy) error: {url} / {e}", file=sys.stderr)
return False
@ -722,7 +817,7 @@ def gitclone_install(files):
return False
except Exception as e:
print(f"Install(git-clone) error: {url} / {e}")
print(f"Install(git-clone) error: {url} / {e}", file=sys.stderr)
return False
print("Installation was successful.")
@ -791,7 +886,7 @@ def gitclone_uninstall(files):
elif os.path.exists(dir_path + ".disabled"):
rmtree(dir_path + ".disabled")
except Exception as e:
print(f"Uninstall(git-clone) error: {url} / {e}")
print(f"Uninstall(git-clone) error: {url} / {e}", file=sys.stderr)
return False
print("Uninstallation was successful.")
@ -836,7 +931,7 @@ def gitclone_set_active(files, is_disable):
try_install_script(url, new_path, enable_script)
except Exception as e:
print(f"{action_name}(git-clone) error: {url} / {e}")
print(f"{action_name}(git-clone) error: {url} / {e}", file=sys.stderr)
return False
print(f"{action_name} was successful.")
@ -857,7 +952,7 @@ def gitclone_update(files):
return False
except Exception as e:
print(f"Update(git-clone) error: {url} / {e}")
print(f"Update(git-clone) error: {url} / {e}", file=sys.stderr)
return False
print("Update was successful.")
@ -974,7 +1069,7 @@ async def install_custom_node(request):
else:
return web.Response(status=200)
except Exception as e:
print(f"ComfyUI update fail: {e}")
print(f"ComfyUI update fail: {e}", file=sys.stderr)
pass
return web.Response(status=400)
@ -1026,7 +1121,7 @@ async def install_model(request):
if res:
return web.json_response({}, content_type='application/json')
except Exception as e:
print(f"[ERROR] {e}")
print(f"[ERROR] {e}", file=sys.stderr)
pass
return web.Response(status=400)

View File

@ -159,6 +159,16 @@
"id":"https://github.com/spinagon/ComfyUI-seamless-tiling",
"tags":"tiling",
"description": "ComfyUI node for generating seamless textures Replicates 'Tiling' option from A1111"
},
{
"id":"https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI",
"tags":"cd-tuner, negpip",
"description": "This extension is a port of the <a href='https://github.com/hako-mikan/sd-webui-cd-tuner' target='blank'>sd-webui-cd-tuner</a>(a.k.a. CD(color/Detail) Tuner )and <a href='https://github.com/hako-mikan/sd-webui-negpip' target='blank'>sd-webui-negpip</a>(a.k.a. NegPiP) extensions of A1111 to ComfyUI."
},
{
"id":"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding",
"tags":"DT, dynamic thresholding",
"description": "This custom node is a port of the Dynamic Thresholding extension from A1111 to make it available for use in ComfyUI."
}
]
}

View File

@ -2,3 +2,4 @@ default::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main
recent::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/node_db/new
legacy::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/node_db/legacy
forked::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/node_db/forked
dev::https://raw.githubusercontent.com/ltdrdata/ComfyUI-Manager/main/node_db/dev

View File

@ -225,6 +225,16 @@
"install_type": "git-clone",
"description": "Power Noise Suite contains nodes centered around latent noise input, and diffusion, as well as latent adjustments."
},
{
"author": "WASasquatch",
"title": "FreeU_Advanced",
"reference": "https://github.com/WASasquatch/FreeU_Advanced",
"files": [
"https://github.com/WASasquatch/FreeU_Advanced"
],
"install_type": "git-clone",
"description": "This custom node provides advanced settings for FreeU."
},
{
"author": "omar92",
"title": "Quality of life Suit:V2",
@ -1384,6 +1394,16 @@
"install_type": "git-clone",
"description": "Nodes:Attention couple. This is a custom node that manipulates region-specific prompts. While vanilla ComfyUI employs an area specification method based on latent couples, this node divides regions using attention layers within UNet."
},
{
"author": "laksjdjf",
"title": "cd-tuner_negpip-ComfyUI",
"reference": "https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI",
"files": [
"https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI"
],
"install_type": "git-clone",
"description": "Nodes:Apply CDTuner, Apply Negapip. This extension provides the <a href='https://github.com/hako-mikan/sd-webui-cd-tuner' target='blank'>CD(Color/Detail) Tuner</a> and the <a href='https://github.com/hako-mikan/sd-webui-negpip' target='blank'>Negative Prompt in the Prompt</a>features."
},
{
"author": "alsritter",
"title": "asymmetric-tiling-comfyui",
@ -1404,6 +1424,16 @@
"install_type": "git-clone",
"description": "Pause image generation when GPU temperature exceeds threshold."
},
{
"author": "meap158",
"title": "ComfyUI-Prompt-Expansion",
"reference": "https://github.com/meap158/ComfyUI-Prompt-Expansion",
"files": [
"https://github.com/meap158/ComfyUI-Prompt-Expansion"
],
"install_type": "git-clone",
"description": "Dynamic prompt expansion, powered by GPT-2 locally on your device."
},
{
"author": "TeaCrab",
"title": "ComfyUI-TeaNodes",
@ -1594,16 +1624,6 @@
"install_type": "git-clone",
"description": "Nodes: Latent Mirror. Node to mirror a latent along the Y (vertical / left to right) or X (horizontal / top to bottom) axis."
},
{
"author": "Vrahn",
"title": "ComfyUI-MasaCtrl-Node",
"reference": "https://github.com/Vrahn/ComfyUI-MasaCtrl-Node",
"files": [
"https://github.com/Vrahn/ComfyUI-MasaCtrl-Node"
],
"install_type": "git-clone",
"description": "Nodes: MasaCtrl."
},
{
"author": "Tropfchen",
"title": "Embedding Picker",
@ -1612,7 +1632,7 @@
"https://github.com/Tropfchen/ComfyUI-Embedding_Picker"
],
"install_type": "git-clone",
"description": "Nodes: Embedding Picker. Tired of forgetting and misspelling often weird names of embeddings you use? Or perhaps you use only one, cause you forgot you have tens of them installed? Try this."
"description": "Tired of forgetting and misspelling often weird names of embeddings you use? Or perhaps you use only one, cause you forgot you have tens of them installed?"
},
{
"author": "Acly",
@ -1712,16 +1732,6 @@
"install_type": "git-clone",
"description": "Manage models: browsing, donwload and delete."
},
{
"author": "Tropfchen",
"title": "Embedding Picker",
"reference": "https://github.com/Tropfchen/ComfyUI-Embedding_Picker",
"files": [
"https://github.com/Tropfchen/ComfyUI-Embedding_Picker"
],
"install_type": "git-clone",
"description": "Tired of forgetting and misspelling often weird names of embeddings you use? Or perhaps you use only one, cause you forgot you have tens of them installed?"
},
{
"author": "ali1234",
"title": "comfyui-job-iterator",
@ -1772,6 +1782,106 @@
"install_type": "git-clone",
"description": "Node for generating almost seamless textures, based on similar setting from A1111."
},
{
"author": "chrisgoringe",
"title": "Variation seeds",
"reference": "https://github.com/chrisgoringe/cg-noise",
"files": [
"https://github.com/chrisgoringe/cg-noise"
],
"install_type": "git-clone",
"description": "Adds KSampler custom nodes with variation seed and variation strength."
},
{
"author": "Endless Sea of Stars",
"title": "Endless Nodes",
"reference": "https://github.com/tusharbhutt/Endless-Nodes",
"files": [
"https://github.com/tusharbhutt/Endless-Nodes"
],
"install_type": "git-clone",
"description": "A small set of nodes I created for various numerical and text inputs."
},
{
"author": "spacepxl",
"title": "ComfyUI-HQ-Image-Save",
"reference": "https://github.com/spacepxl/ComfyUI-HQ-Image-Save",
"files": [
"https://github.com/spacepxl/ComfyUI-HQ-Image-Save"
],
"install_type": "git-clone",
"description": "Add Image Save nodes for TIFF 16 bit and EXR 32 bit formats. Probably only useful if you're applying a LUT or other color corrections, and care about preserving as much color accuracy as possible."
},
{
"author": "PTA",
"title": "auto nodes layout",
"reference": "https://github.com/phineas-pta/comfyui-auto-nodes-layout",
"files": [
"https://github.com/phineas-pta/comfyui-auto-nodes-layout"
],
"install_type": "git-clone",
"description": "A ComfyUI extension to apply better nodes layout algorithm to ComfyUI workflow (mostly for visualization purpose)"
},
{
"author": "receyuki",
"title": "comfyui-prompt-reader-node",
"reference": "https://github.com/receyuki/comfyui-prompt-reader-node",
"files": [
"https://github.com/receyuki/comfyui-prompt-reader-node"
],
"install_type": "git-clone",
"description": "Nodes: SDPromptReader"
},
{
"author": "rklaffehn",
"title": "rk-comfy-nodes",
"reference": "https://github.com/rklaffehn/rk-comfy-nodes",
"files": [
"https://github.com/rklaffehn/rk-comfy-nodes"
],
"install_type": "git-clone",
"description": "Nodes: RK_CivitAIMetaChecker, RK_CivitAIAddHashes."
},
{
"author": "cubiq",
"title": "ComfyUI Essentials",
"reference": "https://github.com/cubiq/ComfyUI_essentials",
"files": [
"https://github.com/cubiq/ComfyUI_essentials"
],
"install_type": "git-clone",
"description": "Essential nodes that are weirdly missing from ComfyUI core. With few exceptions they are new features and not commodities. I hope this will be just a temporary repository until the nodes get included into ComfyUI."
},
{
"author": "Clybius",
"title": "ComfyUI-Latent-Modifiers",
"reference": "https://github.com/Clybius/ComfyUI-Latent-Modifiers",
"files": [
"https://github.com/Clybius/ComfyUI-Latent-Modifiers"
],
"install_type": "git-clone",
"description": "Nodes: Latent Diffusion Mega Modifier. ComfyUI nodes which modify the latent during the diffusion process. (Sharpness, Tonemap, Rescale, Extra Noise)"
},
{
"author": "mcmonkeyprojects",
"title": "Stable Diffusion Dynamic Thresholding (CFG Scale Fix)",
"reference": "https://github.com/mcmonkeyprojects/sd-dynamic-thresholding",
"files": [
"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding"
],
"install_type": "git-clone",
"description": "Extension for StableSwarmUI, ComfyUI, and AUTOMATIC1111 Stable Diffusion WebUI that enables a way to use higher CFG Scales without color issues. This works by clamping latents between steps."
},
{
"author": "Tropfchen",
"title": "YARS: Yet Another Resolution Selector",
"reference": "https://github.com/Tropfchen/ComfyUI-yaResolutionSelector",
"files": [
"https://github.com/Tropfchen/ComfyUI-yaResolutionSelector"
],
"install_type": "git-clone",
"description": "A slightly different Resolution Selector node, allowing to freely change base resolution and aspect ratio, with options to maintain the pixel count or use the base resolution as the highest or lowest dimension."
},
{
"author": "taabata",
"title": "Syrian Falcon Nodes",
@ -1980,16 +2090,6 @@
"install_type": "copy",
"description": "Nodes:LatentGarbageCollector. This ComfyUI custom node flushes the GPU cache and empty cuda interprocess memory. It's helpfull for low memory environment such as the free Google Colab, especially when the workflow VAE decode latents of the size above 1500x1500."
},
{
"author": "Clybius",
"title": "ComfyUI-Latent-Modifiers",
"reference": "https://github.com/Clybius/ComfyUI-Latent-Modifiers",
"files": [
"https://github.com/Clybius/ComfyUI-Latent-Modifiers/raw/main/sampler_mega_modifier.py"
],
"install_type": "copy",
"description": "Nodes: Latent Diffusion Mega Modifier. ComfyUI nodes which modify the latent during the diffusion process. (Sharpness, Tonemap, Rescale, Extra Noise)"
},
{
"author": "theally",
"title": "TheAlly's Custom Nodes",

View File

@ -42,9 +42,11 @@
"https://github.com/ArtVentureX/comfyui-animatediff": [
[
"AnimateDiffCombine",
"AnimateDiffLoader",
"AnimateDiffLoader_v2",
"AnimateDiffUnload"
"AnimateDiffModuleLoader",
"AnimateDiffSampler",
"AnimateDiffSlidingWindowOptions",
"ImageSizeAndBatchSize",
"LoadVideo"
],
{
"title_aux": "AnimateDiff"
@ -167,7 +169,7 @@
"title_aux": "ComfyUI_Ib_CustomNodes"
}
],
"https://github.com/Clybius/ComfyUI-Latent-Modifiers/raw/main/sampler_mega_modifier.py": [
"https://github.com/Clybius/ComfyUI-Latent-Modifiers": [
[
"Latent Diffusion Mega Modifier"
],
@ -354,6 +356,9 @@
"DWPreprocessor",
"FakeScribblePreprocessor",
"HEDPreprocessor",
"HintImageEnchance",
"ImageGenResolutionFromImage",
"ImageGenResolutionFromLatent",
"InpaintPreprocessor",
"LeReS-DepthMapPreprocessor",
"LineArtPreprocessor",
@ -366,6 +371,8 @@
"OneFormer-COCO-SemSegPreprocessor",
"OpenposePreprocessor",
"PiDiNetPreprocessor",
"PixelPerfectResolution",
"RaftOpticalFlowPreprocessor",
"SAMPreprocessor",
"ScribblePreprocessor",
"Scribble_XDoG_Preprocessor",
@ -515,12 +522,13 @@
],
"https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet": [
[
"ControlNetApplyPartialBatch",
"ControlNetLoaderAdvanced",
"CustomControlNetWeights",
"CustomT2IAdapterWeights",
"DiffControlNetLoaderAdvanced",
"LatentKeyframe",
"LatentKeyframeGroup",
"LatentKeyframeTiming",
"LoadImagesFromDirectory",
"ScaledSoftControlNetWeights",
"SoftControlNetWeights",
@ -534,8 +542,11 @@
"https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved": [
[
"ADE_AnimateDiffCombine",
"ADE_AnimateDiffLoaderLegacy",
"ADE_AnimateDiffLoaderV1Advanced",
"ADE_AnimateDiffLoaderWithContext",
"ADE_AnimateDiffUniformContextOptions",
"ADE_AnimateDiffUnload",
"ADE_EmptyLatentImageLarge",
"AnimateDiffLoaderV1",
"CheckpointLoaderSimpleWithNoiseSelect"
],
@ -800,6 +811,7 @@
"https://github.com/RockOfFire/CR_Animation_Nodes": [
[
"CR Central Schedule",
"CR Combine Schedules",
"CR Current Frame",
"CR Cycle Images",
"CR Cycle Images Simple",
@ -822,15 +834,17 @@
"CR Keyframe List",
"CR LoRA List",
"CR Load Animation Frames",
"CR Load Schedule From File",
"CR Load Scheduled ControlNets",
"CR Load Scheduled LoRAs",
"CR Load Scheduled Models",
"CR Model List",
"CR Output Schedule List",
"CR Output Schedule To File",
"CR Prompt List",
"CR Prompt List Keyframes",
"CR Prompt Text",
"CR Schedule Input Switch",
"CR Schedule To ScheduleList",
"CR Simple Prompt List",
"CR Simple Prompt List Keyframes",
"CR Simple Schedule",
@ -852,6 +866,7 @@
"CR Apply ControlNet",
"CR Apply LoRA Stack",
"CR Apply Model Merge",
"CR Apply Multi Upscale",
"CR Apply Multi-ControlNet",
"CR Aspect Ratio",
"CR Aspect Ratio SDXL",
@ -883,6 +898,7 @@
"CR Module Input",
"CR Module Output",
"CR Module Pipe Loader",
"CR Multi Upscale Stack",
"CR Multi-ControlNet Stack",
"CR Pipe Switch",
"CR Process Switch",
@ -896,7 +912,8 @@
"CR Seed to Int",
"CR Switch Model and CLIP",
"CR Text Input Switch",
"CR Text Input Switch (4 way)"
"CR Text Input Switch (4 way)",
"CR Upscale Image"
],
{
"title_aux": "ComfyUI_Comfyroll_CustomNodes"
@ -1043,7 +1060,10 @@
],
"https://github.com/TRI3D-LC/tri3d-comfyui-nodes": [
[
"tri3d-extract-hand"
"tri3d-atr-parse",
"tri3d-extract-hand",
"tri3d-fuzzification",
"tri3d-position-hands"
],
{
"title_aux": "tri3d-comfyui-nodes"
@ -1104,6 +1124,15 @@
"title_aux": "Embedding Picker"
}
],
"https://github.com/Tropfchen/ComfyUI-yaResolutionSelector": [
[
"YARS",
"YARSAdv"
],
{
"title_aux": "YARS: Yet Another Resolution Selector"
}
],
"https://github.com/Ttl/ComfyUi_NNLatentUpscale": [
[
"NNLatentUpscale"
@ -1112,14 +1141,6 @@
"title_aux": "ComfyUI Neural network latent upscale custom node"
}
],
"https://github.com/Vrahn/ComfyUI-MasaCtrl-Node": [
[
"MasaCtrl"
],
{
"title_aux": "ComfyUI-MasaCtrl-Node"
}
],
"https://github.com/WASasquatch/ComfyUI_Preset_Merger": [
[
"Preset_Model_Merge"
@ -1128,6 +1149,14 @@
"title_aux": "ComfyUI Preset Merger"
}
],
"https://github.com/WASasquatch/FreeU_Advanced": [
[
"FreeU (Advanced)"
],
{
"title_aux": "FreeU_Advanced"
}
],
"https://github.com/WASasquatch/PPF_Noise_ComfyUI": [
[
"Blend Latents (PPF Noise)",
@ -1393,7 +1422,9 @@
"https://github.com/Zuellni/ComfyUI-ExLlama": [
[
"ZuellniExLlamaGenerator",
"ZuellniExLlamaLoader"
"ZuellniExLlamaLoader",
"ZuellniExLlamaLora",
"ZuellniExLlamaPreviewer"
],
{
"title_aux": "ComfyUI-ExLlama"
@ -1437,22 +1468,32 @@
"CSV Generator [Dream]",
"Calculation [Dream]",
"Common Frame Dimensions [Dream]",
"Compare Palettes [Dream]",
"FFMPEG Video Encoder [Dream]",
"File Count [Dream]",
"Finalize Prompt [Dream]",
"Float Input [Dream]",
"Float to Log Entry [Dream]",
"Frame Count Calculator [Dream]",
"Frame Counter (Directory) [Dream]",
"Frame Counter (Simple) [Dream]",
"Frame Counter Info [Dream]",
"Frame Counter Offset [Dream]",
"Frame Counter Time Offset [Dream]",
"Image Brightness Adjustment [Dream]",
"Image Color Shift [Dream]",
"Image Contrast Adjustment [Dream]",
"Image Motion [Dream]",
"Image Sequence Blend [Dream]",
"Image Sequence Loader [Dream]",
"Image Sequence Saver [Dream]",
"Image Sequence Tweening [Dream]",
"Int Input [Dream]",
"Int to Log Entry [Dream]",
"Laboratory [Dream]",
"Linear Curve [Dream]",
"Log Entry Joiner [Dream]",
"Log File [Dream]",
"Noise from Area Palettes [Dream]",
"Noise from Palette [Dream]",
"Palette Color Align [Dream]",
@ -1463,10 +1504,13 @@
"Sine Curve [Dream]",
"Smooth Event Curve [Dream]",
"String Input [Dream]",
"String Tokenizer [Dream]",
"String to Log Entry [Dream]",
"Text Input [Dream]",
"Triangle Curve [Dream]",
"Triangle Event Curve [Dream]",
"Video Encoder (mpegCoder) [Dream]"
"Video Encoder (mpegCoder) [Dream]",
"WAV Curve [Dream]"
],
{
"title_aux": "Dream Project Animation Nodes"
@ -1535,6 +1579,8 @@
"Prompt With Style",
"Prompt With Style V2",
"Prompt With Style V3",
"Range Float",
"Range Integer",
"Ratio Advanced",
"Resize Image for SDXL",
"Save Image If True",
@ -1579,8 +1625,12 @@
"ChameleonMask",
"CheckpointLoader (dirty)",
"CheckpointLoaderSimple (dirty)",
"Color (RGB)",
"Color (hexadecimal)",
"Color Clip",
"Color Clip (advanced)",
"Color Clip ADE20k",
"ColorDictionary",
"CondList",
"Conditioning (combine multiple)",
"Conditioning (combine selective)",
@ -1591,10 +1641,15 @@
"Contours",
"ControlNetHadamard",
"ControlNetHadamard (manual)",
"ConvertImg",
"CopyMakeBorder",
"CreateRequestMetadata",
"Draw Contour(s)",
"EqualizeHistogram",
"EstimateColorInterval (hsv)",
"Filter Contour",
"FindComplementaryColor",
"FindThreshold",
"FlatLatentsIntoSingleGrid",
"Framed Mask Grab Cut",
"Framed Mask Grab Cut 2",
@ -1602,14 +1657,19 @@
"Get Models",
"Get Prompt",
"HypernetworkLoader (dirty)",
"InRange (hsv)",
"Inpaint",
"Input/String to Int Array",
"KMeansColor",
"Load 64 Encoded Image",
"LoraLoader (dirty)",
"MaskGrid N KSamplers Advanced",
"Merge Latent Batch Gridwise",
"MonoMerge",
"MorphologicOperation",
"MorphologicSkeletoning",
"OtsuThreshold",
"RGB to HSV",
"Rect Grab Cut",
"Repeat Into Grid (image)",
"Repeat Into Grid (latent)",
@ -1728,6 +1788,17 @@
"title_aux": "sc-node-comfyui"
}
],
"https://github.com/chrisgoringe/cg-noise": [
[
"Hijack",
"KSampler Advanced with Variations",
"KSampler with Variations",
"UnHijack"
],
{
"title_aux": "Variation seeds"
}
],
"https://github.com/city96/ComfyUI_DiT": [
[
"DiTCheckpointLoader",
@ -1821,7 +1892,6 @@
"https://github.com/cubiq/ComfyUI_IPAdapter_plus": [
[
"IPAdapterApply",
"IPAdapterCLIPVisionEncode",
"IPAdapterModelLoader"
],
{
@ -1837,6 +1907,26 @@
"title_aux": "Simple Math"
}
],
"https://github.com/cubiq/ComfyUI_essentials": [
[
"ConsoleDebug+",
"GetImageSize+",
"GrowShrinkMask+",
"ImageCASharpening+",
"ImageCrop+",
"ImageDesaturate+",
"ImageFlip+",
"ImagePosterize+",
"ImageResize+",
"MaskBlur+",
"MaskFlip+",
"MaskPreview+",
"SimpleMath+"
],
{
"title_aux": "ComfyUI Essentials"
}
],
"https://github.com/dagthomas/comfyui_dagthomas": [
[
"CSL",
@ -2136,6 +2226,16 @@
"title_aux": "attention-couple-ComfyUI"
}
],
"https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI": [
[
"CDTuner",
"Negapip",
"Negpip"
],
{
"title_aux": "cd-tuner_negpip-ComfyUI"
}
],
"https://github.com/laksjdjf/pfg-ComfyUI": [
[
"PFG"
@ -2273,6 +2373,7 @@
"ReencodeLatentPipe",
"RegionalPrompt",
"RegionalSampler",
"RegionalSamplerAdvanced",
"RemoveNoiseMask",
"SAMDetectorCombined",
"SAMDetectorSegmented",
@ -2316,9 +2417,14 @@
[
"Canny_Preprocessor_Provider_for_SEGS //Inspire",
"DWPreprocessor_Provider_for_SEGS //Inspire",
"FakeScribblePreprocessor_Provider_for_SEGS //Inspire",
"GlobalSeed //Inspire",
"HEDPreprocessor_Provider_for_SEGS //Inspire",
"KSampler //Inspire",
"KSamplerAdvanced //Inspire",
"LeRes_DepthMap_Preprocessor_Provider_for_SEGS //Inspire",
"LoadPromptsFromDir //Inspire",
"LoadPromptsFromFile //Inspire",
"LoraBlockInfo //Inspire",
"LoraLoaderBlockWeight //Inspire",
"MediaPipeFaceMeshDetectorProvider //Inspire",
@ -2377,6 +2483,15 @@
"title_aux": "Facerestore CF (Code Former)"
}
],
"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding": [
[
"DynamicThresholdingFull",
"DynamicThresholdingSimple"
],
{
"title_aux": "Stable Diffusion Dynamic Thresholding (CFG Scale Fix)"
}
],
"https://github.com/meap158/ComfyUI-GPU-temperature-protection": [
[
"GPUTemperatureProtection"
@ -2385,6 +2500,14 @@
"title_aux": "GPU temperature protection"
}
],
"https://github.com/meap158/ComfyUI-Prompt-Expansion": [
[
"PromptExpansion"
],
{
"title_aux": "ComfyUI-Prompt-Expansion"
}
],
"https://github.com/melMass/comfy_mtb": [
[
"Animation Builder (mtb)",
@ -2558,9 +2681,7 @@
[
"AdaptiveCannyDetector_PoP",
"AnyAspectRatio",
"ConditioningMultiplierPoP",
"ConditioningMultiplier_PoP",
"ConditioningNormalizerPoP",
"ConditioningNormalizer_PoP",
"LoadImageResizer_PoP",
"LoraStackLoader10_PoP",
@ -2608,6 +2729,21 @@
"title_aux": "A8R8 ComfyUI Nodes"
}
],
"https://github.com/receyuki/comfyui-prompt-reader-node": [
[
"SDParameterGenerator",
"SDPromptMerger",
"SDPromptReader",
"SDPromptSaver"
],
{
"author": "receyuki",
"description": "ComfyUI node version of SD Prompt Reader",
"nickname": "SD Prompt Reader",
"title": "SD Prompt Reader",
"title_aux": "comfyui-prompt-reader-node"
}
],
"https://github.com/richinsley/Comfy-LFO": [
[
"LFO_Pulse",
@ -2620,6 +2756,15 @@
"title_aux": "Comfy-LFO"
}
],
"https://github.com/rklaffehn/rk-comfy-nodes": [
[
"RK_CivitAIAddHashes",
"RK_CivitAIMetaChecker"
],
{
"title_aux": "rk-comfy-nodes"
}
],
"https://github.com/s1dlx/comfy_meh/raw/main/meh.py": [
[
"MergingExecutionHelper"
@ -2675,6 +2820,7 @@
[
"AV_CheckpointModelsToParametersPipe",
"AV_ControlNetEfficientLoader",
"AV_ControlNetEfficientLoaderAdvanced",
"AV_ControlNetEfficientStacker",
"AV_ControlNetLoader",
"AV_ControlNetPreprocessor",
@ -2688,6 +2834,7 @@
"BLIPCaption",
"ColorBlend",
"ColorCorrect",
"DeepDanbooruCaption",
"DependenciesEdit",
"Fooocus_KSampler",
"Fooocus_KSamplerAdvanced",
@ -2742,8 +2889,22 @@
"title_aux": "nui suite"
}
],
"https://github.com/spacepxl/ComfyUI-HQ-Image-Save": [
[
"LoadLatentEXR",
"SaveEXR",
"SaveLatentEXR",
"SaveTiff"
],
{
"title_aux": "ComfyUI-HQ-Image-Save"
}
],
"https://github.com/spinagon/ComfyUI-seamless-tiling": [
[
"CircularVAEDecode",
"MakeCircularVAE",
"OffsetImage",
"SeamlessTile"
],
{
@ -2836,7 +2997,10 @@
],
"https://github.com/szhublox/ambw_comfyui": [
[
"Auto Merge Block Weighted"
"Auto Merge Block Weighted",
"CLIPMergeSimple",
"ModelMergeBlocks",
"ModelMergeSimple"
],
{
"title_aux": "Auto-MBW"
@ -2910,6 +3074,25 @@
"title_aux": "Hakkun-ComfyUI-nodes"
}
],
"https://github.com/tusharbhutt/Endless-Nodes": [
[
"Endless Nodes Combo Parameterizer",
"Endless Nodes Combo Parameterizer & Prompts",
"Endless Nodes Eight Input Text Switch",
"Endless Nodes Parameterizer",
"Endless Nodes Parameterizer & Prompts",
"Endless Nodes Six Input Text Switch",
"Endless Nodes Six Integer IO Switch",
"Endless Nodes Six Integer IO Widget"
],
{
"author": "Endless Sea of Stars",
"description": "A small set of nodes I created for various numerical and text inputs.",
"nickname": "Endless Nodes",
"title": "Endless Nodes",
"title_aux": "Endless Nodes"
}
],
"https://github.com/twri/sdxl_prompt_styler": [
[
"SDXLPromptStyler",
@ -2939,6 +3122,7 @@
"CLIP Positive-Negative XL w/Text (WLSH)",
"CLIP Positive-Negative w/Text (WLSH)",
"Checkpoint Loader w/Name (WLSH)",
"Empty Latent by Pixels (WLSH)",
"Empty Latent by Ratio (WLSH)",
"Generate Edge Mask (WLSH)",
"Generate Face Mask (WLSH)",
@ -2952,6 +3136,7 @@
"Resolutions by Ratio (WLSH)",
"SDXL Quick Empty Latent (WLSH)",
"SDXL Quick Image Scale (WLSH)",
"SDXL Resolution Multiplier (WLSH)",
"SDXL Resolutions (WLSH)",
"SDXL Steps (WLSH)",
"Save Positive Prompt File (WLSH)",
@ -2969,6 +3154,7 @@
],
"https://github.com/wolfden/ComfyUi_PromptStylers": [
[
"SDXLPromptStylerAll",
"SDXLPromptStylerHorror",
"SDXLPromptStylerMisc",
"SDXLPromptStylerbyArtist",
@ -2994,11 +3180,14 @@
"SDXLPromptStylerbyTimeofDay",
"SDXLPromptStylerbyWyvern",
"SDXLPromptbyCelticArt",
"SDXLPromptbyContemporaryNordicArt",
"SDXLPromptbyFashionArt",
"SDXLPromptbyGothicRevival",
"SDXLPromptbyIrishFolkArt",
"SDXLPromptbyRomanticNationalismArt",
"SDXLPromptbySportsArt",
"SDXLPromptbyStreetArt",
"SDXLPromptbyVikingArt",
"SDXLPromptbyWildlifeArt"
],
{
@ -3050,12 +3239,20 @@
],
"https://github.com/youyegit/tdxh_node_comfyui": [
[
"TdxhBoolNumber",
"TdxhClipVison",
"TdxhControlNetApply",
"TdxhControlNetProcessor",
"TdxhFloatInput",
"TdxhImageToSize",
"TdxhImageToSizeAdvanced",
"TdxhImg2ImgLatent",
"TdxhIntInput",
"TdxhLoraLoader",
"TdxhStringInput"
"TdxhOnOrOff",
"TdxhReference",
"TdxhStringInput",
"TdxhStringInputTranslator"
],
{
"title_aux": "tdxh_node_comfyui"

View File

@ -1,6 +1,9 @@
import sys
import os
import git
import configparser
config_path = os.path.join(os.path.dirname(__file__), "config.ini")
def gitclone(custom_nodes_path, url):
repo_name = os.path.splitext(os.path.basename(url))[0]
@ -12,33 +15,38 @@ def gitclone(custom_nodes_path, url):
repo.close()
def gitcheck(path, do_fetch=False):
# Fetch the latest commits from the remote repository
repo = git.Repo(path)
try:
# Fetch the latest commits from the remote repository
repo = git.Repo(path)
current_branch = repo.active_branch
branch_name = current_branch.name
current_branch = repo.active_branch
branch_name = current_branch.name
remote_name = 'origin'
remote = repo.remote(name=remote_name)
remote_name = 'origin'
remote = repo.remote(name=remote_name)
if do_fetch:
remote.fetch()
if do_fetch:
remote.fetch()
# Get the current commit hash and the commit hash of the remote branch
commit_hash = repo.head.commit.hexsha
remote_commit_hash = repo.refs[f'{remote_name}/{branch_name}'].object.hexsha
# Get the current commit hash and the commit hash of the remote branch
commit_hash = repo.head.commit.hexsha
remote_commit_hash = repo.refs[f'{remote_name}/{branch_name}'].object.hexsha
# Compare the commit hashes to determine if the local repository is behind the remote repository
if commit_hash != remote_commit_hash:
# Get the commit dates
commit_date = repo.head.commit.committed_datetime
remote_commit_date = repo.refs[f'{remote_name}/{branch_name}'].object.committed_datetime
# Compare the commit hashes to determine if the local repository is behind the remote repository
if commit_hash != remote_commit_hash:
# Get the commit dates
commit_date = repo.head.commit.committed_datetime
remote_commit_date = repo.refs[f'{remote_name}/{branch_name}'].object.committed_datetime
# Compare the commit dates to determine if the local repository is behind the remote repository
if commit_date < remote_commit_date:
print("CUSTOM NODE CHECK: True")
else:
print("CUSTOM NODE CHECK: False")
except Exception as e:
print(e)
print("CUSTOM NODE CHECK: Error")
# Compare the commit dates to determine if the local repository is behind the remote repository
if commit_date < remote_commit_date:
print("CUSTOM NODE CHECK: True")
else:
print("CUSTOM NODE CHECK: False")
def gitpull(path):
# Check if the path is a git repository
@ -50,12 +58,34 @@ def gitpull(path):
if repo.is_dirty():
repo.git.stash()
origin = repo.remote(name='origin')
origin.pull(rebase=True)
repo.git.submodule('update', '--init', '--recursive')
commit_hash = repo.head.commit.hexsha
try:
origin = repo.remote(name='origin')
origin.pull(rebase=True)
repo.git.submodule('update', '--init', '--recursive')
new_commit_hash = repo.head.commit.hexsha
if commit_hash != new_commit_hash:
print("CUSTOM NODE PULL: True")
else:
print("CUSTOM NODE PULL: None")
except Exception as e:
print(e)
print("CUSTOM NODE PULL: False")
repo.close()
def setup_environment():
config = configparser.ConfigParser()
config.read(config_path)
if 'default' in config and 'git_exe' in config['default'] and config['default']['git_exe'] != '':
git.Git().update_environment(GIT_PYTHON_GIT_EXECUTABLE=config['default']['git_exe'])
setup_environment()
try:
if sys.argv[1] == "--clone":
gitclone(sys.argv[2], sys.argv[3])

View File

@ -5,6 +5,7 @@ import {ComfyWidgets} from "../../scripts/widgets.js";
var update_comfyui_button = null;
var fetch_updates_button = null;
var update_all_button = null;
var badge_mode = "none";
async function init_badge_mode() {
@ -214,7 +215,7 @@ async function fetchUpdates(update_check_checkbox) {
const response = await api.fetchApi(`/customnode/fetch_updates?mode=${mode}`);
if(response.status == 400) {
if(response.status != 200 && response.status != 201) {
app.ui.dialog.show('Failed to fetch updates.');
app.ui.dialog.element.style.zIndex = 9999;
return false;
@ -244,6 +245,49 @@ async function fetchUpdates(update_check_checkbox) {
}
}
async function updateAll(update_check_checkbox) {
let prev_text = update_all_button.innerText;
update_all_button.innerText = "Updating all...(ComfyUI)";
update_all_button.disabled = true;
update_all_button.style.backgroundColor = "gray";
try {
var mode = "url";
if(ManagerMenuDialog.instance.local_mode_checkbox.checked)
mode = "local";
update_all_button.innerText = "Updating all...";
const response1 = await api.fetchApi('/comfyui_manager/update_comfyui');
const response2 = await api.fetchApi(`/customnode/update_all?mode=${mode}`);
if(response1.status != 200 && response2.status != 201) {
app.ui.dialog.show('Failed to update ComfyUI or several extensions.<BR><BR>See terminal log.<BR>');
app.ui.dialog.element.style.zIndex = 9999;
return false;
}
if(response1.status == 201 || response2.status == 201) {
app.ui.dialog.show('ComfyUI and all extensions have been updated to the latest version.');
app.ui.dialog.element.style.zIndex = 9999;
}
else {
app.ui.dialog.show('ComfyUI and all extensions are already up-to-date with the latest versions.');
app.ui.dialog.element.style.zIndex = 9999;
}
return true;
}
catch(exception) {
app.ui.dialog.show(`Failed to update ComfyUI or several extensions / ${exception}`);
app.ui.dialog.element.style.zIndex = 9999;
return false;
}
finally {
update_all_button.disabled = false;
update_all_button.innerText = prev_text;
update_all_button.style.backgroundColor = "";
}
}
async function install_model(target) {
if(ModelInstaller.instance) {
ModelInstaller.instance.startInstall(target);
@ -1768,6 +1812,14 @@ class ManagerMenuDialog extends ComfyDialog {
() => fetchUpdates(this.update_check_checkbox)
});
update_all_button =
$el("button", {
type: "button",
textContent: "Update All",
onclick:
() => updateAll(this.update_check_checkbox)
});
// preview method
let preview_combo = document.createElement("select");
preview_combo.appendChild($el('option', {value:'auto', text:'Preview method: Auto'}, []));
@ -1864,6 +1916,7 @@ class ManagerMenuDialog extends ComfyDialog {
}),
$el("br", {}, []),
update_all_button,
update_comfyui_button,
fetch_updates_button,
@ -1948,7 +2001,7 @@ app.registerExtension({
nodeType.prototype.onDrawForeground = function (ctx) {
const r = onDrawForeground?.apply?.(this, arguments);
if(!this.flags.collapsed && badge_mode != 'none' && this.size[1] > LiteGraph.NODE_TITLE_HEIGHT) {
if(!this.flags.collapsed && badge_mode != 'none' && nodeType.title_mode != LiteGraph.NO_TITLE) {
let text = "";
if(badge_mode == 'id_nick')
text = `#${this.id} `;

View File

@ -10,6 +10,16 @@
],
"install_type": "git-clone",
"description": "A LaMa prerocessor for ComfyUi. You can find the processor in image/processors. <p style='background-color: black; color: red;'>NOTE: BEWARE THIS EXTENSION IS NOT FINISHED YET. At the moment it returns a preprocessed image that still needs to be injected with a custom controlnet implementation(missing)</p>"
},
{
"author": "Dr.Lt.Data",
"title": "ComfyUI-Workflow-Component [WIP]",
"reference": "https://github.com/ltdrdata/ComfyUI-Workflow-Component",
"files": [
"https://github.com/ltdrdata/ComfyUI-Workflow-Component"
],
"install_type": "git-clone",
"description": "This extension provides the capability to use ComfyUI Workflow as a component and the ability to use the Image Refiner functionality based on components. NOTE: This is an experimental extension feature with no consideration for backward compatibility and can be highly unstable."
}
]
}

View File

@ -1,5 +1,125 @@
{
"custom_nodes": [
{
"author": "WASasquatch",
"title": "FreeU_Advanced",
"reference": "https://github.com/WASasquatch/FreeU_Advanced",
"files": [
"https://github.com/WASasquatch/FreeU_Advanced"
],
"install_type": "git-clone",
"description": "This custom node provides advanced settings for FreeU."
},
{
"author": "Tropfchen",
"title": "YARS: Yet Another Resolution Selector",
"reference": "https://github.com/Tropfchen/ComfyUI-yaResolutionSelector",
"files": [
"https://github.com/Tropfchen/ComfyUI-yaResolutionSelector"
],
"install_type": "git-clone",
"description": "A slightly different Resolution Selector node, allowing to freely change base resolution and aspect ratio, with options to maintain the pixel count or use the base resolution as the highest or lowest dimension."
},
{
"author": "mcmonkeyprojects",
"title": "Stable Diffusion Dynamic Thresholding (CFG Scale Fix)",
"reference": "https://github.com/mcmonkeyprojects/sd-dynamic-thresholding",
"files": [
"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding"
],
"install_type": "git-clone",
"description": "Extension for StableSwarmUI, ComfyUI, and AUTOMATIC1111 Stable Diffusion WebUI that enables a way to use higher CFG Scales without color issues. This works by clamping latents between steps."
},
{
"author": "cubiq",
"title": "ComfyUI Essentials",
"reference": "https://github.com/cubiq/ComfyUI_essentials",
"files": [
"https://github.com/cubiq/ComfyUI_essentials"
],
"install_type": "git-clone",
"description": "Essential nodes that are weirdly missing from ComfyUI core. With few exceptions they are new features and not commodities. I hope this will be just a temporary repository until the nodes get included into ComfyUI."
},
{
"author": "laksjdjf",
"title": "cd-tuner_negpip-ComfyUI",
"reference": "https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI",
"files": [
"https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI"
],
"install_type": "git-clone",
"description": "Nodes:Apply CDTuner, Apply Negapip. This extension provides the <a href='https://github.com/hako-mikan/sd-webui-cd-tuner' target='blank'>CD(Color/Detail) Tuner</a> and the <a href='https://github.com/hako-mikan/sd-webui-negpip' target='blank'>Negative Prompt in the Prompt</a>features."
},
{
"author": "PTA",
"title": "auto nodes layout",
"reference": "https://github.com/phineas-pta/comfyui-auto-nodes-layout",
"files": [
"https://github.com/phineas-pta/comfyui-auto-nodes-layout"
],
"install_type": "git-clone",
"description": "A ComfyUI extension to apply better nodes layout algorithm to ComfyUI workflow (mostly for visualization purpose)"
},
{
"author": "rklaffehn",
"title": "rk-comfy-nodes",
"reference": "https://github.com/rklaffehn/rk-comfy-nodes",
"files": [
"https://github.com/rklaffehn/rk-comfy-nodes"
],
"install_type": "git-clone",
"description": "Nodes: RK_CivitAIMetaChecker, RK_CivitAIAddHashes."
},
{
"author": "receyuki",
"title": "comfyui-prompt-reader-node",
"reference": "https://github.com/receyuki/comfyui-prompt-reader-node",
"files": [
"https://github.com/receyuki/comfyui-prompt-reader-node"
],
"install_type": "git-clone",
"description": "Nodes: SDPromptReader"
},
{
"author": "spacepxl",
"title": "ComfyUI-HQ-Image-Save",
"reference": "https://github.com/spacepxl/ComfyUI-HQ-Image-Save",
"files": [
"https://github.com/spacepxl/ComfyUI-HQ-Image-Save"
],
"install_type": "git-clone",
"description": "Add Image Save nodes for TIFF 16 bit and EXR 32 bit formats. Probably only useful if you're applying a LUT or other color corrections, and care about preserving as much color accuracy as possible."
},
{
"author": "meap158",
"title": "ComfyUI-Prompt-Expansion",
"reference": "https://github.com/meap158/ComfyUI-Prompt-Expansion",
"files": [
"https://github.com/meap158/ComfyUI-Prompt-Expansion"
],
"install_type": "git-clone",
"description": "Dynamic prompt expansion, powered by GPT-2 locally on your device."
},
{
"author": "tusharbhutt",
"title": "Endless Nodes",
"reference": "https://github.com/tusharbhutt/Endless-Nodes",
"files": [
"https://github.com/tusharbhutt/Endless-Nodes"
],
"install_type": "git-clone",
"description": "A small set of nodes I created for various numerical and text inputs and outputs."
},
{
"author": "chrisgoringe",
"title": "Variation seeds",
"reference": "https://github.com/chrisgoringe/cg-noise",
"files": [
"https://github.com/chrisgoringe/cg-noise"
],
"install_type": "git-clone",
"description": "Adds KSampler custom nodes with variation seed and variation strength."
},
{
"author": "spinagon",
"title": "Seamless tiling Node for ComfyUI",
@ -106,9 +226,9 @@
"title": "ComfyUI-Latent-Modifiers",
"reference": "https://github.com/Clybius/ComfyUI-Latent-Modifiers",
"files": [
"https://github.com/Clybius/ComfyUI-Latent-Modifiers/raw/main/sampler_mega_modifier.py"
"https://github.com/Clybius/ComfyUI-Latent-Modifiers"
],
"install_type": "copy",
"install_type": "git-clone",
"description": "Nodes: Latent Diffusion Mega Modifier. ComfyUI nodes which modify the latent during the diffusion process. (Sharpness, Tonemap, Rescale, Extra Noise)"
},
{
@ -361,26 +481,6 @@
"install_type": "git-clone",
"description": "Nodes:Attention couple. This is a custom node that manipulates region-specific prompts. While vanilla ComfyUI employs an area specification method based on latent couples, this node divides regions using attention layers within UNet."
},
{
"author": "Tropfchen",
"title": "Embedding Picker",
"reference": "https://github.com/Tropfchen/ComfyUI-Embedding_Picker",
"files": [
"https://github.com/Tropfchen/ComfyUI-Embedding_Picker"
],
"install_type": "git-clone",
"description": "Nodes: Embedding Picker. Tired of forgetting and misspelling often weird names of embeddings you use? Or perhaps you use only one, cause you forgot you have tens of them installed? Try this."
},
{
"author": "Vrahn",
"title": "ComfyUI-MasaCtrl-Node",
"reference": "https://github.com/Vrahn/ComfyUI-MasaCtrl-Node",
"files": [
"https://github.com/Vrahn/ComfyUI-MasaCtrl-Node"
],
"install_type": "git-clone",
"description": "Nodes: MasaCtrl."
},
{
"author": "spro",
"title": "Latent Mirror node for ComfyUI",
@ -700,207 +800,6 @@
],
"install_type": "git-clone",
"description": "Nodes: KSampler With Refiner (Fooocus). The KSampler from <a href='https://github.com/lllyasviel/Fooocus' target='blank'>Fooocus</a> as a ComfyUI node <p style='background-color: black; color: red;'>NOTE: This patches basic ComfyUI behaviour - don't use together with other samplers. Or perhaps do? Other samplers might profit from those changes ... ymmv.</p>"
},
{
"author": "city96",
"title": "SD-Latent-Upscaler",
"reference": "https://github.com/city96/SD-Latent-Upscaler",
"files": [
"https://github.com/city96/SD-Latent-Upscaler"
],
"pip": ["huggingface-hub"],
"install_type": "git-clone",
"description": "Upscaling stable diffusion latents using a small neural network."
},
{
"author": "JPS-GER",
"title": "JPS Custom Nodes for ComfyUI",
"reference": "https://github.com/JPS-GER/ComfyUI_JPS-Nodes",
"files": [
"https://github.com/JPS-GER/ComfyUI_JPS-Nodes"
],
"install_type": "git-clone",
"description": "Nodes: SDXL - Resolutions, SDXL - Basic Settings, SDXL - Additional Settings, Math - Resolution Multiply, Math - Largest Integer, Switch - Generation Mode, ..."
},
{
"author": "hustille",
"title": "hus' utils for ComfyUI",
"reference": "https://github.com/hustille/ComfyUI_hus_utils",
"files": [
"https://github.com/hustille/ComfyUI_hus_utils"
],
"install_type": "git-clone",
"description": "ComfyUI nodes primarily for seed and filename generation"
},
{
"author": "m-sokes",
"title": "ComfyUI Sokes Nodes",
"reference": "https://github.com/m-sokes/ComfyUI-Sokes-Nodes",
"files": [
"https://github.com/m-sokes/ComfyUI-Sokes-Nodes"
],
"install_type": "git-clone",
"description": "Nodes: Empty Latent Randomizer (9 Inputs)"
},
{
"author": "Extraltodeus",
"title": "noise latent perlinpinpin",
"reference": "https://github.com/Extraltodeus/noise_latent_perlinpinpin",
"files": [
"https://github.com/Extraltodeus/noise_latent_perlinpinpin"
],
"install_type": "git-clone",
"description": "Nodes: NoisyLatentPerlin. This allows to create latent spaces filled with perlin-based noise that can actually be used by the samplers."
},
{
"author": "theUpsider",
"title": "ComfyUI-Logic",
"reference": "https://github.com/theUpsider/ComfyUI-Logic",
"files": [
"https://github.com/theUpsider/ComfyUI-Logic"
],
"install_type": "git-clone",
"description": "An extension to ComfyUI that introduces logic nodes and conditional rendering capabilities."
},
{
"author": "tkoenig89",
"title": "Load Image with metadata",
"reference": "https://github.com/tkoenig89/ComfyUI_Load_Image_With_Metadata",
"files": [
"https://github.com/tkoenig89/ComfyUI_Load_Image_With_Metadata"
],
"install_type": "git-clone",
"description": "A custom node for comfy ui to read generation data from images (prompt, seed, size...). This could be used when upscaling generated images to use the original prompt and seed."
},
{
"author": "mpiquero7164",
"title": "SaveImgPrompt",
"reference": "https://github.com/mpiquero7164/ComfyUI-SaveImgPrompt",
"files": [
"https://github.com/mpiquero7164/ComfyUI-SaveImgPrompt"
],
"install_type": "git-clone",
"description": "Save a png or jpeg and option to save prompt/workflow in a text or json file for each image in Comfy + Workflow loading."
},
{
"author": "city96",
"title": "SD-Advanced-Noise",
"reference": "https://github.com/city96/SD-Advanced-Noise",
"files": [
"https://github.com/city96/SD-Advanced-Noise"
],
"install_type": "git-clone",
"description": "Nodes: LatentGaussianNoise, MathEncode. An experimental custom node that generates latent noise directly by utilizing the linear characteristics of the latent space."
},
{
"author": "WASasquatch",
"title": "ComfyUI Preset Merger",
"reference": "https://github.com/WASasquatch/ComfyUI_Preset_Merger",
"files": [
"https://github.com/WASasquatch/ComfyUI_Preset_Merger"
],
"install_type": "git-clone",
"description": "Nodes: ModelMergeByPreset. Merge checkpoint models by preset"
},
{
"author": "jamesWalker55",
"title": "Various ComfyUI Nodes by Type",
"reference": "https://github.com/jamesWalker55/comfyui-various",
"files": [
"https://github.com/jamesWalker55/comfyui-various"
],
"install_type": "git-clone",
"description": "Nodes: JWInteger, JWFloat, JWString, JWImageLoadRGB, JWImageResize, ..."
},
{
"author": "NicholasMcCarthy",
"title": "ComfyUI_TravelSuite",
"reference": "https://github.com/NicholasMcCarthy/ComfyUI_TravelSuite",
"files": [
"https://github.com/NicholasMcCarthy/ComfyUI_TravelSuite"
],
"install_type": "git-clone",
"description": "ComfyUI custom nodes to apply various latent travel techniques."
},
{
"author": "ManglerFTW",
"title": "ComfyI2I",
"reference": "https://github.com/ManglerFTW/ComfyI2I",
"files": [
"https://github.com/ManglerFTW/ComfyI2I"
],
"install_type": "git-clone",
"description": "A set of custom nodes to perform image 2 image functions in ComfyUI."
},
{
"author": "city96",
"title": "Latent-Interposer",
"reference": "https://github.com/city96/SD-Latent-Interposer",
"files": [
"https://github.com/city96/SD-Latent-Interposer"
],
"install_type": "git-clone",
"description": "Custom node to convert the lantents between SDXL and SD v1.5 directly without the VAE decoding/encoding step."
},
{
"author": "coreyryanhanson",
"title": "ComfyQR",
"reference": "https://github.com/coreyryanhanson/ComfyQR",
"files": [
"https://github.com/coreyryanhanson/ComfyQR"
],
"install_type": "git-clone",
"description": "QR generation within ComfyUI. Contains nodes suitable for workflows from generating basic QR images to techniques with advanced QR masking."
},
{
"author": "uarefans",
"title": "ComfyUI-Fans",
"reference": "https://github.com/uarefans/ComfyUI-Fans",
"files": [
"https://github.com/uarefans/ComfyUI-Fans"
],
"install_type": "git-clone",
"description": "Nodes: Fans Styler (Max 10 Style), Fans Text Concat (Until 10 text)."
},
{
"author": "theUpsider",
"title": "Styles CSV Loader Extension for ComfyUI",
"reference": "https://github.com/theUpsider/ComfyUI-Styles_CSV_Loader",
"files": [
"https://github.com/theUpsider/ComfyUI-Styles_CSV_Loader"
],
"install_type": "git-clone",
"description": "This extension allows users to load styles from a CSV file, primarily for migration purposes from the automatic1111 Stable Diffusion web UI."
},
{
"author": "M1kep",
"title": "ComfyLiterals",
"reference": "https://github.com/M1kep/ComfyLiterals",
"files": [
"https://github.com/M1kep/ComfyLiterals"
],
"install_type": "git-clone",
"description": "Nodes: Int, Float, String, Operation, Checkpoint"
},
{
"author": "dimtoneff",
"title": "ComfyUI PixelArt Detector",
"reference": "https://github.com/dimtoneff/ComfyUI-PixelArt-Detector",
"files": [
"https://github.com/dimtoneff/ComfyUI-PixelArt-Detector"
],
"install_type": "git-clone",
"description": "This node manipulates the pixel art image in ways that it should look pixel perfect (downscales, changes palette, upscales etc.)."
},
{
"author": "dimtoneff",
"title": "Eagle PNGInfo",
"reference": "https://github.com/hylarucoder/ComfyUI-Eagle-PNGInfo",
"files": [
"https://github.com/hylarucoder/ComfyUI-Eagle-PNGInfo"
],
"install_type": "git-clone",
"description": "Nodes: EagleImageNode"
}
]
}

View File

@ -42,9 +42,11 @@
"https://github.com/ArtVentureX/comfyui-animatediff": [
[
"AnimateDiffCombine",
"AnimateDiffLoader",
"AnimateDiffLoader_v2",
"AnimateDiffUnload"
"AnimateDiffModuleLoader",
"AnimateDiffSampler",
"AnimateDiffSlidingWindowOptions",
"ImageSizeAndBatchSize",
"LoadVideo"
],
{
"title_aux": "AnimateDiff"
@ -167,7 +169,7 @@
"title_aux": "ComfyUI_Ib_CustomNodes"
}
],
"https://github.com/Clybius/ComfyUI-Latent-Modifiers/raw/main/sampler_mega_modifier.py": [
"https://github.com/Clybius/ComfyUI-Latent-Modifiers": [
[
"Latent Diffusion Mega Modifier"
],
@ -354,6 +356,9 @@
"DWPreprocessor",
"FakeScribblePreprocessor",
"HEDPreprocessor",
"HintImageEnchance",
"ImageGenResolutionFromImage",
"ImageGenResolutionFromLatent",
"InpaintPreprocessor",
"LeReS-DepthMapPreprocessor",
"LineArtPreprocessor",
@ -366,6 +371,8 @@
"OneFormer-COCO-SemSegPreprocessor",
"OpenposePreprocessor",
"PiDiNetPreprocessor",
"PixelPerfectResolution",
"RaftOpticalFlowPreprocessor",
"SAMPreprocessor",
"ScribblePreprocessor",
"Scribble_XDoG_Preprocessor",
@ -515,12 +522,13 @@
],
"https://github.com/Kosinkadink/ComfyUI-Advanced-ControlNet": [
[
"ControlNetApplyPartialBatch",
"ControlNetLoaderAdvanced",
"CustomControlNetWeights",
"CustomT2IAdapterWeights",
"DiffControlNetLoaderAdvanced",
"LatentKeyframe",
"LatentKeyframeGroup",
"LatentKeyframeTiming",
"LoadImagesFromDirectory",
"ScaledSoftControlNetWeights",
"SoftControlNetWeights",
@ -534,8 +542,11 @@
"https://github.com/Kosinkadink/ComfyUI-AnimateDiff-Evolved": [
[
"ADE_AnimateDiffCombine",
"ADE_AnimateDiffLoaderLegacy",
"ADE_AnimateDiffLoaderV1Advanced",
"ADE_AnimateDiffLoaderWithContext",
"ADE_AnimateDiffUniformContextOptions",
"ADE_AnimateDiffUnload",
"ADE_EmptyLatentImageLarge",
"AnimateDiffLoaderV1",
"CheckpointLoaderSimpleWithNoiseSelect"
],
@ -800,6 +811,7 @@
"https://github.com/RockOfFire/CR_Animation_Nodes": [
[
"CR Central Schedule",
"CR Combine Schedules",
"CR Current Frame",
"CR Cycle Images",
"CR Cycle Images Simple",
@ -822,15 +834,17 @@
"CR Keyframe List",
"CR LoRA List",
"CR Load Animation Frames",
"CR Load Schedule From File",
"CR Load Scheduled ControlNets",
"CR Load Scheduled LoRAs",
"CR Load Scheduled Models",
"CR Model List",
"CR Output Schedule List",
"CR Output Schedule To File",
"CR Prompt List",
"CR Prompt List Keyframes",
"CR Prompt Text",
"CR Schedule Input Switch",
"CR Schedule To ScheduleList",
"CR Simple Prompt List",
"CR Simple Prompt List Keyframes",
"CR Simple Schedule",
@ -852,6 +866,7 @@
"CR Apply ControlNet",
"CR Apply LoRA Stack",
"CR Apply Model Merge",
"CR Apply Multi Upscale",
"CR Apply Multi-ControlNet",
"CR Aspect Ratio",
"CR Aspect Ratio SDXL",
@ -883,6 +898,7 @@
"CR Module Input",
"CR Module Output",
"CR Module Pipe Loader",
"CR Multi Upscale Stack",
"CR Multi-ControlNet Stack",
"CR Pipe Switch",
"CR Process Switch",
@ -896,7 +912,8 @@
"CR Seed to Int",
"CR Switch Model and CLIP",
"CR Text Input Switch",
"CR Text Input Switch (4 way)"
"CR Text Input Switch (4 way)",
"CR Upscale Image"
],
{
"title_aux": "ComfyUI_Comfyroll_CustomNodes"
@ -1043,7 +1060,10 @@
],
"https://github.com/TRI3D-LC/tri3d-comfyui-nodes": [
[
"tri3d-extract-hand"
"tri3d-atr-parse",
"tri3d-extract-hand",
"tri3d-fuzzification",
"tri3d-position-hands"
],
{
"title_aux": "tri3d-comfyui-nodes"
@ -1104,6 +1124,15 @@
"title_aux": "Embedding Picker"
}
],
"https://github.com/Tropfchen/ComfyUI-yaResolutionSelector": [
[
"YARS",
"YARSAdv"
],
{
"title_aux": "YARS: Yet Another Resolution Selector"
}
],
"https://github.com/Ttl/ComfyUi_NNLatentUpscale": [
[
"NNLatentUpscale"
@ -1112,14 +1141,6 @@
"title_aux": "ComfyUI Neural network latent upscale custom node"
}
],
"https://github.com/Vrahn/ComfyUI-MasaCtrl-Node": [
[
"MasaCtrl"
],
{
"title_aux": "ComfyUI-MasaCtrl-Node"
}
],
"https://github.com/WASasquatch/ComfyUI_Preset_Merger": [
[
"Preset_Model_Merge"
@ -1128,6 +1149,14 @@
"title_aux": "ComfyUI Preset Merger"
}
],
"https://github.com/WASasquatch/FreeU_Advanced": [
[
"FreeU (Advanced)"
],
{
"title_aux": "FreeU_Advanced"
}
],
"https://github.com/WASasquatch/PPF_Noise_ComfyUI": [
[
"Blend Latents (PPF Noise)",
@ -1393,7 +1422,9 @@
"https://github.com/Zuellni/ComfyUI-ExLlama": [
[
"ZuellniExLlamaGenerator",
"ZuellniExLlamaLoader"
"ZuellniExLlamaLoader",
"ZuellniExLlamaLora",
"ZuellniExLlamaPreviewer"
],
{
"title_aux": "ComfyUI-ExLlama"
@ -1437,22 +1468,32 @@
"CSV Generator [Dream]",
"Calculation [Dream]",
"Common Frame Dimensions [Dream]",
"Compare Palettes [Dream]",
"FFMPEG Video Encoder [Dream]",
"File Count [Dream]",
"Finalize Prompt [Dream]",
"Float Input [Dream]",
"Float to Log Entry [Dream]",
"Frame Count Calculator [Dream]",
"Frame Counter (Directory) [Dream]",
"Frame Counter (Simple) [Dream]",
"Frame Counter Info [Dream]",
"Frame Counter Offset [Dream]",
"Frame Counter Time Offset [Dream]",
"Image Brightness Adjustment [Dream]",
"Image Color Shift [Dream]",
"Image Contrast Adjustment [Dream]",
"Image Motion [Dream]",
"Image Sequence Blend [Dream]",
"Image Sequence Loader [Dream]",
"Image Sequence Saver [Dream]",
"Image Sequence Tweening [Dream]",
"Int Input [Dream]",
"Int to Log Entry [Dream]",
"Laboratory [Dream]",
"Linear Curve [Dream]",
"Log Entry Joiner [Dream]",
"Log File [Dream]",
"Noise from Area Palettes [Dream]",
"Noise from Palette [Dream]",
"Palette Color Align [Dream]",
@ -1463,10 +1504,13 @@
"Sine Curve [Dream]",
"Smooth Event Curve [Dream]",
"String Input [Dream]",
"String Tokenizer [Dream]",
"String to Log Entry [Dream]",
"Text Input [Dream]",
"Triangle Curve [Dream]",
"Triangle Event Curve [Dream]",
"Video Encoder (mpegCoder) [Dream]"
"Video Encoder (mpegCoder) [Dream]",
"WAV Curve [Dream]"
],
{
"title_aux": "Dream Project Animation Nodes"
@ -1535,6 +1579,8 @@
"Prompt With Style",
"Prompt With Style V2",
"Prompt With Style V3",
"Range Float",
"Range Integer",
"Ratio Advanced",
"Resize Image for SDXL",
"Save Image If True",
@ -1579,8 +1625,12 @@
"ChameleonMask",
"CheckpointLoader (dirty)",
"CheckpointLoaderSimple (dirty)",
"Color (RGB)",
"Color (hexadecimal)",
"Color Clip",
"Color Clip (advanced)",
"Color Clip ADE20k",
"ColorDictionary",
"CondList",
"Conditioning (combine multiple)",
"Conditioning (combine selective)",
@ -1591,10 +1641,15 @@
"Contours",
"ControlNetHadamard",
"ControlNetHadamard (manual)",
"ConvertImg",
"CopyMakeBorder",
"CreateRequestMetadata",
"Draw Contour(s)",
"EqualizeHistogram",
"EstimateColorInterval (hsv)",
"Filter Contour",
"FindComplementaryColor",
"FindThreshold",
"FlatLatentsIntoSingleGrid",
"Framed Mask Grab Cut",
"Framed Mask Grab Cut 2",
@ -1602,14 +1657,19 @@
"Get Models",
"Get Prompt",
"HypernetworkLoader (dirty)",
"InRange (hsv)",
"Inpaint",
"Input/String to Int Array",
"KMeansColor",
"Load 64 Encoded Image",
"LoraLoader (dirty)",
"MaskGrid N KSamplers Advanced",
"Merge Latent Batch Gridwise",
"MonoMerge",
"MorphologicOperation",
"MorphologicSkeletoning",
"OtsuThreshold",
"RGB to HSV",
"Rect Grab Cut",
"Repeat Into Grid (image)",
"Repeat Into Grid (latent)",
@ -1728,6 +1788,17 @@
"title_aux": "sc-node-comfyui"
}
],
"https://github.com/chrisgoringe/cg-noise": [
[
"Hijack",
"KSampler Advanced with Variations",
"KSampler with Variations",
"UnHijack"
],
{
"title_aux": "Variation seeds"
}
],
"https://github.com/city96/ComfyUI_DiT": [
[
"DiTCheckpointLoader",
@ -1821,7 +1892,6 @@
"https://github.com/cubiq/ComfyUI_IPAdapter_plus": [
[
"IPAdapterApply",
"IPAdapterCLIPVisionEncode",
"IPAdapterModelLoader"
],
{
@ -1837,6 +1907,26 @@
"title_aux": "Simple Math"
}
],
"https://github.com/cubiq/ComfyUI_essentials": [
[
"ConsoleDebug+",
"GetImageSize+",
"GrowShrinkMask+",
"ImageCASharpening+",
"ImageCrop+",
"ImageDesaturate+",
"ImageFlip+",
"ImagePosterize+",
"ImageResize+",
"MaskBlur+",
"MaskFlip+",
"MaskPreview+",
"SimpleMath+"
],
{
"title_aux": "ComfyUI Essentials"
}
],
"https://github.com/dagthomas/comfyui_dagthomas": [
[
"CSL",
@ -2136,6 +2226,16 @@
"title_aux": "attention-couple-ComfyUI"
}
],
"https://github.com/laksjdjf/cd-tuner_negpip-ComfyUI": [
[
"CDTuner",
"Negapip",
"Negpip"
],
{
"title_aux": "cd-tuner_negpip-ComfyUI"
}
],
"https://github.com/laksjdjf/pfg-ComfyUI": [
[
"PFG"
@ -2273,6 +2373,7 @@
"ReencodeLatentPipe",
"RegionalPrompt",
"RegionalSampler",
"RegionalSamplerAdvanced",
"RemoveNoiseMask",
"SAMDetectorCombined",
"SAMDetectorSegmented",
@ -2316,9 +2417,14 @@
[
"Canny_Preprocessor_Provider_for_SEGS //Inspire",
"DWPreprocessor_Provider_for_SEGS //Inspire",
"FakeScribblePreprocessor_Provider_for_SEGS //Inspire",
"GlobalSeed //Inspire",
"HEDPreprocessor_Provider_for_SEGS //Inspire",
"KSampler //Inspire",
"KSamplerAdvanced //Inspire",
"LeRes_DepthMap_Preprocessor_Provider_for_SEGS //Inspire",
"LoadPromptsFromDir //Inspire",
"LoadPromptsFromFile //Inspire",
"LoraBlockInfo //Inspire",
"LoraLoaderBlockWeight //Inspire",
"MediaPipeFaceMeshDetectorProvider //Inspire",
@ -2377,6 +2483,15 @@
"title_aux": "Facerestore CF (Code Former)"
}
],
"https://github.com/mcmonkeyprojects/sd-dynamic-thresholding": [
[
"DynamicThresholdingFull",
"DynamicThresholdingSimple"
],
{
"title_aux": "Stable Diffusion Dynamic Thresholding (CFG Scale Fix)"
}
],
"https://github.com/meap158/ComfyUI-GPU-temperature-protection": [
[
"GPUTemperatureProtection"
@ -2385,6 +2500,14 @@
"title_aux": "GPU temperature protection"
}
],
"https://github.com/meap158/ComfyUI-Prompt-Expansion": [
[
"PromptExpansion"
],
{
"title_aux": "ComfyUI-Prompt-Expansion"
}
],
"https://github.com/melMass/comfy_mtb": [
[
"Animation Builder (mtb)",
@ -2558,9 +2681,7 @@
[
"AdaptiveCannyDetector_PoP",
"AnyAspectRatio",
"ConditioningMultiplierPoP",
"ConditioningMultiplier_PoP",
"ConditioningNormalizerPoP",
"ConditioningNormalizer_PoP",
"LoadImageResizer_PoP",
"LoraStackLoader10_PoP",
@ -2608,6 +2729,21 @@
"title_aux": "A8R8 ComfyUI Nodes"
}
],
"https://github.com/receyuki/comfyui-prompt-reader-node": [
[
"SDParameterGenerator",
"SDPromptMerger",
"SDPromptReader",
"SDPromptSaver"
],
{
"author": "receyuki",
"description": "ComfyUI node version of SD Prompt Reader",
"nickname": "SD Prompt Reader",
"title": "SD Prompt Reader",
"title_aux": "comfyui-prompt-reader-node"
}
],
"https://github.com/richinsley/Comfy-LFO": [
[
"LFO_Pulse",
@ -2620,6 +2756,15 @@
"title_aux": "Comfy-LFO"
}
],
"https://github.com/rklaffehn/rk-comfy-nodes": [
[
"RK_CivitAIAddHashes",
"RK_CivitAIMetaChecker"
],
{
"title_aux": "rk-comfy-nodes"
}
],
"https://github.com/s1dlx/comfy_meh/raw/main/meh.py": [
[
"MergingExecutionHelper"
@ -2675,6 +2820,7 @@
[
"AV_CheckpointModelsToParametersPipe",
"AV_ControlNetEfficientLoader",
"AV_ControlNetEfficientLoaderAdvanced",
"AV_ControlNetEfficientStacker",
"AV_ControlNetLoader",
"AV_ControlNetPreprocessor",
@ -2688,6 +2834,7 @@
"BLIPCaption",
"ColorBlend",
"ColorCorrect",
"DeepDanbooruCaption",
"DependenciesEdit",
"Fooocus_KSampler",
"Fooocus_KSamplerAdvanced",
@ -2742,8 +2889,22 @@
"title_aux": "nui suite"
}
],
"https://github.com/spacepxl/ComfyUI-HQ-Image-Save": [
[
"LoadLatentEXR",
"SaveEXR",
"SaveLatentEXR",
"SaveTiff"
],
{
"title_aux": "ComfyUI-HQ-Image-Save"
}
],
"https://github.com/spinagon/ComfyUI-seamless-tiling": [
[
"CircularVAEDecode",
"MakeCircularVAE",
"OffsetImage",
"SeamlessTile"
],
{
@ -2836,7 +2997,10 @@
],
"https://github.com/szhublox/ambw_comfyui": [
[
"Auto Merge Block Weighted"
"Auto Merge Block Weighted",
"CLIPMergeSimple",
"ModelMergeBlocks",
"ModelMergeSimple"
],
{
"title_aux": "Auto-MBW"
@ -2910,6 +3074,25 @@
"title_aux": "Hakkun-ComfyUI-nodes"
}
],
"https://github.com/tusharbhutt/Endless-Nodes": [
[
"Endless Nodes Combo Parameterizer",
"Endless Nodes Combo Parameterizer & Prompts",
"Endless Nodes Eight Input Text Switch",
"Endless Nodes Parameterizer",
"Endless Nodes Parameterizer & Prompts",
"Endless Nodes Six Input Text Switch",
"Endless Nodes Six Integer IO Switch",
"Endless Nodes Six Integer IO Widget"
],
{
"author": "Endless Sea of Stars",
"description": "A small set of nodes I created for various numerical and text inputs.",
"nickname": "Endless Nodes",
"title": "Endless Nodes",
"title_aux": "Endless Nodes"
}
],
"https://github.com/twri/sdxl_prompt_styler": [
[
"SDXLPromptStyler",
@ -2939,6 +3122,7 @@
"CLIP Positive-Negative XL w/Text (WLSH)",
"CLIP Positive-Negative w/Text (WLSH)",
"Checkpoint Loader w/Name (WLSH)",
"Empty Latent by Pixels (WLSH)",
"Empty Latent by Ratio (WLSH)",
"Generate Edge Mask (WLSH)",
"Generate Face Mask (WLSH)",
@ -2952,6 +3136,7 @@
"Resolutions by Ratio (WLSH)",
"SDXL Quick Empty Latent (WLSH)",
"SDXL Quick Image Scale (WLSH)",
"SDXL Resolution Multiplier (WLSH)",
"SDXL Resolutions (WLSH)",
"SDXL Steps (WLSH)",
"Save Positive Prompt File (WLSH)",
@ -2969,6 +3154,7 @@
],
"https://github.com/wolfden/ComfyUi_PromptStylers": [
[
"SDXLPromptStylerAll",
"SDXLPromptStylerHorror",
"SDXLPromptStylerMisc",
"SDXLPromptStylerbyArtist",
@ -2994,11 +3180,14 @@
"SDXLPromptStylerbyTimeofDay",
"SDXLPromptStylerbyWyvern",
"SDXLPromptbyCelticArt",
"SDXLPromptbyContemporaryNordicArt",
"SDXLPromptbyFashionArt",
"SDXLPromptbyGothicRevival",
"SDXLPromptbyIrishFolkArt",
"SDXLPromptbyRomanticNationalismArt",
"SDXLPromptbySportsArt",
"SDXLPromptbyStreetArt",
"SDXLPromptbyVikingArt",
"SDXLPromptbyWildlifeArt"
],
{
@ -3050,12 +3239,20 @@
],
"https://github.com/youyegit/tdxh_node_comfyui": [
[
"TdxhBoolNumber",
"TdxhClipVison",
"TdxhControlNetApply",
"TdxhControlNetProcessor",
"TdxhFloatInput",
"TdxhImageToSize",
"TdxhImageToSizeAdvanced",
"TdxhImg2ImgLatent",
"TdxhIntInput",
"TdxhLoraLoader",
"TdxhStringInput"
"TdxhOnOrOff",
"TdxhReference",
"TdxhStringInput",
"TdxhStringInputTranslator"
],
{
"title_aux": "tdxh_node_comfyui"

File diff suppressed because one or more lines are too long

View File

@ -4,44 +4,81 @@ import subprocess
import sys
import atexit
import threading
import re
# Logger setup
if os.path.exists("comfyui.log"):
if os.path.exists("comfyui.prev.log"):
os.remove("comfyui.prev.log")
os.rename("comfyui.log", "comfyui.prev.log")
try:
# Logger setup
if os.path.exists("comfyui.log"):
if os.path.exists("comfyui.prev.log"):
if os.path.exists("comfyui.prev2.log"):
os.remove("comfyui.prev2.log")
os.rename("comfyui.prev.log", "comfyui.prev2.log")
os.rename("comfyui.log", "comfyui.prev.log")
original_stdout = sys.stdout
original_stderr = sys.stderr
original_stdout = sys.stdout
original_stderr = sys.stderr
tqdm = r'\d+%.*\[(.*?)\]'
log_file = open("comfyui.log", "w", encoding="utf-8")
log_lock = threading.Lock()
class Logger:
def __init__(self, is_stdout):
self.is_stdout = is_stdout
def write(self, message):
if not self.is_stdout:
match = re.search(tqdm, message)
if match:
message = re.sub(r'([#|])\d', r'\1▌', message)
message = re.sub('#', '', message)
if '100%' in message:
self.sync_write(message)
else:
original_stderr.write(message)
original_stderr.flush()
else:
self.sync_write(message)
else:
self.sync_write(message)
def sync_write(self, message):
with log_lock:
log_file.write(message)
log_file.flush()
if self.is_stdout:
original_stdout.write(message)
original_stdout.flush()
else:
original_stderr.write(message)
original_stderr.flush()
def flush(self):
log_file.flush()
if self.is_stdout:
original_stdout.flush()
else:
original_stderr.flush()
class Logger:
def __init__(self, filename):
self.file = open(filename, "w", encoding="utf-8")
def write(self, message):
self.file.write(message)
self.file.flush()
original_stdout.write(message)
original_stdout.flush()
def flush(self):
self.file.flush()
original_stdout.flush()
def close_file(self):
self.file.close()
def handle_stream(stream, prefix):
for line in stream:
print(prefix, line, end="")
def handle_stream(stream, prefix):
for line in stream:
print(prefix, line, end="")
def close_log():
log_file.close()
sys.stdout = Logger("comfyui.log")
sys.stderr = sys.stdout
sys.stdout = Logger(True)
sys.stderr = Logger(False)
atexit.register(close_log)
except Exception as e:
print(f"[ComfyUI-Manager] Logging failed: {e}")
atexit.register(sys.stdout.close_file)
print("** ComfyUI start up time:", datetime.datetime.now())

View File

@ -4,7 +4,7 @@ import json
from git import Repo
from torchvision.datasets.utils import download_url
builtin_nodes = ["KSampler"]
builtin_nodes = ["KSampler", "CheckpointSave"]
def scan_in_file(filename):
try:

View File

@ -5,24 +5,29 @@ import subprocess
def get_enabled_subdirectories_with_files(base_directory):
subdirs_with_files = []
for subdir in os.listdir(base_directory):
full_path = os.path.join(base_directory, subdir)
if os.path.isdir(full_path) and not subdir.endswith(".disabled") and not subdir.startswith('.') and subdir != '__pycache__':
print(f"## Install dependencies for '{subdir}'")
requirements_file = os.path.join(full_path, "requirements.txt")
install_script = os.path.join(full_path, "install.py")
try:
full_path = os.path.join(base_directory, subdir)
if os.path.isdir(full_path) and not subdir.endswith(".disabled") and not subdir.startswith('.') and subdir != '__pycache__':
print(f"## Install dependencies for '{subdir}'")
requirements_file = os.path.join(full_path, "requirements.txt")
install_script = os.path.join(full_path, "install.py")
if os.path.isfile(requirements_file) and os.path.isfile(install_script):
subdirs_with_files.append((full_path, requirements_file, install_script))
if os.path.exists(requirements_file) or os.path.exists(install_script):
subdirs_with_files.append((full_path, requirements_file, install_script))
except Exception as e:
print(f"EXCEPTION During Dependencies INSTALL on '{subdir}':\n{e}")
return subdirs_with_files
def install_requirements(requirements_file_path):
subprocess.run(["pip", "install", "-r", requirements_file_path])
if os.path.exists(requirements_file_path):
subprocess.run(["pip", "install", "-r", requirements_file_path])
def run_install_script(install_script_path):
subprocess.run(["python", install_script_path])
if os.path.exists(install_script_path):
subprocess.run(["python", install_script_path])
custom_nodes_directory = "custom_nodes"

View File

@ -0,0 +1,20 @@
git clone https://github.com/comfyanonymous/ComfyUI
cd ComfyUI/custom_nodes
git clone https://github.com/ltdrdata/ComfyUI-Manager
cd ..
python -m venv venv
call venv/Scripts/activate
python -m pip install -r requirements.txt
python -m pip install -r custom_nodes/ComfyUI-Manager/requirements.txt
python -m pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu118 xformers
cd ..
echo "cd ComfyUI" >> run_gpu.sh
echo "call venv/Scripts/activate" >> run_gpu.sh
echo "python main.py" >> run_gpu.sh
chmod +x run_gpu.sh
echo "#!/bin/bash" > run_cpu.sh
echo "cd ComfyUI" >> run_cpu.sh
echo "call venv/Scripts/activate" >> run_cpu.sh
echo "python main.py --cpu" >> run_cpu.sh
chmod +x run_cpu.sh