Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ad1b4a9a86 | ||
|
|
e0e3ec02b3 | ||
|
|
a6cc392473 | ||
|
|
36f48b8656 | ||
|
|
3d883ca37d | ||
|
|
34ed81ca64 | ||
|
|
a9e0880572 | ||
|
|
9500e1c3c4 | ||
|
|
d81aa9cbbc | ||
|
|
21d4b25c2d | ||
|
|
0080783a11 | ||
|
|
2c3f44a3f8 | ||
|
|
3ddf414097 | ||
|
|
59fb63f1f7 | ||
|
|
fa1b514440 | ||
|
|
1579c58876 | ||
|
|
153d044331 | ||
|
|
f2496f7054 | ||
|
|
99022f4f3d | ||
|
|
60a5e4f261 | ||
|
|
661586d3b6 | ||
|
|
abc26cf906 | ||
|
|
12351bada7 | ||
|
|
a6816d53d7 | ||
|
|
3b0709f5f2 | ||
|
|
d7af7e2917 | ||
|
|
6516e62d33 | ||
|
|
6b832edd2f | ||
|
|
eebace1652 | ||
|
|
6ff6e05408 | ||
|
|
aaf569ca8c | ||
|
|
31eef6222e | ||
|
|
9963afa558 |
29
README.md
29
README.md
@@ -149,6 +149,7 @@ In `ComfyUI-Manager` V3.0 and later, configuration files and dynamically generat
|
|||||||
* Basic config files: `<USER_DIRECTORY>/default/ComfyUI-Manager/config.ini`
|
* Basic config files: `<USER_DIRECTORY>/default/ComfyUI-Manager/config.ini`
|
||||||
* Configurable channel lists: `<USER_DIRECTORY>/default/ComfyUI-Manager/channels.ini`
|
* Configurable channel lists: `<USER_DIRECTORY>/default/ComfyUI-Manager/channels.ini`
|
||||||
* Configurable pip overrides: `<USER_DIRECTORY>/default/ComfyUI-Manager/pip_overrides.json`
|
* Configurable pip overrides: `<USER_DIRECTORY>/default/ComfyUI-Manager/pip_overrides.json`
|
||||||
|
* Configurable pip blacklist: `<USER_DIRECTORY>/default/ComfyUI-Manager/pip_blacklist.list`
|
||||||
* Saved snapshot files: `<USER_DIRECTORY>/default/ComfyUI-Manager/snapshots`
|
* Saved snapshot files: `<USER_DIRECTORY>/default/ComfyUI-Manager/snapshots`
|
||||||
* Startup script files: `<USER_DIRECTORY>/default/ComfyUI-Manager/startup-scripts`
|
* Startup script files: `<USER_DIRECTORY>/default/ComfyUI-Manager/startup-scripts`
|
||||||
* Component files: `<USER_DIRECTORY>/default/ComfyUI-Manager/components`
|
* Component files: `<USER_DIRECTORY>/default/ComfyUI-Manager/components`
|
||||||
@@ -301,7 +302,10 @@ The following settings are applied based on the section marked as `is_default`.
|
|||||||
* Custom pip mapping
|
* Custom pip mapping
|
||||||
* When you create the `pip_overrides.json` file, it changes the installation of specific pip packages to installations defined by the user.
|
* When you create the `pip_overrides.json` file, it changes the installation of specific pip packages to installations defined by the user.
|
||||||
* Please refer to the `pip_overrides.json.template` file.
|
* Please refer to the `pip_overrides.json.template` file.
|
||||||
|
|
||||||
|
* Prevent the installation of specific pip packages
|
||||||
|
* List the package names one per line in the `pip_blacklist.list` file.
|
||||||
|
|
||||||
* Use `aria2` as downloader
|
* Use `aria2` as downloader
|
||||||
* [howto](docs/en/use_aria2.md)
|
* [howto](docs/en/use_aria2.md)
|
||||||
|
|
||||||
@@ -309,6 +313,29 @@ The following settings are applied based on the section marked as `is_default`.
|
|||||||
* This option can be used if performance issues occur in a Colab+GDrive environment.
|
* This option can be used if performance issues occur in a Colab+GDrive environment.
|
||||||
|
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
The following features can be configured using environment variables:
|
||||||
|
|
||||||
|
* **COMFYUI_PATH**: The installation path of ComfyUI
|
||||||
|
* **GITHUB_ENDPOINT**: Reverse proxy configuration for environments with limited access to GitHub
|
||||||
|
* **HF_ENDPOINT**: Reverse proxy configuration for environments with limited access to Hugging Face
|
||||||
|
|
||||||
|
|
||||||
|
### Example 1:
|
||||||
|
Redirecting `https://github.com/ltdrdata/ComfyUI-Impact-Pack` to `https://mirror.ghproxy.com/https://github.com/ltdrdata/ComfyUI-Impact-Pack`
|
||||||
|
|
||||||
|
```
|
||||||
|
GITHUB_ENDPOINT=https://mirror.ghproxy.com/https://github.com
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Example 2:
|
||||||
|
Changing `https://huggingface.co/path/to/somewhere` to `https://some-hf-mirror.com/path/to/somewhere`
|
||||||
|
|
||||||
|
```
|
||||||
|
HF_ENDPOINT=https://some-hf-mirror.com
|
||||||
|
```
|
||||||
|
|
||||||
## Scanner
|
## Scanner
|
||||||
When you run the `scan.sh` script:
|
When you run the `scan.sh` script:
|
||||||
|
|
||||||
|
|||||||
39
cm-cli.py
39
cm-cli.py
@@ -32,6 +32,7 @@ if comfy_path is None:
|
|||||||
print("\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)
|
print("\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(manager_util.comfyui_manager_path, '..', '..'))
|
comfy_path = os.path.abspath(os.path.join(manager_util.comfyui_manager_path, '..', '..'))
|
||||||
|
|
||||||
|
# This should be placed here
|
||||||
sys.path.append(comfy_path)
|
sys.path.append(comfy_path)
|
||||||
|
|
||||||
import utils.extra_config
|
import utils.extra_config
|
||||||
@@ -42,7 +43,7 @@ import cnr_utils
|
|||||||
|
|
||||||
comfyui_manager_path = os.path.abspath(os.path.dirname(__file__))
|
comfyui_manager_path = os.path.abspath(os.path.dirname(__file__))
|
||||||
|
|
||||||
cm_global.pip_blacklist = ['torch', 'torchsde', 'torchvision']
|
cm_global.pip_blacklist = {'torch', 'torchsde', 'torchvision'}
|
||||||
cm_global.pip_downgrade_blacklist = ['torch', 'torchsde', 'torchvision', 'transformers', 'safetensors', 'kornia']
|
cm_global.pip_downgrade_blacklist = ['torch', 'torchsde', 'torchvision', 'transformers', 'safetensors', 'kornia']
|
||||||
cm_global.pip_overrides = {'numpy': 'numpy<2'}
|
cm_global.pip_overrides = {'numpy': 'numpy<2'}
|
||||||
|
|
||||||
@@ -51,6 +52,14 @@ if os.path.exists(os.path.join(manager_util.comfyui_manager_path, "pip_overrides
|
|||||||
cm_global.pip_overrides = json.load(json_file)
|
cm_global.pip_overrides = json.load(json_file)
|
||||||
|
|
||||||
|
|
||||||
|
if os.path.exists(os.path.join(manager_util.comfyui_manager_path, "pip_blacklist.list")):
|
||||||
|
with open(os.path.join(manager_util.comfyui_manager_path, "pip_blacklist.list"), 'r', encoding="UTF-8", errors="ignore") as f:
|
||||||
|
for x in f.readlines():
|
||||||
|
y = x.strip()
|
||||||
|
if y != '':
|
||||||
|
cm_global.pip_blacklist.add(y)
|
||||||
|
|
||||||
|
|
||||||
def check_comfyui_hash():
|
def check_comfyui_hash():
|
||||||
repo = git.Repo(comfy_path)
|
repo = git.Repo(comfy_path)
|
||||||
core.comfy_ui_revision = len(list(repo.iter_commits('HEAD')))
|
core.comfy_ui_revision = len(list(repo.iter_commits('HEAD')))
|
||||||
@@ -136,6 +145,13 @@ class Ctx:
|
|||||||
cm_global.pip_overrides = json.load(json_file)
|
cm_global.pip_overrides = json.load(json_file)
|
||||||
cm_global.pip_overrides = {'numpy': 'numpy<2'}
|
cm_global.pip_overrides = {'numpy': 'numpy<2'}
|
||||||
|
|
||||||
|
if os.path.exists(core.manager_pip_blacklist_path):
|
||||||
|
with open(core.manager_pip_blacklist_path, 'r', encoding="UTF-8", errors="ignore") as f:
|
||||||
|
for x in f.readlines():
|
||||||
|
y = x.strip()
|
||||||
|
if y != '':
|
||||||
|
cm_global.pip_blacklist.add(y)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_startup_scripts_path():
|
def get_startup_scripts_path():
|
||||||
return os.path.join(core.manager_startup_script_path, "install-scripts.txt")
|
return os.path.join(core.manager_startup_script_path, "install-scripts.txt")
|
||||||
@@ -1012,17 +1028,32 @@ def save_snapshot(
|
|||||||
user_directory: str = typer.Option(
|
user_directory: str = typer.Option(
|
||||||
None,
|
None,
|
||||||
help="user directory"
|
help="user directory"
|
||||||
)
|
),
|
||||||
|
full_snapshot: Annotated[
|
||||||
|
bool,
|
||||||
|
typer.Option(
|
||||||
|
show_default=False, help="If the snapshot should include custom node, ComfyUI version and pip versions (default), or only custom node details"
|
||||||
|
),
|
||||||
|
] = True,
|
||||||
):
|
):
|
||||||
cmd_ctx.set_user_directory(user_directory)
|
cmd_ctx.set_user_directory(user_directory)
|
||||||
|
|
||||||
path = asyncio.run(core.save_snapshot_with_postfix('snapshot', output))
|
if(not output.endswith('.json') and not output.endswith('.yaml')):
|
||||||
|
print("ERROR: output path should be either '.json' or '.yaml' file.")
|
||||||
|
raise typer.Exit(code=1)
|
||||||
|
|
||||||
|
dir_path = os.path.dirname(output)
|
||||||
|
if(dir_path != '' and not os.path.exists(dir_path)):
|
||||||
|
print(f"ERROR: {output} path not exists.")
|
||||||
|
raise typer.Exit(code=1)
|
||||||
|
|
||||||
|
path = asyncio.run(core.save_snapshot_with_postfix('snapshot', output, not full_snapshot))
|
||||||
print(f"Current snapshot is saved as `{path}`")
|
print(f"Current snapshot is saved as `{path}`")
|
||||||
|
|
||||||
|
|
||||||
@app.command("restore-snapshot", help="Restore snapshot from snapshot file")
|
@app.command("restore-snapshot", help="Restore snapshot from snapshot file")
|
||||||
def restore_snapshot(
|
def restore_snapshot(
|
||||||
snapshot_name: str,
|
snapshot_name: str,
|
||||||
pip_non_url: Optional[bool] = typer.Option(
|
pip_non_url: Optional[bool] = typer.Option(
|
||||||
default=None,
|
default=None,
|
||||||
show_default=False,
|
show_default=False,
|
||||||
|
|||||||
@@ -3748,17 +3748,6 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Nodes: Noxin Complete Chime, Noxin Scaled Resolutions, Load from Noxin Prompt Library, Save to Noxin Prompt Library"
|
"description": "Nodes: Noxin Complete Chime, Noxin Scaled Resolutions, Load from Noxin Prompt Library, Save to Noxin Prompt Library"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"author": "apesplat",
|
|
||||||
"title": "ezXY scripts and nodes",
|
|
||||||
"id": "ezxy",
|
|
||||||
"reference": "https://github.com/GMapeSplat/ComfyUI_ezXY",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/GMapeSplat/ComfyUI_ezXY"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Extensions/Patches: Enables linking float and integer inputs and ouputs. Values are automatically cast to the correct type and clamped to the correct range. Works with both builtin and custom nodes.[w/NOTE: This repo patches ComfyUI's validate_inputs and map_node_over_list functions while running. May break depending on your version of ComfyUI. Can be deactivated in config.yaml.]Nodes: A collection of nodes for facilitating the generation of XY plots. Capable of plotting changes over most primitive values.[w/Does not work with current version of Comfyui]"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"author": "kinfolk0117",
|
"author": "kinfolk0117",
|
||||||
"title": "SimpleTiles",
|
"title": "SimpleTiles",
|
||||||
@@ -8745,7 +8734,7 @@
|
|||||||
"https://github.com/olduvai-jp/ComfyUI-HfLoader"
|
"https://github.com/olduvai-jp/ComfyUI-HfLoader"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Nodes:Lora Loader From HF"
|
"description": "A simple and easy to use Hugging Face model loader."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "AiMiDi",
|
"author": "AiMiDi",
|
||||||
@@ -10634,6 +10623,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "These are just some nodes I wanted and couldn't find where anyone else had made them yet."
|
"description": "These are just some nodes I wanted and couldn't find where anyone else had made them yet."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "quadmoon",
|
||||||
|
"title": "ComfyUI-Riffusion",
|
||||||
|
"reference": "https://github.com/traugdor/ComfyUI-Riffusion",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/traugdor/ComfyUI-Riffusion"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A ComfyUI extension for Riffusion audio generation."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "quadme7macoon",
|
"author": "quadme7macoon",
|
||||||
"title": "ComfyUI-ShadertoyGL",
|
"title": "ComfyUI-ShadertoyGL",
|
||||||
@@ -11206,6 +11205,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Nodes:FastImageListToImageBatch"
|
"description": "Nodes:FastImageListToImageBatch"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "jax-explorer",
|
||||||
|
"title": "comfyui-model-dynamic-loader",
|
||||||
|
"reference": "https://github.com/jax-explorer/comfyui-model-dynamic-loader",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/jax-explorer/comfyui-model-dynamic-loader"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "for comfyonline dynamic loader\ncomfyonline is comfyui cloud website"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "sugarkwork",
|
"author": "sugarkwork",
|
||||||
"title": "comfyui_cohere",
|
"title": "comfyui_cohere",
|
||||||
@@ -13337,6 +13346,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "This node for ComfyUI allows saving images with an optional alpha channel (transparency). It supports saving images in formats like PNG, JPEG, and WebP."
|
"description": "This node for ComfyUI allows saving images with an optional alpha channel (transparency). It supports saving images in formats like PNG, JPEG, and WebP."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "APZmedia",
|
||||||
|
"title": "APZmedia Together Image Generator for ComfyUI",
|
||||||
|
"reference": "https://github.com/APZmedia/APZmedia-comfy-together-lora",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/APZmedia/APZmedia-comfy-together-lora"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A ComfyUI node to implement Together AI API image generation"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "N3rd00d",
|
"author": "N3rd00d",
|
||||||
"title": "ComfyUI-Paint3D-Nodes",
|
"title": "ComfyUI-Paint3D-Nodes",
|
||||||
@@ -13895,6 +13914,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "This node provides advanced text-to-speech functionality powered by KokoroTTS. Follow the instructions below to install, configure, and use the node within your portable ComfyUI installation."
|
"description": "This node provides advanced text-to-speech functionality powered by KokoroTTS. Follow the instructions below to install, configure, and use the node within your portable ComfyUI installation."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "MushroomFleet",
|
||||||
|
"title": "DJZ-Pedalboard",
|
||||||
|
"reference": "https://github.com/MushroomFleet/DJZ-Pedalboard",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/MushroomFleet/DJZ-Pedalboard"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This project provides a collection of custom nodes designed for enhanced audio effects in ComfyUI. With an intuitive pedalboard interface, users can easily integrate and manipulate various audio effects within their workflows."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "var1ableX",
|
"author": "var1ableX",
|
||||||
"title": "ComfyUI_Accessories",
|
"title": "ComfyUI_Accessories",
|
||||||
@@ -14193,17 +14222,6 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "multiline text node that strips c-style comments (i.e.'//' and '/* ... */') before passing output string downstream"
|
"description": "multiline text node that strips c-style comments (i.e.'//' and '/* ... */') before passing output string downstream"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"author": "noarche",
|
|
||||||
"title": "noarche/Color Enhance",
|
|
||||||
"id": "color-enhance",
|
|
||||||
"reference": "https://github.com/noarche/sd-webui-color-enhance",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/noarche/sd-webui-color-enhance"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Script for [a/AUTOMATIC1111/stable-diffusion-webui](https://github.com/AUTOMATIC1111/stable-diffusion-webui) and node for ComfyUI to enhance colors.\nThis is the same algorithm GIMP/GEGL uses for color enhancement. The gist of this implementation is that it converts the color space to [CIELCh(ab) and normalizes the chroma (or '[a/colorfulness](https://en.wikipedia.org/wiki/Colorfulness)') component. Original source can be found in the link below."
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"author": "emojiiii",
|
"author": "emojiiii",
|
||||||
"title": "ComfyUI_Emojiiii_Custom_Nodes",
|
"title": "ComfyUI_Emojiiii_Custom_Nodes",
|
||||||
@@ -15256,6 +15274,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Simple Node to make panoramic images"
|
"description": "Simple Node to make panoramic images"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "RodrigoSKohl",
|
||||||
|
"title": "TryOff Anyone",
|
||||||
|
"reference": "https://github.com/RodrigoSKohl/comfyui-tryoff-anyone",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/RodrigoSKohl/comfyui-tryoff-anyone"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Node to tryoff clothes"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "nicehero",
|
"author": "nicehero",
|
||||||
"title": "comfyui-SegGPT",
|
"title": "comfyui-SegGPT",
|
||||||
@@ -15766,7 +15794,7 @@
|
|||||||
"https://github.com/Cyber-BCat/ComfyUI_Auto_Caption"
|
"https://github.com/Cyber-BCat/ComfyUI_Auto_Caption"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "This report contains a 'load many images' node which is going to load the image set by the number of file names from smallest to largest, and the images will no longer be loaded in the wrong order! Setting index=0 makes it load from the first small value (image flie name) image, and index=2 will load them from the second image. Another node 'load images & resize' can resize the image by the first loaded image."
|
"description": "Load images in order(All other nodes are in the wrong order)! Using LLM and Joy tag pipeline to tag your image(s folder), it's suitable for train FLUX LoRA and also sdxl."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "cr7Por",
|
"author": "cr7Por",
|
||||||
@@ -16158,6 +16186,17 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "ComfyUI nodes for Janus-Pro, a unified multimodal understanding and generation framework."
|
"description": "ComfyUI nodes for Janus-Pro, a unified multimodal understanding and generation framework."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "CY-CHENYUE",
|
||||||
|
"title": "ComfyUI-Free-GPU",
|
||||||
|
"id": "ComfyUI-Free-GPU",
|
||||||
|
"reference": "https://github.com/CY-CHENYUE/ComfyUI-Free-GPU",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/CY-CHENYUE/ComfyUI-Free-GPU"
|
||||||
|
],
|
||||||
|
"description": "ComfyUI-Free-GPU provides a node for releasing RAM and VRAM in ComfyUI.",
|
||||||
|
"install_type": "git-clone"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "codecringebinge",
|
"author": "codecringebinge",
|
||||||
"title": "ComfyUI-Arrow-Key-Canvas-Navigation",
|
"title": "ComfyUI-Arrow-Key-Canvas-Navigation",
|
||||||
@@ -16444,6 +16483,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "preprocessing images, presented in a visual way. It also calculates the corresponding image area."
|
"description": "preprocessing images, presented in a visual way. It also calculates the corresponding image area."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "SSsnap",
|
||||||
|
"title": "ComfyUI-LBW_flux",
|
||||||
|
"reference": "https://github.com/SS-snap/ComfyUI-LBW_flux",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/SS-snap/ComfyUI-LBW_flux"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Through this node, you can more easily test the impact of different blocks in flux_lora on the final result."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "RiceRound",
|
"author": "RiceRound",
|
||||||
"title": "ComfyUI Compression and Encryption Node",
|
"title": "ComfyUI Compression and Encryption Node",
|
||||||
@@ -17874,6 +17923,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A collection of image processing extension nodes for ComfyUI."
|
"description": "A collection of image processing extension nodes for ComfyUI."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "yichengup",
|
||||||
|
"title": "ComfyUI-VideoBlender",
|
||||||
|
"reference": "https://github.com/yichengup/ComfyUI-VideoBlender",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/yichengup/ComfyUI-VideoBlender"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Video clip mixing"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "Horizon Team",
|
"author": "Horizon Team",
|
||||||
"title": "ComfyUI_FluxMod",
|
"title": "ComfyUI_FluxMod",
|
||||||
@@ -18466,16 +18525,6 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "quickly use the prompt word tool in ComfyUI"
|
"description": "quickly use the prompt word tool in ComfyUI"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"author": "jax-explorer",
|
|
||||||
"title": "comfyui-model-dynamic-loader",
|
|
||||||
"reference": "https://github.com/jax-explorer/comfyui-model-dynamic-loader",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/jax-explorer/comfyui-model-dynamic-loader"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "for comfyonline dynamic loader\ncomfyonline is comfyui cloud website"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"author": "LucipherDev",
|
"author": "LucipherDev",
|
||||||
"title": "ComfyUI-Golden-Noise",
|
"title": "ComfyUI-Golden-Noise",
|
||||||
@@ -20433,16 +20482,6 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "ComfyUI-SendToDiscord is a custom node for ComfyUI that simplifies sending preview images to Discord via webhooks. It supports both single-image uploads and batch mode, making it an efficient tool for sharing your generated images directly with your Discord server."
|
"description": "ComfyUI-SendToDiscord is a custom node for ComfyUI that simplifies sending preview images to Discord via webhooks. It supports both single-image uploads and batch mode, making it an efficient tool for sharing your generated images directly with your Discord server."
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"author": "gmorks",
|
|
||||||
"title": "ComfyUI Animagine prompt",
|
|
||||||
"reference": "https://github.com/gmorks/ComfyUI-Animagine-Prompt",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/gmorks/ComfyUI-Animagine-Prompt"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Comfy UI node to prompt build for [a/https://huggingface.co/cagliostrolab/animagine-xl-4.0](https://huggingface.co/cagliostrolab/animagine-xl-4.0) model"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"author": "jinanlongen",
|
"author": "jinanlongen",
|
||||||
"title": "ComfyUI Prompt Expander Node",
|
"title": "ComfyUI Prompt Expander Node",
|
||||||
@@ -20596,16 +20635,6 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A modular system that adds randomness to prompt generation"
|
"description": "A modular system that adds randomness to prompt generation"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"author": "hdfhssg",
|
|
||||||
"title": "ComfyUI_pxtool",
|
|
||||||
"reference": "https://github.com/hdfhssg/ComfyUI_pxtool",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/hdfhssg/ComfyUI_pxtool"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This is a custom plugin node for ComfyUI that modifies and extends some features from existing projects. The main implementations include:\n* Reproducing some features of the [a/Stable-Diffusion-Webui-Civitai-Helper](https://github.com/zixaphir/Stable-Diffusion-Webui-Civitai-Helper) project within ComfyUI\n* Implementing a feature to randomly generate related prompt words by referencing the [a/noob-wiki dataset](https://huggingface.co/datasets/Laxhar/noob-wiki/tree/main)"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"author": "martin-rizzo",
|
"author": "martin-rizzo",
|
||||||
"title": "ComfyUI-TinyBreaker",
|
"title": "ComfyUI-TinyBreaker",
|
||||||
@@ -20809,7 +20838,7 @@
|
|||||||
"https://github.com/mediocreatmybest/ComfyUI-Transformers-Pipeline"
|
"https://github.com/mediocreatmybest/ComfyUI-Transformers-Pipeline"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Some additional ComfyUI nodes allowing tasks via the Huggingface Transformers Pipeline."
|
"description": "Additional ComfyUI nodes to utilise the Transformers pipeline in a simple and modular way."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "iris-Neko",
|
"author": "iris-Neko",
|
||||||
@@ -20831,118 +20860,180 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Offering a series of utility nodes designed to simplify workflows and enhance efficiency"
|
"description": "Offering a series of utility nodes designed to simplify workflows and enhance efficiency"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"author": "mie",
|
||||||
|
"title": "ComfyUI_CaptionThis",
|
||||||
|
"reference": "https://github.com/MieMieeeee/ComfyUI-CaptionThis",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/MieMieeeee/ComfyUI-CaptionThis"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Describe a single image or all images in a directory using models such as Janus Pro, Florence2 (coming soon), or JoyCaption (coming soon), with a particular focus on building datasets for training LoRA."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "lum3on",
|
||||||
|
"title": "LLM Polymath Chat Node",
|
||||||
|
"id": "polymath",
|
||||||
|
"reference": "https://github.com/lum3on/comfyui_LLM_Polymath",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/lum3on/comfyui_LLM_Polymath"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Advanced LLM driven node with many custom instructions, including node finder, expert prompter and json converter."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "austinbrown34",
|
||||||
|
"title": "ComfyUI-IO-Helpers",
|
||||||
|
"reference": "https://github.com/austinbrown34/ComfyUI-IO-Helpers",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/austinbrown34/ComfyUI-IO-Helpers"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A custom nodes package for ComfyUI that enhances workflow flexibility by providing specialized nodes for saving and loading intermediate data (encoded prompts and sampled latents) in multiple formats. This package leverages helper classes for file I/O, supports gzip compression for efficient storage, and integrates progress feedback via a progress bar to improve user experience during long operations."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "HowToSD",
|
||||||
|
"title": "ComfyUI-Data-Analysis",
|
||||||
|
"reference": "https://github.com/HowToSD/ComfyUI-Data-Analysis",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/HowToSD/ComfyUI-Data-Analysis"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Data analysis custom modules for ComfyUI - Use Pandas & Matplotlib from within ComfyUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "dasilva333",
|
||||||
|
"title": "ComfyUI_ContrastingColor",
|
||||||
|
"reference": "https://github.com/dasilva333/ComfyUI_ContrastingColor",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/dasilva333/ComfyUI_ContrastingColor"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This node calculates a contrasting complementary color based on an input RGB color. The goal is to ensure visibility and contrast when overlaying text, UI elements, or graphical components against a given background color."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "moon7star9",
|
||||||
|
"title": "ComfyUI_BiRefNet_Universal",
|
||||||
|
"reference": "https://github.com/moon7star9/ComfyUI_BiRefNet_Universal",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/moon7star9/ComfyUI_BiRefNet_Universal"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A comprehensive node package that seamlessly integrates all BiRefNet series models into ComfyUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "wirytiox",
|
||||||
|
"title": "ComfyUI-SelectStringFromListWithIndex",
|
||||||
|
"id": "ComfyUI-SelectStringFromListWithIndex",
|
||||||
|
"reference": "https://github.com/wirytiox/ComfyUI-SelectStringFromListWithIndex",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/wirytiox/ComfyUI-SelectStringFromListWithIndex"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This node is a node made by GMapeSplat/ComfyUI_ezXY that i copied while his node doesn't work"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "thanhduong0213929",
|
||||||
|
"title": "ComfyUI-DeepUnlock",
|
||||||
|
"reference": "https://github.com/thanhduong0213929/ComfyUI-DeepUnlock",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/thanhduong0213929/ComfyUI-DeepUnlock"
|
||||||
|
],
|
||||||
|
"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": "TheAIDoctor",
|
||||||
|
"title": "The AI Doctors Clinical Tools",
|
||||||
|
"id": "AIDocCT",
|
||||||
|
"reference": "https://github.com/BlueprintCoding/ComfyUI_AIDocsClinicalTools",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/BlueprintCoding/ComfyUI_AIDocsClinicalTools"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "MultiInt and MultiText nodes. The MultiInt node allows management of multiple int values with configurable steps, +/- buttons, drag change, & customized labels. The MultiText node offers similar functionality for string values."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Mohammadreza Mohseni",
|
||||||
|
"title": "ComfyUI Mohseni Kit",
|
||||||
|
"id": "mohseni-kit",
|
||||||
|
"reference": "https://github.com/mohseni-mr/ComfyUI-Mohseni-Kit",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/mohseni-mr/ComfyUI-Mohseni-Kit"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A collection of useful nodes for ComfyUI, including Float Preview for live image visualization."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "BuffMcBigHuge",
|
||||||
|
"title": "ComfyUI-Zonos",
|
||||||
|
"reference": "https://github.com/BuffMcBigHuge/ComfyUI-Zonos",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/BuffMcBigHuge/ComfyUI-Zonos"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "TTS with Zyphra Zonos"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "BahaC",
|
||||||
|
"title": "ComfyUI Zonos TTS Node",
|
||||||
|
"reference": "https://github.com/BahaC/ComfyUI-ZonosTTS",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/BahaC/ComfyUI-ZonosTTS"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A ComfyUI custom node that brings Zonos Text-to-Speech capabilities to your workflows, featuring high-quality speech synthesis and voice cloning."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "dzqdzq",
|
||||||
|
"title": "ComfyUI-crop-alpha",
|
||||||
|
"reference": "https://github.com/dzqdzq/ComfyUI-crop-alpha",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/dzqdzq/ComfyUI-crop-alpha"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Automatic cropping of transparent areas to prevent images from being too large, while also supporting resizing to prevent image dimensions from being too large."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "bbtaivi",
|
||||||
|
"title": "AIV ComfyUI Node",
|
||||||
|
"reference": "https://github.com/bbtaivi/ComfyUI-Aiv-Param",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/bbtaivi/ComfyUI-Aiv-Param"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Used to convert workflow node settings into AIV mini-program parameters."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "PrunaAI",
|
||||||
|
"title": "Pruna nodes for ComfyUI",
|
||||||
|
"reference": "https://github.com/PrunaAI/ComfyUI_pruna",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/PrunaAI/ComfyUI_pruna"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This repository explains how to accelerate image generation in ComfyUI using Pruna, an inference optimization engine that makes AI models faster, smaller, cheaper, and greener. ComfyUI is a popular node-based GUI for image generation models, for which we provide a custom compilation node that accelerates Stable Diffusion (SD) and Flux inference, while preserving output quality."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Hellfiredragon",
|
||||||
|
"title": "comfyui-image-manipulation",
|
||||||
|
"reference": "https://github.com/Hellfiredragon/comfyui-image-manipulation",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Hellfiredragon/comfyui-image-manipulation"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Custom nodes to manipulate images in ComfyUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "lunarring",
|
||||||
|
"title": "bitalino_comfy",
|
||||||
|
"reference": "https://github.com/lunarring/bitalino_comfy",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/lunarring/bitalino_comfy"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A package implementing a Bitalino device ComfyUI custom node."
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,15 @@
|
|||||||
"title_aux": "alkemann nodes"
|
"title_aux": "alkemann nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://git.mmaker.moe/mmaker/sd-webui-color-enhance": [
|
||||||
|
[
|
||||||
|
"MMakerColorBlend",
|
||||||
|
"MMakerColorEnhance"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "mmaker/Color Enhance"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/0x-jerry/comfyui-rembg": [
|
"https://github.com/0x-jerry/comfyui-rembg": [
|
||||||
[
|
[
|
||||||
"Load Rembg Model",
|
"Load Rembg Model",
|
||||||
@@ -1114,6 +1123,15 @@
|
|||||||
"title_aux": "ComfyUI_yanc"
|
"title_aux": "ComfyUI_yanc"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/APZmedia/APZmedia-comfy-together-lora": [
|
||||||
|
[
|
||||||
|
"TogetherImageGenerator",
|
||||||
|
"TogetherImageGeneratorLoRA"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "APZmedia Together Image Generator for ComfyUI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/APZmedia/APZmedia-comfyui-fast-image-save": [
|
"https://github.com/APZmedia/APZmedia-comfyui-fast-image-save": [
|
||||||
[
|
[
|
||||||
"APZmedia Fast image save"
|
"APZmedia Fast image save"
|
||||||
@@ -1332,7 +1350,6 @@
|
|||||||
"BillBum_Modified_RegText_Node",
|
"BillBum_Modified_RegText_Node",
|
||||||
"BillBum_Modified_SD3_API_Node",
|
"BillBum_Modified_SD3_API_Node",
|
||||||
"BillBum_Modified_Structured_LLM_Node(Imperfect)",
|
"BillBum_Modified_Structured_LLM_Node(Imperfect)",
|
||||||
"BillBum_Modified_Together_API_Node",
|
|
||||||
"BillBum_Modified_VisionLM_API_Node",
|
"BillBum_Modified_VisionLM_API_Node",
|
||||||
"BillBum_Modified_img2b64_url_Node",
|
"BillBum_Modified_img2b64_url_Node",
|
||||||
"BillBum_NonSysPrompt_VLM_API_Node",
|
"BillBum_NonSysPrompt_VLM_API_Node",
|
||||||
@@ -1361,6 +1378,7 @@
|
|||||||
"https://github.com/AkashKarnatak/ComfyUI_faishme": [
|
"https://github.com/AkashKarnatak/ComfyUI_faishme": [
|
||||||
[
|
[
|
||||||
"Faishme Debug",
|
"Faishme Debug",
|
||||||
|
"Faishme Load Image from Glob",
|
||||||
"Faishme Mannequin to Model Loader",
|
"Faishme Mannequin to Model Loader",
|
||||||
"Faishme Moondream",
|
"Faishme Moondream",
|
||||||
"Load Fashion Model"
|
"Load Fashion Model"
|
||||||
@@ -1504,6 +1522,12 @@
|
|||||||
"TICK (JOV) \u23f1",
|
"TICK (JOV) \u23f1",
|
||||||
"TRANSFORM (JOV) \ud83c\udfdd\ufe0f",
|
"TRANSFORM (JOV) \ud83c\udfdd\ufe0f",
|
||||||
"VALUE (JOV) \ud83e\uddec",
|
"VALUE (JOV) \ud83e\uddec",
|
||||||
|
"VECTOR2 (JOV)",
|
||||||
|
"VECTOR2INT (JOV)",
|
||||||
|
"VECTOR3 (JOV)",
|
||||||
|
"VECTOR3INT (JOV)",
|
||||||
|
"VECTOR4 (JOV)",
|
||||||
|
"VECTOR4INT (JOV)",
|
||||||
"WAVE GEN (JOV) \ud83c\udf0a"
|
"WAVE GEN (JOV) \ud83c\udf0a"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -1774,6 +1798,14 @@
|
|||||||
"title_aux": "Masquerade Nodes"
|
"title_aux": "Masquerade Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/BahaC/ComfyUI-ZonosTTS": [
|
||||||
|
[
|
||||||
|
"ZonosTextToSpeech"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Zonos TTS Node"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Beinsezii/bsz-cui-extras": [
|
"https://github.com/Beinsezii/bsz-cui-extras": [
|
||||||
[
|
[
|
||||||
"BSZAbsoluteHires",
|
"BSZAbsoluteHires",
|
||||||
@@ -1907,6 +1939,7 @@
|
|||||||
"ComfyUIDeployExternalAudio",
|
"ComfyUIDeployExternalAudio",
|
||||||
"ComfyUIDeployExternalBoolean",
|
"ComfyUIDeployExternalBoolean",
|
||||||
"ComfyUIDeployExternalCheckpoint",
|
"ComfyUIDeployExternalCheckpoint",
|
||||||
|
"ComfyUIDeployExternalEXR",
|
||||||
"ComfyUIDeployExternalFaceModel",
|
"ComfyUIDeployExternalFaceModel",
|
||||||
"ComfyUIDeployExternalImage",
|
"ComfyUIDeployExternalImage",
|
||||||
"ComfyUIDeployExternalImageAlpha",
|
"ComfyUIDeployExternalImageAlpha",
|
||||||
@@ -2150,6 +2183,17 @@
|
|||||||
"title_aux": "ComfyUI-Rework-X"
|
"title_aux": "ComfyUI-Rework-X"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/BlueprintCoding/ComfyUI_AIDocsClinicalTools": [
|
||||||
|
[
|
||||||
|
"Multi Int",
|
||||||
|
"Multi Text",
|
||||||
|
"MultiInt",
|
||||||
|
"MultiText"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "The AI Doctors Clinical Tools"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/BoyuanJiang/FitDiT-ComfyUI": [
|
"https://github.com/BoyuanJiang/FitDiT-ComfyUI": [
|
||||||
[
|
[
|
||||||
"FitDiTLoader",
|
"FitDiTLoader",
|
||||||
@@ -2181,6 +2225,15 @@
|
|||||||
"title_aux": "BRIA AI API nodes"
|
"title_aux": "BRIA AI API nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/BuffMcBigHuge/ComfyUI-Zonos": [
|
||||||
|
[
|
||||||
|
"ZonosEmotion",
|
||||||
|
"ZonosGenerate"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Zonos"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Burgstall-labs/ComfyUI-BS_Kokoro-onnx": [
|
"https://github.com/Burgstall-labs/ComfyUI-BS_Kokoro-onnx": [
|
||||||
[
|
[
|
||||||
"Kokoro TTS"
|
"Kokoro TTS"
|
||||||
@@ -2210,6 +2263,14 @@
|
|||||||
"title_aux": "ccsun_node"
|
"title_aux": "ccsun_node"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/CY-CHENYUE/ComfyUI-Free-GPU": [
|
||||||
|
[
|
||||||
|
"FreeGPUMemory"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Free-GPU"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/CY-CHENYUE/ComfyUI-InpaintEasy": [
|
"https://github.com/CY-CHENYUE/ComfyUI-InpaintEasy": [
|
||||||
[
|
[
|
||||||
"CropByMask",
|
"CropByMask",
|
||||||
@@ -2389,6 +2450,7 @@
|
|||||||
"ClownSamplerAdvanced",
|
"ClownSamplerAdvanced",
|
||||||
"ClownsharKSampler",
|
"ClownsharKSampler",
|
||||||
"ClownsharKSamplerAutomation",
|
"ClownsharKSamplerAutomation",
|
||||||
|
"ClownsharKSamplerAutomation_Advanced",
|
||||||
"ClownsharKSamplerAutomation_Beta",
|
"ClownsharKSamplerAutomation_Beta",
|
||||||
"ClownsharKSamplerGuide",
|
"ClownsharKSamplerGuide",
|
||||||
"ClownsharKSamplerGuide_Beta",
|
"ClownsharKSamplerGuide_Beta",
|
||||||
@@ -2405,6 +2467,7 @@
|
|||||||
"ConditioningToBase64",
|
"ConditioningToBase64",
|
||||||
"ConditioningTruncate",
|
"ConditioningTruncate",
|
||||||
"ConditioningZeroAndTruncate",
|
"ConditioningZeroAndTruncate",
|
||||||
|
"Constant Scheduler",
|
||||||
"EmptyLatentImage64",
|
"EmptyLatentImage64",
|
||||||
"EmptyLatentImageCustom",
|
"EmptyLatentImageCustom",
|
||||||
"Film Grain",
|
"Film Grain",
|
||||||
@@ -2439,6 +2502,7 @@
|
|||||||
"Legacy_ClownsharKSampler",
|
"Legacy_ClownsharKSampler",
|
||||||
"Legacy_ClownsharKSamplerGuides",
|
"Legacy_ClownsharKSamplerGuides",
|
||||||
"Legacy_SharkSampler",
|
"Legacy_SharkSampler",
|
||||||
|
"Linear Quadratic Advanced",
|
||||||
"MaskToggle",
|
"MaskToggle",
|
||||||
"ModelSamplingAdvanced",
|
"ModelSamplingAdvanced",
|
||||||
"ModelSamplingAdvancedResolution",
|
"ModelSamplingAdvancedResolution",
|
||||||
@@ -2943,7 +3007,6 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/Dobidop/ComfyStereo": [
|
"https://github.com/Dobidop/ComfyStereo": [
|
||||||
[
|
[
|
||||||
"LazyStereo",
|
|
||||||
"StereoImageNode"
|
"StereoImageNode"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -3018,8 +3081,6 @@
|
|||||||
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
||||||
[
|
[
|
||||||
"CharCountTextBox",
|
"CharCountTextBox",
|
||||||
"FluxPro11_TOGETHER",
|
|
||||||
"FluxPro_TOGETHER",
|
|
||||||
"GenerateImage_VENICE",
|
"GenerateImage_VENICE",
|
||||||
"GenerateText_VENICE",
|
"GenerateText_VENICE",
|
||||||
"UpscaleImage_VENICE",
|
"UpscaleImage_VENICE",
|
||||||
@@ -3919,27 +3980,6 @@
|
|||||||
"title_aux": "ComfyUI-Counternodes"
|
"title_aux": "ComfyUI-Counternodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
|
|
||||||
[
|
|
||||||
"ConcatenateString",
|
|
||||||
"ItemFromDropdown",
|
|
||||||
"IterationDriver",
|
|
||||||
"JoinImages",
|
|
||||||
"LineToConsole",
|
|
||||||
"NumberFromList",
|
|
||||||
"NumbersToList",
|
|
||||||
"PlotImages",
|
|
||||||
"StringFromList",
|
|
||||||
"StringToLabel",
|
|
||||||
"StringsToList",
|
|
||||||
"ezMath",
|
|
||||||
"ezXY_AssemblePlot",
|
|
||||||
"ezXY_Driver"
|
|
||||||
],
|
|
||||||
{
|
|
||||||
"title_aux": "ezXY scripts and nodes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes": [
|
"https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes": [
|
||||||
[
|
[
|
||||||
"Danbooru (ID)",
|
"Danbooru (ID)",
|
||||||
@@ -4283,6 +4323,15 @@
|
|||||||
"title_aux": "Hunyuan Video Resolutions"
|
"title_aux": "Hunyuan Video Resolutions"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Hellfiredragon/comfyui-image-manipulation": [
|
||||||
|
[
|
||||||
|
"AlphaApplyMaskToImage",
|
||||||
|
"CreateMaskFromColorsNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "comfyui-image-manipulation"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/HelloVision/ComfyUI_HelloMeme": [
|
"https://github.com/HelloVision/ComfyUI_HelloMeme": [
|
||||||
[
|
[
|
||||||
"CropPortrait",
|
"CropPortrait",
|
||||||
@@ -5070,6 +5119,7 @@
|
|||||||
"Simple Extract Lora From Text",
|
"Simple Extract Lora From Text",
|
||||||
"Simple Image Saver (as Forge)",
|
"Simple Image Saver (as Forge)",
|
||||||
"Simple Load Image With Metadata",
|
"Simple Load Image With Metadata",
|
||||||
|
"Simple Load Images from Dir",
|
||||||
"Simple Load Line From Text File",
|
"Simple Load Line From Text File",
|
||||||
"Simple Lora Loader"
|
"Simple Lora Loader"
|
||||||
],
|
],
|
||||||
@@ -5176,10 +5226,9 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/KoreTeknology/ComfyUI-Universal-Styler": [
|
"https://github.com/KoreTeknology/ComfyUI-Universal-Styler": [
|
||||||
[
|
[
|
||||||
"Load Nai Styles Complex CSV",
|
"\ud83d\udee1\ufe0f Load Scripts from Database",
|
||||||
"ShowText|pysssss",
|
"\ud83d\udee1\ufe0f Save Script to Database (In progress)",
|
||||||
"Universal_Styler_Node",
|
"\ud83d\udee1\ufe0f Set Main Channel"
|
||||||
"concat"
|
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI Universal Styler"
|
"title_aux": "ComfyUI Universal Styler"
|
||||||
@@ -6254,6 +6303,8 @@
|
|||||||
"iToolsLineLoader",
|
"iToolsLineLoader",
|
||||||
"iToolsLoadImagePlus",
|
"iToolsLoadImagePlus",
|
||||||
"iToolsLoadImages",
|
"iToolsLoadImages",
|
||||||
|
"iToolsLoadRandomImage",
|
||||||
|
"iToolsPreviewText",
|
||||||
"iToolsPromptLoader",
|
"iToolsPromptLoader",
|
||||||
"iToolsPromptSaver",
|
"iToolsPromptSaver",
|
||||||
"iToolsPromptStyler",
|
"iToolsPromptStyler",
|
||||||
@@ -6432,9 +6483,12 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/MushroomFleet/DJZ-KokoroTTS": [
|
"https://github.com/MushroomFleet/DJZ-KokoroTTS": [
|
||||||
[
|
[
|
||||||
|
"KokoroTTS_LoadVoice_v1",
|
||||||
|
"KokoroTTS_SaveVoice_v1",
|
||||||
"KokoroTTS_v1",
|
"KokoroTTS_v1",
|
||||||
"KokoroTTS_v2",
|
"KokoroTTS_v2",
|
||||||
"KokoroTTS_v3"
|
"KokoroTTS_v3",
|
||||||
|
"KokoroTTS_v4"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "KokoroTTS Node"
|
"title_aux": "KokoroTTS Node"
|
||||||
@@ -6453,6 +6507,7 @@
|
|||||||
"BlackBarsV1",
|
"BlackBarsV1",
|
||||||
"BlackBarsV2",
|
"BlackBarsV2",
|
||||||
"BlackBarsV3",
|
"BlackBarsV3",
|
||||||
|
"BracketCleaner",
|
||||||
"CRT_Effect_v1",
|
"CRT_Effect_v1",
|
||||||
"CathodeRayEffect",
|
"CathodeRayEffect",
|
||||||
"ClassicFilmEffect",
|
"ClassicFilmEffect",
|
||||||
@@ -6505,6 +6560,7 @@
|
|||||||
"ParametricMeshGenV2",
|
"ParametricMeshGenV2",
|
||||||
"ProjectFilePathNode",
|
"ProjectFilePathNode",
|
||||||
"PromptCleaner",
|
"PromptCleaner",
|
||||||
|
"PromptCleanerV2",
|
||||||
"PromptDupeRemover",
|
"PromptDupeRemover",
|
||||||
"PromptDupeRemoverV2",
|
"PromptDupeRemoverV2",
|
||||||
"PromptInject",
|
"PromptInject",
|
||||||
@@ -6546,10 +6602,13 @@
|
|||||||
"VideoTrails",
|
"VideoTrails",
|
||||||
"VideoTrailsV2",
|
"VideoTrailsV2",
|
||||||
"VideoVignettingV1",
|
"VideoVignettingV1",
|
||||||
|
"VoiceEffects",
|
||||||
|
"VoiceEffects2",
|
||||||
"WaveletCompose",
|
"WaveletCompose",
|
||||||
"WaveletDecompose",
|
"WaveletDecompose",
|
||||||
"WinampViz",
|
"WinampViz",
|
||||||
"WinampVizV2",
|
"WinampVizV2",
|
||||||
|
"ZenkaiPoseMap",
|
||||||
"ZenkaiPrompt",
|
"ZenkaiPrompt",
|
||||||
"ZenkaiPromptV2",
|
"ZenkaiPromptV2",
|
||||||
"ZenkaiPromptV3",
|
"ZenkaiPromptV3",
|
||||||
@@ -6562,6 +6621,14 @@
|
|||||||
"title_aux": "DJZ-Nodes"
|
"title_aux": "DJZ-Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/MushroomFleet/DJZ-Pedalboard": [
|
||||||
|
[
|
||||||
|
"DJZ_Pedalboard"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "DJZ-Pedalboard"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/MuziekMagie/ComfyUI-Matchering": [
|
"https://github.com/MuziekMagie/ComfyUI-Matchering": [
|
||||||
[
|
[
|
||||||
"Matchering",
|
"Matchering",
|
||||||
@@ -6962,6 +7029,7 @@
|
|||||||
"SUPIR Sampler \ud83d\udcacED",
|
"SUPIR Sampler \ud83d\udcacED",
|
||||||
"Save Image \ud83d\udd14ED",
|
"Save Image \ud83d\udd14ED",
|
||||||
"Simple Text \ud83d\udcacED",
|
"Simple Text \ud83d\udcacED",
|
||||||
|
"TIPO Script \ud83d\udcacED",
|
||||||
"Ultimate SD Upscale \ud83d\udcacED",
|
"Ultimate SD Upscale \ud83d\udcacED",
|
||||||
"Wildcard Encode \ud83d\udcacED"
|
"Wildcard Encode \ud83d\udcacED"
|
||||||
],
|
],
|
||||||
@@ -7221,6 +7289,14 @@
|
|||||||
"title_aux": "PyTorch 360\u00b0 Image Conversion Toolkit for ComfyUI"
|
"title_aux": "PyTorch 360\u00b0 Image Conversion Toolkit for ComfyUI"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/PrunaAI/ComfyUI_pruna": [
|
||||||
|
[
|
||||||
|
"CompileModel"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Pruna nodes for ComfyUI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Pseudotools/Pseudocomfy": [
|
"https://github.com/Pseudotools/Pseudocomfy": [
|
||||||
[
|
[
|
||||||
"Combiner",
|
"Combiner",
|
||||||
@@ -7371,6 +7447,14 @@
|
|||||||
"title_aux": "Panoramic Image Stitcher"
|
"title_aux": "Panoramic Image Stitcher"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/RodrigoSKohl/comfyui-tryoff-anyone": [
|
||||||
|
[
|
||||||
|
"TryOffAnyoneNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "TryOff Anyone"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/RomanKuschanow/ComfyUI-Advanced-Latent-Control": [
|
"https://github.com/RomanKuschanow/ComfyUI-Advanced-Latent-Control": [
|
||||||
[
|
[
|
||||||
"LatentAddTransform",
|
"LatentAddTransform",
|
||||||
@@ -7456,6 +7540,7 @@
|
|||||||
"MaskBatchComposite(FaceParsing)",
|
"MaskBatchComposite(FaceParsing)",
|
||||||
"MaskBlackOut(FaceParsing)",
|
"MaskBlackOut(FaceParsing)",
|
||||||
"MaskBorderDissolve(FaceParsing)",
|
"MaskBorderDissolve(FaceParsing)",
|
||||||
|
"MaskBorderDissolveAdvanced(FaceParsing)",
|
||||||
"MaskComposite(FaceParsing)",
|
"MaskComposite(FaceParsing)",
|
||||||
"MaskCropWithBBox(FaceParsing)",
|
"MaskCropWithBBox(FaceParsing)",
|
||||||
"MaskInsertWithBBox(FaceParsing)",
|
"MaskInsertWithBBox(FaceParsing)",
|
||||||
@@ -7555,6 +7640,14 @@
|
|||||||
"title_aux": "ComfyUI-LexTools"
|
"title_aux": "ComfyUI-LexTools"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/SS-snap/ComfyUI-LBW_flux": [
|
||||||
|
[
|
||||||
|
"LoraBlockWeight_Flux"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-LBW_flux"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/SS-snap/ComfyUI-Snap_Processing": [
|
"https://github.com/SS-snap/ComfyUI-Snap_Processing": [
|
||||||
[
|
[
|
||||||
"AreaCalculator",
|
"AreaCalculator",
|
||||||
@@ -8531,7 +8624,9 @@
|
|||||||
"SDVN Dic Convert",
|
"SDVN Dic Convert",
|
||||||
"SDVN Easy IPAdapter weight",
|
"SDVN Easy IPAdapter weight",
|
||||||
"SDVN Exif check",
|
"SDVN Exif check",
|
||||||
|
"SDVN Fill Square",
|
||||||
"SDVN Filter List",
|
"SDVN Filter List",
|
||||||
|
"SDVN Flip Image",
|
||||||
"SDVN Google Imagen",
|
"SDVN Google Imagen",
|
||||||
"SDVN IC-Light v2",
|
"SDVN IC-Light v2",
|
||||||
"SDVN Image Adjust",
|
"SDVN Image Adjust",
|
||||||
@@ -9673,6 +9768,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/Visionatrix/ComfyUI-Visionatrix": [
|
"https://github.com/Visionatrix/ComfyUI-Visionatrix": [
|
||||||
[
|
[
|
||||||
|
"StyleAlignedBatchAlign",
|
||||||
"VixCheckboxLogic",
|
"VixCheckboxLogic",
|
||||||
"VixDynamicLoraDefinition",
|
"VixDynamicLoraDefinition",
|
||||||
"VixUiAspectRatioSelector",
|
"VixUiAspectRatioSelector",
|
||||||
@@ -9703,7 +9799,9 @@
|
|||||||
"VrchDelayOSCControlNode",
|
"VrchDelayOSCControlNode",
|
||||||
"VrchFloatKeyControlNode",
|
"VrchFloatKeyControlNode",
|
||||||
"VrchFloatOSCControlNode",
|
"VrchFloatOSCControlNode",
|
||||||
|
"VrchImageChannelLoaderNode",
|
||||||
"VrchImageFlipBookWebViewerNode",
|
"VrchImageFlipBookWebViewerNode",
|
||||||
|
"VrchImagePreviewBackgroundNode",
|
||||||
"VrchImageSaverNode",
|
"VrchImageSaverNode",
|
||||||
"VrchImageSwitchOSCControlNode",
|
"VrchImageSwitchOSCControlNode",
|
||||||
"VrchImageWebViewerNode",
|
"VrchImageWebViewerNode",
|
||||||
@@ -10307,6 +10405,7 @@
|
|||||||
"ConvertRasterToVectorBW",
|
"ConvertRasterToVectorBW",
|
||||||
"ConvertRasterToVectorColor",
|
"ConvertRasterToVectorColor",
|
||||||
"ConvertVectorToRaster",
|
"ConvertVectorToRaster",
|
||||||
|
"SVGPreview",
|
||||||
"SaveSVG"
|
"SaveSVG"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -11245,6 +11344,7 @@
|
|||||||
[
|
[
|
||||||
"Cfg Literal (Image Saver)",
|
"Cfg Literal (Image Saver)",
|
||||||
"Checkpoint Loader with Name (Image Saver)",
|
"Checkpoint Loader with Name (Image Saver)",
|
||||||
|
"Civitai Hash Fetcher (Image Saver)",
|
||||||
"Float Literal (Image Saver)",
|
"Float Literal (Image Saver)",
|
||||||
"Image Saver",
|
"Image Saver",
|
||||||
"Int Literal (Image Saver)",
|
"Int Literal (Image Saver)",
|
||||||
@@ -11349,6 +11449,7 @@
|
|||||||
"Noise from Palette [Dream]",
|
"Noise from Palette [Dream]",
|
||||||
"Palette Color Align [Dream]",
|
"Palette Color Align [Dream]",
|
||||||
"Palette Color Shift [Dream]",
|
"Palette Color Shift [Dream]",
|
||||||
|
"Random Prompt Words [Dream]",
|
||||||
"Sample Image Area as Palette [Dream]",
|
"Sample Image Area as Palette [Dream]",
|
||||||
"Sample Image as Palette [Dream]",
|
"Sample Image as Palette [Dream]",
|
||||||
"Saw Curve [Dream]",
|
"Saw Curve [Dream]",
|
||||||
@@ -11475,6 +11576,7 @@
|
|||||||
"Sage_ConstructMetadata",
|
"Sage_ConstructMetadata",
|
||||||
"Sage_ConstructMetadataLite",
|
"Sage_ConstructMetadataLite",
|
||||||
"Sage_DualCLIPTextEncode",
|
"Sage_DualCLIPTextEncode",
|
||||||
|
"Sage_DualCLIPTextEncodeLumina2",
|
||||||
"Sage_EmptyLatentImagePassthrough",
|
"Sage_EmptyLatentImagePassthrough",
|
||||||
"Sage_GetFileHash",
|
"Sage_GetFileHash",
|
||||||
"Sage_JoinText",
|
"Sage_JoinText",
|
||||||
@@ -11488,7 +11590,6 @@
|
|||||||
"Sage_ModelInfo",
|
"Sage_ModelInfo",
|
||||||
"Sage_ModelReport",
|
"Sage_ModelReport",
|
||||||
"Sage_PonyPrefix",
|
"Sage_PonyPrefix",
|
||||||
"Sage_RenormCFG",
|
|
||||||
"Sage_SamplerInfo",
|
"Sage_SamplerInfo",
|
||||||
"Sage_SaveImageWithMetadata",
|
"Sage_SaveImageWithMetadata",
|
||||||
"Sage_SetBool",
|
"Sage_SetBool",
|
||||||
@@ -11640,6 +11741,18 @@
|
|||||||
"title_aux": "Save Image Extended for ComfyUI"
|
"title_aux": "Save Image Extended for ComfyUI"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/austinbrown34/ComfyUI-IO-Helpers": [
|
||||||
|
[
|
||||||
|
"EncodedPromptFromFile",
|
||||||
|
"EncodedPromptToFile",
|
||||||
|
"IO_LoadImage",
|
||||||
|
"SampledLatentsFromFile",
|
||||||
|
"SampledLatentsToFile"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-IO-Helpers"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/avatechai/avatar-graph-comfyui": [
|
"https://github.com/avatechai/avatar-graph-comfyui": [
|
||||||
[
|
[
|
||||||
"ApplyMeshTransformAsShapeKey",
|
"ApplyMeshTransformAsShapeKey",
|
||||||
@@ -11792,6 +11905,7 @@
|
|||||||
"SP_HiresGen_HiresCfg",
|
"SP_HiresGen_HiresCfg",
|
||||||
"SP_HiresGen_Sharpen",
|
"SP_HiresGen_Sharpen",
|
||||||
"SP_HunyuanLoader",
|
"SP_HunyuanLoader",
|
||||||
|
"SP_ImpactSwitchCombo",
|
||||||
"SP_KSampler",
|
"SP_KSampler",
|
||||||
"SP_KSamplerSelect",
|
"SP_KSamplerSelect",
|
||||||
"SP_KoboldCpp",
|
"SP_KoboldCpp",
|
||||||
@@ -11946,6 +12060,14 @@
|
|||||||
"title_aux": "Mikey Nodes"
|
"title_aux": "Mikey Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/bbtaivi/ComfyUI-Aiv-Param": [
|
||||||
|
[
|
||||||
|
"AivParam"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "AIV ComfyUI Node"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/bear2b/comfyui-argo-nodes": [
|
"https://github.com/bear2b/comfyui-argo-nodes": [
|
||||||
[
|
[
|
||||||
"ColorMatrixGPU",
|
"ColorMatrixGPU",
|
||||||
@@ -12580,6 +12702,7 @@
|
|||||||
[
|
[
|
||||||
"ClipLoaderGGUF",
|
"ClipLoaderGGUF",
|
||||||
"DualClipLoaderGGUF",
|
"DualClipLoaderGGUF",
|
||||||
|
"GGUFRun",
|
||||||
"GGUFSave",
|
"GGUFSave",
|
||||||
"GGUFUndo",
|
"GGUFUndo",
|
||||||
"LoaderGGUF",
|
"LoaderGGUF",
|
||||||
@@ -13416,6 +13539,7 @@
|
|||||||
"LayerUtility: NumberCalculatorV2",
|
"LayerUtility: NumberCalculatorV2",
|
||||||
"LayerUtility: PrintInfo",
|
"LayerUtility: PrintInfo",
|
||||||
"LayerUtility: PurgeVRAM",
|
"LayerUtility: PurgeVRAM",
|
||||||
|
"LayerUtility: PurgeVRAM V2",
|
||||||
"LayerUtility: QueueStop",
|
"LayerUtility: QueueStop",
|
||||||
"LayerUtility: RGB Value",
|
"LayerUtility: RGB Value",
|
||||||
"LayerUtility: RandomGenerator",
|
"LayerUtility: RandomGenerator",
|
||||||
@@ -13477,6 +13601,7 @@
|
|||||||
"LayerMask: TransparentBackgroundUltra",
|
"LayerMask: TransparentBackgroundUltra",
|
||||||
"LayerMask: YoloV8Detect",
|
"LayerMask: YoloV8Detect",
|
||||||
"LayerUtility: AddBlindWaterMark",
|
"LayerUtility: AddBlindWaterMark",
|
||||||
|
"LayerUtility: Collage",
|
||||||
"LayerUtility: CreateQRCode",
|
"LayerUtility: CreateQRCode",
|
||||||
"LayerUtility: DecodeQRCode",
|
"LayerUtility: DecodeQRCode",
|
||||||
"LayerUtility: DeepSeekAPI",
|
"LayerUtility: DeepSeekAPI",
|
||||||
@@ -13993,6 +14118,7 @@
|
|||||||
"CLIPTextEncodeControlnet",
|
"CLIPTextEncodeControlnet",
|
||||||
"CLIPTextEncodeFlux",
|
"CLIPTextEncodeFlux",
|
||||||
"CLIPTextEncodeHunyuanDiT",
|
"CLIPTextEncodeHunyuanDiT",
|
||||||
|
"CLIPTextEncodeLumina2",
|
||||||
"CLIPTextEncodePixArtAlpha",
|
"CLIPTextEncodePixArtAlpha",
|
||||||
"CLIPTextEncodeSD3",
|
"CLIPTextEncodeSD3",
|
||||||
"CLIPTextEncodeSDXL",
|
"CLIPTextEncodeSDXL",
|
||||||
@@ -14108,6 +14234,7 @@
|
|||||||
"Mahiro",
|
"Mahiro",
|
||||||
"MaskComposite",
|
"MaskComposite",
|
||||||
"MaskToImage",
|
"MaskToImage",
|
||||||
|
"ModelComputeDtype",
|
||||||
"ModelMergeAdd",
|
"ModelMergeAdd",
|
||||||
"ModelMergeAuraflow",
|
"ModelMergeAuraflow",
|
||||||
"ModelMergeBlocks",
|
"ModelMergeBlocks",
|
||||||
@@ -14148,6 +14275,7 @@
|
|||||||
"RandomNoise",
|
"RandomNoise",
|
||||||
"RebatchImages",
|
"RebatchImages",
|
||||||
"RebatchLatents",
|
"RebatchLatents",
|
||||||
|
"RenormCFG",
|
||||||
"RepeatImageBatch",
|
"RepeatImageBatch",
|
||||||
"RepeatLatentBatch",
|
"RepeatLatentBatch",
|
||||||
"RescaleCFG",
|
"RescaleCFG",
|
||||||
@@ -14876,6 +15004,14 @@
|
|||||||
"title_aux": "ComfyUI-LoadFiles"
|
"title_aux": "ComfyUI-LoadFiles"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/dasilva333/ComfyUI_ContrastingColor": [
|
||||||
|
[
|
||||||
|
"ContrastingComplementaryColor|pysssss"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_ContrastingColor"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/dave-palt/comfyui_DSP_imagehelpers": [
|
"https://github.com/dave-palt/comfyui_DSP_imagehelpers": [
|
||||||
[
|
[
|
||||||
"dsp-imagehelpers-concat"
|
"dsp-imagehelpers-concat"
|
||||||
@@ -15005,6 +15141,9 @@
|
|||||||
"DavchaCLIPTextEncode",
|
"DavchaCLIPTextEncode",
|
||||||
"DavchaConditioningConcat",
|
"DavchaConditioningConcat",
|
||||||
"DavchaEmptyLatentImage",
|
"DavchaEmptyLatentImage",
|
||||||
|
"DavchaLLM",
|
||||||
|
"DavchaLLMAdvanced",
|
||||||
|
"DavchaLoadLLM",
|
||||||
"DavchaLoadVideo",
|
"DavchaLoadVideo",
|
||||||
"DavchaMaskImage",
|
"DavchaMaskImage",
|
||||||
"DavchaModelMergeSD1",
|
"DavchaModelMergeSD1",
|
||||||
@@ -15404,9 +15543,12 @@
|
|||||||
"Qwen2AudioInstruct",
|
"Qwen2AudioInstruct",
|
||||||
"StringToDict",
|
"StringToDict",
|
||||||
"SwitchDuo",
|
"SwitchDuo",
|
||||||
|
"TextBoxStyle",
|
||||||
"TextLineSelect",
|
"TextLineSelect",
|
||||||
"TextLinesToList",
|
"TextLinesToList",
|
||||||
"TextPlusPlus"
|
"TextMargins",
|
||||||
|
"TextPlusPlus",
|
||||||
|
"TextShadow"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "comfyui-dreambait-nodes"
|
"title_aux": "comfyui-dreambait-nodes"
|
||||||
@@ -15469,6 +15611,15 @@
|
|||||||
"title_aux": "comfyui_dygen"
|
"title_aux": "comfyui_dygen"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/dzqdzq/ComfyUI-crop-alpha": [
|
||||||
|
[
|
||||||
|
"FastAlphaCropper",
|
||||||
|
"ShrinkImage"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-crop-alpha"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/e7mac/ComfyUI-ShadertoyGL": [
|
"https://github.com/e7mac/ComfyUI-ShadertoyGL": [
|
||||||
[
|
[
|
||||||
"ColorChannelOffset",
|
"ColorChannelOffset",
|
||||||
@@ -15558,6 +15709,8 @@
|
|||||||
"MaskFromRGB_KMeans",
|
"MaskFromRGB_KMeans",
|
||||||
"ParallaxZoom",
|
"ParallaxZoom",
|
||||||
"Random_Style_Mixture",
|
"Random_Style_Mixture",
|
||||||
|
"SDAnyConverter",
|
||||||
|
"SDTypeConverter",
|
||||||
"SaveImageAdvanced",
|
"SaveImageAdvanced",
|
||||||
"SavePosEmbeds",
|
"SavePosEmbeds",
|
||||||
"VAEDecode_to_folder",
|
"VAEDecode_to_folder",
|
||||||
@@ -16608,14 +16761,6 @@
|
|||||||
"title_aux": "String Converter"
|
"title_aux": "String Converter"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/gmorks/ComfyUI-Animagine-Prompt": [
|
|
||||||
[
|
|
||||||
"AnimaginePrompt"
|
|
||||||
],
|
|
||||||
{
|
|
||||||
"title_aux": "ComfyUI Animagine prompt"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"https://github.com/gmorks/ComfyUI-SendToDiscord": [
|
"https://github.com/gmorks/ComfyUI-SendToDiscord": [
|
||||||
[
|
[
|
||||||
"PreviewImageWithDiscord"
|
"PreviewImageWithDiscord"
|
||||||
@@ -17162,21 +17307,6 @@
|
|||||||
"title_aux": "ComfyUI-ToolBox"
|
"title_aux": "ComfyUI-ToolBox"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/hdfhssg/ComfyUI_pxtool": [
|
|
||||||
[
|
|
||||||
"CivitaiHelper",
|
|
||||||
"DanbooruCharacterTag",
|
|
||||||
"E621CharacterTag",
|
|
||||||
"NegativeTag",
|
|
||||||
"QualityTag",
|
|
||||||
"RandomArtists",
|
|
||||||
"RandomArtistsAdvanced",
|
|
||||||
"RandomTag"
|
|
||||||
],
|
|
||||||
{
|
|
||||||
"title_aux": "ComfyUI_pxtool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"https://github.com/heshengtao/comfyui_LLM_party": [
|
"https://github.com/heshengtao/comfyui_LLM_party": [
|
||||||
[
|
[
|
||||||
"About_us",
|
"About_us",
|
||||||
@@ -17418,6 +17548,7 @@
|
|||||||
"WWAA_GBCamera",
|
"WWAA_GBCamera",
|
||||||
"WWAA_ImageLoader",
|
"WWAA_ImageLoader",
|
||||||
"WWAA_ImageToTextFile",
|
"WWAA_ImageToTextFile",
|
||||||
|
"WWAA_NestedLoopCounter",
|
||||||
"WWAA_PromptWriter"
|
"WWAA_PromptWriter"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -17538,12 +17669,11 @@
|
|||||||
"BiRefNet",
|
"BiRefNet",
|
||||||
"ControlImagePreprocessor",
|
"ControlImagePreprocessor",
|
||||||
"ControlNetModelLoader",
|
"ControlNetModelLoader",
|
||||||
|
"DiffusersMVModelMakeup",
|
||||||
|
"DiffusersMVPipelineLoader",
|
||||||
"DiffusersMVSampler",
|
"DiffusersMVSampler",
|
||||||
"DiffusersModelMakeup",
|
"DiffusersMVSchedulerLoader",
|
||||||
"DiffusersPipelineLoader",
|
"DiffusersMVVaeLoader",
|
||||||
"DiffusersSampler",
|
|
||||||
"DiffusersSchedulerLoader",
|
|
||||||
"DiffusersVaeLoader",
|
|
||||||
"ImagePreprocessor",
|
"ImagePreprocessor",
|
||||||
"LdmPipelineLoader",
|
"LdmPipelineLoader",
|
||||||
"LdmVaeLoader",
|
"LdmVaeLoader",
|
||||||
@@ -17861,7 +17991,8 @@
|
|||||||
[
|
[
|
||||||
"PROMPT_ENHANCER",
|
"PROMPT_ENHANCER",
|
||||||
"PROMPT_ENHANCER_CHAIN_CONTROL",
|
"PROMPT_ENHANCER_CHAIN_CONTROL",
|
||||||
"PROMPT_ENHANCER_CHAIN_RANDOM"
|
"PROMPT_ENHANCER_CHAIN_RANDOM",
|
||||||
|
"PROMPT_ENHANCER_REPROMPT"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "comfyui-prompt-enhancer"
|
"title_aux": "comfyui-prompt-enhancer"
|
||||||
@@ -18502,6 +18633,7 @@
|
|||||||
"LoadLoraFromCivitAI",
|
"LoadLoraFromCivitAI",
|
||||||
"LoadLoraFromComfyOnline",
|
"LoadLoraFromComfyOnline",
|
||||||
"LoadLoraFromHF",
|
"LoadLoraFromHF",
|
||||||
|
"LoadLoraFromHFWithToken",
|
||||||
"SaveAudioAsWav",
|
"SaveAudioAsWav",
|
||||||
"SaveText"
|
"SaveText"
|
||||||
],
|
],
|
||||||
@@ -18876,6 +19008,15 @@
|
|||||||
"title_aux": "ComfyUI LayerDivider"
|
"title_aux": "ComfyUI LayerDivider"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/juehackr/comfyui_fk_server": [
|
||||||
|
[
|
||||||
|
"FK_Node",
|
||||||
|
"FK_ShowBaseNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "comfyui_fk_server"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/jurdnisglobby/ComfyUI-Jurdns-Groq-Node": [
|
"https://github.com/jurdnisglobby/ComfyUI-Jurdns-Groq-Node": [
|
||||||
[
|
[
|
||||||
"JurdnsGroqAPIPromptEnhancer"
|
"JurdnsGroqAPIPromptEnhancer"
|
||||||
@@ -18919,6 +19060,7 @@
|
|||||||
"Bjornulf_DisplayNote",
|
"Bjornulf_DisplayNote",
|
||||||
"Bjornulf_EmptyVideoLatentWithSingle",
|
"Bjornulf_EmptyVideoLatentWithSingle",
|
||||||
"Bjornulf_FFmpegConfig",
|
"Bjornulf_FFmpegConfig",
|
||||||
|
"Bjornulf_FourImageViewer",
|
||||||
"Bjornulf_FreeVRAM",
|
"Bjornulf_FreeVRAM",
|
||||||
"Bjornulf_GrayscaleTransform",
|
"Bjornulf_GrayscaleTransform",
|
||||||
"Bjornulf_GreenScreenToTransparency",
|
"Bjornulf_GreenScreenToTransparency",
|
||||||
@@ -18929,6 +19071,7 @@
|
|||||||
"Bjornulf_ImageDetails",
|
"Bjornulf_ImageDetails",
|
||||||
"Bjornulf_ImageMaskCutter",
|
"Bjornulf_ImageMaskCutter",
|
||||||
"Bjornulf_ImageNote",
|
"Bjornulf_ImageNote",
|
||||||
|
"Bjornulf_ImageNoteLoadImage",
|
||||||
"Bjornulf_ImagesListToVideo",
|
"Bjornulf_ImagesListToVideo",
|
||||||
"Bjornulf_KokoroTTS",
|
"Bjornulf_KokoroTTS",
|
||||||
"Bjornulf_LatentResolutionSelector",
|
"Bjornulf_LatentResolutionSelector",
|
||||||
@@ -18971,6 +19114,7 @@
|
|||||||
"Bjornulf_PassPreviewImage",
|
"Bjornulf_PassPreviewImage",
|
||||||
"Bjornulf_PauseResume",
|
"Bjornulf_PauseResume",
|
||||||
"Bjornulf_PickInput",
|
"Bjornulf_PickInput",
|
||||||
|
"Bjornulf_PickMe",
|
||||||
"Bjornulf_PreviewFirstImage",
|
"Bjornulf_PreviewFirstImage",
|
||||||
"Bjornulf_RandomImage",
|
"Bjornulf_RandomImage",
|
||||||
"Bjornulf_RandomLineFromInput",
|
"Bjornulf_RandomLineFromInput",
|
||||||
@@ -19007,10 +19151,13 @@
|
|||||||
"Bjornulf_TextGeneratorStyle",
|
"Bjornulf_TextGeneratorStyle",
|
||||||
"Bjornulf_TextGeneratorText2Video",
|
"Bjornulf_TextGeneratorText2Video",
|
||||||
"Bjornulf_TextReplace",
|
"Bjornulf_TextReplace",
|
||||||
|
"Bjornulf_TextSplitin10",
|
||||||
"Bjornulf_TextSplitin5",
|
"Bjornulf_TextSplitin5",
|
||||||
"Bjornulf_TextToAnything",
|
"Bjornulf_TextToAnything",
|
||||||
"Bjornulf_TextToSpeech",
|
"Bjornulf_TextToSpeech",
|
||||||
"Bjornulf_TextToStringAndSeed",
|
"Bjornulf_TextToStringAndSeed",
|
||||||
|
"Bjornulf_TextToVariable",
|
||||||
|
"Bjornulf_ToDoList",
|
||||||
"Bjornulf_VideoDetails",
|
"Bjornulf_VideoDetails",
|
||||||
"Bjornulf_VideoLatentResolutionSelector",
|
"Bjornulf_VideoLatentResolutionSelector",
|
||||||
"Bjornulf_VideoPingPong",
|
"Bjornulf_VideoPingPong",
|
||||||
@@ -19018,6 +19165,8 @@
|
|||||||
"Bjornulf_VideoToImagesList",
|
"Bjornulf_VideoToImagesList",
|
||||||
"Bjornulf_WriteText",
|
"Bjornulf_WriteText",
|
||||||
"Bjornulf_WriteTextAdvanced",
|
"Bjornulf_WriteTextAdvanced",
|
||||||
|
"Bjornulf_WriteTextPickMe",
|
||||||
|
"Bjornulf_WriteTextPickMeChain",
|
||||||
"Bjornulf_XTTSConfig",
|
"Bjornulf_XTTSConfig",
|
||||||
"Bjornulf_imagesToVideo",
|
"Bjornulf_imagesToVideo",
|
||||||
"Bjornulf_ollamaLoader"
|
"Bjornulf_ollamaLoader"
|
||||||
@@ -19660,6 +19809,7 @@
|
|||||||
"ImageConcanate",
|
"ImageConcanate",
|
||||||
"ImageConcatFromBatch",
|
"ImageConcatFromBatch",
|
||||||
"ImageConcatMulti",
|
"ImageConcatMulti",
|
||||||
|
"ImageCropByMask",
|
||||||
"ImageCropByMaskAndResize",
|
"ImageCropByMaskAndResize",
|
||||||
"ImageCropByMaskBatch",
|
"ImageCropByMaskBatch",
|
||||||
"ImageGrabPIL",
|
"ImageGrabPIL",
|
||||||
@@ -19671,6 +19821,7 @@
|
|||||||
"ImagePadForOutpaintMasked",
|
"ImagePadForOutpaintMasked",
|
||||||
"ImagePadForOutpaintTargetSize",
|
"ImagePadForOutpaintTargetSize",
|
||||||
"ImagePass",
|
"ImagePass",
|
||||||
|
"ImagePrepForICLora",
|
||||||
"ImageResizeKJ",
|
"ImageResizeKJ",
|
||||||
"ImageTensorList",
|
"ImageTensorList",
|
||||||
"ImageTransformByNormalizedAmplitude",
|
"ImageTransformByNormalizedAmplitude",
|
||||||
@@ -19679,6 +19830,7 @@
|
|||||||
"InjectNoiseToLatent",
|
"InjectNoiseToLatent",
|
||||||
"InsertImageBatchByIndexes",
|
"InsertImageBatchByIndexes",
|
||||||
"InsertImagesToBatchIndexed",
|
"InsertImagesToBatchIndexed",
|
||||||
|
"InsertLatentToIndexed",
|
||||||
"InterpolateCoords",
|
"InterpolateCoords",
|
||||||
"Intrinsic_lora_sampling",
|
"Intrinsic_lora_sampling",
|
||||||
"JoinStringMulti",
|
"JoinStringMulti",
|
||||||
@@ -19710,6 +19862,7 @@
|
|||||||
"SV3D_BatchSchedule",
|
"SV3D_BatchSchedule",
|
||||||
"SaveImageKJ",
|
"SaveImageKJ",
|
||||||
"SaveImageWithAlpha",
|
"SaveImageWithAlpha",
|
||||||
|
"SaveStringKJ",
|
||||||
"ScaleBatchPromptSchedule",
|
"ScaleBatchPromptSchedule",
|
||||||
"Screencap_mss",
|
"Screencap_mss",
|
||||||
"SeparateMasks",
|
"SeparateMasks",
|
||||||
@@ -19732,6 +19885,7 @@
|
|||||||
"TorchCompileCosmosModel",
|
"TorchCompileCosmosModel",
|
||||||
"TorchCompileLTXModel",
|
"TorchCompileLTXModel",
|
||||||
"TorchCompileModelFluxAdvanced",
|
"TorchCompileModelFluxAdvanced",
|
||||||
|
"TorchCompileModelHyVideo",
|
||||||
"TorchCompileVAE",
|
"TorchCompileVAE",
|
||||||
"TransitionImagesInBatch",
|
"TransitionImagesInBatch",
|
||||||
"TransitionImagesMulti",
|
"TransitionImagesMulti",
|
||||||
@@ -21727,6 +21881,16 @@
|
|||||||
"title_aux": "ComfyUI-CatvtonFluxWrapper"
|
"title_aux": "ComfyUI-CatvtonFluxWrapper"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/lum3on/comfyui_LLM_Polymath": [
|
||||||
|
[
|
||||||
|
"polymath_SaveAbsolute",
|
||||||
|
"polymath_chat",
|
||||||
|
"polymath_scraper"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "LLM Polymath Chat Node"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/lumalabs/ComfyUI-LumaAI-API": [
|
"https://github.com/lumalabs/ComfyUI-LumaAI-API": [
|
||||||
[
|
[
|
||||||
"CharacterReference",
|
"CharacterReference",
|
||||||
@@ -22019,6 +22183,23 @@
|
|||||||
"title_aux": "ComfyUI Checkpoint Automatic Config"
|
"title_aux": "ComfyUI Checkpoint Automatic Config"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/mediocreatmybest/ComfyUI-Transformers-Pipeline": [
|
||||||
|
[
|
||||||
|
"BatchProcessorTpl",
|
||||||
|
"CaptionExportTpl",
|
||||||
|
"CaptionGeneratorTpl",
|
||||||
|
"DebugNodeTpl",
|
||||||
|
"ExifMetadataExtractorTpl",
|
||||||
|
"Florence2NodeTpl",
|
||||||
|
"ImageLoaderTpl",
|
||||||
|
"ModelLoaderTpl",
|
||||||
|
"PresetModelListTpl",
|
||||||
|
"TaskListTpl"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Transformers-Pipeline"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/melMass/comfy_mtb": [
|
"https://github.com/melMass/comfy_mtb": [
|
||||||
[
|
[
|
||||||
"Animation Builder (mtb)",
|
"Animation Builder (mtb)",
|
||||||
@@ -22465,6 +22646,23 @@
|
|||||||
"title_aux": "Preset Dimensions"
|
"title_aux": "Preset Dimensions"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/mohseni-mr/ComfyUI-Mohseni-Kit": [
|
||||||
|
[
|
||||||
|
"FloatPreview"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Mohseni Kit"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"https://github.com/moon7star9/ComfyUI_BiRefNet_Universal": [
|
||||||
|
[
|
||||||
|
"BiRefNet_Loader",
|
||||||
|
"BiRefNet_Remove_Background"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_BiRefNet_Universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/morino-kumasan/comfyui-toml-prompt": [
|
"https://github.com/morino-kumasan/comfyui-toml-prompt": [
|
||||||
[
|
[
|
||||||
"IntSelector",
|
"IntSelector",
|
||||||
@@ -23054,15 +23252,6 @@
|
|||||||
"title_aux": "ComfyUI-TextOnSegs"
|
"title_aux": "ComfyUI-TextOnSegs"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/noarche/sd-webui-color-enhance": [
|
|
||||||
[
|
|
||||||
"MMakerColorBlend",
|
|
||||||
"MMakerColorEnhance"
|
|
||||||
],
|
|
||||||
{
|
|
||||||
"title_aux": "noarche/Color Enhance"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"https://github.com/noembryo/ComfyUI-noEmbryo": [
|
"https://github.com/noembryo/ComfyUI-noEmbryo": [
|
||||||
[
|
[
|
||||||
"PromptTermList1",
|
"PromptTermList1",
|
||||||
@@ -23240,6 +23429,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/olduvai-jp/ComfyUI-HfLoader": [
|
"https://github.com/olduvai-jp/ComfyUI-HfLoader": [
|
||||||
[
|
[
|
||||||
|
"ControlNet Loader From HF",
|
||||||
"Lora Loader From HF"
|
"Lora Loader From HF"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -24486,22 +24676,26 @@
|
|||||||
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes": [
|
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes": [
|
||||||
[
|
[
|
||||||
"DTypeConverter",
|
"DTypeConverter",
|
||||||
"DeltaControl",
|
|
||||||
"FPSMonitor",
|
"FPSMonitor",
|
||||||
"FastWebcamCapture",
|
"FastWebcamCapture",
|
||||||
"FloatControl",
|
"FloatControl",
|
||||||
"FloatSequence",
|
"FloatSequence",
|
||||||
|
"HandMaskNode",
|
||||||
|
"HandTrackingNode",
|
||||||
"IntControl",
|
"IntControl",
|
||||||
"IntSequence",
|
"IntSequence",
|
||||||
"IntegerMotionController",
|
"IntegerMotionController",
|
||||||
"IntervalControl",
|
|
||||||
"LazyCondition",
|
"LazyCondition",
|
||||||
"LoadImageFromPath_",
|
"LoadImageFromPath_",
|
||||||
"MotionController",
|
"MotionController",
|
||||||
"MultilineText",
|
"MultilineText",
|
||||||
"QuickShapeMask",
|
"QuickShapeMask",
|
||||||
"ROINode",
|
"ROINode",
|
||||||
|
"RepulsiveMaskNode",
|
||||||
|
"ResizeMaskNode",
|
||||||
"SimilarityFilter",
|
"SimilarityFilter",
|
||||||
|
"StateResetNode",
|
||||||
|
"StateTestNode",
|
||||||
"StringControl",
|
"StringControl",
|
||||||
"StringSequence",
|
"StringSequence",
|
||||||
"TextRenderer",
|
"TextRenderer",
|
||||||
@@ -24730,6 +24924,7 @@
|
|||||||
"FlipStreamSwitchLatent",
|
"FlipStreamSwitchLatent",
|
||||||
"FlipStreamTextBox",
|
"FlipStreamTextBox",
|
||||||
"FlipStreamTextReplace",
|
"FlipStreamTextReplace",
|
||||||
|
"FlipStreamVideoInput",
|
||||||
"FlipStreamViewer"
|
"FlipStreamViewer"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -25328,7 +25523,9 @@
|
|||||||
"SmartFormatString",
|
"SmartFormatString",
|
||||||
"SmartFormatString10",
|
"SmartFormatString10",
|
||||||
"SmartHVLoraSelect",
|
"SmartHVLoraSelect",
|
||||||
"SmartHVLoraStack"
|
"SmartHVLoraStack",
|
||||||
|
"SmartRemoveComments",
|
||||||
|
"SmartSaveText"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI Smart Helper Nodes"
|
"title_aux": "ComfyUI Smart Helper Nodes"
|
||||||
@@ -26397,6 +26594,20 @@
|
|||||||
"title_aux": "ComfyUI-Helper-Nodes"
|
"title_aux": "ComfyUI-Helper-Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/thanhduong0213929/ComfyUI-DeepUnlock": [
|
||||||
|
[
|
||||||
|
"DeepFuze Save",
|
||||||
|
"DeepFuzeAdavance",
|
||||||
|
"DeepFuzeFaceSwap",
|
||||||
|
"DeepfuzePreview",
|
||||||
|
"LLM_node",
|
||||||
|
"PlayBackAudio",
|
||||||
|
"TTS_generation"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DeepUnlock"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/theAdamColton/ComfyUI-texflow-extension": [
|
"https://github.com/theAdamColton/ComfyUI-texflow-extension": [
|
||||||
[
|
[
|
||||||
"Load Texflow Depth Image",
|
"Load Texflow Depth Image",
|
||||||
@@ -26628,6 +26839,14 @@
|
|||||||
"title_aux": "ComfyUI_toyxyz_test_nodes"
|
"title_aux": "ComfyUI_toyxyz_test_nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/traugdor/ComfyUI-Riffusion": [
|
||||||
|
[
|
||||||
|
"RiffusionNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Riffusion"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/traugdor/ComfyUI-quadMoons-nodes": [
|
"https://github.com/traugdor/ComfyUI-quadMoons-nodes": [
|
||||||
[
|
[
|
||||||
"quadmoonBatchFromLatent",
|
"quadmoonBatchFromLatent",
|
||||||
@@ -27358,6 +27577,14 @@
|
|||||||
"title_aux": "zsq_prompt"
|
"title_aux": "zsq_prompt"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/wirytiox/ComfyUI-SelectStringFromListWithIndex": [
|
||||||
|
[
|
||||||
|
"StringFromList"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-SelectStringFromListWithIndex"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/wjl0313/ComfyUI_KimNodes": [
|
"https://github.com/wjl0313/ComfyUI_KimNodes": [
|
||||||
[
|
[
|
||||||
"Add_ImageMetadata",
|
"Add_ImageMetadata",
|
||||||
@@ -27848,6 +28075,17 @@
|
|||||||
"title_aux": "ComfyUI Local Save Node"
|
"title_aux": "ComfyUI Local Save Node"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/yichengup/ComfyUI-VideoBlender": [
|
||||||
|
[
|
||||||
|
"VideoBlendLayer",
|
||||||
|
"VideoBlendStack",
|
||||||
|
"VideoBlendStackAdvanced",
|
||||||
|
"VideoPreprocess"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-VideoBlender"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/yichengup/ComfyUI-YCNodes": [
|
"https://github.com/yichengup/ComfyUI-YCNodes": [
|
||||||
[
|
[
|
||||||
"DynamicThreshold",
|
"DynamicThreshold",
|
||||||
@@ -27866,7 +28104,9 @@
|
|||||||
"MaskSmartValleySplit",
|
"MaskSmartValleySplit",
|
||||||
"MaskSplitFilter",
|
"MaskSplitFilter",
|
||||||
"MaskTopNFilter",
|
"MaskTopNFilter",
|
||||||
"TextBeforeKeyword"
|
"TextBeforeKeyword",
|
||||||
|
"YC Extract Number",
|
||||||
|
"YC Text Index Switch"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-YCNodes"
|
"title_aux": "ComfyUI-YCNodes"
|
||||||
@@ -28504,6 +28744,7 @@
|
|||||||
"https://github.com/zentrocdot/ComfyUI-Simple_Image_To_Prompt": [
|
"https://github.com/zentrocdot/ComfyUI-Simple_Image_To_Prompt": [
|
||||||
[
|
[
|
||||||
"\ud83d\udc41\ufe0f Image To Prompt",
|
"\ud83d\udc41\ufe0f Image To Prompt",
|
||||||
|
"\ud83d\udc41\ufe0f Image To Prompt (NO UPDATE)",
|
||||||
"\ud83e\uddf3 Show Data"
|
"\ud83e\uddf3 Show Data"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -389,12 +389,13 @@ def apply_snapshot(path):
|
|||||||
git_custom_node_infos = info['git_custom_nodes']
|
git_custom_node_infos = info['git_custom_nodes']
|
||||||
file_custom_node_infos = info['file_custom_nodes']
|
file_custom_node_infos = info['file_custom_nodes']
|
||||||
|
|
||||||
checkout_comfyui_hash(comfyui_hash)
|
if comfyui_hash:
|
||||||
|
checkout_comfyui_hash(comfyui_hash)
|
||||||
checkout_custom_node_hash(git_custom_node_infos)
|
checkout_custom_node_hash(git_custom_node_infos)
|
||||||
invalidate_custom_node_file(file_custom_node_infos)
|
invalidate_custom_node_file(file_custom_node_infos)
|
||||||
|
|
||||||
print("APPLY SNAPSHOT: True")
|
print("APPLY SNAPSHOT: True")
|
||||||
if 'pips' in info:
|
if 'pips' in info and info['pips']:
|
||||||
return info['pips']
|
return info['pips']
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
|
|||||||
5527
github-stats.json
5527
github-stats.json
File diff suppressed because it is too large
Load Diff
@@ -173,7 +173,10 @@ def read_cnr_info(fullpath):
|
|||||||
|
|
||||||
project = data.get('project', {})
|
project = data.get('project', {})
|
||||||
name = project.get('name').strip().lower()
|
name = project.get('name').strip().lower()
|
||||||
version = project.get('version')
|
|
||||||
|
# normalize version
|
||||||
|
# for example: 2.5 -> 2.5.0
|
||||||
|
version = str(manager_util.StrictVersion(project.get('version')))
|
||||||
|
|
||||||
urls = project.get('urls', {})
|
urls = project.get('urls', {})
|
||||||
repository = urls.get('Repository')
|
repository = urls.get('Repository')
|
||||||
|
|||||||
@@ -2,6 +2,9 @@ import os
|
|||||||
import configparser
|
import configparser
|
||||||
|
|
||||||
|
|
||||||
|
GITHUB_ENDPOINT = os.getenv('GITHUB_ENDPOINT')
|
||||||
|
|
||||||
|
|
||||||
def is_git_repo(path: str) -> bool:
|
def is_git_repo(path: str) -> bool:
|
||||||
""" Check if the path is a git repository. """
|
""" Check if the path is a git repository. """
|
||||||
# NOTE: Checking it through `git.Repo` must be avoided.
|
# NOTE: Checking it through `git.Repo` must be avoided.
|
||||||
@@ -46,16 +49,21 @@ def git_url(fullpath):
|
|||||||
|
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
|
||||||
def normalize_url(url) -> str:
|
def normalize_url(url) -> str:
|
||||||
url = url.replace("git@github.com:", "https://github.com/")
|
if 'github' in url or (GITHUB_ENDPOINT is not None and GITHUB_ENDPOINT in url):
|
||||||
if url.endswith('.git'):
|
author = os.path.basename(os.path.dirname(url))
|
||||||
url = url[:-4]
|
repo_name = os.path.basename(url)
|
||||||
|
url = f"https://github.com/{author}/{repo_name}"
|
||||||
|
|
||||||
return url
|
return url
|
||||||
|
|
||||||
def normalize_url_http(url) -> str:
|
|
||||||
url = url.replace("https://github.com/", "git@github.com:")
|
|
||||||
if url.endswith('.git'):
|
|
||||||
url = url[:-4]
|
|
||||||
|
|
||||||
return url
|
def get_url_for_clone(url):
|
||||||
|
url = normalize_url(url)
|
||||||
|
|
||||||
|
if GITHUB_ENDPOINT is not None and url.startswith('https://github.com/'):
|
||||||
|
url = GITHUB_ENDPOINT + url[18:] # url[18:] -> remove `https://github.com`
|
||||||
|
|
||||||
|
return url
|
||||||
|
|
||||||
@@ -42,7 +42,7 @@ import manager_downloader
|
|||||||
from node_package import InstalledNodePackage
|
from node_package import InstalledNodePackage
|
||||||
|
|
||||||
|
|
||||||
version_code = [3, 19]
|
version_code = [3, 24]
|
||||||
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
|
||||||
|
|
||||||
|
|
||||||
@@ -177,6 +177,7 @@ manager_channel_list_path = None
|
|||||||
manager_startup_script_path:str = None
|
manager_startup_script_path:str = None
|
||||||
manager_snapshot_path = None
|
manager_snapshot_path = None
|
||||||
manager_pip_overrides_path = None
|
manager_pip_overrides_path = None
|
||||||
|
manager_pip_blacklist_path = None
|
||||||
manager_components_path = None
|
manager_components_path = None
|
||||||
|
|
||||||
def update_user_directory(user_dir):
|
def update_user_directory(user_dir):
|
||||||
@@ -186,6 +187,7 @@ def update_user_directory(user_dir):
|
|||||||
global manager_startup_script_path
|
global manager_startup_script_path
|
||||||
global manager_snapshot_path
|
global manager_snapshot_path
|
||||||
global manager_pip_overrides_path
|
global manager_pip_overrides_path
|
||||||
|
global manager_pip_blacklist_path
|
||||||
global manager_components_path
|
global manager_components_path
|
||||||
|
|
||||||
manager_files_path = os.path.abspath(os.path.join(user_dir, 'default', 'ComfyUI-Manager'))
|
manager_files_path = os.path.abspath(os.path.join(user_dir, 'default', 'ComfyUI-Manager'))
|
||||||
@@ -203,6 +205,7 @@ def update_user_directory(user_dir):
|
|||||||
manager_config_path = os.path.join(manager_files_path, 'config.ini')
|
manager_config_path = os.path.join(manager_files_path, 'config.ini')
|
||||||
manager_channel_list_path = os.path.join(manager_files_path, 'channels.list')
|
manager_channel_list_path = os.path.join(manager_files_path, 'channels.list')
|
||||||
manager_pip_overrides_path = os.path.join(manager_files_path, "pip_overrides.json")
|
manager_pip_overrides_path = os.path.join(manager_files_path, "pip_overrides.json")
|
||||||
|
manager_pip_blacklist_path = os.path.join(manager_files_path, "pip_blacklist.list")
|
||||||
manager_components_path = os.path.join(manager_files_path, "components")
|
manager_components_path = os.path.join(manager_files_path, "components")
|
||||||
manager_util.cache_dir = os.path.join(manager_files_path, "cache")
|
manager_util.cache_dir = os.path.join(manager_files_path, "cache")
|
||||||
|
|
||||||
@@ -345,6 +348,7 @@ class ManagedResult:
|
|||||||
self.msg = None
|
self.msg = None
|
||||||
self.target = None
|
self.target = None
|
||||||
self.postinstall = lambda: True
|
self.postinstall = lambda: True
|
||||||
|
self.ver = None
|
||||||
|
|
||||||
def append(self, item):
|
def append(self, item):
|
||||||
self.items.append(item)
|
self.items.append(item)
|
||||||
@@ -366,6 +370,10 @@ class ManagedResult:
|
|||||||
self.postinstall = postinstall
|
self.postinstall = postinstall
|
||||||
return self
|
return self
|
||||||
|
|
||||||
|
def with_ver(self, ver):
|
||||||
|
self.ver = ver
|
||||||
|
return self
|
||||||
|
|
||||||
|
|
||||||
class UnifiedManager:
|
class UnifiedManager:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
@@ -497,6 +505,8 @@ class UnifiedManager:
|
|||||||
def resolve_from_path(self, fullpath):
|
def resolve_from_path(self, fullpath):
|
||||||
url = git_utils.git_url(fullpath)
|
url = git_utils.git_url(fullpath)
|
||||||
if url:
|
if url:
|
||||||
|
url = git_utils.normalize_url(url)
|
||||||
|
|
||||||
cnr = self.get_cnr_by_repo(url)
|
cnr = self.get_cnr_by_repo(url)
|
||||||
commit_hash = git_utils.get_commit_hash(fullpath)
|
commit_hash = git_utils.get_commit_hash(fullpath)
|
||||||
if cnr:
|
if cnr:
|
||||||
@@ -513,7 +523,10 @@ class UnifiedManager:
|
|||||||
if info:
|
if info:
|
||||||
cnr = self.cnr_map.get(info['id'])
|
cnr = self.cnr_map.get(info['id'])
|
||||||
if cnr:
|
if cnr:
|
||||||
return {'id': cnr['id'], 'cnr': cnr, 'ver': info['version']}
|
# normalize version
|
||||||
|
# for example: 2.5 -> 2.5.0
|
||||||
|
ver = str(manager_util.StrictVersion(info['version']))
|
||||||
|
return {'id': cnr['id'], 'cnr': cnr, 'ver': ver}
|
||||||
else:
|
else:
|
||||||
return None
|
return None
|
||||||
else:
|
else:
|
||||||
@@ -786,6 +799,7 @@ class UnifiedManager:
|
|||||||
node_id = v['id']
|
node_id = v['id']
|
||||||
else:
|
else:
|
||||||
node_id = v['files'][0].split('/')[-1]
|
node_id = v['files'][0].split('/')[-1]
|
||||||
|
v['repository'] = v['files'][0]
|
||||||
res[node_id] = v
|
res[node_id] = v
|
||||||
elif len(v['files']) > 1:
|
elif len(v['files']) > 1:
|
||||||
res[v['files'][0]] = v # A custom node composed of multiple url is treated as a single repository with one representative path
|
res[v['files'][0]] = v # A custom node composed of multiple url is treated as a single repository with one representative path
|
||||||
@@ -812,14 +826,14 @@ class UnifiedManager:
|
|||||||
print("Install: pip packages")
|
print("Install: pip packages")
|
||||||
pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages())
|
pip_fixer = manager_util.PIPFixer(manager_util.get_installed_packages())
|
||||||
res = True
|
res = True
|
||||||
with open(requirements_path, "r") as requirements_file:
|
lines = manager_util.robust_readlines(requirements_path)
|
||||||
for line in requirements_file:
|
for line in lines:
|
||||||
package_name = remap_pip_package(line.strip())
|
package_name = remap_pip_package(line.strip())
|
||||||
if package_name and not package_name.startswith('#') and package_name not in self.processed_install:
|
if package_name and not package_name.startswith('#') and package_name not in self.processed_install:
|
||||||
self.processed_install.add(package_name)
|
self.processed_install.add(package_name)
|
||||||
install_cmd = manager_util.make_pip_cmd(["install", package_name])
|
install_cmd = manager_util.make_pip_cmd(["install", package_name])
|
||||||
if package_name.strip() != "" and not package_name.startswith('#'):
|
if package_name.strip() != "" and not package_name.startswith('#'):
|
||||||
res = res and try_install_script(url, repo_path, install_cmd, instant_execution=instant_execution)
|
res = res and try_install_script(url, repo_path, install_cmd, instant_execution=instant_execution)
|
||||||
|
|
||||||
pip_fixer.fix_broken()
|
pip_fixer.fix_broken()
|
||||||
return res
|
return res
|
||||||
@@ -1227,15 +1241,16 @@ class UnifiedManager:
|
|||||||
if url.endswith("/"):
|
if url.endswith("/"):
|
||||||
url = url[:-1]
|
url = url[:-1]
|
||||||
try:
|
try:
|
||||||
print(f"Download: git clone '{url}'")
|
|
||||||
|
|
||||||
# Clone the repository from the remote URL
|
# Clone the repository from the remote URL
|
||||||
|
clone_url = git_utils.get_url_for_clone(url)
|
||||||
|
print(f"Download: git clone '{clone_url}'")
|
||||||
|
|
||||||
if not instant_execution and platform.system() == 'Windows':
|
if not instant_execution and platform.system() == 'Windows':
|
||||||
res = manager_funcs.run_script([sys.executable, git_script_path, "--clone", get_default_custom_nodes_path(), url, repo_path], cwd=get_default_custom_nodes_path())
|
res = manager_funcs.run_script([sys.executable, git_script_path, "--clone", get_default_custom_nodes_path(), clone_url, repo_path], cwd=get_default_custom_nodes_path())
|
||||||
if res != 0:
|
if res != 0:
|
||||||
return result.fail(f"Failed to clone repo: {url}")
|
return result.fail(f"Failed to clone repo: {clone_url}")
|
||||||
else:
|
else:
|
||||||
repo = git.Repo.clone_from(url, repo_path, recursive=True, progress=GitProgress())
|
repo = git.Repo.clone_from(clone_url, repo_path, recursive=True, progress=GitProgress())
|
||||||
repo.git.clear_cache()
|
repo.git.clear_cache()
|
||||||
repo.close()
|
repo.close()
|
||||||
|
|
||||||
@@ -1249,7 +1264,8 @@ class UnifiedManager:
|
|||||||
return result.fail(f"Failed to execute install script: {url}")
|
return result.fail(f"Failed to execute install script: {url}")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
return result.fail(f"Install(git-clone) error: {url} / {e}")
|
traceback.print_exc()
|
||||||
|
return result.fail(f"Install(git-clone) error[2]: {url} / {e}")
|
||||||
|
|
||||||
print("Installation was successful.")
|
print("Installation was successful.")
|
||||||
return result
|
return result
|
||||||
@@ -1330,14 +1346,14 @@ class UnifiedManager:
|
|||||||
version_spec = self.resolve_unspecified_version(node_id, guess_mode='active')
|
version_spec = self.resolve_unspecified_version(node_id, guess_mode='active')
|
||||||
|
|
||||||
if version_spec is None:
|
if version_spec is None:
|
||||||
return ManagedResult('update').fail(f'Update not available: {node_id}@{version_spec}')
|
return ManagedResult('update').fail(f'Update not available: {node_id}@{version_spec}').with_ver(version_spec)
|
||||||
|
|
||||||
if version_spec == 'nightly':
|
if version_spec == 'nightly':
|
||||||
return self.repo_update(self.active_nodes[node_id][1], instant_execution=instant_execution, no_deps=no_deps, return_postinstall=return_postinstall).with_target('nightly')
|
return self.repo_update(self.active_nodes[node_id][1], instant_execution=instant_execution, no_deps=no_deps, return_postinstall=return_postinstall).with_target('nightly').with_ver('nightly')
|
||||||
elif version_spec == 'unknown':
|
elif version_spec == 'unknown':
|
||||||
return self.repo_update(self.unknown_active_nodes[node_id][1], instant_execution=instant_execution, no_deps=no_deps, return_postinstall=return_postinstall).with_target('unknown')
|
return self.repo_update(self.unknown_active_nodes[node_id][1], instant_execution=instant_execution, no_deps=no_deps, return_postinstall=return_postinstall).with_target('unknown').with_ver('unknown')
|
||||||
else:
|
else:
|
||||||
return self.cnr_switch_version(node_id, instant_execution=instant_execution, no_deps=no_deps, return_postinstall=return_postinstall)
|
return self.cnr_switch_version(node_id, instant_execution=instant_execution, no_deps=no_deps, return_postinstall=return_postinstall).with_ver('cnr')
|
||||||
|
|
||||||
async def install_by_id(self, node_id, version_spec=None, channel=None, mode=None, instant_execution=False, no_deps=False, return_postinstall=False):
|
async def install_by_id(self, node_id, version_spec=None, channel=None, mode=None, instant_execution=False, no_deps=False, return_postinstall=False):
|
||||||
"""
|
"""
|
||||||
@@ -1583,16 +1599,6 @@ def read_config():
|
|||||||
config = configparser.ConfigParser()
|
config = configparser.ConfigParser()
|
||||||
config.read(manager_config_path)
|
config.read(manager_config_path)
|
||||||
default_conf = config['default']
|
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'
|
|
||||||
|
|
||||||
manager_util.use_uv = default_conf['use_uv'].lower() == 'true' if 'use_uv' in default_conf else False
|
manager_util.use_uv = default_conf['use_uv'].lower() == 'true' if 'use_uv' in default_conf else False
|
||||||
|
|
||||||
def get_bool(key, default_value):
|
def get_bool(key, default_value):
|
||||||
@@ -1600,26 +1606,25 @@ def read_config():
|
|||||||
|
|
||||||
return {
|
return {
|
||||||
'http_channel_enabled': get_bool('http_channel_enabled', False),
|
'http_channel_enabled': get_bool('http_channel_enabled', False),
|
||||||
'preview_method': default_conf.get('preview_method', manager_funcs.get_current_preview_method()),
|
'preview_method': default_conf.get('preview_method', manager_funcs.get_current_preview_method()).lower(),
|
||||||
'git_exe': default_conf.get('git_exe', ''),
|
'git_exe': default_conf.get('git_exe', ''),
|
||||||
'use_uv': get_bool('use_uv', False),
|
'use_uv': get_bool('use_uv', False),
|
||||||
'channel_url': default_conf.get('channel_url', DEFAULT_CHANNEL),
|
'channel_url': default_conf.get('channel_url', DEFAULT_CHANNEL),
|
||||||
'default_cache_as_channel_url': get_bool('default_cache_as_channel_url', False),
|
'default_cache_as_channel_url': get_bool('default_cache_as_channel_url', False),
|
||||||
'share_option': default_conf.get('share_option', 'all'),
|
'share_option': default_conf.get('share_option', 'all').lower(),
|
||||||
'bypass_ssl': get_bool('bypass_ssl', False),
|
'bypass_ssl': get_bool('bypass_ssl', False),
|
||||||
'file_logging': get_bool('file_logging', True),
|
'file_logging': get_bool('file_logging', True),
|
||||||
'component_policy': default_conf.get('component_policy', 'workflow'),
|
'component_policy': default_conf.get('component_policy', 'workflow').lower(),
|
||||||
'windows_selector_event_loop_policy': get_bool('windows_selector_event_loop_policy', False),
|
'windows_selector_event_loop_policy': get_bool('windows_selector_event_loop_policy', False),
|
||||||
'model_download_by_agent': get_bool('model_download_by_agent', False),
|
'model_download_by_agent': get_bool('model_download_by_agent', False),
|
||||||
'downgrade_blacklist': default_conf.get('downgrade_blacklist', ''),
|
'downgrade_blacklist': default_conf.get('downgrade_blacklist', '').lower(),
|
||||||
'skip_migration_check': get_bool('skip_migration_check', False),
|
'skip_migration_check': get_bool('skip_migration_check', False),
|
||||||
'always_lazy_install': get_bool('always_lazy_install', False),
|
'always_lazy_install': get_bool('always_lazy_install', False),
|
||||||
'network_mode': default_conf.get('network_mode', 'public'),
|
'network_mode': default_conf.get('network_mode', 'public').lower(),
|
||||||
'security_level': security_level,
|
'security_level': default_conf.get('security_level', 'normal').lower(),
|
||||||
}
|
}
|
||||||
|
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
|
||||||
manager_util.use_uv = False
|
manager_util.use_uv = False
|
||||||
return {
|
return {
|
||||||
'http_channel_enabled': False,
|
'http_channel_enabled': False,
|
||||||
@@ -2041,12 +2046,14 @@ async def gitclone_install(url, instant_execution=False, msg_prefix='', no_deps=
|
|||||||
print(f"CLONE into '{repo_path}'")
|
print(f"CLONE into '{repo_path}'")
|
||||||
|
|
||||||
# Clone the repository from the remote URL
|
# Clone the repository from the remote URL
|
||||||
|
clone_url = git_utils.get_url_for_clone(url)
|
||||||
|
|
||||||
if not instant_execution and platform.system() == 'Windows':
|
if not instant_execution and platform.system() == 'Windows':
|
||||||
res = manager_funcs.run_script([sys.executable, git_script_path, "--clone", get_default_custom_nodes_path(), url, repo_path], cwd=get_default_custom_nodes_path())
|
res = manager_funcs.run_script([sys.executable, git_script_path, "--clone", get_default_custom_nodes_path(), clone_url, repo_path], cwd=get_default_custom_nodes_path())
|
||||||
if res != 0:
|
if res != 0:
|
||||||
return result.fail(f"Failed to clone '{url}' into '{repo_path}'")
|
return result.fail(f"Failed to clone '{clone_url}' into '{repo_path}'")
|
||||||
else:
|
else:
|
||||||
repo = git.Repo.clone_from(url, repo_path, recursive=True, progress=GitProgress())
|
repo = git.Repo.clone_from(clone_url, repo_path, recursive=True, progress=GitProgress())
|
||||||
repo.git.clear_cache()
|
repo.git.clear_cache()
|
||||||
repo.close()
|
repo.close()
|
||||||
|
|
||||||
@@ -2056,8 +2063,8 @@ async def gitclone_install(url, instant_execution=False, msg_prefix='', no_deps=
|
|||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
print(f"Install(git-clone) error: {url} / {e}", file=sys.stderr)
|
print(f"Install(git-clone) error[1]: {url} / {e}", file=sys.stderr)
|
||||||
return result.fail(f"Install(git-clone) error: {url} / {e}")
|
return result.fail(f"Install(git-clone)[1] error: {url} / {e}")
|
||||||
|
|
||||||
|
|
||||||
def git_pull(path):
|
def git_pull(path):
|
||||||
@@ -2156,7 +2163,7 @@ def gitclone_fix(files, instant_execution=False, no_deps=False):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Install(git-clone) error: {url} / {e}", file=sys.stderr)
|
print(f"Fix(git-clone) error: {url} / {e}", file=sys.stderr)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
print(f"Attempt to fixing '{files}' is done.")
|
print(f"Attempt to fixing '{files}' is done.")
|
||||||
@@ -2478,7 +2485,7 @@ def get_installed_pip_packages():
|
|||||||
return res
|
return res
|
||||||
|
|
||||||
|
|
||||||
async def get_current_snapshot():
|
async def get_current_snapshot(custom_nodes_only = False):
|
||||||
await unified_manager.reload('cache')
|
await unified_manager.reload('cache')
|
||||||
await unified_manager.get_custom_nodes('default', 'cache')
|
await unified_manager.get_custom_nodes('default', 'cache')
|
||||||
|
|
||||||
@@ -2489,8 +2496,10 @@ async def get_current_snapshot():
|
|||||||
print("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
print("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
||||||
return {}
|
return {}
|
||||||
|
|
||||||
repo = git.Repo(repo_path)
|
comfyui_commit_hash = None
|
||||||
comfyui_commit_hash = repo.head.commit.hexsha
|
if not custom_nodes_only:
|
||||||
|
repo = git.Repo(repo_path)
|
||||||
|
comfyui_commit_hash = repo.head.commit.hexsha
|
||||||
|
|
||||||
git_custom_nodes = {}
|
git_custom_nodes = {}
|
||||||
cnr_custom_nodes = {}
|
cnr_custom_nodes = {}
|
||||||
@@ -2556,7 +2565,7 @@ async def get_current_snapshot():
|
|||||||
|
|
||||||
file_custom_nodes.append(item)
|
file_custom_nodes.append(item)
|
||||||
|
|
||||||
pip_packages = get_installed_pip_packages()
|
pip_packages = None if custom_nodes_only else get_installed_pip_packages()
|
||||||
|
|
||||||
return {
|
return {
|
||||||
'comfyui': comfyui_commit_hash,
|
'comfyui': comfyui_commit_hash,
|
||||||
@@ -2567,7 +2576,7 @@ async def get_current_snapshot():
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
async def save_snapshot_with_postfix(postfix, path=None):
|
async def save_snapshot_with_postfix(postfix, path=None, custom_nodes_only = False):
|
||||||
if path is None:
|
if path is None:
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
|
|
||||||
@@ -2579,7 +2588,7 @@ async def save_snapshot_with_postfix(postfix, path=None):
|
|||||||
file_name = path.replace('\\', '/').split('/')[-1]
|
file_name = path.replace('\\', '/').split('/')[-1]
|
||||||
file_name = file_name.split('.')[-2]
|
file_name = file_name.split('.')[-2]
|
||||||
|
|
||||||
snapshot = await get_current_snapshot()
|
snapshot = await get_current_snapshot(custom_nodes_only)
|
||||||
if path.endswith('.json'):
|
if path.endswith('.json'):
|
||||||
with open(path, "w") as json_file:
|
with open(path, "w") as json_file:
|
||||||
json.dump(snapshot, json_file, indent=4)
|
json.dump(snapshot, json_file, indent=4)
|
||||||
@@ -2969,7 +2978,14 @@ async def restore_snapshot(snapshot_path, git_helper_extras=None):
|
|||||||
print("cm-cli: unexpected [0001]")
|
print("cm-cli: unexpected [0001]")
|
||||||
|
|
||||||
# for nightly restore
|
# for nightly restore
|
||||||
git_info = info.get('git_custom_nodes')
|
_git_info = info.get('git_custom_nodes')
|
||||||
|
git_info = {}
|
||||||
|
|
||||||
|
# normalize github repo
|
||||||
|
for k, v in _git_info.items():
|
||||||
|
norm_k = git_utils.normalize_url(k)
|
||||||
|
git_info[norm_k] = v
|
||||||
|
|
||||||
if git_info is not None:
|
if git_info is not None:
|
||||||
todo_disable = []
|
todo_disable = []
|
||||||
todo_enable = []
|
todo_enable = []
|
||||||
@@ -2982,20 +2998,13 @@ async def restore_snapshot(snapshot_path, git_helper_extras=None):
|
|||||||
|
|
||||||
if v[0] == 'nightly' and cnr_repo_map.get(k):
|
if v[0] == 'nightly' and cnr_repo_map.get(k):
|
||||||
repo_url = cnr_repo_map.get(k)
|
repo_url = cnr_repo_map.get(k)
|
||||||
|
normalized_url = git_utils.normalize_url(repo_url)
|
||||||
|
|
||||||
normalized_url1 = git_utils.normalize_url(repo_url)
|
if normalized_url not in git_info:
|
||||||
normalized_url2 = git_utils.normalize_url_http(repo_url)
|
|
||||||
|
|
||||||
if normalized_url1 not in git_info and normalized_url2 not in git_info:
|
|
||||||
todo_disable.append(k)
|
todo_disable.append(k)
|
||||||
else:
|
else:
|
||||||
if normalized_url1 in git_info:
|
commit_hash = git_info[normalized_url]['hash']
|
||||||
commit_hash = git_info[normalized_url1]['hash']
|
todo_checkout.append((v[1], commit_hash))
|
||||||
todo_checkout.append((v[1], commit_hash))
|
|
||||||
|
|
||||||
if normalized_url2 in git_info:
|
|
||||||
commit_hash = git_info[normalized_url2]['hash']
|
|
||||||
todo_checkout.append((v[1], commit_hash))
|
|
||||||
|
|
||||||
for k, v in unified_manager.nightly_inactive_nodes.items():
|
for k, v in unified_manager.nightly_inactive_nodes.items():
|
||||||
if 'comfyui-manager' in k:
|
if 'comfyui-manager' in k:
|
||||||
@@ -3003,18 +3012,12 @@ async def restore_snapshot(snapshot_path, git_helper_extras=None):
|
|||||||
|
|
||||||
if cnr_repo_map.get(k):
|
if cnr_repo_map.get(k):
|
||||||
repo_url = cnr_repo_map.get(k)
|
repo_url = cnr_repo_map.get(k)
|
||||||
normalized_url1 = git_utils.normalize_url(repo_url)
|
normalized_url = git_utils.normalize_url(repo_url)
|
||||||
normalized_url2 = git_utils.normalize_url_http(repo_url)
|
|
||||||
|
|
||||||
if normalized_url1 in git_info:
|
if normalized_url in git_info:
|
||||||
commit_hash = git_info[normalized_url1]['hash']
|
commit_hash = git_info[normalized_url]['hash']
|
||||||
todo_enable.append((k, commit_hash))
|
todo_enable.append((k, commit_hash))
|
||||||
processed_urls.append(normalized_url1)
|
processed_urls.append(normalized_url)
|
||||||
|
|
||||||
if normalized_url2 in git_info:
|
|
||||||
commit_hash = git_info[normalized_url2]['hash']
|
|
||||||
todo_enable.append((k, commit_hash))
|
|
||||||
processed_urls.append(normalized_url2)
|
|
||||||
|
|
||||||
for x in todo_disable:
|
for x in todo_disable:
|
||||||
unified_manager.unified_disable(x, False)
|
unified_manager.unified_disable(x, False)
|
||||||
@@ -3067,21 +3070,14 @@ async def restore_snapshot(snapshot_path, git_helper_extras=None):
|
|||||||
if repo_url is None:
|
if repo_url is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
normalized_url1 = git_utils.normalize_url(repo_url)
|
normalized_url = git_utils.normalize_url(repo_url)
|
||||||
normalized_url2 = git_utils.normalize_url_http(repo_url)
|
|
||||||
|
|
||||||
if normalized_url1 not in git_info and normalized_url2 not in git_info:
|
if normalized_url not in git_info:
|
||||||
todo_disable.append(k2)
|
todo_disable.append(k2)
|
||||||
else:
|
else:
|
||||||
if normalized_url1 in git_info:
|
commit_hash = git_info[normalized_url]['hash']
|
||||||
commit_hash = git_info[normalized_url1]['hash']
|
todo_checkout.append((k2, commit_hash))
|
||||||
todo_checkout.append((k2, commit_hash))
|
processed_urls.append(normalized_url)
|
||||||
processed_urls.append(normalized_url1)
|
|
||||||
|
|
||||||
if normalized_url2 in git_info:
|
|
||||||
commit_hash = git_info[normalized_url2]['hash']
|
|
||||||
todo_checkout.append((k2, commit_hash))
|
|
||||||
processed_urls.append(normalized_url2)
|
|
||||||
|
|
||||||
for k2, v2 in unified_manager.unknown_inactive_nodes.items():
|
for k2, v2 in unified_manager.unknown_inactive_nodes.items():
|
||||||
repo_url = resolve_giturl_from_path(v2[1])
|
repo_url = resolve_giturl_from_path(v2[1])
|
||||||
@@ -3089,18 +3085,12 @@ async def restore_snapshot(snapshot_path, git_helper_extras=None):
|
|||||||
if repo_url is None:
|
if repo_url is None:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
normalized_url1 = git_utils.normalize_url(repo_url)
|
normalized_url = git_utils.normalize_url(repo_url)
|
||||||
normalized_url2 = git_utils.normalize_url_http(repo_url)
|
|
||||||
|
|
||||||
if normalized_url1 in git_info:
|
if normalized_url in git_info:
|
||||||
commit_hash = git_info[normalized_url1]['hash']
|
commit_hash = git_info[normalized_url]['hash']
|
||||||
todo_enable.append((k2, commit_hash))
|
todo_enable.append((k2, commit_hash))
|
||||||
processed_urls.append(normalized_url1)
|
processed_urls.append(normalized_url)
|
||||||
|
|
||||||
if normalized_url2 in git_info:
|
|
||||||
commit_hash = git_info[normalized_url2]['hash']
|
|
||||||
todo_enable.append((k2, commit_hash))
|
|
||||||
processed_urls.append(normalized_url2)
|
|
||||||
|
|
||||||
for x in todo_disable:
|
for x in todo_disable:
|
||||||
unified_manager.unified_disable(x, True)
|
unified_manager.unified_disable(x, True)
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from tqdm.auto import tqdm
|
|||||||
aria2 = os.getenv('COMFYUI_MANAGER_ARIA2_SERVER')
|
aria2 = os.getenv('COMFYUI_MANAGER_ARIA2_SERVER')
|
||||||
HF_ENDPOINT = os.getenv('HF_ENDPOINT')
|
HF_ENDPOINT = os.getenv('HF_ENDPOINT')
|
||||||
|
|
||||||
|
|
||||||
if aria2 is not None:
|
if aria2 is not None:
|
||||||
secret = os.getenv('COMFYUI_MANAGER_ARIA2_SECRET')
|
secret = os.getenv('COMFYUI_MANAGER_ARIA2_SECRET')
|
||||||
url = urlparse(aria2)
|
url = urlparse(aria2)
|
||||||
|
|||||||
@@ -55,8 +55,14 @@ def handle_stream(stream, prefix):
|
|||||||
from comfy.cli_args import args
|
from comfy.cli_args import args
|
||||||
import latent_preview
|
import latent_preview
|
||||||
|
|
||||||
|
def is_loopback(address):
|
||||||
|
import ipaddress
|
||||||
|
try:
|
||||||
|
return ipaddress.ip_address(address).is_loopback
|
||||||
|
except ValueError:
|
||||||
|
return False
|
||||||
|
|
||||||
is_local_mode = args.listen.startswith('127.') or args.listen.startswith('local.')
|
is_local_mode = is_loopback(args.listen)
|
||||||
|
|
||||||
|
|
||||||
model_dir_name_map = {
|
model_dir_name_map = {
|
||||||
@@ -85,11 +91,11 @@ def is_allowed_security_level(level):
|
|||||||
return False
|
return False
|
||||||
elif level == 'high':
|
elif level == 'high':
|
||||||
if is_local_mode:
|
if is_local_mode:
|
||||||
return core.get_config()['security_level'].lower() in ['weak', 'normal-']
|
return core.get_config()['security_level'] in ['weak', 'normal-']
|
||||||
else:
|
else:
|
||||||
return core.get_config()['security_level'].lower() == 'weak'
|
return core.get_config()['security_level'] == 'weak'
|
||||||
elif level == 'middle':
|
elif level == 'middle':
|
||||||
return core.get_config()['security_level'].lower() in ['weak', 'normal', 'normal-']
|
return core.get_config()['security_level'] in ['weak', 'normal', 'normal-']
|
||||||
else:
|
else:
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@@ -410,22 +416,60 @@ async def task_worker():
|
|||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
return f"Installation failed:\n{node_spec_str}"
|
return f"Installation failed:\n{node_spec_str}"
|
||||||
|
|
||||||
async def do_update(item) -> str:
|
async def do_update(item):
|
||||||
ui_id, node_name, node_ver = item
|
ui_id, node_name, node_ver = item
|
||||||
|
|
||||||
try:
|
try:
|
||||||
res = core.unified_manager.unified_update(node_name, node_ver)
|
res = core.unified_manager.unified_update(node_name, node_ver)
|
||||||
|
|
||||||
|
if res.ver == 'unknown':
|
||||||
|
url = core.unified_manager.unknown_active_nodes[node_name][0]
|
||||||
|
title = os.path.basename(url)
|
||||||
|
else:
|
||||||
|
url = core.unified_manager.cnr_map[node_name].get('repository')
|
||||||
|
title = core.unified_manager.cnr_map[node_name]['name']
|
||||||
|
|
||||||
manager_util.clear_pip_cache()
|
manager_util.clear_pip_cache()
|
||||||
|
|
||||||
if res.result:
|
if url is not None:
|
||||||
return 'success'
|
base_res = {'url': url, 'title': title}
|
||||||
|
else:
|
||||||
|
base_res = {'title': title}
|
||||||
|
|
||||||
|
if res.result:
|
||||||
|
if res.action == 'skip':
|
||||||
|
base_res['msg'] = 'skip'
|
||||||
|
return base_res
|
||||||
|
else:
|
||||||
|
base_res['msg'] = 'success'
|
||||||
|
return base_res
|
||||||
|
|
||||||
|
base_res['msg'] = f"An error occurred while updating '{node_name}'."
|
||||||
logging.error(f"\nERROR: An error occurred while updating '{node_name}'.")
|
logging.error(f"\nERROR: An error occurred while updating '{node_name}'.")
|
||||||
|
return base_res
|
||||||
except Exception:
|
except Exception:
|
||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
|
|
||||||
return f"An error occurred while updating '{node_name}'."
|
return {'msg':f"An error occurred while updating '{node_name}'."}
|
||||||
|
|
||||||
|
async def do_update_comfyui() -> str:
|
||||||
|
try:
|
||||||
|
repo_path = os.path.dirname(folder_paths.__file__)
|
||||||
|
res = core.update_path(repo_path)
|
||||||
|
|
||||||
|
if res == "fail":
|
||||||
|
logging.error("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
||||||
|
return "The installed ComfyUI does not have a Git repository."
|
||||||
|
elif res == "updated":
|
||||||
|
logging.info("ComfyUI is updated.")
|
||||||
|
return "success"
|
||||||
|
else: # skipped
|
||||||
|
logging.info("ComfyUI is up-to-date.")
|
||||||
|
return "skip"
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
return "An error occurred while updating 'comfyui'."
|
||||||
|
|
||||||
async def do_fix(item) -> str:
|
async def do_fix(item) -> str:
|
||||||
ui_id, node_name, node_ver = item
|
ui_id, node_name, node_ver = item
|
||||||
@@ -550,6 +594,10 @@ async def task_worker():
|
|||||||
msg = await do_install_model(item)
|
msg = await do_install_model(item)
|
||||||
elif kind == 'update':
|
elif kind == 'update':
|
||||||
msg = await do_update(item)
|
msg = await do_update(item)
|
||||||
|
elif kind == 'update-main':
|
||||||
|
msg = await do_update(item)
|
||||||
|
elif kind == 'update-comfyui':
|
||||||
|
msg = await do_update_comfyui()
|
||||||
elif kind == 'fix':
|
elif kind == 'fix':
|
||||||
msg = await do_fix(item)
|
msg = await do_fix(item)
|
||||||
elif kind == 'uninstall':
|
elif kind == 'uninstall':
|
||||||
@@ -569,6 +617,15 @@ async def task_worker():
|
|||||||
if kind == 'install-model':
|
if kind == 'install-model':
|
||||||
model_result[ui_id] = msg
|
model_result[ui_id] = msg
|
||||||
ui_target = "model_manager"
|
ui_target = "model_manager"
|
||||||
|
elif kind == 'update-main':
|
||||||
|
nodepack_result[ui_id] = msg
|
||||||
|
ui_target = "main"
|
||||||
|
elif kind == 'update-comfyui':
|
||||||
|
nodepack_result['comfyui'] = msg
|
||||||
|
ui_target = "main"
|
||||||
|
elif kind == 'update':
|
||||||
|
nodepack_result[ui_id] = msg['msg']
|
||||||
|
ui_target = "nodepack_manager"
|
||||||
else:
|
else:
|
||||||
nodepack_result[ui_id] = msg
|
nodepack_result[ui_id] = msg
|
||||||
ui_target = "nodepack_manager"
|
ui_target = "nodepack_manager"
|
||||||
@@ -643,49 +700,46 @@ async def fetch_updates(request):
|
|||||||
return web.Response(status=400)
|
return web.Response(status=400)
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/customnode/update_all")
|
@routes.get("/manager/queue/update_all")
|
||||||
async def update_all(request):
|
async def update_all(request):
|
||||||
if not is_allowed_security_level('middle'):
|
if not is_allowed_security_level('middle'):
|
||||||
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
logging.error(SECURITY_MESSAGE_MIDDLE_OR_BELOW)
|
||||||
return web.Response(status=403)
|
return web.Response(status=403)
|
||||||
|
|
||||||
try:
|
with task_worker_lock:
|
||||||
await core.save_snapshot_with_postfix('autosave')
|
is_processing = task_worker_thread is not None and task_worker_thread.is_alive()
|
||||||
|
if is_processing:
|
||||||
|
return web.Response(status=401)
|
||||||
|
|
||||||
|
await core.save_snapshot_with_postfix('autosave')
|
||||||
|
|
||||||
if request.rel_url.query["mode"] == "local":
|
if request.rel_url.query["mode"] == "local":
|
||||||
channel = 'local'
|
channel = 'local'
|
||||||
else:
|
else:
|
||||||
channel = core.get_config()['channel_url']
|
channel = core.get_config()['channel_url']
|
||||||
|
|
||||||
await core.unified_manager.reload(request.rel_url.query["mode"])
|
await core.unified_manager.reload(request.rel_url.query["mode"])
|
||||||
await core.unified_manager.get_custom_nodes(channel, request.rel_url.query["mode"])
|
await core.unified_manager.get_custom_nodes(channel, request.rel_url.query["mode"])
|
||||||
|
|
||||||
updated_cnr = []
|
for k, v in core.unified_manager.active_nodes.items():
|
||||||
for k, v in core.unified_manager.active_nodes.items():
|
if k == 'comfyui-manager':
|
||||||
if v[0] != 'nightly':
|
# skip updating comfyui-manager if desktop version
|
||||||
res = core.unified_manager.unified_update(k, v[0])
|
if os.environ.get('__COMFYUI_DESKTOP_VERSION__'):
|
||||||
if res.action == 'switch-cnr' and res:
|
continue
|
||||||
updated_cnr.append(k)
|
|
||||||
|
|
||||||
res = core.unified_manager.fetch_or_pull_git_repo(is_pull=True)
|
update_item = k, k, v[0]
|
||||||
|
task_queue.put(("update-main", update_item))
|
||||||
|
|
||||||
res['updated'] += updated_cnr
|
for k, v in core.unified_manager.unknown_active_nodes.items():
|
||||||
|
if k == 'comfyui-manager':
|
||||||
|
# skip updating comfyui-manager if desktop version
|
||||||
|
if os.environ.get('__COMFYUI_DESKTOP_VERSION__'):
|
||||||
|
continue
|
||||||
|
|
||||||
for x in res['failed']:
|
update_item = k, k, 'unknown'
|
||||||
logging.error(f"PULL FAILED: {x}")
|
task_queue.put(("update-main", update_item))
|
||||||
|
|
||||||
if len(res['updated']) == 0 and len(res['failed']) == 0:
|
return web.Response(status=200)
|
||||||
status = 200
|
|
||||||
else:
|
|
||||||
status = 201
|
|
||||||
|
|
||||||
logging.info("\nDone.")
|
|
||||||
return web.json_response(res, status=status, content_type='application/json')
|
|
||||||
except:
|
|
||||||
traceback.print_exc()
|
|
||||||
return web.Response(status=400)
|
|
||||||
finally:
|
|
||||||
manager_util.clear_pip_cache()
|
|
||||||
|
|
||||||
|
|
||||||
def convert_markdown_to_html(input_text):
|
def convert_markdown_to_html(input_text):
|
||||||
@@ -1281,26 +1335,10 @@ async def update_custom_node(request):
|
|||||||
return web.Response(status=200)
|
return web.Response(status=200)
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/comfyui_manager/update_comfyui")
|
@routes.get("/manager/queue/update_comfyui")
|
||||||
async def update_comfyui(request):
|
async def update_comfyui(request):
|
||||||
logging.info("Update ComfyUI")
|
task_queue.put(("update-comfyui", ('comfyui',)))
|
||||||
|
return web.Response(status=200)
|
||||||
try:
|
|
||||||
repo_path = os.path.dirname(folder_paths.__file__)
|
|
||||||
res = core.update_path(repo_path)
|
|
||||||
if res == "fail":
|
|
||||||
logging.error("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
|
||||||
return web.Response(status=400)
|
|
||||||
elif res == "updated":
|
|
||||||
logging.info("ComfyUI is updated.")
|
|
||||||
return web.Response(status=201)
|
|
||||||
else: # skipped
|
|
||||||
logging.info("ComfyUI is up-to-date.")
|
|
||||||
return web.Response(status=200)
|
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"ComfyUI update fail: {e}", file=sys.stderr)
|
|
||||||
|
|
||||||
return web.Response(status=400)
|
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/comfyui_manager/comfyui_versions")
|
@routes.get("/comfyui_manager/comfyui_versions")
|
||||||
|
|||||||
@@ -373,3 +373,23 @@ def sanitize(data):
|
|||||||
def sanitize_filename(input_string):
|
def sanitize_filename(input_string):
|
||||||
result_string = re.sub(r'[^a-zA-Z0-9_]', '_', input_string)
|
result_string = re.sub(r'[^a-zA-Z0-9_]', '_', input_string)
|
||||||
return result_string
|
return result_string
|
||||||
|
|
||||||
|
|
||||||
|
def robust_readlines(fullpath):
|
||||||
|
import chardet
|
||||||
|
try:
|
||||||
|
with open(fullpath, "r") as f:
|
||||||
|
return f.readlines()
|
||||||
|
except:
|
||||||
|
encoding = None
|
||||||
|
with open(fullpath, "rb") as f:
|
||||||
|
raw_data = f.read()
|
||||||
|
result = chardet.detect(raw_data)
|
||||||
|
encoding = result['encoding']
|
||||||
|
|
||||||
|
if encoding is not None:
|
||||||
|
with open(fullpath, "r", encoding=encoding) as f:
|
||||||
|
return f.readlines()
|
||||||
|
|
||||||
|
print(f"[ComfyUI-Manager] Failed to recognize encoding for: {fullpath}")
|
||||||
|
return []
|
||||||
|
|||||||
@@ -13,7 +13,9 @@ import {
|
|||||||
import { OpenArtShareDialog } from "./comfyui-share-openart.js";
|
import { OpenArtShareDialog } from "./comfyui-share-openart.js";
|
||||||
import {
|
import {
|
||||||
free_models, install_pip, install_via_git_url, manager_instance,
|
free_models, install_pip, install_via_git_url, manager_instance,
|
||||||
rebootAPI, migrateAPI, setManagerInstance, show_message, customAlert, customPrompt } from "./common.js";
|
rebootAPI, migrateAPI, setManagerInstance, show_message, customAlert, customPrompt,
|
||||||
|
infoToast, showTerminal, setNeedRestart
|
||||||
|
} from "./common.js";
|
||||||
import { ComponentBuilderDialog, getPureName, load_components, set_component_policy } from "./components-manager.js";
|
import { ComponentBuilderDialog, getPureName, load_components, set_component_policy } from "./components-manager.js";
|
||||||
import { CustomNodesManager } from "./custom-nodes-manager.js";
|
import { CustomNodesManager } from "./custom-nodes-manager.js";
|
||||||
import { ModelManager } from "./model-manager.js";
|
import { ModelManager } from "./model-manager.js";
|
||||||
@@ -225,7 +227,11 @@ var update_comfyui_button = null;
|
|||||||
var switch_comfyui_button = null;
|
var switch_comfyui_button = null;
|
||||||
var fetch_updates_button = null;
|
var fetch_updates_button = null;
|
||||||
var update_all_button = null;
|
var update_all_button = null;
|
||||||
|
var restart_stop_button = null;
|
||||||
|
|
||||||
let share_option = 'all';
|
let share_option = 'all';
|
||||||
|
var is_updating_all = false;
|
||||||
|
|
||||||
|
|
||||||
// copied style from https://github.com/pythongosssss/ComfyUI-Custom-Scripts
|
// copied style from https://github.com/pythongosssss/ComfyUI-Custom-Scripts
|
||||||
const style = `
|
const style = `
|
||||||
@@ -424,102 +430,54 @@ async function init_notice(notice) {
|
|||||||
|
|
||||||
await init_share_option();
|
await init_share_option();
|
||||||
|
|
||||||
async function fetchNicknames() {
|
|
||||||
const response1 = await api.fetchApi(`/customnode/getmappings?mode=nickname`);
|
|
||||||
const mappings = await response1.json();
|
|
||||||
|
|
||||||
let result = {};
|
async function set_inprogress_mode() {
|
||||||
let nickname_patterns = [];
|
update_comfyui_button.disabled = true;
|
||||||
|
update_comfyui_button.style.backgroundColor = "gray";
|
||||||
|
|
||||||
for (let i in mappings) {
|
update_all_button.disabled = true;
|
||||||
let item = mappings[i];
|
update_all_button.style.backgroundColor = "gray";
|
||||||
var nickname;
|
|
||||||
if (item[1].nickname) {
|
|
||||||
nickname = item[1].nickname;
|
|
||||||
}
|
|
||||||
else if (item[1].title) {
|
|
||||||
nickname = item[1].title;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
nickname = item[1].title_aux;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (let j in item[0]) {
|
switch_comfyui_button.disabled = true;
|
||||||
result[item[0][j]] = nickname;
|
switch_comfyui_button.style.backgroundColor = "gray";
|
||||||
}
|
|
||||||
|
|
||||||
if(item[1].nodename_pattern) {
|
restart_stop_button.innerText = 'Stop';
|
||||||
nickname_patterns.push([item[1].nodename_pattern, nickname]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return [result, nickname_patterns];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const [nicknames, nickname_patterns] = await fetchNicknames();
|
|
||||||
|
|
||||||
function getNickname(node, nodename) {
|
async function reset_action_buttons() {
|
||||||
if(node.nickname) {
|
const isElectron = 'electronAPI' in window;
|
||||||
return node.nickname;
|
|
||||||
|
if(isElectron) {
|
||||||
|
update_all_button.innerText = "Update All Custom Nodes";
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (nicknames[nodename]) {
|
update_all_button.innerText = "Update All";
|
||||||
node.nickname = nicknames[nodename];
|
|
||||||
}
|
|
||||||
else if(node.getInnerNodes) {
|
|
||||||
let pure_name = getPureName(node);
|
|
||||||
let groupNode = app.graph.extra?.groupNodes?.[pure_name];
|
|
||||||
if(groupNode) {
|
|
||||||
let packname = groupNode.packname;
|
|
||||||
node.nickname = packname;
|
|
||||||
}
|
|
||||||
return node.nickname;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
for(let i in nickname_patterns) {
|
|
||||||
let item = nickname_patterns[i];
|
|
||||||
if(nodename.match(item[0])) {
|
|
||||||
node.nickname = item[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return node.nickname;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
update_comfyui_button.innerText = "Update ComfyUI";
|
||||||
|
switch_comfyui_button.innerText = "Switch ComfyUI";
|
||||||
|
restart_stop_button.innerText = 'Restart';
|
||||||
|
|
||||||
|
update_comfyui_button.disabled = false;
|
||||||
|
update_all_button.disabled = false;
|
||||||
|
switch_comfyui_button.disabled = false;
|
||||||
|
|
||||||
|
update_comfyui_button.style.backgroundColor = "";
|
||||||
|
update_all_button.style.backgroundColor = "";
|
||||||
|
switch_comfyui_button.style.backgroundColor = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateComfyUI() {
|
async function updateComfyUI() {
|
||||||
let prev_text = update_comfyui_button.innerText;
|
let prev_text = update_comfyui_button.innerText;
|
||||||
update_comfyui_button.innerText = "Updating ComfyUI...";
|
update_comfyui_button.innerText = "Updating ComfyUI...";
|
||||||
update_comfyui_button.disabled = true;
|
|
||||||
update_comfyui_button.style.backgroundColor = "gray";
|
|
||||||
|
|
||||||
try {
|
set_inprogress_mode();
|
||||||
const response = await api.fetchApi('/comfyui_manager/update_comfyui');
|
|
||||||
|
|
||||||
if (response.status == 400) {
|
const response = await api.fetchApi('/manager/queue/update_comfyui');
|
||||||
show_message('Failed to update ComfyUI.');
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (response.status == 201) {
|
showTerminal();
|
||||||
show_message('ComfyUI has been successfully updated.');
|
await api.fetchApi('/manager/queue/start');
|
||||||
}
|
|
||||||
else {
|
|
||||||
show_message('ComfyUI is already up to date with the latest version.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (exception) {
|
|
||||||
show_message(`Failed to update ComfyUI / ${exception}`);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
update_comfyui_button.disabled = false;
|
|
||||||
update_comfyui_button.innerText = prev_text;
|
|
||||||
update_comfyui_button.style.backgroundColor = "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function showVersionSelectorDialog(versions, current, onSelect) {
|
function showVersionSelectorDialog(versions, current, onSelect) {
|
||||||
@@ -647,26 +605,32 @@ function showVersionSelectorDialog(versions, current, onSelect) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function switchComfyUI() {
|
async function switchComfyUI() {
|
||||||
let res = await api.fetchApi(`/comfyui_manager/comfyui_versions`, { cache: "no-store" });
|
let res = await api.fetchApi(`/comfyui_manager/comfyui_versions`, { cache: "no-store" });
|
||||||
|
|
||||||
if(res.status == 200) {
|
if(res.status == 200) {
|
||||||
let obj = await res.json();
|
let obj = await res.json();
|
||||||
|
|
||||||
let versions = [];
|
let versions = [];
|
||||||
let default_version;
|
let default_version;
|
||||||
|
|
||||||
for(let v of obj.versions) {
|
for(let v of obj.versions) {
|
||||||
default_version = v;
|
default_version = v;
|
||||||
versions.push(v);
|
versions.push(v);
|
||||||
}
|
}
|
||||||
|
|
||||||
showVersionSelectorDialog(versions, obj.current, (selected_version) => {
|
showVersionSelectorDialog(versions, obj.current, async (selected_version) => {
|
||||||
api.fetchApi(`/comfyui_manager/comfyui_switch_version?ver=${selected_version}`, { cache: "no-store" });
|
let response = await api.fetchApi(`/comfyui_manager/comfyui_switch_version?ver=${selected_version}`, { cache: "no-store" });
|
||||||
});
|
if (response.status == 200) {
|
||||||
}
|
infoToast(`ComfyUI version is switched to ${selected_version}`);
|
||||||
else {
|
}
|
||||||
show_message('Failed to fetch ComfyUI versions.');
|
else {
|
||||||
}
|
customAlert('Failed to switch ComfyUI version.');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
customAlert('Failed to fetch ComfyUI versions.');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -720,70 +684,135 @@ async function fetchUpdates(update_check_checkbox) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateAll(update_check_checkbox, manager_dialog) {
|
async function onQueueStatus(event) {
|
||||||
let prev_text = update_all_button.innerText;
|
const isElectron = 'electronAPI' in window;
|
||||||
update_all_button.innerText = "Updating all...(ComfyUI)";
|
|
||||||
update_all_button.disabled = true;
|
|
||||||
update_all_button.style.backgroundColor = "gray";
|
|
||||||
|
|
||||||
try {
|
if(event.detail.status == 'in_progress') {
|
||||||
var mode = manager_instance.datasrc_combo.value;
|
set_inprogress_mode();
|
||||||
|
update_all_button.innerText = `in progress.. (${event.detail.done_count}/${event.detail.total_count})`;
|
||||||
|
}
|
||||||
|
else if(event.detail.status == 'done') {
|
||||||
|
reset_action_buttons();
|
||||||
|
|
||||||
update_all_button.innerText = "Updating all...";
|
if(!is_updating_all) {
|
||||||
const response1 = await api.fetchApi('/comfyui_manager/update_comfyui');
|
return;
|
||||||
const response2 = await api.fetchApi(`/customnode/update_all?mode=${mode}`);
|
|
||||||
|
|
||||||
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) {
|
is_updating_all = false;
|
||||||
show_message('Failed to update ComfyUI or several extensions.<BR><BR>See terminal log.<BR>');
|
|
||||||
return false;
|
let success_list = [];
|
||||||
|
let failed_list = [];
|
||||||
|
let comfyui_state = null;
|
||||||
|
|
||||||
|
for(let k in event.detail.nodepack_result){
|
||||||
|
let v = event.detail.nodepack_result[k];
|
||||||
|
|
||||||
|
if(k == 'comfyui') {
|
||||||
|
comfyui_state = v;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(v.msg == 'success') {
|
||||||
|
success_list.push(k);
|
||||||
|
}
|
||||||
|
else if(v.msg != 'skip')
|
||||||
|
failed_list.push(k);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(response1.status == 201 || response2.status == 201) {
|
let msg = "";
|
||||||
const update_info = await response2.json();
|
|
||||||
|
if(success_list.length == 0 && comfyui_state != 'success') {
|
||||||
let failed_list = "";
|
if(failed_list.length == 0) {
|
||||||
if(update_info.failed.length > 0) {
|
msg += "All custom nodes are already up to date.";
|
||||||
failed_list = "<BR>FAILED: "+update_info.failed.join(", ");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let updated_list = "";
|
|
||||||
if(update_info.updated.length > 0) {
|
|
||||||
updated_list = "<BR>UPDATED: "+update_info.updated.join(", ");
|
|
||||||
}
|
|
||||||
|
|
||||||
show_message(
|
|
||||||
"ComfyUI and all extensions have been updated to the latest version.<BR>To apply the updated custom node, please <button class='cm-small-button' id='cm-reboot-button5'>RESTART</button> ComfyUI. And refresh browser.<BR>"
|
|
||||||
+failed_list
|
|
||||||
+updated_list
|
|
||||||
);
|
|
||||||
|
|
||||||
const rebootButton = document.getElementById('cm-reboot-button5');
|
|
||||||
rebootButton.addEventListener("click",
|
|
||||||
function() {
|
|
||||||
if(rebootAPI()) {
|
|
||||||
manager_dialog.close();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
show_message('ComfyUI and all extensions are already up-to-date with the latest versions.');
|
msg = "To apply the updates, you need to <button class='cm-small-button' id='cm-reboot-button5'>RESTART</button> ComfyUI.<hr>";
|
||||||
|
|
||||||
|
if(comfyui_state == 'success') {
|
||||||
|
msg += "ComfyUI is updated.<BR><BR>";
|
||||||
|
}
|
||||||
|
else if(comfyui_state == 'skip') {
|
||||||
|
msg += "ComfyUI is already up-to-date.<BR><BR>"
|
||||||
|
}
|
||||||
|
else if(comfyui_state != null) {
|
||||||
|
msg += "Failed to update ComfyUI.<BR><BR>"
|
||||||
|
}
|
||||||
|
|
||||||
|
if(success_list.length > 0) {
|
||||||
|
msg += "The following custom nodes have been updated:<ul>";
|
||||||
|
for(let x in success_list) {
|
||||||
|
let k = success_list[x];
|
||||||
|
let url = event.detail.nodepack_result[k].url;
|
||||||
|
let title = event.detail.nodepack_result[k].title;
|
||||||
|
if(url) {
|
||||||
|
msg += `<li><a href='${url}' target='_blank'>${title}</a></li>`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
msg += `<li>${k}</li>`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
msg += "</ul>";
|
||||||
|
}
|
||||||
|
|
||||||
|
setNeedRestart(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if(failed_list.length > 0) {
|
||||||
|
msg += '<br>The update for the following custom nodes has failed:<ul>';
|
||||||
|
for(let x in failed_list) {
|
||||||
|
let k = failed_list[x];
|
||||||
|
let url = event.detail.nodepack_result[k].url;
|
||||||
|
let title = event.detail.nodepack_result[k].title;
|
||||||
|
if(url) {
|
||||||
|
msg += `<li><a href='${url}' target='_blank'>${title}</a></li>`;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
msg += `<li>${k}</li>`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
msg += '</ul>'
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
show_message(msg);
|
||||||
|
|
||||||
|
const rebootButton = document.getElementById('cm-reboot-button5');
|
||||||
|
rebootButton?.addEventListener("click",
|
||||||
|
function() {
|
||||||
|
if(rebootAPI()) {
|
||||||
|
manager_dialog.close();
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
catch (exception) {
|
}
|
||||||
show_message(`Failed to update ComfyUI or several extensions / ${exception}`);
|
|
||||||
return false;
|
api.addEventListener("cm-queue-status", onQueueStatus);
|
||||||
|
|
||||||
|
|
||||||
|
async function updateAll(update_comfyui, manager_dialog) {
|
||||||
|
let prev_text = update_all_button.innerText;
|
||||||
|
update_all_button.innerText = "Updating...";
|
||||||
|
|
||||||
|
set_inprogress_mode();
|
||||||
|
|
||||||
|
var mode = manager_instance.datasrc_combo.value;
|
||||||
|
|
||||||
|
showTerminal();
|
||||||
|
|
||||||
|
if(update_comfyui) {
|
||||||
|
update_all_button.innerText = "Updating ComfyUI...";
|
||||||
|
await api.fetchApi('/manager/queue/update_comfyui');
|
||||||
}
|
}
|
||||||
finally {
|
|
||||||
update_all_button.disabled = false;
|
const response = await api.fetchApi(`/manager/queue/update_all?mode=${mode}`);
|
||||||
update_all_button.innerText = prev_text;
|
|
||||||
update_all_button.style.backgroundColor = "";
|
if (response.status == 401) {
|
||||||
|
customAlert('Another task is already in progress. Please stop the ongoing task first.');
|
||||||
|
}
|
||||||
|
else if(response.status == 200) {
|
||||||
|
is_updating_all = true;
|
||||||
|
await api.fetchApi('/manager/queue/start');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -807,12 +836,22 @@ const isOutputNode = (node) => {
|
|||||||
return SUPPORTED_OUTPUT_NODE_TYPES.includes(node.type);
|
return SUPPORTED_OUTPUT_NODE_TYPES.includes(node.type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function restartOrStop() {
|
||||||
|
if(restart_stop_button.innerText == 'Restart'){
|
||||||
|
rebootAPI();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
api.fetchApi('/manager/queue/reset');
|
||||||
|
infoToast('Cancel', 'Remaining tasks will stop after completing the current task.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// -----------
|
// -----------
|
||||||
class ManagerMenuDialog extends ComfyDialog {
|
class ManagerMenuDialog extends ComfyDialog {
|
||||||
createControlsMid() {
|
createControlsMid() {
|
||||||
let self = this;
|
let self = this;
|
||||||
const isElectron = 'electronAPI' in window;
|
const isElectron = 'electronAPI' in window;
|
||||||
|
|
||||||
update_comfyui_button =
|
update_comfyui_button =
|
||||||
$el("button.cm-button", {
|
$el("button.cm-button", {
|
||||||
type: "button",
|
type: "button",
|
||||||
@@ -843,14 +882,32 @@ class ManagerMenuDialog extends ComfyDialog {
|
|||||||
() => fetchUpdates(this.update_check_checkbox)
|
() => fetchUpdates(this.update_check_checkbox)
|
||||||
});
|
});
|
||||||
|
|
||||||
update_all_button =
|
restart_stop_button =
|
||||||
$el("button.cm-button", {
|
$el("button.cm-button-red", {
|
||||||
type: "button",
|
type: "button",
|
||||||
textContent: "Update All",
|
textContent: "Restart",
|
||||||
onclick:
|
onclick: () => restartOrStop()
|
||||||
() => updateAll(this.update_check_checkbox, self)
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if(isElectron) {
|
||||||
|
update_all_button =
|
||||||
|
$el("button.cm-button", {
|
||||||
|
type: "button",
|
||||||
|
textContent: "Update All Custom Nodes",
|
||||||
|
onclick:
|
||||||
|
() => updateAll(false, self)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
update_all_button =
|
||||||
|
$el("button.cm-button", {
|
||||||
|
type: "button",
|
||||||
|
textContent: "Update All",
|
||||||
|
onclick:
|
||||||
|
() => updateAll(true, self)
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const res =
|
const res =
|
||||||
[
|
[
|
||||||
$el("button.cm-button", {
|
$el("button.cm-button", {
|
||||||
@@ -909,11 +966,7 @@ class ManagerMenuDialog extends ComfyDialog {
|
|||||||
fetch_updates_button,
|
fetch_updates_button,
|
||||||
|
|
||||||
$el("br", {}, []),
|
$el("br", {}, []),
|
||||||
$el("button.cm-button-red", {
|
restart_stop_button,
|
||||||
type: "button",
|
|
||||||
textContent: "Restart",
|
|
||||||
onclick: () => rebootAPI()
|
|
||||||
}),
|
|
||||||
];
|
];
|
||||||
|
|
||||||
let migration_btn =
|
let migration_btn =
|
||||||
|
|||||||
73
js/common.js
73
js/common.js
@@ -431,4 +431,75 @@ export function showTerminal() {
|
|||||||
catch(exception) {
|
catch(exception) {
|
||||||
// do nothing
|
// do nothing
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let need_restart = false;
|
||||||
|
|
||||||
|
export function setNeedRestart(value) {
|
||||||
|
need_restart = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
async function onReconnected(event) {
|
||||||
|
if(need_restart) {
|
||||||
|
setNeedRestart(false);
|
||||||
|
|
||||||
|
const confirmed = await customConfirm("To apply the changes to the node pack's installation status, you need to refresh the browser. Would you like to refresh?");
|
||||||
|
if (!confirmed) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
window.location.reload(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
api.addEventListener('reconnected', onReconnected);
|
||||||
|
|
||||||
|
const storeId = "comfyui-manager-grid";
|
||||||
|
let timeId;
|
||||||
|
export function storeColumnWidth(gridId, columnItem) {
|
||||||
|
clearTimeout(timeId);
|
||||||
|
timeId = setTimeout(() => {
|
||||||
|
let data = {};
|
||||||
|
const dataStr = localStorage.getItem(storeId);
|
||||||
|
if (dataStr) {
|
||||||
|
try {
|
||||||
|
data = JSON.parse(dataStr);
|
||||||
|
} catch (e) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!data[gridId]) {
|
||||||
|
data[gridId] = {};
|
||||||
|
}
|
||||||
|
|
||||||
|
data[gridId][columnItem.id] = columnItem.width;
|
||||||
|
|
||||||
|
localStorage.setItem(storeId, JSON.stringify(data));
|
||||||
|
|
||||||
|
}, 200)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function restoreColumnWidth(gridId, columns) {
|
||||||
|
const dataStr = localStorage.getItem(storeId);
|
||||||
|
if (!dataStr) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
let data;
|
||||||
|
try {
|
||||||
|
data = JSON.parse(dataStr);
|
||||||
|
} catch (e) {}
|
||||||
|
if(!data) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const widthMap = data[gridId];
|
||||||
|
if (!widthMap) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
columns.forEach(columnItem => {
|
||||||
|
const w = widthMap[columnItem.id];
|
||||||
|
if (w) {
|
||||||
|
columnItem.width = w;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|||||||
@@ -5,12 +5,15 @@ import { api } from "../../scripts/api.js";
|
|||||||
import {
|
import {
|
||||||
manager_instance, rebootAPI, install_via_git_url,
|
manager_instance, rebootAPI, install_via_git_url,
|
||||||
fetchData, md5, icons, show_message, customConfirm, customAlert, customPrompt,
|
fetchData, md5, icons, show_message, customConfirm, customAlert, customPrompt,
|
||||||
sanitizeHTML, infoToast, showTerminal
|
sanitizeHTML, infoToast, showTerminal, setNeedRestart,
|
||||||
|
storeColumnWidth, restoreColumnWidth
|
||||||
} from "./common.js";
|
} from "./common.js";
|
||||||
|
|
||||||
// https://cenfun.github.io/turbogrid/api.html
|
// https://cenfun.github.io/turbogrid/api.html
|
||||||
import TG from "./turbogrid.esm.js";
|
import TG from "./turbogrid.esm.js";
|
||||||
|
|
||||||
|
const gridId = "node";
|
||||||
|
|
||||||
const pageCss = `
|
const pageCss = `
|
||||||
.cn-manager {
|
.cn-manager {
|
||||||
--grid-font: -apple-system, BlinkMacSystemFont, "Segue UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
--grid-font: -apple-system, BlinkMacSystemFont, "Segue UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
||||||
@@ -401,7 +404,6 @@ export class CustomNodesManager {
|
|||||||
this.init();
|
this.init();
|
||||||
|
|
||||||
api.addEventListener("cm-queue-status", this.onQueueStatus);
|
api.addEventListener("cm-queue-status", this.onQueueStatus);
|
||||||
api.addEventListener('reconnected', this.onReconnected);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
@@ -833,6 +835,10 @@ export class CustomNodesManager {
|
|||||||
this.renderSelected();
|
this.renderSelected();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
grid.bind("onColumnWidthChanged", (e, columnItem) => {
|
||||||
|
storeColumnWidth(gridId, columnItem)
|
||||||
|
});
|
||||||
|
|
||||||
grid.bind('onClick', (e, d) => {
|
grid.bind('onClick', (e, d) => {
|
||||||
const btn = this.getButton(d.e.target);
|
const btn = this.getButton(d.e.target);
|
||||||
if (btn) {
|
if (btn) {
|
||||||
@@ -1160,6 +1166,8 @@ export class CustomNodesManager {
|
|||||||
return 0;
|
return 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
restoreColumnWidth(gridId, columns);
|
||||||
|
|
||||||
this.grid.setData({
|
this.grid.setData({
|
||||||
options: options,
|
options: options,
|
||||||
rows: rows_values,
|
rows: rows_values,
|
||||||
@@ -1403,21 +1411,6 @@ export class CustomNodesManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async onReconnected(event) {
|
|
||||||
let self = CustomNodesManager.instance;
|
|
||||||
|
|
||||||
if(self.need_restart) {
|
|
||||||
self.need_restart = false;
|
|
||||||
|
|
||||||
const confirmed = await customConfirm("To apply the changes to the node pack's installation status, you need to refresh the browser. Would you like to refresh?");
|
|
||||||
if (!confirmed) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
window.location.reload(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
async onQueueStatus(event) {
|
async onQueueStatus(event) {
|
||||||
let self = CustomNodesManager.instance;
|
let self = CustomNodesManager.instance;
|
||||||
if(event.detail.status == 'in_progress' && event.detail.ui_target == 'nodepack_manager') {
|
if(event.detail.status == 'in_progress' && event.detail.ui_target == 'nodepack_manager') {
|
||||||
@@ -1457,7 +1450,7 @@ export class CustomNodesManager {
|
|||||||
for(let hash in result){
|
for(let hash in result){
|
||||||
let v = result[hash];
|
let v = result[hash];
|
||||||
|
|
||||||
if(v != 'success')
|
if(v != 'success' && v != 'skip')
|
||||||
errorMsg += v+'\n';
|
errorMsg += v+'\n';
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1672,6 +1665,8 @@ export class CustomNodesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async loadData(show_mode = ShowMode.NORMAL) {
|
async loadData(show_mode = ShowMode.NORMAL) {
|
||||||
|
const isElectron = 'electronAPI' in window;
|
||||||
|
|
||||||
this.show_mode = show_mode;
|
this.show_mode = show_mode;
|
||||||
console.log("Show mode:", show_mode);
|
console.log("Show mode:", show_mode);
|
||||||
|
|
||||||
@@ -1691,6 +1686,11 @@ export class CustomNodesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const { channel, node_packs } = res.data;
|
const { channel, node_packs } = res.data;
|
||||||
|
|
||||||
|
if(isElectron) {
|
||||||
|
delete node_packs['comfyui-manager'];
|
||||||
|
}
|
||||||
|
|
||||||
this.channel = channel;
|
this.channel = channel;
|
||||||
this.mode = mode;
|
this.mode = mode;
|
||||||
this.custom_nodes = node_packs;
|
this.custom_nodes = node_packs;
|
||||||
@@ -1891,7 +1891,7 @@ export class CustomNodesManager {
|
|||||||
|
|
||||||
showRestart() {
|
showRestart() {
|
||||||
this.element.querySelector(".cn-manager-restart").style.display = "block";
|
this.element.querySelector(".cn-manager-restart").style.display = "block";
|
||||||
this.need_restart = true;
|
setNeedRestart(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
showStop() {
|
showStop() {
|
||||||
|
|||||||
@@ -2,13 +2,16 @@ import { app } from "../../scripts/app.js";
|
|||||||
import { $el } from "../../scripts/ui.js";
|
import { $el } from "../../scripts/ui.js";
|
||||||
import {
|
import {
|
||||||
manager_instance, rebootAPI,
|
manager_instance, rebootAPI,
|
||||||
fetchData, md5, icons, show_message, customAlert, infoToast, showTerminal
|
fetchData, md5, icons, show_message, customAlert, infoToast, showTerminal,
|
||||||
|
storeColumnWidth, restoreColumnWidth
|
||||||
} from "./common.js";
|
} from "./common.js";
|
||||||
import { api } from "../../scripts/api.js";
|
import { api } from "../../scripts/api.js";
|
||||||
|
|
||||||
// https://cenfun.github.io/turbogrid/api.html
|
// https://cenfun.github.io/turbogrid/api.html
|
||||||
import TG from "./turbogrid.esm.js";
|
import TG from "./turbogrid.esm.js";
|
||||||
|
|
||||||
|
const gridId = "model";
|
||||||
|
|
||||||
const pageCss = `
|
const pageCss = `
|
||||||
.cmm-manager {
|
.cmm-manager {
|
||||||
--grid-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
--grid-font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji";
|
||||||
@@ -438,6 +441,10 @@ export class ModelManager {
|
|||||||
this.renderSelected();
|
this.renderSelected();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
grid.bind("onColumnWidthChanged", (e, columnItem) => {
|
||||||
|
storeColumnWidth(gridId, columnItem)
|
||||||
|
});
|
||||||
|
|
||||||
grid.bind('onClick', (e, d) => {
|
grid.bind('onClick', (e, d) => {
|
||||||
const { rowItem } = d;
|
const { rowItem } = d;
|
||||||
const target = d.e.target;
|
const target = d.e.target;
|
||||||
@@ -589,6 +596,8 @@ export class ModelManager {
|
|||||||
width: 200
|
width: 200
|
||||||
}];
|
}];
|
||||||
|
|
||||||
|
restoreColumnWidth(gridId, columns);
|
||||||
|
|
||||||
this.grid.setData({
|
this.grid.setData({
|
||||||
options,
|
options,
|
||||||
rows,
|
rows,
|
||||||
|
|||||||
@@ -12,6 +12,158 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "if-ai",
|
||||||
|
"title": "ComfyUI-IF_Zonos [WIP]",
|
||||||
|
"reference": "https://github.com/if-ai/ComfyUI-IF_Zonos",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/if-ai/ComfyUI-IF_Zonos"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Zonos for ComfyUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "grinlau18",
|
||||||
|
"title": "Xiser_Nodes [WIP]",
|
||||||
|
"reference": "https://github.com/grinlau18/ComfyUI_XISER_Nodes",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/grinlau18/ComfyUI_XISER_Nodes"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A collection of custom nodes for ComfyUI\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "LAOGOU-666",
|
||||||
|
"title": "Comfyui_StartPatch [UNSAFE]",
|
||||||
|
"reference": "https://github.com/LAOGOU-666/Comfyui_StartPatch",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/LAOGOU-666/Comfyui_StartPatch"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This patch plugin optimizes the node information processing mechanism of the ComfyUI server, significantly improving server performance and response speed. It greatly reduces the browser page initialization waiting time. [w/Since this patch modifies key functions of ComfyUI, it is highly likely to cause compatibility issues.]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "badmike",
|
||||||
|
"title": "Prompt Factory [CONFLICT]",
|
||||||
|
"reference": "https://github.com/badmike/comfyui-prompt-factory",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/badmike/comfyui-prompt-factory"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A modular system that adds randomness to prompt generation [w/This node pack is causing a name conflict with https://github.com/satche/comfyui-prompt-factory]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "owengillett",
|
||||||
|
"title": "ComfyUI-tilefusion",
|
||||||
|
"reference": "https://github.com/owengillett/ComfyUI-tilefusion",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/owengillett/ComfyUI-tilefusion"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Helper nodes for generating seamless tiles."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Scaryplasmon",
|
||||||
|
"title": "ComfTrellis [WIP]",
|
||||||
|
"reference": "https://github.com/Scaryplasmon/ComfTrellis",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Scaryplasmon/ComfTrellis"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "1 click install to run Trellis in ComfyUI\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "fangziheng2321",
|
||||||
|
"title": "comfyuinode_chopmask [WIP]",
|
||||||
|
"reference": "https://github.com/fangziheng2321/comfyuinode_chopmask",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/fangziheng2321/comfyuinode_chopmask"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "a custom comfyui node for '/fooocusinpaint_upload'\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "RodrigoSKohl",
|
||||||
|
"title": "Interior Design for Comfyui [WIP]",
|
||||||
|
"reference": "https://github.com/RodrigoSKohl/StableDesign-for-ComfyUI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/RodrigoSKohl/StableDesign-for-ComfyUI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This node is based on MykolaL/StableDesign"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "D1-3105",
|
||||||
|
"title": "ComfyUI-VideoStream",
|
||||||
|
"reference": "https://github.com/D1-3105/ComfyUI-VideoStream",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/D1-3105/ComfyUI-VideoStream"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: FloWWeaverExportSingleFrameGRPC"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "gmorks",
|
||||||
|
"title": "ComfyUI Animagine prompt [WIP]",
|
||||||
|
"reference": "https://github.com/gmorks/ComfyUI-Animagine-Prompt",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/gmorks/ComfyUI-Animagine-Prompt"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Comfy UI node to prompt build for [a/https://huggingface.co/cagliostrolab/animagine-xl-4.0](https://huggingface.co/cagliostrolab/animagine-xl-4.0) model\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "wirytiox",
|
||||||
|
"title": "ComfyUI-Qwen [CONFLICT]",
|
||||||
|
"reference": "https://github.com/mr-krak3n/ComfyUI-Qwen",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/mr-krak3n/ComfyUI-Qwen"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This repository contains custom nodes for ComfyUI, designed to facilitate working with language models such as Qwen2.5 and DeepSeek. [w/This node pack is causing a name conflict with https://github.com/ZHO-ZHO-ZHO/ComfyUI-Qwen]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "hiusdev",
|
||||||
|
"title": "ComfyUI_Lah_Toffee",
|
||||||
|
"reference": "https://github.com/hiusdev/ComfyUI_Lah_Toffee",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/hiusdev/ComfyUI_Lah_Toffee"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Lah LoadVideoRandom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "hdfhssg",
|
||||||
|
"title": "ComfyUI_pxtool [WIP]",
|
||||||
|
"reference": "https://github.com/hdfhssg/ComfyUI_pxtool",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/hdfhssg/ComfyUI_pxtool"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This is a custom plugin node for ComfyUI that modifies and extends some features from existing projects. The main implementations include:\n* Reproducing some features of the [a/Stable-Diffusion-Webui-Civitai-Helper](https://github.com/zixaphir/Stable-Diffusion-Webui-Civitai-Helper) project within ComfyUI\n* Implementing a feature to randomly generate related prompt words by referencing the [a/noob-wiki dataset](https://huggingface.co/datasets/Laxhar/noob-wiki/tree/main)\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "dasilva333",
|
||||||
|
"title": "ComfyUI_MarkdownImage [WIP]",
|
||||||
|
"reference": "https://github.com/dasilva333/ComfyUI_MarkdownImage",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/dasilva333/ComfyUI_MarkdownImage"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Create an image using html and markdown in ComfyUI\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "franky519",
|
||||||
|
"title": "comfyui-redux-style",
|
||||||
|
"reference": "https://github.com/franky519/comfyui-redux-style",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/franky519/comfyui-redux-style"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Style Model Grid, Style Model Apply, Style Model Advanced"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "rishipandey125",
|
"author": "rishipandey125",
|
||||||
"title": "ComfyUI-FramePacking [WIP]",
|
"title": "ComfyUI-FramePacking [WIP]",
|
||||||
@@ -543,16 +695,6 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Tools for creating voxel based videos"
|
"description": "Tools for creating voxel based videos"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"author": "Njbx",
|
|
||||||
"title": "ComfyUI-blockswap",
|
|
||||||
"reference": "https://github.com/Njbx/ComfyUI-blockswap",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/Njbx/ComfyUI-blockswap"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "NODES: Block Swap"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"author": "PATATAJEC",
|
"author": "PATATAJEC",
|
||||||
"title": "Patatajec-Nodes [WIP]",
|
"title": "Patatajec-Nodes [WIP]",
|
||||||
|
|||||||
@@ -178,10 +178,17 @@
|
|||||||
"https://github.com/807502278/ComfyUI_TensorRT_Merge": [
|
"https://github.com/807502278/ComfyUI_TensorRT_Merge": [
|
||||||
[
|
[
|
||||||
"BiRefNet2_tensort",
|
"BiRefNet2_tensort",
|
||||||
|
"BiRefNet_TRT",
|
||||||
|
"Building_TRT",
|
||||||
|
"Custom_Building_TRT",
|
||||||
"DepthAnything_Tensorrt",
|
"DepthAnything_Tensorrt",
|
||||||
"Dwpose_Tensorrt",
|
"Dwpose_Tensorrt",
|
||||||
"building_tensorrt_engine",
|
"FaceRestoreTensorrt",
|
||||||
"load_BiRefNet2_General",
|
"RifeTensorrt",
|
||||||
|
"UpscalerTensorrt",
|
||||||
|
"YoloNasPoseTensorrt",
|
||||||
|
"load_BiRefNet2_tensort",
|
||||||
|
"load_BiRefNet_TRT",
|
||||||
"load_DepthAnything_Tensorrt",
|
"load_DepthAnything_Tensorrt",
|
||||||
"load_Dwpos_Tensorrt"
|
"load_Dwpos_Tensorrt"
|
||||||
],
|
],
|
||||||
@@ -651,6 +658,14 @@
|
|||||||
"title_aux": "ComfyUI OpenAI Nodes"
|
"title_aux": "ComfyUI OpenAI Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/D1-3105/ComfyUI-VideoStream": [
|
||||||
|
[
|
||||||
|
"FloWWeaverExportSingleFrameGRPC"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-VideoStream"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/DataCTE/ComfyUI-DataVoid-nodes": [
|
"https://github.com/DataCTE/ComfyUI-DataVoid-nodes": [
|
||||||
[
|
[
|
||||||
"IPAAdapterFaceIDBatch",
|
"IPAAdapterFaceIDBatch",
|
||||||
@@ -726,7 +741,6 @@
|
|||||||
"https://github.com/DraconicDragon/ComfyUI_e621_booru_toolkit": [
|
"https://github.com/DraconicDragon/ComfyUI_e621_booru_toolkit": [
|
||||||
[
|
[
|
||||||
"GetBooruPost",
|
"GetBooruPost",
|
||||||
"TagEncode",
|
|
||||||
"TagWikiFetch"
|
"TagWikiFetch"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -933,9 +947,11 @@
|
|||||||
"DeepSeekImageGeneration",
|
"DeepSeekImageGeneration",
|
||||||
"DeepSeekImageUnderstanding",
|
"DeepSeekImageUnderstanding",
|
||||||
"DeepSeekModelLoader",
|
"DeepSeekModelLoader",
|
||||||
|
"GoogleDriveUpload",
|
||||||
"ImagePreprocessor",
|
"ImagePreprocessor",
|
||||||
"LLM_Loader",
|
"LLM_Loader",
|
||||||
"OpenAICompatibleLoader"
|
"OpenAICompatibleLoader",
|
||||||
|
"VideoFileUploader"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-DeepSeek_Toolkit [WIP]"
|
"title_aux": "ComfyUI-DeepSeek_Toolkit [WIP]"
|
||||||
@@ -1255,7 +1271,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/M4lF3s/comfy-tif-support": [
|
"https://github.com/M4lF3s/comfy-tif-support": [
|
||||||
[
|
[
|
||||||
"Load TIFF"
|
"Load TIFF",
|
||||||
|
"Save TIFF"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "comfy-tif-support"
|
"title_aux": "comfy-tif-support"
|
||||||
@@ -1308,14 +1325,6 @@
|
|||||||
"title_aux": "ComfyUI-APG_ImYourCFGNow"
|
"title_aux": "ComfyUI-APG_ImYourCFGNow"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/Njbx/ComfyUI-blockswap": [
|
|
||||||
[
|
|
||||||
"BlockSwap"
|
|
||||||
],
|
|
||||||
{
|
|
||||||
"title_aux": "ComfyUI-blockswap"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"https://github.com/Northerner1/ComfyUI_North_Noise": [
|
"https://github.com/Northerner1/ComfyUI_North_Noise": [
|
||||||
[
|
[
|
||||||
"North_Unsampler"
|
"North_Unsampler"
|
||||||
@@ -1426,12 +1435,22 @@
|
|||||||
"https://github.com/RobeSantoro/ComfyUI-RobeNodes": [
|
"https://github.com/RobeSantoro/ComfyUI-RobeNodes": [
|
||||||
[
|
[
|
||||||
"List Image Path \ud83d\udc24",
|
"List Image Path \ud83d\udc24",
|
||||||
"List Video Path \ud83d\udc24"
|
"List Model Path \ud83d\udc24",
|
||||||
|
"List Video Path \ud83d\udc24",
|
||||||
|
"Peaks Weights Generator \ud83d\udc24"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Comfy UI Robe Nodes [UNSAFE]"
|
"title_aux": "Comfy UI Robe Nodes [UNSAFE]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/RodrigoSKohl/StableDesign-for-ComfyUI": [
|
||||||
|
[
|
||||||
|
"interior-design-for-comfyui"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Interior Design for Comfyui [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/SS-snap/ComfyUI-Snap_Processing": [
|
"https://github.com/SS-snap/ComfyUI-Snap_Processing": [
|
||||||
[
|
[
|
||||||
"AreaCalculator",
|
"AreaCalculator",
|
||||||
@@ -1476,6 +1495,18 @@
|
|||||||
"title_aux": "ComfyUI_Save2Discord"
|
"title_aux": "ComfyUI_Save2Discord"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Scaryplasmon/ComfTrellis": [
|
||||||
|
[
|
||||||
|
"LoadTrellisModel",
|
||||||
|
"RembgSquare",
|
||||||
|
"SaveGLBFile",
|
||||||
|
"TrellisGrid",
|
||||||
|
"TrellisInference"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfTrellis [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/SeedV/ComfyUI-SeedV-Nodes": [
|
"https://github.com/SeedV/ComfyUI-SeedV-Nodes": [
|
||||||
[
|
[
|
||||||
"ALL_Model_UnLoader(SEEDV)",
|
"ALL_Model_UnLoader(SEEDV)",
|
||||||
@@ -2347,6 +2378,7 @@
|
|||||||
"CLIPTextEncodeControlnet",
|
"CLIPTextEncodeControlnet",
|
||||||
"CLIPTextEncodeFlux",
|
"CLIPTextEncodeFlux",
|
||||||
"CLIPTextEncodeHunyuanDiT",
|
"CLIPTextEncodeHunyuanDiT",
|
||||||
|
"CLIPTextEncodeLumina2",
|
||||||
"CLIPTextEncodePixArtAlpha",
|
"CLIPTextEncodePixArtAlpha",
|
||||||
"CLIPTextEncodeSD3",
|
"CLIPTextEncodeSD3",
|
||||||
"CLIPTextEncodeSDXL",
|
"CLIPTextEncodeSDXL",
|
||||||
@@ -2462,6 +2494,7 @@
|
|||||||
"Mahiro",
|
"Mahiro",
|
||||||
"MaskComposite",
|
"MaskComposite",
|
||||||
"MaskToImage",
|
"MaskToImage",
|
||||||
|
"ModelComputeDtype",
|
||||||
"ModelMergeAdd",
|
"ModelMergeAdd",
|
||||||
"ModelMergeAuraflow",
|
"ModelMergeAuraflow",
|
||||||
"ModelMergeBlocks",
|
"ModelMergeBlocks",
|
||||||
@@ -2502,6 +2535,7 @@
|
|||||||
"RandomNoise",
|
"RandomNoise",
|
||||||
"RebatchImages",
|
"RebatchImages",
|
||||||
"RebatchLatents",
|
"RebatchLatents",
|
||||||
|
"RenormCFG",
|
||||||
"RepeatImageBatch",
|
"RepeatImageBatch",
|
||||||
"RepeatLatentBatch",
|
"RepeatLatentBatch",
|
||||||
"RescaleCFG",
|
"RescaleCFG",
|
||||||
@@ -2669,6 +2703,15 @@
|
|||||||
"title_aux": "VoidCustomNodes"
|
"title_aux": "VoidCustomNodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/dasilva333/ComfyUI_MarkdownImage": [
|
||||||
|
[
|
||||||
|
"CreateDialogImage",
|
||||||
|
"CreateMarkdownImage"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_MarkdownImage [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/denislov/Comfyui_AutoSurvey": [
|
"https://github.com/denislov/Comfyui_AutoSurvey": [
|
||||||
[
|
[
|
||||||
"AddDoc2Knowledge",
|
"AddDoc2Knowledge",
|
||||||
@@ -2879,6 +2922,14 @@
|
|||||||
"title_aux": "ComfyUI-Showrunner-Utils"
|
"title_aux": "ComfyUI-Showrunner-Utils"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/fangziheng2321/comfyuinode_chopmask": [
|
||||||
|
[
|
||||||
|
"cus_chopmask"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "comfyuinode_chopmask [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/flowtyone/comfyui-flowty-lcm": [
|
"https://github.com/flowtyone/comfyui-flowty-lcm": [
|
||||||
[
|
[
|
||||||
"LCMSampler"
|
"LCMSampler"
|
||||||
@@ -2906,6 +2957,17 @@
|
|||||||
"title_aux": "comfyui-cem-tools"
|
"title_aux": "comfyui-cem-tools"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/franky519/comfyui-redux-style": [
|
||||||
|
[
|
||||||
|
"StyleModelAdvanced",
|
||||||
|
"StyleModelApplySimple",
|
||||||
|
"StyleModelConditioner",
|
||||||
|
"StyleModelGridVisualizer"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "comfyui-redux-style"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/fritzprix/ComfyUI-LLM-Utils": [
|
"https://github.com/fritzprix/ComfyUI-LLM-Utils": [
|
||||||
[
|
[
|
||||||
"WeightedDict",
|
"WeightedDict",
|
||||||
@@ -2951,6 +3013,14 @@
|
|||||||
"title_aux": "comfyui_median_filter"
|
"title_aux": "comfyui_median_filter"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/gmorks/ComfyUI-Animagine-Prompt": [
|
||||||
|
[
|
||||||
|
"AnimaginePrompt"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Animagine prompt [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/go-package-lab/ComfyUI-Tools-Video-Combine": [
|
"https://github.com/go-package-lab/ComfyUI-Tools-Video-Combine": [
|
||||||
[
|
[
|
||||||
"Tools:CopyFile",
|
"Tools:CopyFile",
|
||||||
@@ -2980,7 +3050,8 @@
|
|||||||
"https://github.com/greengerong/ComfyUI-Lumina-Video": [
|
"https://github.com/greengerong/ComfyUI-Lumina-Video": [
|
||||||
[
|
[
|
||||||
"LuminaVideoModelLoader",
|
"LuminaVideoModelLoader",
|
||||||
"LuminaVideoSampler"
|
"LuminaVideoSampler",
|
||||||
|
"LuminaVideoVAEDecode"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-Lumina-Video [WIP]"
|
"title_aux": "ComfyUI-Lumina-Video [WIP]"
|
||||||
@@ -2995,6 +3066,16 @@
|
|||||||
"title_aux": "ComfyUI_Grim"
|
"title_aux": "ComfyUI_Grim"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/grinlau18/ComfyUI_XISER_Nodes": [
|
||||||
|
[
|
||||||
|
"XIS_Float_Slider",
|
||||||
|
"XIS_INT_Slider",
|
||||||
|
"XIS_PromptsWithSwitches"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Xiser_Nodes [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/haodman/ComfyUI_Rain": [
|
"https://github.com/haodman/ComfyUI_Rain": [
|
||||||
[
|
[
|
||||||
"Rain_ImageSize",
|
"Rain_ImageSize",
|
||||||
@@ -3068,6 +3149,31 @@
|
|||||||
"title_aux": "ComfyUI AceNodes [UNSAFE]"
|
"title_aux": "ComfyUI AceNodes [UNSAFE]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/hdfhssg/ComfyUI_pxtool": [
|
||||||
|
[
|
||||||
|
"ArtistLoader",
|
||||||
|
"CivitaiHelper",
|
||||||
|
"DanbooruCharacterTag",
|
||||||
|
"E621CharacterTag",
|
||||||
|
"NegativeTag",
|
||||||
|
"PX_Seed",
|
||||||
|
"QualityTag",
|
||||||
|
"RandomArtists",
|
||||||
|
"RandomArtistsAdvanced",
|
||||||
|
"RandomTag"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_pxtool [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"https://github.com/hiusdev/ComfyUI_Lah_Toffee": [
|
||||||
|
[
|
||||||
|
"LoadVideoRandom"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_Lah_Toffee"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/horidream/ComfyUI-Horidream": [
|
"https://github.com/horidream/ComfyUI-Horidream": [
|
||||||
[
|
[
|
||||||
"PassThroughWithSound"
|
"PassThroughWithSound"
|
||||||
@@ -3200,6 +3306,14 @@
|
|||||||
"title_aux": "comfyui-hydit"
|
"title_aux": "comfyui-hydit"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/if-ai/ComfyUI-IF_Zonos": [
|
||||||
|
[
|
||||||
|
"IF_ZonosTTS"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-IF_Zonos [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ilovejohnwhite/Tracer": [
|
"https://github.com/ilovejohnwhite/Tracer": [
|
||||||
[
|
[
|
||||||
"BillyGoatNode",
|
"BillyGoatNode",
|
||||||
@@ -3451,6 +3565,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/kandy/ComfyUI-KAndy": [
|
"https://github.com/kandy/ComfyUI-KAndy": [
|
||||||
[
|
[
|
||||||
|
"KAndyBatch2Index",
|
||||||
|
"KAndyBatchIndex",
|
||||||
"KAndyCivitImagesAPI",
|
"KAndyCivitImagesAPI",
|
||||||
"KAndyCivitPromptAPI",
|
"KAndyCivitPromptAPI",
|
||||||
"KAndyImageSave",
|
"KAndyImageSave",
|
||||||
@@ -3991,6 +4107,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/lum3on/comfyui_LLM_Polymath": [
|
"https://github.com/lum3on/comfyui_LLM_Polymath": [
|
||||||
[
|
[
|
||||||
|
"polymath_SaveAbsolute",
|
||||||
"polymath_chat",
|
"polymath_chat",
|
||||||
"polymath_scraper"
|
"polymath_scraper"
|
||||||
],
|
],
|
||||||
@@ -4199,6 +4316,16 @@
|
|||||||
"title_aux": "ComfyUI-Simple-Image-Tools [WIP]"
|
"title_aux": "ComfyUI-Simple-Image-Tools [WIP]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/mr-krak3n/ComfyUI-Qwen": [
|
||||||
|
[
|
||||||
|
"DeepSeekResponseParser",
|
||||||
|
"QwenLoader",
|
||||||
|
"QwenSampler"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Qwen [CONFLICT]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/mut-ex/comfyui-gligengui-node": [
|
"https://github.com/mut-ex/comfyui-gligengui-node": [
|
||||||
[
|
[
|
||||||
"GLIGEN_GUI"
|
"GLIGEN_GUI"
|
||||||
@@ -4391,7 +4518,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/osuiso-depot/comfyui-keshigom_custom": [
|
"https://github.com/osuiso-depot/comfyui-keshigom_custom": [
|
||||||
[
|
[
|
||||||
"KANI_Checkpoint_Loader_Simple",
|
"KANI_Checkpoint_Loader_From_String",
|
||||||
|
"KANI_MathExpression",
|
||||||
"KANI_Multiplexer",
|
"KANI_Multiplexer",
|
||||||
"KANI_ShowAnything",
|
"KANI_ShowAnything",
|
||||||
"KANI_TextFind",
|
"KANI_TextFind",
|
||||||
@@ -4405,6 +4533,15 @@
|
|||||||
"title_aux": "comfyui-keshigom_custom"
|
"title_aux": "comfyui-keshigom_custom"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/owengillett/ComfyUI-tilefusion": [
|
||||||
|
[
|
||||||
|
"RepeatVideo",
|
||||||
|
"VideoGridCombine"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-tilefusion"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/oyvindg/ComfyUI-TrollSuite": [
|
"https://github.com/oyvindg/ComfyUI-TrollSuite": [
|
||||||
[
|
[
|
||||||
"BinaryImageMask",
|
"BinaryImageMask",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -10,6 +10,38 @@
|
|||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "apesplat",
|
||||||
|
"title": "ezXY scripts and nodes [NOT MAINTAINED]",
|
||||||
|
"id": "ezxy",
|
||||||
|
"reference": "https://github.com/GMapeSplat/ComfyUI_ezXY",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/GMapeSplat/ComfyUI_ezXY"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Extensions/Patches: Enables linking float and integer inputs and ouputs. Values are automatically cast to the correct type and clamped to the correct range. Works with both builtin and custom nodes.[w/NOTE: This repo patches ComfyUI's validate_inputs and map_node_over_list functions while running. May break depending on your version of ComfyUI. Can be deactivated in config.yaml.]Nodes: A collection of nodes for facilitating the generation of XY plots. Capable of plotting changes over most primitive values.[w/Does not work with current version of Comfyui]"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "mie",
|
||||||
|
"title": "ComfyUI_JanusProCaption [REMOVED]",
|
||||||
|
"reference": "https://github.com/MieMieeeee/ComfyUI-JanusProCaption",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/MieMieeeee/ComfyUI-JanusProCaption"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Describe image or create caption files using Janus Pro Model"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Njbx",
|
||||||
|
"title": "ComfyUI-blockswap [REMOVED]",
|
||||||
|
"reference": "https://github.com/Njbx/ComfyUI-blockswap",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Njbx/ComfyUI-blockswap"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Block Swap"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "T8star1984",
|
"author": "T8star1984",
|
||||||
"title": "comfyui-purgevram [REMOVED]",
|
"title": "comfyui-purgevram [REMOVED]",
|
||||||
|
|||||||
@@ -10,7 +10,241 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "lunarring",
|
||||||
|
"title": "bitalino_comfy",
|
||||||
|
"reference": "https://github.com/lunarring/bitalino_comfy",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/lunarring/bitalino_comfy"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A package implementing a Bitalino device ComfyUI custom node."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Hellfiredragon",
|
||||||
|
"title": "comfyui-image-manipulation",
|
||||||
|
"reference": "https://github.com/Hellfiredragon/comfyui-image-manipulation",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Hellfiredragon/comfyui-image-manipulation"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Custom nodes to manipulate images in ComfyUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Mohammadreza Mohseni",
|
||||||
|
"title": "ComfyUI Mohseni Kit",
|
||||||
|
"id": "mohseni-kit",
|
||||||
|
"reference": "https://github.com/mohseni-mr/ComfyUI-Mohseni-Kit",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/mohseni-mr/ComfyUI-Mohseni-Kit"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A collection of useful nodes for ComfyUI, including Float Preview for live image visualization."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "TheAIDoctor",
|
||||||
|
"title": "The AI Doctors Clinical Tools",
|
||||||
|
"id": "AIDocCT",
|
||||||
|
"reference": "https://github.com/BlueprintCoding/ComfyUI_AIDocsClinicalTools",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/BlueprintCoding/ComfyUI_AIDocsClinicalTools"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "MultiInt and MultiText nodes. The MultiInt node allows management of multiple int values with configurable steps, +/- buttons, drag change, & customized labels. The MultiText node offers similar functionality for string values."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "CY-CHENYUE",
|
||||||
|
"title": "ComfyUI-Free-GPU",
|
||||||
|
"id": "ComfyUI-Free-GPU",
|
||||||
|
"reference": "https://github.com/CY-CHENYUE/ComfyUI-Free-GPU",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/CY-CHENYUE/ComfyUI-Free-GPU"
|
||||||
|
],
|
||||||
|
"description": "ComfyUI-Free-GPU provides a node for releasing RAM and VRAM in ComfyUI.",
|
||||||
|
"install_type": "git-clone"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "BuffMcBigHuge",
|
||||||
|
"title": "ComfyUI-Zonos",
|
||||||
|
"reference": "https://github.com/BuffMcBigHuge/ComfyUI-Zonos",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/BuffMcBigHuge/ComfyUI-Zonos"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "TTS with Zyphra Zonos"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "RodrigoSKohl",
|
||||||
|
"title": "TryOff Anyone",
|
||||||
|
"reference": "https://github.com/RodrigoSKohl/comfyui-tryoff-anyone",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/RodrigoSKohl/comfyui-tryoff-anyone"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Node to tryoff clothes"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "BahaC",
|
||||||
|
"title": "ComfyUI Zonos TTS Node",
|
||||||
|
"reference": "https://github.com/BahaC/ComfyUI-ZonosTTS",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/BahaC/ComfyUI-ZonosTTS"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A ComfyUI custom node that brings Zonos Text-to-Speech capabilities to your workflows, featuring high-quality speech synthesis and voice cloning."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "dzqdzq",
|
||||||
|
"title": "ComfyUI-crop-alpha",
|
||||||
|
"reference": "https://github.com/dzqdzq/ComfyUI-crop-alpha",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/dzqdzq/ComfyUI-crop-alpha"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Automatic cropping of transparent areas to prevent images from being too large, while also supporting resizing to prevent image dimensions from being too large."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "yichengup",
|
||||||
|
"title": "ComfyUI-VideoBlender",
|
||||||
|
"reference": "https://github.com/yichengup/ComfyUI-VideoBlender",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/yichengup/ComfyUI-VideoBlender"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Video clip mixing"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "bbtaivi",
|
||||||
|
"title": "AIV ComfyUI Node",
|
||||||
|
"reference": "https://github.com/bbtaivi/ComfyUI-Aiv-Param",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/bbtaivi/ComfyUI-Aiv-Param"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Used to convert workflow node settings into AIV mini-program parameters."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "PrunaAI",
|
||||||
|
"title": "Pruna nodes for ComfyUI",
|
||||||
|
"reference": "https://github.com/PrunaAI/ComfyUI_pruna",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/PrunaAI/ComfyUI_pruna"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This repository explains how to accelerate image generation in ComfyUI using Pruna, an inference optimization engine that makes AI models faster, smaller, cheaper, and greener. ComfyUI is a popular node-based GUI for image generation models, for which we provide a custom compilation node that accelerates Stable Diffusion (SD) and Flux inference, while preserving output quality."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "quadmoon",
|
||||||
|
"title": "ComfyUI-Riffusion",
|
||||||
|
"reference": "https://github.com/traugdor/ComfyUI-Riffusion",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/traugdor/ComfyUI-Riffusion"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A ComfyUI extension for Riffusion audio generation."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "SSsnap",
|
||||||
|
"title": "ComfyUI-LBW_flux",
|
||||||
|
"reference": "https://github.com/SS-snap/ComfyUI-LBW_flux",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/SS-snap/ComfyUI-LBW_flux"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Through this node, you can more easily test the impact of different blocks in flux_lora on the final result."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "thanhduong0213929",
|
||||||
|
"title": "ComfyUI-DeepUnlock",
|
||||||
|
"reference": "https://github.com/thanhduong0213929/ComfyUI-DeepUnlock",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/thanhduong0213929/ComfyUI-DeepUnlock"
|
||||||
|
],
|
||||||
|
"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": "MushroomFleet",
|
||||||
|
"title": "DJZ-Pedalboard",
|
||||||
|
"reference": "https://github.com/MushroomFleet/DJZ-Pedalboard",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/MushroomFleet/DJZ-Pedalboard"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This project provides a collection of custom nodes designed for enhanced audio effects in ComfyUI. With an intuitive pedalboard interface, users can easily integrate and manipulate various audio effects within their workflows."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "mie",
|
||||||
|
"title": "ComfyUI_CaptionThis",
|
||||||
|
"reference": "https://github.com/MieMieeeee/ComfyUI-CaptionThis",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/MieMieeeee/ComfyUI-CaptionThis"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Describe a single image or all images in a directory using models such as Janus Pro, Florence2 (coming soon), or JoyCaption (coming soon), with a particular focus on building datasets for training LoRA."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "APZmedia",
|
||||||
|
"title": "APZmedia Together Image Generator for ComfyUI",
|
||||||
|
"reference": "https://github.com/APZmedia/APZmedia-comfy-together-lora",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/APZmedia/APZmedia-comfy-together-lora"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A ComfyUI node to implement Together AI API image generation"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "lum3on",
|
||||||
|
"title": "LLM Polymath Chat Node",
|
||||||
|
"id": "polymath",
|
||||||
|
"reference": "https://github.com/lum3on/comfyui_LLM_Polymath",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/lum3on/comfyui_LLM_Polymath"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Advanced LLM driven node with many custom instructions, including node finder, expert prompter and json converter."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "austinbrown34",
|
||||||
|
"title": "ComfyUI-IO-Helpers",
|
||||||
|
"reference": "https://github.com/austinbrown34/ComfyUI-IO-Helpers",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/austinbrown34/ComfyUI-IO-Helpers"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A custom nodes package for ComfyUI that enhances workflow flexibility by providing specialized nodes for saving and loading intermediate data (encoded prompts and sampled latents) in multiple formats. This package leverages helper classes for file I/O, supports gzip compression for efficient storage, and integrates progress feedback via a progress bar to improve user experience during long operations."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "HowToSD",
|
||||||
|
"title": "ComfyUI-Data-Analysis",
|
||||||
|
"reference": "https://github.com/HowToSD/ComfyUI-Data-Analysis",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/HowToSD/ComfyUI-Data-Analysis"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Data analysis custom modules for ComfyUI - Use Pandas & Matplotlib from within ComfyUI"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "dasilva333",
|
||||||
|
"title": "ComfyUI_ContrastingColor",
|
||||||
|
"reference": "https://github.com/dasilva333/ComfyUI_ContrastingColor",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/dasilva333/ComfyUI_ContrastingColor"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This node calculates a contrasting complementary color based on an input RGB color. The goal is to ensure visibility and contrast when overlaying text, UI elements, or graphical components against a given background color."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "moon7star9",
|
||||||
|
"title": "ComfyUI_BiRefNet_Universal",
|
||||||
|
"reference": "https://github.com/moon7star9/ComfyUI_BiRefNet_Universal",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/moon7star9/ComfyUI_BiRefNet_Universal"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A comprehensive node package that seamlessly integrates all BiRefNet series models into ComfyUI"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "ShunL12324",
|
"author": "ShunL12324",
|
||||||
"title": "comfy-portal-endpoint",
|
"title": "comfy-portal-endpoint",
|
||||||
@@ -458,243 +692,6 @@
|
|||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A custom ComfyUI node for interactive 360° panorama image previews. Panoramic 360 images are also sometimes known as VR photography (virtual reality), HDRI environments (ex: skyboxes), image spheres, spherical images, 360 pano, and 360 degree photos."
|
"description": "A custom ComfyUI node for interactive 360° panorama image previews. Panoramic 360 images are also sometimes known as VR photography (virtual reality), HDRI environments (ex: skyboxes), image spheres, spherical images, 360 pano, and 360 degree photos."
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "amorano",
|
|
||||||
"title": "Jovi_MIDI",
|
|
||||||
"id": "jovi_midi",
|
|
||||||
"reference": "https://github.com/Amorano/Jovi_MIDI",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/Amorano/Jovi_MIDI"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Read and Process data from MIDI devices inside of ComfyUI."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "nkchocoai",
|
|
||||||
"title": "ComfyUI-DanbooruPromptQuiz",
|
|
||||||
"reference": "https://github.com/nkchocoai/ComfyUI-DanbooruPromptQuiz",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/nkchocoai/ComfyUI-DanbooruPromptQuiz"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This node is for playing the game of guessing prompts by looking at images generated from prompts output by TIPO, Tagger, etc.."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "agilly1989",
|
|
||||||
"title": "ComfyUI_agilly1989_motorway",
|
|
||||||
"reference": "https://github.com/agilly1989/ComfyUI_agilly1989_motorway",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/agilly1989/ComfyUI_agilly1989_motorway"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This my implemenation of a `pipe` in ComfyUI. Is it better or worse than others? No idea."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "da2el-ai",
|
|
||||||
"title": "D2-PromptSelector-comfyUI",
|
|
||||||
"reference": "https://github.com/da2el-ai/D2-PromptSelector-comfyUI",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/da2el-ai/D2-PromptSelector-comfyUI"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This is a version of [a/sd-d2-prompt-selector](https://github.com/da2el-ai/sd-d2-prompt-selector) reworked for ComfyUI. It's just a prototype that I've put together for now. The random syntax of sd-d2-prompt-selector cannot be used; instead, the DynamicPrompt syntax is used"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "kijai",
|
|
||||||
"title": "ComfyUI-StableXWrapper",
|
|
||||||
"reference": "https://github.com/kijai/ComfyUI-StableXWrapper",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/kijai/ComfyUI-StableXWrapper"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "ComfyUI wrapper for [a/StableX normal](https://github.com/Stable-X/StableNormal)/[a/delight](https://github.com/Stable-X/StableDelight) models"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "GHOSTLXH",
|
|
||||||
"title": "ComfyUI-Counternodes",
|
|
||||||
"reference": "https://github.com/GHOSTLXH/ComfyUI-Counternodes",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/GHOSTLXH/ComfyUI-Counternodes"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This node group contains a series of ComfyUI nodes with built-in counters and specific output results based on the counter's output, aimed at implementing folder traversal functionality in the ComfyUI frontend. For specific examples, please refer to the sample workflow. Of course, you can also use your imagination to create other interesting things."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "gmorks",
|
|
||||||
"title": "ComfyUI Animagine prompt",
|
|
||||||
"reference": "https://github.com/gmorks/ComfyUI-Animagine-Prompt",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/gmorks/ComfyUI-Animagine-Prompt"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Comfy UI node to prompt build for [a/https://huggingface.co/cagliostrolab/animagine-xl-4.0](https://huggingface.co/cagliostrolab/animagine-xl-4.0) model"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "Kayarte",
|
|
||||||
"title": "GeoNodes",
|
|
||||||
"reference": "https://github.com/Kayarte/GeoNodes",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/Kayarte/GeoNodes/raw/refs/heads/main/GISDetectionNode.py"
|
|
||||||
],
|
|
||||||
"install_type": "copy",
|
|
||||||
"description": "GIS Processing Nodes for ComfyUI"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "checkbins",
|
|
||||||
"title": "checkbin-comfy",
|
|
||||||
"id": "checkbin",
|
|
||||||
"reference": "https://github.com/checkbins/checkbin-comfy",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/checkbins/checkbin-comfy"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "These nodes allow you to make Checkbin comparisons."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "ShmuelRonen",
|
|
||||||
"title": "ComfyUI Janus Pro Vision",
|
|
||||||
"reference": "https://github.com/ShmuelRonen/ComfyUI-Janus_pro_vision",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/ShmuelRonen/ComfyUI-Janus_pro_vision"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A ComfyUI custom node extension that integrates the Janus-Pro-7B vision-language model from DeepSeek AI on your's local computer, enabling powerful image understanding and multi-turn conversation capabilities."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "ZHO-ZHO-ZHO",
|
|
||||||
"title": "ComfyUI-DeepSeek-JanusPro",
|
|
||||||
"reference": "https://github.com/ZHO-ZHO-ZHO/ComfyUI-DeepSeek-JanusPro",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DeepSeek-JanusPro"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "ComfyUI-DeepSeek-JanusPro"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "risunobushi",
|
|
||||||
"title": "ComfyUI_DisplacementMapTools",
|
|
||||||
"reference": "https://github.com/risunobushi/ComfyUI_DisplacementMapTools",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/risunobushi/ComfyUI_DisplacementMapTools"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "NODES: Extract Displacement Map Node, Displace Logo"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "Dr.Lt.Data",
|
|
||||||
"title": "ComfyUI Connection Helper",
|
|
||||||
"id": "connection-helper",
|
|
||||||
"reference": "https://github.com/ltdrdata/comfyui-connection-helper",
|
|
||||||
"nodename_pattern": "Inspire$",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/ltdrdata/comfyui-connection-helper"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This is a helper extension for ComfyUI that assists with node connections."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "yichengup",
|
|
||||||
"title": "ComfyUI_Yc_JanusPro",
|
|
||||||
"reference": "https://github.com/yichengup/ComfyUI_Yc_JanusPro",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/yichengup/ComfyUI_Yc_JanusPro"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "About DeepSeek Chat API\nGo here to register and get the api-key [a/https://platform.deepseek.com/](https://platform.deepseek.com/) Then enter api_key in config.json"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "chflame163",
|
|
||||||
"title": "ComfyUI_Janus_Wrapper",
|
|
||||||
"reference": "https://github.com/chflame163/ComfyUI_Janus_Wrapper",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/chflame163/ComfyUI_Janus_Wrapper"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Unofficial implementation of [a/deepseek-ai/Janus](https://github.com/deepseek-ai/Janus) in ComfyUI."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "ReBeating",
|
|
||||||
"title": "ComfyUI-Artist-Selector",
|
|
||||||
"reference": "https://github.com/ReBeating/ComfyUI-Artist-Selector",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/ReBeating/ComfyUI-Artist-Selector"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A useful comfyui node named LoadArtistTag for selecting artist tags, including 1000+ single-artist tags and 300 mixed-artists tags."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "852wa",
|
|
||||||
"title": "ComfyUI-ColorshiftColor",
|
|
||||||
"reference": "https://github.com/852wa/ComfyUI-ColorshiftColor",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/852wa/ComfyUI-ColorshiftColor"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This is a custom node for ComfyUI.\nIt reduces colors based on a specified number and allows for adjustments to hue, saturation, and brightness.\nFeatures:Each parameter can be set to random, You can toggle masking (not changing colors) using color numbers, Mask inversion can also be toggled on or off."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "852wa",
|
|
||||||
"title": "ComfyUI-AdvancedAlphaProcessor",
|
|
||||||
"reference": "https://github.com/852wa/ComfyUI-AAP",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/852wa/ComfyUI-AAP"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This is a custom node for ComfyUI.\nFeatures:Removes white areas in the input image by making them transparent based on brightness, Outputs in black and transparent, Outputs in gray and transparent.\nThis is a simple node with the above functionalities implemented. It also supports sequential processing."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "jinanlongen",
|
|
||||||
"title": "ComfyUI Prompt Expander Node",
|
|
||||||
"reference": "https://github.com/jinanlongen/ComfyUI-Prompt-Expander",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/jinanlongen/ComfyUI-Prompt-Expander"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A custom node for ComfyUI that expands text prompts using the SuperPrompt-v1 T5 model. This node helps generate more detailed and descriptive prompts from simple input text, which can be particularly useful for image generation workflows."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "Style-Mosaic",
|
|
||||||
"title": "ComfyUI DINO-X Detector Node",
|
|
||||||
"reference": "https://github.com/Style-Mosaic/dino-x-comfyui-node",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/Style-Mosaic/dino-x-comfyui-node"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A ComfyUI node that integrates DINO-X API for object detection and segmentation. This node allows you to detect and segment objects in images using text prompts."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "gmorks",
|
|
||||||
"title": "ComfyUI-SendToDiscord",
|
|
||||||
"reference": "https://github.com/gmorks/ComfyUI-SendToDiscord",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/gmorks/ComfyUI-SendToDiscord"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "ComfyUI-SendToDiscord is a custom node for ComfyUI that simplifies sending preview images to Discord via webhooks. It supports both single-image uploads and batch mode, making it an efficient tool for sharing your generated images directly with your Discord server."
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"author": "CY-CHENYUE",
|
|
||||||
"title": "ComfyUI-Janus-Pro",
|
|
||||||
"id": "ComfyUI-Janus-Pro",
|
|
||||||
"reference": "https://github.com/CY-CHENYUE/ComfyUI-Janus-Pro",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/CY-CHENYUE/ComfyUI-Janus-Pro"
|
|
||||||
],
|
|
||||||
"description": "ComfyUI nodes for Janus-Pro, a unified multimodal understanding and generation framework.",
|
|
||||||
"install_type": "git-clone"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "burnsbert",
|
|
||||||
"title": "EBU LMStudio LLM Integration",
|
|
||||||
"id": "ebu-lmstudio",
|
|
||||||
"reference": "https://github.com/burnsbert/ComfyUI-EBU-LMStudio",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/burnsbert/ComfyUI-EBU-LMStudio"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Custom nodes for integrating LM Studio's LLM functionality into ComfyUI. Includes EBU-LMStudio-Load, EBU-LMStudio-Unload, and EBU-LMStudio-Request."
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,6 +9,15 @@
|
|||||||
"title_aux": "alkemann nodes"
|
"title_aux": "alkemann nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://git.mmaker.moe/mmaker/sd-webui-color-enhance": [
|
||||||
|
[
|
||||||
|
"MMakerColorBlend",
|
||||||
|
"MMakerColorEnhance"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "mmaker/Color Enhance"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/0x-jerry/comfyui-rembg": [
|
"https://github.com/0x-jerry/comfyui-rembg": [
|
||||||
[
|
[
|
||||||
"Load Rembg Model",
|
"Load Rembg Model",
|
||||||
@@ -1114,6 +1123,15 @@
|
|||||||
"title_aux": "ComfyUI_yanc"
|
"title_aux": "ComfyUI_yanc"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/APZmedia/APZmedia-comfy-together-lora": [
|
||||||
|
[
|
||||||
|
"TogetherImageGenerator",
|
||||||
|
"TogetherImageGeneratorLoRA"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "APZmedia Together Image Generator for ComfyUI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/APZmedia/APZmedia-comfyui-fast-image-save": [
|
"https://github.com/APZmedia/APZmedia-comfyui-fast-image-save": [
|
||||||
[
|
[
|
||||||
"APZmedia Fast image save"
|
"APZmedia Fast image save"
|
||||||
@@ -1332,7 +1350,6 @@
|
|||||||
"BillBum_Modified_RegText_Node",
|
"BillBum_Modified_RegText_Node",
|
||||||
"BillBum_Modified_SD3_API_Node",
|
"BillBum_Modified_SD3_API_Node",
|
||||||
"BillBum_Modified_Structured_LLM_Node(Imperfect)",
|
"BillBum_Modified_Structured_LLM_Node(Imperfect)",
|
||||||
"BillBum_Modified_Together_API_Node",
|
|
||||||
"BillBum_Modified_VisionLM_API_Node",
|
"BillBum_Modified_VisionLM_API_Node",
|
||||||
"BillBum_Modified_img2b64_url_Node",
|
"BillBum_Modified_img2b64_url_Node",
|
||||||
"BillBum_NonSysPrompt_VLM_API_Node",
|
"BillBum_NonSysPrompt_VLM_API_Node",
|
||||||
@@ -1361,6 +1378,7 @@
|
|||||||
"https://github.com/AkashKarnatak/ComfyUI_faishme": [
|
"https://github.com/AkashKarnatak/ComfyUI_faishme": [
|
||||||
[
|
[
|
||||||
"Faishme Debug",
|
"Faishme Debug",
|
||||||
|
"Faishme Load Image from Glob",
|
||||||
"Faishme Mannequin to Model Loader",
|
"Faishme Mannequin to Model Loader",
|
||||||
"Faishme Moondream",
|
"Faishme Moondream",
|
||||||
"Load Fashion Model"
|
"Load Fashion Model"
|
||||||
@@ -1504,6 +1522,12 @@
|
|||||||
"TICK (JOV) \u23f1",
|
"TICK (JOV) \u23f1",
|
||||||
"TRANSFORM (JOV) \ud83c\udfdd\ufe0f",
|
"TRANSFORM (JOV) \ud83c\udfdd\ufe0f",
|
||||||
"VALUE (JOV) \ud83e\uddec",
|
"VALUE (JOV) \ud83e\uddec",
|
||||||
|
"VECTOR2 (JOV)",
|
||||||
|
"VECTOR2INT (JOV)",
|
||||||
|
"VECTOR3 (JOV)",
|
||||||
|
"VECTOR3INT (JOV)",
|
||||||
|
"VECTOR4 (JOV)",
|
||||||
|
"VECTOR4INT (JOV)",
|
||||||
"WAVE GEN (JOV) \ud83c\udf0a"
|
"WAVE GEN (JOV) \ud83c\udf0a"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -1774,6 +1798,14 @@
|
|||||||
"title_aux": "Masquerade Nodes"
|
"title_aux": "Masquerade Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/BahaC/ComfyUI-ZonosTTS": [
|
||||||
|
[
|
||||||
|
"ZonosTextToSpeech"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Zonos TTS Node"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Beinsezii/bsz-cui-extras": [
|
"https://github.com/Beinsezii/bsz-cui-extras": [
|
||||||
[
|
[
|
||||||
"BSZAbsoluteHires",
|
"BSZAbsoluteHires",
|
||||||
@@ -1907,6 +1939,7 @@
|
|||||||
"ComfyUIDeployExternalAudio",
|
"ComfyUIDeployExternalAudio",
|
||||||
"ComfyUIDeployExternalBoolean",
|
"ComfyUIDeployExternalBoolean",
|
||||||
"ComfyUIDeployExternalCheckpoint",
|
"ComfyUIDeployExternalCheckpoint",
|
||||||
|
"ComfyUIDeployExternalEXR",
|
||||||
"ComfyUIDeployExternalFaceModel",
|
"ComfyUIDeployExternalFaceModel",
|
||||||
"ComfyUIDeployExternalImage",
|
"ComfyUIDeployExternalImage",
|
||||||
"ComfyUIDeployExternalImageAlpha",
|
"ComfyUIDeployExternalImageAlpha",
|
||||||
@@ -2150,6 +2183,17 @@
|
|||||||
"title_aux": "ComfyUI-Rework-X"
|
"title_aux": "ComfyUI-Rework-X"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/BlueprintCoding/ComfyUI_AIDocsClinicalTools": [
|
||||||
|
[
|
||||||
|
"Multi Int",
|
||||||
|
"Multi Text",
|
||||||
|
"MultiInt",
|
||||||
|
"MultiText"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "The AI Doctors Clinical Tools"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/BoyuanJiang/FitDiT-ComfyUI": [
|
"https://github.com/BoyuanJiang/FitDiT-ComfyUI": [
|
||||||
[
|
[
|
||||||
"FitDiTLoader",
|
"FitDiTLoader",
|
||||||
@@ -2181,6 +2225,15 @@
|
|||||||
"title_aux": "BRIA AI API nodes"
|
"title_aux": "BRIA AI API nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/BuffMcBigHuge/ComfyUI-Zonos": [
|
||||||
|
[
|
||||||
|
"ZonosEmotion",
|
||||||
|
"ZonosGenerate"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Zonos"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Burgstall-labs/ComfyUI-BS_Kokoro-onnx": [
|
"https://github.com/Burgstall-labs/ComfyUI-BS_Kokoro-onnx": [
|
||||||
[
|
[
|
||||||
"Kokoro TTS"
|
"Kokoro TTS"
|
||||||
@@ -2210,6 +2263,14 @@
|
|||||||
"title_aux": "ccsun_node"
|
"title_aux": "ccsun_node"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/CY-CHENYUE/ComfyUI-Free-GPU": [
|
||||||
|
[
|
||||||
|
"FreeGPUMemory"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Free-GPU"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/CY-CHENYUE/ComfyUI-InpaintEasy": [
|
"https://github.com/CY-CHENYUE/ComfyUI-InpaintEasy": [
|
||||||
[
|
[
|
||||||
"CropByMask",
|
"CropByMask",
|
||||||
@@ -2389,6 +2450,7 @@
|
|||||||
"ClownSamplerAdvanced",
|
"ClownSamplerAdvanced",
|
||||||
"ClownsharKSampler",
|
"ClownsharKSampler",
|
||||||
"ClownsharKSamplerAutomation",
|
"ClownsharKSamplerAutomation",
|
||||||
|
"ClownsharKSamplerAutomation_Advanced",
|
||||||
"ClownsharKSamplerAutomation_Beta",
|
"ClownsharKSamplerAutomation_Beta",
|
||||||
"ClownsharKSamplerGuide",
|
"ClownsharKSamplerGuide",
|
||||||
"ClownsharKSamplerGuide_Beta",
|
"ClownsharKSamplerGuide_Beta",
|
||||||
@@ -2405,6 +2467,7 @@
|
|||||||
"ConditioningToBase64",
|
"ConditioningToBase64",
|
||||||
"ConditioningTruncate",
|
"ConditioningTruncate",
|
||||||
"ConditioningZeroAndTruncate",
|
"ConditioningZeroAndTruncate",
|
||||||
|
"Constant Scheduler",
|
||||||
"EmptyLatentImage64",
|
"EmptyLatentImage64",
|
||||||
"EmptyLatentImageCustom",
|
"EmptyLatentImageCustom",
|
||||||
"Film Grain",
|
"Film Grain",
|
||||||
@@ -2439,6 +2502,7 @@
|
|||||||
"Legacy_ClownsharKSampler",
|
"Legacy_ClownsharKSampler",
|
||||||
"Legacy_ClownsharKSamplerGuides",
|
"Legacy_ClownsharKSamplerGuides",
|
||||||
"Legacy_SharkSampler",
|
"Legacy_SharkSampler",
|
||||||
|
"Linear Quadratic Advanced",
|
||||||
"MaskToggle",
|
"MaskToggle",
|
||||||
"ModelSamplingAdvanced",
|
"ModelSamplingAdvanced",
|
||||||
"ModelSamplingAdvancedResolution",
|
"ModelSamplingAdvancedResolution",
|
||||||
@@ -2943,7 +3007,6 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/Dobidop/ComfyStereo": [
|
"https://github.com/Dobidop/ComfyStereo": [
|
||||||
[
|
[
|
||||||
"LazyStereo",
|
|
||||||
"StereoImageNode"
|
"StereoImageNode"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -3018,8 +3081,6 @@
|
|||||||
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
||||||
[
|
[
|
||||||
"CharCountTextBox",
|
"CharCountTextBox",
|
||||||
"FluxPro11_TOGETHER",
|
|
||||||
"FluxPro_TOGETHER",
|
|
||||||
"GenerateImage_VENICE",
|
"GenerateImage_VENICE",
|
||||||
"GenerateText_VENICE",
|
"GenerateText_VENICE",
|
||||||
"UpscaleImage_VENICE",
|
"UpscaleImage_VENICE",
|
||||||
@@ -3919,27 +3980,6 @@
|
|||||||
"title_aux": "ComfyUI-Counternodes"
|
"title_aux": "ComfyUI-Counternodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
|
|
||||||
[
|
|
||||||
"ConcatenateString",
|
|
||||||
"ItemFromDropdown",
|
|
||||||
"IterationDriver",
|
|
||||||
"JoinImages",
|
|
||||||
"LineToConsole",
|
|
||||||
"NumberFromList",
|
|
||||||
"NumbersToList",
|
|
||||||
"PlotImages",
|
|
||||||
"StringFromList",
|
|
||||||
"StringToLabel",
|
|
||||||
"StringsToList",
|
|
||||||
"ezMath",
|
|
||||||
"ezXY_AssemblePlot",
|
|
||||||
"ezXY_Driver"
|
|
||||||
],
|
|
||||||
{
|
|
||||||
"title_aux": "ezXY scripts and nodes"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes": [
|
"https://github.com/GTSuya-Studio/ComfyUI-Gtsuya-Nodes": [
|
||||||
[
|
[
|
||||||
"Danbooru (ID)",
|
"Danbooru (ID)",
|
||||||
@@ -4283,6 +4323,15 @@
|
|||||||
"title_aux": "Hunyuan Video Resolutions"
|
"title_aux": "Hunyuan Video Resolutions"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Hellfiredragon/comfyui-image-manipulation": [
|
||||||
|
[
|
||||||
|
"AlphaApplyMaskToImage",
|
||||||
|
"CreateMaskFromColorsNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "comfyui-image-manipulation"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/HelloVision/ComfyUI_HelloMeme": [
|
"https://github.com/HelloVision/ComfyUI_HelloMeme": [
|
||||||
[
|
[
|
||||||
"CropPortrait",
|
"CropPortrait",
|
||||||
@@ -5070,6 +5119,7 @@
|
|||||||
"Simple Extract Lora From Text",
|
"Simple Extract Lora From Text",
|
||||||
"Simple Image Saver (as Forge)",
|
"Simple Image Saver (as Forge)",
|
||||||
"Simple Load Image With Metadata",
|
"Simple Load Image With Metadata",
|
||||||
|
"Simple Load Images from Dir",
|
||||||
"Simple Load Line From Text File",
|
"Simple Load Line From Text File",
|
||||||
"Simple Lora Loader"
|
"Simple Lora Loader"
|
||||||
],
|
],
|
||||||
@@ -5176,10 +5226,9 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/KoreTeknology/ComfyUI-Universal-Styler": [
|
"https://github.com/KoreTeknology/ComfyUI-Universal-Styler": [
|
||||||
[
|
[
|
||||||
"Load Nai Styles Complex CSV",
|
"\ud83d\udee1\ufe0f Load Scripts from Database",
|
||||||
"ShowText|pysssss",
|
"\ud83d\udee1\ufe0f Save Script to Database (In progress)",
|
||||||
"Universal_Styler_Node",
|
"\ud83d\udee1\ufe0f Set Main Channel"
|
||||||
"concat"
|
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI Universal Styler"
|
"title_aux": "ComfyUI Universal Styler"
|
||||||
@@ -6254,6 +6303,8 @@
|
|||||||
"iToolsLineLoader",
|
"iToolsLineLoader",
|
||||||
"iToolsLoadImagePlus",
|
"iToolsLoadImagePlus",
|
||||||
"iToolsLoadImages",
|
"iToolsLoadImages",
|
||||||
|
"iToolsLoadRandomImage",
|
||||||
|
"iToolsPreviewText",
|
||||||
"iToolsPromptLoader",
|
"iToolsPromptLoader",
|
||||||
"iToolsPromptSaver",
|
"iToolsPromptSaver",
|
||||||
"iToolsPromptStyler",
|
"iToolsPromptStyler",
|
||||||
@@ -6432,9 +6483,12 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/MushroomFleet/DJZ-KokoroTTS": [
|
"https://github.com/MushroomFleet/DJZ-KokoroTTS": [
|
||||||
[
|
[
|
||||||
|
"KokoroTTS_LoadVoice_v1",
|
||||||
|
"KokoroTTS_SaveVoice_v1",
|
||||||
"KokoroTTS_v1",
|
"KokoroTTS_v1",
|
||||||
"KokoroTTS_v2",
|
"KokoroTTS_v2",
|
||||||
"KokoroTTS_v3"
|
"KokoroTTS_v3",
|
||||||
|
"KokoroTTS_v4"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "KokoroTTS Node"
|
"title_aux": "KokoroTTS Node"
|
||||||
@@ -6453,6 +6507,7 @@
|
|||||||
"BlackBarsV1",
|
"BlackBarsV1",
|
||||||
"BlackBarsV2",
|
"BlackBarsV2",
|
||||||
"BlackBarsV3",
|
"BlackBarsV3",
|
||||||
|
"BracketCleaner",
|
||||||
"CRT_Effect_v1",
|
"CRT_Effect_v1",
|
||||||
"CathodeRayEffect",
|
"CathodeRayEffect",
|
||||||
"ClassicFilmEffect",
|
"ClassicFilmEffect",
|
||||||
@@ -6505,6 +6560,7 @@
|
|||||||
"ParametricMeshGenV2",
|
"ParametricMeshGenV2",
|
||||||
"ProjectFilePathNode",
|
"ProjectFilePathNode",
|
||||||
"PromptCleaner",
|
"PromptCleaner",
|
||||||
|
"PromptCleanerV2",
|
||||||
"PromptDupeRemover",
|
"PromptDupeRemover",
|
||||||
"PromptDupeRemoverV2",
|
"PromptDupeRemoverV2",
|
||||||
"PromptInject",
|
"PromptInject",
|
||||||
@@ -6546,10 +6602,13 @@
|
|||||||
"VideoTrails",
|
"VideoTrails",
|
||||||
"VideoTrailsV2",
|
"VideoTrailsV2",
|
||||||
"VideoVignettingV1",
|
"VideoVignettingV1",
|
||||||
|
"VoiceEffects",
|
||||||
|
"VoiceEffects2",
|
||||||
"WaveletCompose",
|
"WaveletCompose",
|
||||||
"WaveletDecompose",
|
"WaveletDecompose",
|
||||||
"WinampViz",
|
"WinampViz",
|
||||||
"WinampVizV2",
|
"WinampVizV2",
|
||||||
|
"ZenkaiPoseMap",
|
||||||
"ZenkaiPrompt",
|
"ZenkaiPrompt",
|
||||||
"ZenkaiPromptV2",
|
"ZenkaiPromptV2",
|
||||||
"ZenkaiPromptV3",
|
"ZenkaiPromptV3",
|
||||||
@@ -6562,6 +6621,14 @@
|
|||||||
"title_aux": "DJZ-Nodes"
|
"title_aux": "DJZ-Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/MushroomFleet/DJZ-Pedalboard": [
|
||||||
|
[
|
||||||
|
"DJZ_Pedalboard"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "DJZ-Pedalboard"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/MuziekMagie/ComfyUI-Matchering": [
|
"https://github.com/MuziekMagie/ComfyUI-Matchering": [
|
||||||
[
|
[
|
||||||
"Matchering",
|
"Matchering",
|
||||||
@@ -6962,6 +7029,7 @@
|
|||||||
"SUPIR Sampler \ud83d\udcacED",
|
"SUPIR Sampler \ud83d\udcacED",
|
||||||
"Save Image \ud83d\udd14ED",
|
"Save Image \ud83d\udd14ED",
|
||||||
"Simple Text \ud83d\udcacED",
|
"Simple Text \ud83d\udcacED",
|
||||||
|
"TIPO Script \ud83d\udcacED",
|
||||||
"Ultimate SD Upscale \ud83d\udcacED",
|
"Ultimate SD Upscale \ud83d\udcacED",
|
||||||
"Wildcard Encode \ud83d\udcacED"
|
"Wildcard Encode \ud83d\udcacED"
|
||||||
],
|
],
|
||||||
@@ -7221,6 +7289,14 @@
|
|||||||
"title_aux": "PyTorch 360\u00b0 Image Conversion Toolkit for ComfyUI"
|
"title_aux": "PyTorch 360\u00b0 Image Conversion Toolkit for ComfyUI"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/PrunaAI/ComfyUI_pruna": [
|
||||||
|
[
|
||||||
|
"CompileModel"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Pruna nodes for ComfyUI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Pseudotools/Pseudocomfy": [
|
"https://github.com/Pseudotools/Pseudocomfy": [
|
||||||
[
|
[
|
||||||
"Combiner",
|
"Combiner",
|
||||||
@@ -7371,6 +7447,14 @@
|
|||||||
"title_aux": "Panoramic Image Stitcher"
|
"title_aux": "Panoramic Image Stitcher"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/RodrigoSKohl/comfyui-tryoff-anyone": [
|
||||||
|
[
|
||||||
|
"TryOffAnyoneNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "TryOff Anyone"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/RomanKuschanow/ComfyUI-Advanced-Latent-Control": [
|
"https://github.com/RomanKuschanow/ComfyUI-Advanced-Latent-Control": [
|
||||||
[
|
[
|
||||||
"LatentAddTransform",
|
"LatentAddTransform",
|
||||||
@@ -7456,6 +7540,7 @@
|
|||||||
"MaskBatchComposite(FaceParsing)",
|
"MaskBatchComposite(FaceParsing)",
|
||||||
"MaskBlackOut(FaceParsing)",
|
"MaskBlackOut(FaceParsing)",
|
||||||
"MaskBorderDissolve(FaceParsing)",
|
"MaskBorderDissolve(FaceParsing)",
|
||||||
|
"MaskBorderDissolveAdvanced(FaceParsing)",
|
||||||
"MaskComposite(FaceParsing)",
|
"MaskComposite(FaceParsing)",
|
||||||
"MaskCropWithBBox(FaceParsing)",
|
"MaskCropWithBBox(FaceParsing)",
|
||||||
"MaskInsertWithBBox(FaceParsing)",
|
"MaskInsertWithBBox(FaceParsing)",
|
||||||
@@ -7555,6 +7640,14 @@
|
|||||||
"title_aux": "ComfyUI-LexTools"
|
"title_aux": "ComfyUI-LexTools"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/SS-snap/ComfyUI-LBW_flux": [
|
||||||
|
[
|
||||||
|
"LoraBlockWeight_Flux"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-LBW_flux"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/SS-snap/ComfyUI-Snap_Processing": [
|
"https://github.com/SS-snap/ComfyUI-Snap_Processing": [
|
||||||
[
|
[
|
||||||
"AreaCalculator",
|
"AreaCalculator",
|
||||||
@@ -8531,7 +8624,9 @@
|
|||||||
"SDVN Dic Convert",
|
"SDVN Dic Convert",
|
||||||
"SDVN Easy IPAdapter weight",
|
"SDVN Easy IPAdapter weight",
|
||||||
"SDVN Exif check",
|
"SDVN Exif check",
|
||||||
|
"SDVN Fill Square",
|
||||||
"SDVN Filter List",
|
"SDVN Filter List",
|
||||||
|
"SDVN Flip Image",
|
||||||
"SDVN Google Imagen",
|
"SDVN Google Imagen",
|
||||||
"SDVN IC-Light v2",
|
"SDVN IC-Light v2",
|
||||||
"SDVN Image Adjust",
|
"SDVN Image Adjust",
|
||||||
@@ -9673,6 +9768,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/Visionatrix/ComfyUI-Visionatrix": [
|
"https://github.com/Visionatrix/ComfyUI-Visionatrix": [
|
||||||
[
|
[
|
||||||
|
"StyleAlignedBatchAlign",
|
||||||
"VixCheckboxLogic",
|
"VixCheckboxLogic",
|
||||||
"VixDynamicLoraDefinition",
|
"VixDynamicLoraDefinition",
|
||||||
"VixUiAspectRatioSelector",
|
"VixUiAspectRatioSelector",
|
||||||
@@ -9703,7 +9799,9 @@
|
|||||||
"VrchDelayOSCControlNode",
|
"VrchDelayOSCControlNode",
|
||||||
"VrchFloatKeyControlNode",
|
"VrchFloatKeyControlNode",
|
||||||
"VrchFloatOSCControlNode",
|
"VrchFloatOSCControlNode",
|
||||||
|
"VrchImageChannelLoaderNode",
|
||||||
"VrchImageFlipBookWebViewerNode",
|
"VrchImageFlipBookWebViewerNode",
|
||||||
|
"VrchImagePreviewBackgroundNode",
|
||||||
"VrchImageSaverNode",
|
"VrchImageSaverNode",
|
||||||
"VrchImageSwitchOSCControlNode",
|
"VrchImageSwitchOSCControlNode",
|
||||||
"VrchImageWebViewerNode",
|
"VrchImageWebViewerNode",
|
||||||
@@ -10307,6 +10405,7 @@
|
|||||||
"ConvertRasterToVectorBW",
|
"ConvertRasterToVectorBW",
|
||||||
"ConvertRasterToVectorColor",
|
"ConvertRasterToVectorColor",
|
||||||
"ConvertVectorToRaster",
|
"ConvertVectorToRaster",
|
||||||
|
"SVGPreview",
|
||||||
"SaveSVG"
|
"SaveSVG"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -11245,6 +11344,7 @@
|
|||||||
[
|
[
|
||||||
"Cfg Literal (Image Saver)",
|
"Cfg Literal (Image Saver)",
|
||||||
"Checkpoint Loader with Name (Image Saver)",
|
"Checkpoint Loader with Name (Image Saver)",
|
||||||
|
"Civitai Hash Fetcher (Image Saver)",
|
||||||
"Float Literal (Image Saver)",
|
"Float Literal (Image Saver)",
|
||||||
"Image Saver",
|
"Image Saver",
|
||||||
"Int Literal (Image Saver)",
|
"Int Literal (Image Saver)",
|
||||||
@@ -11349,6 +11449,7 @@
|
|||||||
"Noise from Palette [Dream]",
|
"Noise from Palette [Dream]",
|
||||||
"Palette Color Align [Dream]",
|
"Palette Color Align [Dream]",
|
||||||
"Palette Color Shift [Dream]",
|
"Palette Color Shift [Dream]",
|
||||||
|
"Random Prompt Words [Dream]",
|
||||||
"Sample Image Area as Palette [Dream]",
|
"Sample Image Area as Palette [Dream]",
|
||||||
"Sample Image as Palette [Dream]",
|
"Sample Image as Palette [Dream]",
|
||||||
"Saw Curve [Dream]",
|
"Saw Curve [Dream]",
|
||||||
@@ -11475,6 +11576,7 @@
|
|||||||
"Sage_ConstructMetadata",
|
"Sage_ConstructMetadata",
|
||||||
"Sage_ConstructMetadataLite",
|
"Sage_ConstructMetadataLite",
|
||||||
"Sage_DualCLIPTextEncode",
|
"Sage_DualCLIPTextEncode",
|
||||||
|
"Sage_DualCLIPTextEncodeLumina2",
|
||||||
"Sage_EmptyLatentImagePassthrough",
|
"Sage_EmptyLatentImagePassthrough",
|
||||||
"Sage_GetFileHash",
|
"Sage_GetFileHash",
|
||||||
"Sage_JoinText",
|
"Sage_JoinText",
|
||||||
@@ -11488,7 +11590,6 @@
|
|||||||
"Sage_ModelInfo",
|
"Sage_ModelInfo",
|
||||||
"Sage_ModelReport",
|
"Sage_ModelReport",
|
||||||
"Sage_PonyPrefix",
|
"Sage_PonyPrefix",
|
||||||
"Sage_RenormCFG",
|
|
||||||
"Sage_SamplerInfo",
|
"Sage_SamplerInfo",
|
||||||
"Sage_SaveImageWithMetadata",
|
"Sage_SaveImageWithMetadata",
|
||||||
"Sage_SetBool",
|
"Sage_SetBool",
|
||||||
@@ -11640,6 +11741,18 @@
|
|||||||
"title_aux": "Save Image Extended for ComfyUI"
|
"title_aux": "Save Image Extended for ComfyUI"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/austinbrown34/ComfyUI-IO-Helpers": [
|
||||||
|
[
|
||||||
|
"EncodedPromptFromFile",
|
||||||
|
"EncodedPromptToFile",
|
||||||
|
"IO_LoadImage",
|
||||||
|
"SampledLatentsFromFile",
|
||||||
|
"SampledLatentsToFile"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-IO-Helpers"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/avatechai/avatar-graph-comfyui": [
|
"https://github.com/avatechai/avatar-graph-comfyui": [
|
||||||
[
|
[
|
||||||
"ApplyMeshTransformAsShapeKey",
|
"ApplyMeshTransformAsShapeKey",
|
||||||
@@ -11792,6 +11905,7 @@
|
|||||||
"SP_HiresGen_HiresCfg",
|
"SP_HiresGen_HiresCfg",
|
||||||
"SP_HiresGen_Sharpen",
|
"SP_HiresGen_Sharpen",
|
||||||
"SP_HunyuanLoader",
|
"SP_HunyuanLoader",
|
||||||
|
"SP_ImpactSwitchCombo",
|
||||||
"SP_KSampler",
|
"SP_KSampler",
|
||||||
"SP_KSamplerSelect",
|
"SP_KSamplerSelect",
|
||||||
"SP_KoboldCpp",
|
"SP_KoboldCpp",
|
||||||
@@ -11946,6 +12060,14 @@
|
|||||||
"title_aux": "Mikey Nodes"
|
"title_aux": "Mikey Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/bbtaivi/ComfyUI-Aiv-Param": [
|
||||||
|
[
|
||||||
|
"AivParam"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "AIV ComfyUI Node"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/bear2b/comfyui-argo-nodes": [
|
"https://github.com/bear2b/comfyui-argo-nodes": [
|
||||||
[
|
[
|
||||||
"ColorMatrixGPU",
|
"ColorMatrixGPU",
|
||||||
@@ -12580,6 +12702,7 @@
|
|||||||
[
|
[
|
||||||
"ClipLoaderGGUF",
|
"ClipLoaderGGUF",
|
||||||
"DualClipLoaderGGUF",
|
"DualClipLoaderGGUF",
|
||||||
|
"GGUFRun",
|
||||||
"GGUFSave",
|
"GGUFSave",
|
||||||
"GGUFUndo",
|
"GGUFUndo",
|
||||||
"LoaderGGUF",
|
"LoaderGGUF",
|
||||||
@@ -13416,6 +13539,7 @@
|
|||||||
"LayerUtility: NumberCalculatorV2",
|
"LayerUtility: NumberCalculatorV2",
|
||||||
"LayerUtility: PrintInfo",
|
"LayerUtility: PrintInfo",
|
||||||
"LayerUtility: PurgeVRAM",
|
"LayerUtility: PurgeVRAM",
|
||||||
|
"LayerUtility: PurgeVRAM V2",
|
||||||
"LayerUtility: QueueStop",
|
"LayerUtility: QueueStop",
|
||||||
"LayerUtility: RGB Value",
|
"LayerUtility: RGB Value",
|
||||||
"LayerUtility: RandomGenerator",
|
"LayerUtility: RandomGenerator",
|
||||||
@@ -13477,6 +13601,7 @@
|
|||||||
"LayerMask: TransparentBackgroundUltra",
|
"LayerMask: TransparentBackgroundUltra",
|
||||||
"LayerMask: YoloV8Detect",
|
"LayerMask: YoloV8Detect",
|
||||||
"LayerUtility: AddBlindWaterMark",
|
"LayerUtility: AddBlindWaterMark",
|
||||||
|
"LayerUtility: Collage",
|
||||||
"LayerUtility: CreateQRCode",
|
"LayerUtility: CreateQRCode",
|
||||||
"LayerUtility: DecodeQRCode",
|
"LayerUtility: DecodeQRCode",
|
||||||
"LayerUtility: DeepSeekAPI",
|
"LayerUtility: DeepSeekAPI",
|
||||||
@@ -13993,6 +14118,7 @@
|
|||||||
"CLIPTextEncodeControlnet",
|
"CLIPTextEncodeControlnet",
|
||||||
"CLIPTextEncodeFlux",
|
"CLIPTextEncodeFlux",
|
||||||
"CLIPTextEncodeHunyuanDiT",
|
"CLIPTextEncodeHunyuanDiT",
|
||||||
|
"CLIPTextEncodeLumina2",
|
||||||
"CLIPTextEncodePixArtAlpha",
|
"CLIPTextEncodePixArtAlpha",
|
||||||
"CLIPTextEncodeSD3",
|
"CLIPTextEncodeSD3",
|
||||||
"CLIPTextEncodeSDXL",
|
"CLIPTextEncodeSDXL",
|
||||||
@@ -14108,6 +14234,7 @@
|
|||||||
"Mahiro",
|
"Mahiro",
|
||||||
"MaskComposite",
|
"MaskComposite",
|
||||||
"MaskToImage",
|
"MaskToImage",
|
||||||
|
"ModelComputeDtype",
|
||||||
"ModelMergeAdd",
|
"ModelMergeAdd",
|
||||||
"ModelMergeAuraflow",
|
"ModelMergeAuraflow",
|
||||||
"ModelMergeBlocks",
|
"ModelMergeBlocks",
|
||||||
@@ -14148,6 +14275,7 @@
|
|||||||
"RandomNoise",
|
"RandomNoise",
|
||||||
"RebatchImages",
|
"RebatchImages",
|
||||||
"RebatchLatents",
|
"RebatchLatents",
|
||||||
|
"RenormCFG",
|
||||||
"RepeatImageBatch",
|
"RepeatImageBatch",
|
||||||
"RepeatLatentBatch",
|
"RepeatLatentBatch",
|
||||||
"RescaleCFG",
|
"RescaleCFG",
|
||||||
@@ -14876,6 +15004,14 @@
|
|||||||
"title_aux": "ComfyUI-LoadFiles"
|
"title_aux": "ComfyUI-LoadFiles"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/dasilva333/ComfyUI_ContrastingColor": [
|
||||||
|
[
|
||||||
|
"ContrastingComplementaryColor|pysssss"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_ContrastingColor"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/dave-palt/comfyui_DSP_imagehelpers": [
|
"https://github.com/dave-palt/comfyui_DSP_imagehelpers": [
|
||||||
[
|
[
|
||||||
"dsp-imagehelpers-concat"
|
"dsp-imagehelpers-concat"
|
||||||
@@ -15005,6 +15141,9 @@
|
|||||||
"DavchaCLIPTextEncode",
|
"DavchaCLIPTextEncode",
|
||||||
"DavchaConditioningConcat",
|
"DavchaConditioningConcat",
|
||||||
"DavchaEmptyLatentImage",
|
"DavchaEmptyLatentImage",
|
||||||
|
"DavchaLLM",
|
||||||
|
"DavchaLLMAdvanced",
|
||||||
|
"DavchaLoadLLM",
|
||||||
"DavchaLoadVideo",
|
"DavchaLoadVideo",
|
||||||
"DavchaMaskImage",
|
"DavchaMaskImage",
|
||||||
"DavchaModelMergeSD1",
|
"DavchaModelMergeSD1",
|
||||||
@@ -15404,9 +15543,12 @@
|
|||||||
"Qwen2AudioInstruct",
|
"Qwen2AudioInstruct",
|
||||||
"StringToDict",
|
"StringToDict",
|
||||||
"SwitchDuo",
|
"SwitchDuo",
|
||||||
|
"TextBoxStyle",
|
||||||
"TextLineSelect",
|
"TextLineSelect",
|
||||||
"TextLinesToList",
|
"TextLinesToList",
|
||||||
"TextPlusPlus"
|
"TextMargins",
|
||||||
|
"TextPlusPlus",
|
||||||
|
"TextShadow"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "comfyui-dreambait-nodes"
|
"title_aux": "comfyui-dreambait-nodes"
|
||||||
@@ -15469,6 +15611,15 @@
|
|||||||
"title_aux": "comfyui_dygen"
|
"title_aux": "comfyui_dygen"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/dzqdzq/ComfyUI-crop-alpha": [
|
||||||
|
[
|
||||||
|
"FastAlphaCropper",
|
||||||
|
"ShrinkImage"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-crop-alpha"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/e7mac/ComfyUI-ShadertoyGL": [
|
"https://github.com/e7mac/ComfyUI-ShadertoyGL": [
|
||||||
[
|
[
|
||||||
"ColorChannelOffset",
|
"ColorChannelOffset",
|
||||||
@@ -15558,6 +15709,8 @@
|
|||||||
"MaskFromRGB_KMeans",
|
"MaskFromRGB_KMeans",
|
||||||
"ParallaxZoom",
|
"ParallaxZoom",
|
||||||
"Random_Style_Mixture",
|
"Random_Style_Mixture",
|
||||||
|
"SDAnyConverter",
|
||||||
|
"SDTypeConverter",
|
||||||
"SaveImageAdvanced",
|
"SaveImageAdvanced",
|
||||||
"SavePosEmbeds",
|
"SavePosEmbeds",
|
||||||
"VAEDecode_to_folder",
|
"VAEDecode_to_folder",
|
||||||
@@ -16608,14 +16761,6 @@
|
|||||||
"title_aux": "String Converter"
|
"title_aux": "String Converter"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/gmorks/ComfyUI-Animagine-Prompt": [
|
|
||||||
[
|
|
||||||
"AnimaginePrompt"
|
|
||||||
],
|
|
||||||
{
|
|
||||||
"title_aux": "ComfyUI Animagine prompt"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"https://github.com/gmorks/ComfyUI-SendToDiscord": [
|
"https://github.com/gmorks/ComfyUI-SendToDiscord": [
|
||||||
[
|
[
|
||||||
"PreviewImageWithDiscord"
|
"PreviewImageWithDiscord"
|
||||||
@@ -17162,21 +17307,6 @@
|
|||||||
"title_aux": "ComfyUI-ToolBox"
|
"title_aux": "ComfyUI-ToolBox"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/hdfhssg/ComfyUI_pxtool": [
|
|
||||||
[
|
|
||||||
"CivitaiHelper",
|
|
||||||
"DanbooruCharacterTag",
|
|
||||||
"E621CharacterTag",
|
|
||||||
"NegativeTag",
|
|
||||||
"QualityTag",
|
|
||||||
"RandomArtists",
|
|
||||||
"RandomArtistsAdvanced",
|
|
||||||
"RandomTag"
|
|
||||||
],
|
|
||||||
{
|
|
||||||
"title_aux": "ComfyUI_pxtool"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"https://github.com/heshengtao/comfyui_LLM_party": [
|
"https://github.com/heshengtao/comfyui_LLM_party": [
|
||||||
[
|
[
|
||||||
"About_us",
|
"About_us",
|
||||||
@@ -17418,6 +17548,7 @@
|
|||||||
"WWAA_GBCamera",
|
"WWAA_GBCamera",
|
||||||
"WWAA_ImageLoader",
|
"WWAA_ImageLoader",
|
||||||
"WWAA_ImageToTextFile",
|
"WWAA_ImageToTextFile",
|
||||||
|
"WWAA_NestedLoopCounter",
|
||||||
"WWAA_PromptWriter"
|
"WWAA_PromptWriter"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -17538,12 +17669,11 @@
|
|||||||
"BiRefNet",
|
"BiRefNet",
|
||||||
"ControlImagePreprocessor",
|
"ControlImagePreprocessor",
|
||||||
"ControlNetModelLoader",
|
"ControlNetModelLoader",
|
||||||
|
"DiffusersMVModelMakeup",
|
||||||
|
"DiffusersMVPipelineLoader",
|
||||||
"DiffusersMVSampler",
|
"DiffusersMVSampler",
|
||||||
"DiffusersModelMakeup",
|
"DiffusersMVSchedulerLoader",
|
||||||
"DiffusersPipelineLoader",
|
"DiffusersMVVaeLoader",
|
||||||
"DiffusersSampler",
|
|
||||||
"DiffusersSchedulerLoader",
|
|
||||||
"DiffusersVaeLoader",
|
|
||||||
"ImagePreprocessor",
|
"ImagePreprocessor",
|
||||||
"LdmPipelineLoader",
|
"LdmPipelineLoader",
|
||||||
"LdmVaeLoader",
|
"LdmVaeLoader",
|
||||||
@@ -17861,7 +17991,8 @@
|
|||||||
[
|
[
|
||||||
"PROMPT_ENHANCER",
|
"PROMPT_ENHANCER",
|
||||||
"PROMPT_ENHANCER_CHAIN_CONTROL",
|
"PROMPT_ENHANCER_CHAIN_CONTROL",
|
||||||
"PROMPT_ENHANCER_CHAIN_RANDOM"
|
"PROMPT_ENHANCER_CHAIN_RANDOM",
|
||||||
|
"PROMPT_ENHANCER_REPROMPT"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "comfyui-prompt-enhancer"
|
"title_aux": "comfyui-prompt-enhancer"
|
||||||
@@ -18502,6 +18633,7 @@
|
|||||||
"LoadLoraFromCivitAI",
|
"LoadLoraFromCivitAI",
|
||||||
"LoadLoraFromComfyOnline",
|
"LoadLoraFromComfyOnline",
|
||||||
"LoadLoraFromHF",
|
"LoadLoraFromHF",
|
||||||
|
"LoadLoraFromHFWithToken",
|
||||||
"SaveAudioAsWav",
|
"SaveAudioAsWav",
|
||||||
"SaveText"
|
"SaveText"
|
||||||
],
|
],
|
||||||
@@ -18876,6 +19008,15 @@
|
|||||||
"title_aux": "ComfyUI LayerDivider"
|
"title_aux": "ComfyUI LayerDivider"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/juehackr/comfyui_fk_server": [
|
||||||
|
[
|
||||||
|
"FK_Node",
|
||||||
|
"FK_ShowBaseNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "comfyui_fk_server"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/jurdnisglobby/ComfyUI-Jurdns-Groq-Node": [
|
"https://github.com/jurdnisglobby/ComfyUI-Jurdns-Groq-Node": [
|
||||||
[
|
[
|
||||||
"JurdnsGroqAPIPromptEnhancer"
|
"JurdnsGroqAPIPromptEnhancer"
|
||||||
@@ -18919,6 +19060,7 @@
|
|||||||
"Bjornulf_DisplayNote",
|
"Bjornulf_DisplayNote",
|
||||||
"Bjornulf_EmptyVideoLatentWithSingle",
|
"Bjornulf_EmptyVideoLatentWithSingle",
|
||||||
"Bjornulf_FFmpegConfig",
|
"Bjornulf_FFmpegConfig",
|
||||||
|
"Bjornulf_FourImageViewer",
|
||||||
"Bjornulf_FreeVRAM",
|
"Bjornulf_FreeVRAM",
|
||||||
"Bjornulf_GrayscaleTransform",
|
"Bjornulf_GrayscaleTransform",
|
||||||
"Bjornulf_GreenScreenToTransparency",
|
"Bjornulf_GreenScreenToTransparency",
|
||||||
@@ -18929,6 +19071,7 @@
|
|||||||
"Bjornulf_ImageDetails",
|
"Bjornulf_ImageDetails",
|
||||||
"Bjornulf_ImageMaskCutter",
|
"Bjornulf_ImageMaskCutter",
|
||||||
"Bjornulf_ImageNote",
|
"Bjornulf_ImageNote",
|
||||||
|
"Bjornulf_ImageNoteLoadImage",
|
||||||
"Bjornulf_ImagesListToVideo",
|
"Bjornulf_ImagesListToVideo",
|
||||||
"Bjornulf_KokoroTTS",
|
"Bjornulf_KokoroTTS",
|
||||||
"Bjornulf_LatentResolutionSelector",
|
"Bjornulf_LatentResolutionSelector",
|
||||||
@@ -18971,6 +19114,7 @@
|
|||||||
"Bjornulf_PassPreviewImage",
|
"Bjornulf_PassPreviewImage",
|
||||||
"Bjornulf_PauseResume",
|
"Bjornulf_PauseResume",
|
||||||
"Bjornulf_PickInput",
|
"Bjornulf_PickInput",
|
||||||
|
"Bjornulf_PickMe",
|
||||||
"Bjornulf_PreviewFirstImage",
|
"Bjornulf_PreviewFirstImage",
|
||||||
"Bjornulf_RandomImage",
|
"Bjornulf_RandomImage",
|
||||||
"Bjornulf_RandomLineFromInput",
|
"Bjornulf_RandomLineFromInput",
|
||||||
@@ -19007,10 +19151,13 @@
|
|||||||
"Bjornulf_TextGeneratorStyle",
|
"Bjornulf_TextGeneratorStyle",
|
||||||
"Bjornulf_TextGeneratorText2Video",
|
"Bjornulf_TextGeneratorText2Video",
|
||||||
"Bjornulf_TextReplace",
|
"Bjornulf_TextReplace",
|
||||||
|
"Bjornulf_TextSplitin10",
|
||||||
"Bjornulf_TextSplitin5",
|
"Bjornulf_TextSplitin5",
|
||||||
"Bjornulf_TextToAnything",
|
"Bjornulf_TextToAnything",
|
||||||
"Bjornulf_TextToSpeech",
|
"Bjornulf_TextToSpeech",
|
||||||
"Bjornulf_TextToStringAndSeed",
|
"Bjornulf_TextToStringAndSeed",
|
||||||
|
"Bjornulf_TextToVariable",
|
||||||
|
"Bjornulf_ToDoList",
|
||||||
"Bjornulf_VideoDetails",
|
"Bjornulf_VideoDetails",
|
||||||
"Bjornulf_VideoLatentResolutionSelector",
|
"Bjornulf_VideoLatentResolutionSelector",
|
||||||
"Bjornulf_VideoPingPong",
|
"Bjornulf_VideoPingPong",
|
||||||
@@ -19018,6 +19165,8 @@
|
|||||||
"Bjornulf_VideoToImagesList",
|
"Bjornulf_VideoToImagesList",
|
||||||
"Bjornulf_WriteText",
|
"Bjornulf_WriteText",
|
||||||
"Bjornulf_WriteTextAdvanced",
|
"Bjornulf_WriteTextAdvanced",
|
||||||
|
"Bjornulf_WriteTextPickMe",
|
||||||
|
"Bjornulf_WriteTextPickMeChain",
|
||||||
"Bjornulf_XTTSConfig",
|
"Bjornulf_XTTSConfig",
|
||||||
"Bjornulf_imagesToVideo",
|
"Bjornulf_imagesToVideo",
|
||||||
"Bjornulf_ollamaLoader"
|
"Bjornulf_ollamaLoader"
|
||||||
@@ -19660,6 +19809,7 @@
|
|||||||
"ImageConcanate",
|
"ImageConcanate",
|
||||||
"ImageConcatFromBatch",
|
"ImageConcatFromBatch",
|
||||||
"ImageConcatMulti",
|
"ImageConcatMulti",
|
||||||
|
"ImageCropByMask",
|
||||||
"ImageCropByMaskAndResize",
|
"ImageCropByMaskAndResize",
|
||||||
"ImageCropByMaskBatch",
|
"ImageCropByMaskBatch",
|
||||||
"ImageGrabPIL",
|
"ImageGrabPIL",
|
||||||
@@ -19671,6 +19821,7 @@
|
|||||||
"ImagePadForOutpaintMasked",
|
"ImagePadForOutpaintMasked",
|
||||||
"ImagePadForOutpaintTargetSize",
|
"ImagePadForOutpaintTargetSize",
|
||||||
"ImagePass",
|
"ImagePass",
|
||||||
|
"ImagePrepForICLora",
|
||||||
"ImageResizeKJ",
|
"ImageResizeKJ",
|
||||||
"ImageTensorList",
|
"ImageTensorList",
|
||||||
"ImageTransformByNormalizedAmplitude",
|
"ImageTransformByNormalizedAmplitude",
|
||||||
@@ -19679,6 +19830,7 @@
|
|||||||
"InjectNoiseToLatent",
|
"InjectNoiseToLatent",
|
||||||
"InsertImageBatchByIndexes",
|
"InsertImageBatchByIndexes",
|
||||||
"InsertImagesToBatchIndexed",
|
"InsertImagesToBatchIndexed",
|
||||||
|
"InsertLatentToIndexed",
|
||||||
"InterpolateCoords",
|
"InterpolateCoords",
|
||||||
"Intrinsic_lora_sampling",
|
"Intrinsic_lora_sampling",
|
||||||
"JoinStringMulti",
|
"JoinStringMulti",
|
||||||
@@ -19710,6 +19862,7 @@
|
|||||||
"SV3D_BatchSchedule",
|
"SV3D_BatchSchedule",
|
||||||
"SaveImageKJ",
|
"SaveImageKJ",
|
||||||
"SaveImageWithAlpha",
|
"SaveImageWithAlpha",
|
||||||
|
"SaveStringKJ",
|
||||||
"ScaleBatchPromptSchedule",
|
"ScaleBatchPromptSchedule",
|
||||||
"Screencap_mss",
|
"Screencap_mss",
|
||||||
"SeparateMasks",
|
"SeparateMasks",
|
||||||
@@ -19732,6 +19885,7 @@
|
|||||||
"TorchCompileCosmosModel",
|
"TorchCompileCosmosModel",
|
||||||
"TorchCompileLTXModel",
|
"TorchCompileLTXModel",
|
||||||
"TorchCompileModelFluxAdvanced",
|
"TorchCompileModelFluxAdvanced",
|
||||||
|
"TorchCompileModelHyVideo",
|
||||||
"TorchCompileVAE",
|
"TorchCompileVAE",
|
||||||
"TransitionImagesInBatch",
|
"TransitionImagesInBatch",
|
||||||
"TransitionImagesMulti",
|
"TransitionImagesMulti",
|
||||||
@@ -21727,6 +21881,16 @@
|
|||||||
"title_aux": "ComfyUI-CatvtonFluxWrapper"
|
"title_aux": "ComfyUI-CatvtonFluxWrapper"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/lum3on/comfyui_LLM_Polymath": [
|
||||||
|
[
|
||||||
|
"polymath_SaveAbsolute",
|
||||||
|
"polymath_chat",
|
||||||
|
"polymath_scraper"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "LLM Polymath Chat Node"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/lumalabs/ComfyUI-LumaAI-API": [
|
"https://github.com/lumalabs/ComfyUI-LumaAI-API": [
|
||||||
[
|
[
|
||||||
"CharacterReference",
|
"CharacterReference",
|
||||||
@@ -22019,6 +22183,23 @@
|
|||||||
"title_aux": "ComfyUI Checkpoint Automatic Config"
|
"title_aux": "ComfyUI Checkpoint Automatic Config"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/mediocreatmybest/ComfyUI-Transformers-Pipeline": [
|
||||||
|
[
|
||||||
|
"BatchProcessorTpl",
|
||||||
|
"CaptionExportTpl",
|
||||||
|
"CaptionGeneratorTpl",
|
||||||
|
"DebugNodeTpl",
|
||||||
|
"ExifMetadataExtractorTpl",
|
||||||
|
"Florence2NodeTpl",
|
||||||
|
"ImageLoaderTpl",
|
||||||
|
"ModelLoaderTpl",
|
||||||
|
"PresetModelListTpl",
|
||||||
|
"TaskListTpl"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Transformers-Pipeline"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/melMass/comfy_mtb": [
|
"https://github.com/melMass/comfy_mtb": [
|
||||||
[
|
[
|
||||||
"Animation Builder (mtb)",
|
"Animation Builder (mtb)",
|
||||||
@@ -22465,6 +22646,23 @@
|
|||||||
"title_aux": "Preset Dimensions"
|
"title_aux": "Preset Dimensions"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/mohseni-mr/ComfyUI-Mohseni-Kit": [
|
||||||
|
[
|
||||||
|
"FloatPreview"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Mohseni Kit"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"https://github.com/moon7star9/ComfyUI_BiRefNet_Universal": [
|
||||||
|
[
|
||||||
|
"BiRefNet_Loader",
|
||||||
|
"BiRefNet_Remove_Background"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_BiRefNet_Universal"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/morino-kumasan/comfyui-toml-prompt": [
|
"https://github.com/morino-kumasan/comfyui-toml-prompt": [
|
||||||
[
|
[
|
||||||
"IntSelector",
|
"IntSelector",
|
||||||
@@ -23054,15 +23252,6 @@
|
|||||||
"title_aux": "ComfyUI-TextOnSegs"
|
"title_aux": "ComfyUI-TextOnSegs"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/noarche/sd-webui-color-enhance": [
|
|
||||||
[
|
|
||||||
"MMakerColorBlend",
|
|
||||||
"MMakerColorEnhance"
|
|
||||||
],
|
|
||||||
{
|
|
||||||
"title_aux": "noarche/Color Enhance"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"https://github.com/noembryo/ComfyUI-noEmbryo": [
|
"https://github.com/noembryo/ComfyUI-noEmbryo": [
|
||||||
[
|
[
|
||||||
"PromptTermList1",
|
"PromptTermList1",
|
||||||
@@ -23240,6 +23429,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/olduvai-jp/ComfyUI-HfLoader": [
|
"https://github.com/olduvai-jp/ComfyUI-HfLoader": [
|
||||||
[
|
[
|
||||||
|
"ControlNet Loader From HF",
|
||||||
"Lora Loader From HF"
|
"Lora Loader From HF"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -24486,22 +24676,26 @@
|
|||||||
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes": [
|
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes": [
|
||||||
[
|
[
|
||||||
"DTypeConverter",
|
"DTypeConverter",
|
||||||
"DeltaControl",
|
|
||||||
"FPSMonitor",
|
"FPSMonitor",
|
||||||
"FastWebcamCapture",
|
"FastWebcamCapture",
|
||||||
"FloatControl",
|
"FloatControl",
|
||||||
"FloatSequence",
|
"FloatSequence",
|
||||||
|
"HandMaskNode",
|
||||||
|
"HandTrackingNode",
|
||||||
"IntControl",
|
"IntControl",
|
||||||
"IntSequence",
|
"IntSequence",
|
||||||
"IntegerMotionController",
|
"IntegerMotionController",
|
||||||
"IntervalControl",
|
|
||||||
"LazyCondition",
|
"LazyCondition",
|
||||||
"LoadImageFromPath_",
|
"LoadImageFromPath_",
|
||||||
"MotionController",
|
"MotionController",
|
||||||
"MultilineText",
|
"MultilineText",
|
||||||
"QuickShapeMask",
|
"QuickShapeMask",
|
||||||
"ROINode",
|
"ROINode",
|
||||||
|
"RepulsiveMaskNode",
|
||||||
|
"ResizeMaskNode",
|
||||||
"SimilarityFilter",
|
"SimilarityFilter",
|
||||||
|
"StateResetNode",
|
||||||
|
"StateTestNode",
|
||||||
"StringControl",
|
"StringControl",
|
||||||
"StringSequence",
|
"StringSequence",
|
||||||
"TextRenderer",
|
"TextRenderer",
|
||||||
@@ -24730,6 +24924,7 @@
|
|||||||
"FlipStreamSwitchLatent",
|
"FlipStreamSwitchLatent",
|
||||||
"FlipStreamTextBox",
|
"FlipStreamTextBox",
|
||||||
"FlipStreamTextReplace",
|
"FlipStreamTextReplace",
|
||||||
|
"FlipStreamVideoInput",
|
||||||
"FlipStreamViewer"
|
"FlipStreamViewer"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -25328,7 +25523,9 @@
|
|||||||
"SmartFormatString",
|
"SmartFormatString",
|
||||||
"SmartFormatString10",
|
"SmartFormatString10",
|
||||||
"SmartHVLoraSelect",
|
"SmartHVLoraSelect",
|
||||||
"SmartHVLoraStack"
|
"SmartHVLoraStack",
|
||||||
|
"SmartRemoveComments",
|
||||||
|
"SmartSaveText"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI Smart Helper Nodes"
|
"title_aux": "ComfyUI Smart Helper Nodes"
|
||||||
@@ -26397,6 +26594,20 @@
|
|||||||
"title_aux": "ComfyUI-Helper-Nodes"
|
"title_aux": "ComfyUI-Helper-Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/thanhduong0213929/ComfyUI-DeepUnlock": [
|
||||||
|
[
|
||||||
|
"DeepFuze Save",
|
||||||
|
"DeepFuzeAdavance",
|
||||||
|
"DeepFuzeFaceSwap",
|
||||||
|
"DeepfuzePreview",
|
||||||
|
"LLM_node",
|
||||||
|
"PlayBackAudio",
|
||||||
|
"TTS_generation"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DeepUnlock"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/theAdamColton/ComfyUI-texflow-extension": [
|
"https://github.com/theAdamColton/ComfyUI-texflow-extension": [
|
||||||
[
|
[
|
||||||
"Load Texflow Depth Image",
|
"Load Texflow Depth Image",
|
||||||
@@ -26628,6 +26839,14 @@
|
|||||||
"title_aux": "ComfyUI_toyxyz_test_nodes"
|
"title_aux": "ComfyUI_toyxyz_test_nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/traugdor/ComfyUI-Riffusion": [
|
||||||
|
[
|
||||||
|
"RiffusionNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Riffusion"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/traugdor/ComfyUI-quadMoons-nodes": [
|
"https://github.com/traugdor/ComfyUI-quadMoons-nodes": [
|
||||||
[
|
[
|
||||||
"quadmoonBatchFromLatent",
|
"quadmoonBatchFromLatent",
|
||||||
@@ -27358,6 +27577,14 @@
|
|||||||
"title_aux": "zsq_prompt"
|
"title_aux": "zsq_prompt"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/wirytiox/ComfyUI-SelectStringFromListWithIndex": [
|
||||||
|
[
|
||||||
|
"StringFromList"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-SelectStringFromListWithIndex"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/wjl0313/ComfyUI_KimNodes": [
|
"https://github.com/wjl0313/ComfyUI_KimNodes": [
|
||||||
[
|
[
|
||||||
"Add_ImageMetadata",
|
"Add_ImageMetadata",
|
||||||
@@ -27848,6 +28075,17 @@
|
|||||||
"title_aux": "ComfyUI Local Save Node"
|
"title_aux": "ComfyUI Local Save Node"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/yichengup/ComfyUI-VideoBlender": [
|
||||||
|
[
|
||||||
|
"VideoBlendLayer",
|
||||||
|
"VideoBlendStack",
|
||||||
|
"VideoBlendStackAdvanced",
|
||||||
|
"VideoPreprocess"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-VideoBlender"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/yichengup/ComfyUI-YCNodes": [
|
"https://github.com/yichengup/ComfyUI-YCNodes": [
|
||||||
[
|
[
|
||||||
"DynamicThreshold",
|
"DynamicThreshold",
|
||||||
@@ -27866,7 +28104,9 @@
|
|||||||
"MaskSmartValleySplit",
|
"MaskSmartValleySplit",
|
||||||
"MaskSplitFilter",
|
"MaskSplitFilter",
|
||||||
"MaskTopNFilter",
|
"MaskTopNFilter",
|
||||||
"TextBeforeKeyword"
|
"TextBeforeKeyword",
|
||||||
|
"YC Extract Number",
|
||||||
|
"YC Text Index Switch"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-YCNodes"
|
"title_aux": "ComfyUI-YCNodes"
|
||||||
@@ -28504,6 +28744,7 @@
|
|||||||
"https://github.com/zentrocdot/ComfyUI-Simple_Image_To_Prompt": [
|
"https://github.com/zentrocdot/ComfyUI-Simple_Image_To_Prompt": [
|
||||||
[
|
[
|
||||||
"\ud83d\udc41\ufe0f Image To Prompt",
|
"\ud83d\udc41\ufe0f Image To Prompt",
|
||||||
|
"\ud83d\udc41\ufe0f Image To Prompt (NO UPDATE)",
|
||||||
"\ud83e\uddf3 Show Data"
|
"\ud83e\uddf3 Show Data"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -291,6 +291,16 @@
|
|||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Example of using ComfyUI Toolbar to Toggle ComfyUI links on/off"
|
"description": "Example of using ComfyUI Toolbar to Toggle ComfyUI links on/off"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "xhiroga",
|
||||||
|
"title": "ComfyUI-TypeScript-CustomNode",
|
||||||
|
"reference": "https://github.com/xhiroga/ComfyUI-TypeScript-CustomNode",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/xhiroga/ComfyUI-TypeScript-CustomNode"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This project is generated from xhiroga/ComfyUI-TypeScript-CustomNode"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -34,7 +34,7 @@ else:
|
|||||||
|
|
||||||
security_check.security_check()
|
security_check.security_check()
|
||||||
|
|
||||||
cm_global.pip_blacklist = ['torch', 'torchsde', 'torchvision']
|
cm_global.pip_blacklist = {'torch', 'torchsde', 'torchvision'}
|
||||||
cm_global.pip_downgrade_blacklist = ['torch', 'torchsde', 'torchvision', 'transformers', 'safetensors', 'kornia']
|
cm_global.pip_downgrade_blacklist = ['torch', 'torchsde', 'torchvision', 'transformers', 'safetensors', 'kornia']
|
||||||
|
|
||||||
|
|
||||||
@@ -82,6 +82,7 @@ comfyui_manager_path = os.path.abspath(os.path.dirname(__file__))
|
|||||||
custom_nodes_base_path = folder_paths.get_folder_paths('custom_nodes')[0]
|
custom_nodes_base_path = folder_paths.get_folder_paths('custom_nodes')[0]
|
||||||
manager_files_path = os.path.abspath(os.path.join(folder_paths.get_user_directory(), 'default', 'ComfyUI-Manager'))
|
manager_files_path = os.path.abspath(os.path.join(folder_paths.get_user_directory(), 'default', 'ComfyUI-Manager'))
|
||||||
manager_pip_overrides_path = os.path.join(manager_files_path, "pip_overrides.json")
|
manager_pip_overrides_path = os.path.join(manager_files_path, "pip_overrides.json")
|
||||||
|
manager_pip_blacklist_path = os.path.join(manager_files_path, "pip_blacklist.list")
|
||||||
restore_snapshot_path = os.path.join(manager_files_path, "startup-scripts", "restore-snapshot.json")
|
restore_snapshot_path = os.path.join(manager_files_path, "startup-scripts", "restore-snapshot.json")
|
||||||
manager_config_path = os.path.join(manager_files_path, 'config.ini')
|
manager_config_path = os.path.join(manager_files_path, 'config.ini')
|
||||||
|
|
||||||
@@ -122,6 +123,14 @@ if os.path.exists(manager_pip_overrides_path):
|
|||||||
cm_global.pip_overrides['ultralytics'] = 'ultralytics==8.3.40' # for security
|
cm_global.pip_overrides['ultralytics'] = 'ultralytics==8.3.40' # for security
|
||||||
|
|
||||||
|
|
||||||
|
if os.path.exists(manager_pip_blacklist_path):
|
||||||
|
with open(manager_pip_blacklist_path, 'r', encoding="UTF-8", errors="ignore") as f:
|
||||||
|
for x in f.readlines():
|
||||||
|
y = x.strip()
|
||||||
|
if y != '':
|
||||||
|
cm_global.pip_blacklist.add(y)
|
||||||
|
|
||||||
|
|
||||||
def remap_pip_package(pkg):
|
def remap_pip_package(pkg):
|
||||||
if pkg in cm_global.pip_overrides:
|
if pkg in cm_global.pip_overrides:
|
||||||
res = cm_global.pip_overrides[pkg]
|
res = cm_global.pip_overrides[pkg]
|
||||||
@@ -421,29 +430,33 @@ except Exception as e:
|
|||||||
print(f"[ComfyUI-Manager] Logging failed: {e}")
|
print(f"[ComfyUI-Manager] Logging failed: {e}")
|
||||||
|
|
||||||
|
|
||||||
try:
|
def ensure_dependencies():
|
||||||
import git # noqa: F401
|
|
||||||
import toml # noqa: F401
|
|
||||||
import rich # noqa: F401
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
my_path = os.path.dirname(__file__)
|
|
||||||
requirements_path = os.path.join(my_path, "requirements.txt")
|
|
||||||
|
|
||||||
print("## ComfyUI-Manager: installing dependencies. (GitPython)")
|
|
||||||
try:
|
try:
|
||||||
result = subprocess.check_output(manager_util.make_pip_cmd(['install', '-r', requirements_path]))
|
import git # noqa: F401
|
||||||
except subprocess.CalledProcessError:
|
import toml # noqa: F401
|
||||||
print("## [ERROR] ComfyUI-Manager: Attempting to reinstall dependencies using an alternative method.")
|
import rich # noqa: F401
|
||||||
try:
|
import chardet # noqa: F401
|
||||||
result = subprocess.check_output(manager_util.make_pip_cmd(['install', '--user', '-r', requirements_path]))
|
except ModuleNotFoundError:
|
||||||
except subprocess.CalledProcessError:
|
my_path = os.path.dirname(__file__)
|
||||||
print("## [ERROR] ComfyUI-Manager: Failed to install the GitPython package in the correct Python environment. Please install it manually in the appropriate environment. (You can seek help at https://app.element.io/#/room/%23comfyui_space%3Amatrix.org)")
|
requirements_path = os.path.join(my_path, "requirements.txt")
|
||||||
|
|
||||||
try:
|
print("## ComfyUI-Manager: installing dependencies. (GitPython)")
|
||||||
print("## ComfyUI-Manager: installing dependencies done.")
|
try:
|
||||||
except:
|
subprocess.check_output(manager_util.make_pip_cmd(['install', '-r', requirements_path]))
|
||||||
# maybe we should sys.exit() here? there is at least two screens worth of error messages still being pumped after our error messages
|
except subprocess.CalledProcessError:
|
||||||
print("## [ERROR] ComfyUI-Manager: GitPython package seems to be installed, but failed to load somehow. Make sure you have a working git client installed")
|
print("## [ERROR] ComfyUI-Manager: Attempting to reinstall dependencies using an alternative method.")
|
||||||
|
try:
|
||||||
|
subprocess.check_output(manager_util.make_pip_cmd(['install', '--user', '-r', requirements_path]))
|
||||||
|
except subprocess.CalledProcessError:
|
||||||
|
print("## [ERROR] ComfyUI-Manager: Failed to install the GitPython package in the correct Python environment. Please install it manually in the appropriate environment. (You can seek help at https://app.element.io/#/room/%23comfyui_space%3Amatrix.org)")
|
||||||
|
|
||||||
|
try:
|
||||||
|
print("## ComfyUI-Manager: installing dependencies done.")
|
||||||
|
except:
|
||||||
|
# maybe we should sys.exit() here? there is at least two screens worth of error messages still being pumped after our error messages
|
||||||
|
print("## [ERROR] ComfyUI-Manager: GitPython package seems to be installed, but failed to load somehow. Make sure you have a working git client installed")
|
||||||
|
|
||||||
|
ensure_dependencies()
|
||||||
|
|
||||||
|
|
||||||
print("** ComfyUI startup time:", current_timestamp())
|
print("** ComfyUI startup time:", current_timestamp())
|
||||||
@@ -598,17 +611,18 @@ def execute_lazy_install_script(repo_path, executable):
|
|||||||
|
|
||||||
if os.path.exists(requirements_path):
|
if os.path.exists(requirements_path):
|
||||||
print(f"Install: pip packages for '{repo_path}'")
|
print(f"Install: pip packages for '{repo_path}'")
|
||||||
with open(requirements_path, "r") as requirements_file:
|
|
||||||
for line in requirements_file:
|
|
||||||
package_name = remap_pip_package(line.strip())
|
|
||||||
if package_name and not is_installed(package_name):
|
|
||||||
if '--index-url' in package_name:
|
|
||||||
s = package_name.split('--index-url')
|
|
||||||
install_cmd = manager_util.make_pip_cmd(["install", s[0].strip(), '--index-url', s[1].strip()])
|
|
||||||
else:
|
|
||||||
install_cmd = manager_util.make_pip_cmd(["install", package_name])
|
|
||||||
|
|
||||||
process_wrap(install_cmd, repo_path)
|
lines = manager_util.robust_readlines(requirements_path)
|
||||||
|
for line in lines:
|
||||||
|
package_name = remap_pip_package(line.strip())
|
||||||
|
if package_name and not is_installed(package_name):
|
||||||
|
if '--index-url' in package_name:
|
||||||
|
s = package_name.split('--index-url')
|
||||||
|
install_cmd = manager_util.make_pip_cmd(["install", s[0].strip(), '--index-url', s[1].strip()])
|
||||||
|
else:
|
||||||
|
install_cmd = manager_util.make_pip_cmd(["install", package_name])
|
||||||
|
|
||||||
|
process_wrap(install_cmd, repo_path)
|
||||||
|
|
||||||
if os.path.exists(install_script_path) and f'{repo_path}/install.py' not in processed_install:
|
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')
|
processed_install.add(f'{repo_path}/install.py')
|
||||||
@@ -679,6 +693,7 @@ def execute_migration(moves):
|
|||||||
shutil.move(x[0], x[1])
|
shutil.move(x[0], x[1])
|
||||||
print(f"[ComfyUI-Manager] MIGRATION: '{x[0]}' -> '{x[1]}'")
|
print(f"[ComfyUI-Manager] MIGRATION: '{x[0]}' -> '{x[1]}'")
|
||||||
|
|
||||||
|
script_executed = False
|
||||||
|
|
||||||
# Check if script_list_path exists
|
# Check if script_list_path exists
|
||||||
if os.path.exists(script_list_path):
|
if os.path.exists(script_list_path):
|
||||||
@@ -733,6 +748,7 @@ if os.path.exists(script_list_path):
|
|||||||
|
|
||||||
# Remove the script_list_path file
|
# Remove the script_list_path file
|
||||||
if os.path.exists(script_list_path):
|
if os.path.exists(script_list_path):
|
||||||
|
script_executed = True
|
||||||
os.remove(script_list_path)
|
os.remove(script_list_path)
|
||||||
|
|
||||||
print("\n[ComfyUI-Manager] Startup script completed.")
|
print("\n[ComfyUI-Manager] Startup script completed.")
|
||||||
@@ -744,6 +760,29 @@ del processed_install
|
|||||||
del pip_fixer
|
del pip_fixer
|
||||||
manager_util.clear_pip_cache()
|
manager_util.clear_pip_cache()
|
||||||
|
|
||||||
|
if script_executed:
|
||||||
|
# Restart
|
||||||
|
print("[ComfyUI-Manager] Restarting to reapply dependency installation.")
|
||||||
|
|
||||||
|
if '__COMFY_CLI_SESSION__' in os.environ:
|
||||||
|
with open(os.path.join(os.environ['__COMFY_CLI_SESSION__'] + '.reboot'), 'w'):
|
||||||
|
pass
|
||||||
|
|
||||||
|
print("--------------------------------------------------------------------------\n")
|
||||||
|
exit(0)
|
||||||
|
else:
|
||||||
|
sys_argv = sys.argv.copy()
|
||||||
|
|
||||||
|
if sys.platform.startswith('win32'):
|
||||||
|
cmds = ['"' + sys.executable + '"', '"' + sys_argv[0] + '"'] + sys_argv[1:]
|
||||||
|
else:
|
||||||
|
cmds = [sys.executable] + sys_argv
|
||||||
|
|
||||||
|
print(f"Command: {cmds}", flush=True)
|
||||||
|
print("--------------------------------------------------------------------------\n")
|
||||||
|
|
||||||
|
os.execv(sys.executable, cmds)
|
||||||
|
|
||||||
|
|
||||||
def check_windows_event_loop_policy():
|
def check_windows_event_loop_policy():
|
||||||
try:
|
try:
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "comfyui-manager"
|
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."
|
description = "ComfyUI-Manager provides features to install and manage custom nodes for ComfyUI, as well as various functionalities to assist with ComfyUI."
|
||||||
version = "3.19"
|
version = "3.24"
|
||||||
license = { file = "LICENSE.txt" }
|
license = { file = "LICENSE.txt" }
|
||||||
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]
|
dependencies = ["GitPython", "PyGithub", "matrix-client==0.4.0", "transformers", "huggingface-hub>0.20", "typer", "rich", "typing-extensions"]
|
||||||
|
|
||||||
|
|||||||
@@ -8,3 +8,4 @@ rich
|
|||||||
typing-extensions
|
typing-extensions
|
||||||
toml
|
toml
|
||||||
uv
|
uv
|
||||||
|
chardet
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ python -m venv venv
|
|||||||
call venv/Scripts/activate
|
call venv/Scripts/activate
|
||||||
python -m pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121
|
python -m pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu121
|
||||||
python -m pip install -r requirements.txt
|
python -m pip install -r requirements.txt
|
||||||
python -m pip install -r custom_nodes/ComfyUI-Manager/requirements.txt
|
python -m pip install -r custom_nodes/comfyui-manager/requirements.txt
|
||||||
cd ..
|
cd ..
|
||||||
echo "cd ComfyUI" >> run_gpu.bat
|
echo "cd ComfyUI" >> run_gpu.bat
|
||||||
echo "call venv/Scripts/activate" >> run_gpu.bat
|
echo "call venv/Scripts/activate" >> run_gpu.bat
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
.\python_embeded\python.exe -s -m pip install gitpython
|
.\python_embeded\python.exe -s -m pip install gitpython
|
||||||
.\python_embeded\python.exe -c "import git; git.Repo.clone_from('https://github.com/ltdrdata/ComfyUI-Manager', './ComfyUI/custom_nodes/comfyui-manager')"
|
.\python_embeded\python.exe -c "import git; git.Repo.clone_from('https://github.com/ltdrdata/ComfyUI-Manager', './ComfyUI/custom_nodes/comfyui-manager')"
|
||||||
|
.\python_embeded\python.exe -m pip install -r ./ComfyUI/custom_nodes/comfyui-manager/requirements.txt
|
||||||
|
|||||||
Reference in New Issue
Block a user