Compare commits
33 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0a67145d80 | ||
|
|
2e55bc470c | ||
|
|
cf0d038978 | ||
|
|
92e7db1082 | ||
|
|
c45c47f935 | ||
|
|
341e27f9a3 | ||
|
|
ab167175c9 | ||
|
|
3c2933338f | ||
|
|
829784fa50 | ||
|
|
3c45f8dc91 | ||
|
|
f8ebf7c6ad | ||
|
|
510c364607 | ||
|
|
a3d6fcccb7 | ||
|
|
42c8082edd | ||
|
|
1a7edf7f0e | ||
|
|
4760deaf9c | ||
|
|
0f7b9d02a0 | ||
|
|
adc86c7945 | ||
|
|
12969eda07 | ||
|
|
e07952455f | ||
|
|
4494230854 | ||
|
|
e8dd21c0c3 | ||
|
|
36ef1b2fd6 | ||
|
|
c3d2bd8ed1 | ||
|
|
da2b4be539 | ||
|
|
b5e11f85d5 | ||
|
|
9e1b2f8912 | ||
|
|
1e5f4b0267 | ||
|
|
4fedd03074 | ||
|
|
f6feaeea85 | ||
|
|
c8743c0ab7 | ||
|
|
3d80ed95ca | ||
|
|
0a28bfa9c2 |
@@ -3231,6 +3231,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "ComfyUI diffusers wrapper nodes for [a/HunyuanVideo](https://github.com/Tencent/HunyuanVideo)"
|
"description": "ComfyUI diffusers wrapper nodes for [a/HunyuanVideo](https://github.com/Tencent/HunyuanVideo)"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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": "hhhzzyang",
|
"author": "hhhzzyang",
|
||||||
"title": "Comfyui-Lama",
|
"title": "Comfyui-Lama",
|
||||||
@@ -4057,6 +4067,17 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Image metrics nodes for ComfyUI"
|
"description": "Image metrics nodes for ComfyUI"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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": "Umikaze-job",
|
"author": "Umikaze-job",
|
||||||
"title": "select_folder_path_easy",
|
"title": "select_folder_path_easy",
|
||||||
@@ -4488,6 +4509,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Unofficial implementation of [a/UltraEdit](https://github.com/HaozheZhao/UltraEdit) (Diffusers) for ComfyUI"
|
"description": "Unofficial implementation of [a/UltraEdit](https://github.com/HaozheZhao/UltraEdit) (Diffusers) for ComfyUI"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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": "kenjiqq",
|
"author": "kenjiqq",
|
||||||
"title": "qq-nodes-comfyui",
|
"title": "qq-nodes-comfyui",
|
||||||
@@ -6476,6 +6507,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Add nodes that generates danbooru tags by [a/Dart(Danbooru Tags Transformer)](https://huggingface.co/p1atdev/dart-v1-sft)."
|
"description": "Add nodes that generates danbooru tags by [a/Dart(Danbooru Tags Transformer)](https://huggingface.co/p1atdev/dart-v1-sft)."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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": "JaredTherriault",
|
"author": "JaredTherriault",
|
||||||
"title": "ComfyUI-JNodes",
|
"title": "ComfyUI-JNodes",
|
||||||
@@ -7532,6 +7573,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A custom node for ComfyUI that integrates DeepSeek's powerful chat and instruction API, enabling seamless AI interactions within your ComfyUI workflows."
|
"description": "A custom node for ComfyUI that integrates DeepSeek's powerful chat and instruction API, enabling seamless AI interactions within your ComfyUI workflows."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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": "redhottensors",
|
"author": "redhottensors",
|
||||||
"title": "ComfyUI-Prediction",
|
"title": "ComfyUI-Prediction",
|
||||||
@@ -11012,6 +11063,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Custom node for using Prompt S/R in XY Plot\nAlso includes nodes for listing generic parameters like seed and cfg\nEasy to manipulate as elements are separated by line breaks\nDesigned for use with the XY Plot custom node qq-nodes-comfyui, but may work with other custom nodes as well"
|
"description": "Custom node for using Prompt S/R in XY Plot\nAlso includes nodes for listing generic parameters like seed and cfg\nEasy to manipulate as elements are separated by line breaks\nDesigned for use with the XY Plot custom node qq-nodes-comfyui, but may work with other custom nodes as well"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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": "nat-chan",
|
"author": "nat-chan",
|
||||||
"title": "ComfyUI-Transceiver📡",
|
"title": "ComfyUI-Transceiver📡",
|
||||||
@@ -12300,6 +12361,16 @@
|
|||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A custom node for ComfyUI that calculates CLIP and LPIPS similarity scores between two images."
|
"description": "A custom node for ComfyUI that calculates CLIP and LPIPS similarity scores between two images."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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": "zohac",
|
"author": "zohac",
|
||||||
"title": "ComfyUI_ZC_DrawShape",
|
"title": "ComfyUI_ZC_DrawShape",
|
||||||
@@ -14603,10 +14674,10 @@
|
|||||||
{
|
{
|
||||||
"author": "RyanOnTheInside",
|
"author": "RyanOnTheInside",
|
||||||
"title": "Nodes for use with real-time applications of ComfyUI",
|
"title": "Nodes for use with real-time applications of ComfyUI",
|
||||||
"id": "realtimenodes",
|
"id": "comfyui_realtimenodes",
|
||||||
"reference": "https://github.com/ryanontheinside/ComfyUI_RealTimeNodes",
|
"reference": "https://github.com/ryanontheinside/ComfyUI_RealtimeNodes",
|
||||||
"files": [
|
"files": [
|
||||||
"https://github.com/ryanontheinside/ComfyUI_RealTimeNodes"
|
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "These nodes are for real-time applications of ComfyUI."
|
"description": "These nodes are for real-time applications of ComfyUI."
|
||||||
@@ -14857,7 +14928,7 @@
|
|||||||
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm"
|
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "Auto prompt by LLM and LLM-Vision. (Trigger more details hiding in model)"
|
"description": "NODES: Auto-LLM-Text-Vision, Auto-LLM-Text, Auto-LLM-Vision"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "xlinx",
|
"author": "xlinx",
|
||||||
@@ -15428,7 +15499,7 @@
|
|||||||
"https://github.com/SeanScripts/ComfyUI-PixtralLlamaMolmoVision"
|
"https://github.com/SeanScripts/ComfyUI-PixtralLlamaMolmoVision"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "For loading and running Pixtral, Llama 3.2 Vision, and Molmo models. Put models in the models/LLM folder.\n[w/Renamed from ComfyUI-PixtralLlamaVision. Please reinstall.]"
|
"description": "For loading and running Pixtral, Llama 3.2 Vision, and Molmo models. Put models in the models/LLM folder."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "ExterminanzHS",
|
"author": "ExterminanzHS",
|
||||||
@@ -19926,7 +19997,7 @@
|
|||||||
"https://github.com/DJ-Tribefull/Comfyui_FOCUS_nodes"
|
"https://github.com/DJ-Tribefull/Comfyui_FOCUS_nodes"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "This is a small collection of nodes designed for efficiency and the reduction of screen clutter. I work primarily with a two-stage SDXL workflow, so some of the nodes are tailored to that, but many of the most useful nodes can be used in any context."
|
"description": "A collection of nodes designed for efficiency and the reduction of screen-clutter. Includes a Global Seed controller with boolean toggles, SDXL All-in-One conditioner, a custom SDXL control module, Wildcard processor, Style Injector, and more. [w/WARNING: Updating this node-pack wil overwrite any changes you've made to the included wildcards and styles. Please backup your folders before updating.]"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "KLL535",
|
"author": "KLL535",
|
||||||
@@ -20144,13 +20215,24 @@
|
|||||||
{
|
{
|
||||||
"author": "ProGamerGov",
|
"author": "ProGamerGov",
|
||||||
"title": "PyTorch 360° Image Conversion Toolkit for ComfyUI",
|
"title": "PyTorch 360° Image Conversion Toolkit for ComfyUI",
|
||||||
"id": "pytorch360convert",
|
"id": "comfyui-pytorch360convert",
|
||||||
"reference": "https://github.com/ProGamerGov/ComfyUI_pytorch360convert",
|
"reference": "https://github.com/ProGamerGov/ComfyUI_pytorch360convert",
|
||||||
"files": [
|
"files": [
|
||||||
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert"
|
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A collection of custom nodes for working and converting between 360 degree equirectangular images, cubemap, and perspective images. Panoramic 360 images are also sometimes known as 'VR photography', 'image sphere', and 360 pano."
|
"description": "A collection of custom nodes for working with and converting between 360 degree equirectangular images, cubemap, and perspective images. 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": "ProGamerGov",
|
||||||
|
"title": "Preview 360 Panorama for ComfyUI",
|
||||||
|
"id": "comfyui-preview360panorama",
|
||||||
|
"reference": "https://github.com/ProGamerGov/ComfyUI_preview360panorama",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ProGamerGov/ComfyUI_preview360panorama"
|
||||||
|
],
|
||||||
|
"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."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "burnsbert",
|
"author": "burnsbert",
|
||||||
@@ -20211,7 +20293,7 @@
|
|||||||
"https://github.com/willmiao/ComfyUI-Lora-Manager"
|
"https://github.com/willmiao/ComfyUI-Lora-Manager"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "LoRA Manager for ComfyUI - An extension for managing LoRA models with previews and metadata integration."
|
"description": "LoRA Manager for ComfyUI - Access it at http://localhost:8188/loras for managing LoRA models with previews and metadata integration."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "tigeryy2",
|
"author": "tigeryy2",
|
||||||
@@ -20273,6 +20355,16 @@
|
|||||||
"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",
|
||||||
@@ -20293,6 +20385,50 @@
|
|||||||
"install_type": "git-clone",
|
"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."
|
"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": "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": "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": "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."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"title": "A2V Multi Image Composite",
|
||||||
|
"author": "AiartvnTeam",
|
||||||
|
"id": "Aiartvn",
|
||||||
|
"description": "Node for compositing multiple images with interactive preview and layer management",
|
||||||
|
"repository": "https://github.com/aiartvn/A2V_Multi_Image_Composite",
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/aiartvn/A2V_Multi_Image_Composite"
|
||||||
|
],
|
||||||
|
"tags": ["image", "composite", "layer", "blend", "transform"]
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -20770,6 +20906,17 @@
|
|||||||
"install_type": "copy",
|
"install_type": "copy",
|
||||||
"description": "NODES: OverrideLoadedDiffusionDevice.\nI happen to have two graphics cards, and I want to load models into another graphics card in Comfyui, so I designed this small node."
|
"description": "NODES: OverrideLoadedDiffusionDevice.\nI happen to have two graphics cards, and I want to load models into another graphics card in Comfyui, so I designed this small node."
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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"
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -493,6 +493,7 @@
|
|||||||
"https://github.com/852wa/ComfyUI-ColorshiftColor": [
|
"https://github.com/852wa/ComfyUI-ColorshiftColor": [
|
||||||
[
|
[
|
||||||
"ColorshiftColor",
|
"ColorshiftColor",
|
||||||
|
"CsCFill",
|
||||||
"CsCPaletteEditor"
|
"CsCPaletteEditor"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -1427,6 +1428,18 @@
|
|||||||
"title_aux": "Jovi_GLSL"
|
"title_aux": "Jovi_GLSL"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Amorano/Jovi_MIDI": [
|
||||||
|
[
|
||||||
|
"MIDI FILTER (JOV_MIDI)",
|
||||||
|
"MIDI FILTER EZ (JOV_MIDI)",
|
||||||
|
"MIDI LOADER (JOV_MIDI)",
|
||||||
|
"MIDI MESSAGE (JOV_MIDI)",
|
||||||
|
"MIDI READER (JOV_MIDI)"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Jovi_MIDI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Amorano/Jovi_Measure": [
|
"https://github.com/Amorano/Jovi_Measure": [
|
||||||
[
|
[
|
||||||
"BLUR EFFECT (JOV_MEASURE)",
|
"BLUR EFFECT (JOV_MEASURE)",
|
||||||
@@ -2164,7 +2177,11 @@
|
|||||||
"BriaEraser",
|
"BriaEraser",
|
||||||
"BriaGenFill",
|
"BriaGenFill",
|
||||||
"BriaTailoredGen",
|
"BriaTailoredGen",
|
||||||
|
"ImageExpansionNode",
|
||||||
"ReimagineNode",
|
"ReimagineNode",
|
||||||
|
"RemoveForegroundNode",
|
||||||
|
"ReplaceBgNode",
|
||||||
|
"RmbgNode",
|
||||||
"ShotByImageNode",
|
"ShotByImageNode",
|
||||||
"ShotByTextNode",
|
"ShotByTextNode",
|
||||||
"TailoredModelInfoNode",
|
"TailoredModelInfoNode",
|
||||||
@@ -2375,7 +2392,9 @@
|
|||||||
"ClownsharKSamplerAutomation",
|
"ClownsharKSamplerAutomation",
|
||||||
"ClownsharKSamplerAutomation_Beta",
|
"ClownsharKSamplerAutomation_Beta",
|
||||||
"ClownsharKSamplerGuide",
|
"ClownsharKSamplerGuide",
|
||||||
|
"ClownsharKSamplerGuide_Beta",
|
||||||
"ClownsharKSamplerGuides",
|
"ClownsharKSamplerGuides",
|
||||||
|
"ClownsharKSamplerGuides_Beta",
|
||||||
"ClownsharKSamplerOptions",
|
"ClownsharKSamplerOptions",
|
||||||
"ClownsharKSamplerOptions_SDE_Noise",
|
"ClownsharKSamplerOptions_SDE_Noise",
|
||||||
"ClownsharkSamplerOptions_FrameWeights",
|
"ClownsharkSamplerOptions_FrameWeights",
|
||||||
@@ -2812,11 +2831,17 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/DesertPixelAi/ComfyUI-Desert-Pixel-Nodes": [
|
"https://github.com/DesertPixelAi/ComfyUI-Desert-Pixel-Nodes": [
|
||||||
[
|
[
|
||||||
"DP 10 String Switch",
|
"DP 10 Images Switch Or Batch",
|
||||||
|
"DP 10 String Switch Or Connect",
|
||||||
"DP 2 String Switch",
|
"DP 2 String Switch",
|
||||||
|
"DP 3 Images Switch Or Batch",
|
||||||
|
"DP 3 String Switch Or Connect",
|
||||||
"DP 5 Find And Replace",
|
"DP 5 Find And Replace",
|
||||||
"DP 5 String Switch",
|
"DP 5 Images Switch Or Batch",
|
||||||
|
"DP 5 String Switch Or Connect",
|
||||||
|
"DP Add Background To Png",
|
||||||
"DP Add Weight To String Sdxl",
|
"DP Add Weight To String Sdxl",
|
||||||
|
"DP Advanced Sampler",
|
||||||
"DP Advanced Weight String Sdxl",
|
"DP Advanced Weight String Sdxl",
|
||||||
"DP Animation Calculator 10 Inputs",
|
"DP Animation Calculator 10 Inputs",
|
||||||
"DP Animation Calculator 5 Inputs",
|
"DP Animation Calculator 5 Inputs",
|
||||||
@@ -2826,8 +2851,7 @@
|
|||||||
"DP Broken Token",
|
"DP Broken Token",
|
||||||
"DP Clean Prompt",
|
"DP Clean Prompt",
|
||||||
"DP Clean Prompt Travel",
|
"DP Clean Prompt Travel",
|
||||||
"DP Combo Controller",
|
"DP Condition Switch",
|
||||||
"DP Condition Mixer",
|
|
||||||
"DP ControlNet Apply Advanced",
|
"DP ControlNet Apply Advanced",
|
||||||
"DP Crazy Prompt Mixer",
|
"DP Crazy Prompt Mixer",
|
||||||
"DP Create Json File",
|
"DP Create Json File",
|
||||||
@@ -2839,6 +2863,7 @@
|
|||||||
"DP Fast Slow Motion",
|
"DP Fast Slow Motion",
|
||||||
"DP Five Lora",
|
"DP Five Lora",
|
||||||
"DP Five Lora Random",
|
"DP Five Lora Random",
|
||||||
|
"DP Float Stepper",
|
||||||
"DP Image And String Pairs Switch",
|
"DP Image And String Pairs Switch",
|
||||||
"DP Image Color Analyzer",
|
"DP Image Color Analyzer",
|
||||||
"DP Image Color Analyzer Small",
|
"DP Image Color Analyzer Small",
|
||||||
@@ -2849,12 +2874,10 @@
|
|||||||
"DP Image Empty Latent Switch SDXL",
|
"DP Image Empty Latent Switch SDXL",
|
||||||
"DP Image Slide Show",
|
"DP Image Slide Show",
|
||||||
"DP Image Strip",
|
"DP Image Strip",
|
||||||
"DP Image Switch 10",
|
|
||||||
"DP Image Switch 3",
|
|
||||||
"DP Image Switch 5",
|
|
||||||
"DP Int 0-1000",
|
"DP Int 0-1000",
|
||||||
"DP Int 0-1000 4 Step",
|
"DP Int 0-1000 4 Step",
|
||||||
"DP Int 0-1000 8 Step",
|
"DP Int 0-1000 8 Step",
|
||||||
|
"DP Latent Split",
|
||||||
"DP Line Cycler",
|
"DP Line Cycler",
|
||||||
"DP Load Checkpoint With Info",
|
"DP Load Checkpoint With Info",
|
||||||
"DP Load Controlnet Model With Name",
|
"DP Load Controlnet Model With Name",
|
||||||
@@ -2864,13 +2887,10 @@
|
|||||||
"DP Load Image Minimal",
|
"DP Load Image Minimal",
|
||||||
"DP Load UNET With Info",
|
"DP Load UNET With Info",
|
||||||
"DP Logo Animator",
|
"DP Logo Animator",
|
||||||
"DP Logo Animator Advanced",
|
|
||||||
"DP Lora Random Strength Controller",
|
"DP Lora Random Strength Controller",
|
||||||
"DP Lora Strength Controller",
|
"DP Lora Strength Controller",
|
||||||
"DP Lora Strength Stepper",
|
|
||||||
"DP Mask Settings",
|
"DP Mask Settings",
|
||||||
"DP Prompt Inverter",
|
"DP Prompt Inverter",
|
||||||
"DP Prompt Manager",
|
|
||||||
"DP Prompt Manager Small",
|
"DP Prompt Manager Small",
|
||||||
"DP Prompt Mode Controller",
|
"DP Prompt Mode Controller",
|
||||||
"DP Prompt Styler",
|
"DP Prompt Styler",
|
||||||
@@ -2888,9 +2908,7 @@
|
|||||||
"DP Save Preview Image",
|
"DP Save Preview Image",
|
||||||
"DP Set New Model Folder Link",
|
"DP Set New Model Folder Link",
|
||||||
"DP String Text",
|
"DP String Text",
|
||||||
"DP String Text With Weight",
|
"DP String Text With Sdxl Weight",
|
||||||
"DP String With Switch",
|
|
||||||
"DP Strings Connector",
|
|
||||||
"DP Strip Edge Masks",
|
"DP Strip Edge Masks",
|
||||||
"DP Switch Controller",
|
"DP Switch Controller",
|
||||||
"DP Text Preview",
|
"DP Text Preview",
|
||||||
@@ -2901,10 +2919,8 @@
|
|||||||
"DP Video Looper",
|
"DP Video Looper",
|
||||||
"DP Video Transition",
|
"DP Video Transition",
|
||||||
"DP_Crazy_Prompt_Mixer",
|
"DP_Crazy_Prompt_Mixer",
|
||||||
"DP_Logo_Animator_Advanced",
|
"DP_Float_Stepper",
|
||||||
"DP_Lora_Strength_Stepper",
|
"DP_Prompt_Inverter"
|
||||||
"DP_Prompt_Inverter",
|
|
||||||
"DP_Strings_Connector"
|
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-Desert-Pixel-Nodes"
|
"title_aux": "ComfyUI-Desert-Pixel-Nodes"
|
||||||
@@ -2986,6 +3002,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
||||||
[
|
[
|
||||||
|
"CharCountTextBox",
|
||||||
"FluxPro11_TOGETHER",
|
"FluxPro11_TOGETHER",
|
||||||
"FluxPro_TOGETHER",
|
"FluxPro_TOGETHER",
|
||||||
"GenerateImage_VENICE",
|
"GenerateImage_VENICE",
|
||||||
@@ -3854,6 +3871,19 @@
|
|||||||
"title_aux": "ComfyUI-SD3-Powerlab"
|
"title_aux": "ComfyUI-SD3-Powerlab"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/GHOSTLXH/ComfyUI-Counternodes": [
|
||||||
|
[
|
||||||
|
"AlternatingOutput",
|
||||||
|
"AlternatingOutputB",
|
||||||
|
"ImageCounter",
|
||||||
|
"IntervalCounter",
|
||||||
|
"IntervalCounterB",
|
||||||
|
"LoadPromptFromTXT"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Counternodes"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
|
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
|
||||||
[
|
[
|
||||||
"ConcatenateString",
|
"ConcatenateString",
|
||||||
@@ -4694,8 +4724,11 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/JTriggerFish/ComfyLatentTools": [
|
"https://github.com/JTriggerFish/ComfyLatentTools": [
|
||||||
[
|
[
|
||||||
|
"DownsampledAttentionGuidance",
|
||||||
|
"DownsampledLatentGuidance",
|
||||||
"LatentNormalizedLanczosResize",
|
"LatentNormalizedLanczosResize",
|
||||||
"RescaledPAG"
|
"RescaledPAG",
|
||||||
|
"RescaledSEG"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Comfy Latent Tools"
|
"title_aux": "Comfy Latent Tools"
|
||||||
@@ -4997,6 +5030,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 Line From Text File",
|
"Simple Load Line From Text File",
|
||||||
"Simple Lora Loader"
|
"Simple Lora Loader"
|
||||||
],
|
],
|
||||||
@@ -5024,6 +5058,14 @@
|
|||||||
"title_aux": "AudioDriven-Latent-Space-Tools-for-ComfyUI"
|
"title_aux": "AudioDriven-Latent-Space-Tools-for-ComfyUI"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Kayarte/GeoNodes/raw/refs/heads/main/GISDetectionNode.py": [
|
||||||
|
[
|
||||||
|
"GISDetectionNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "GeoNodes"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Kesin11/ComfyUI-list-filter": [
|
"https://github.com/Kesin11/ComfyUI-list-filter": [
|
||||||
[
|
[
|
||||||
"list_filter_FilterImageListByIndexList",
|
"list_filter_FilterImageListByIndexList",
|
||||||
@@ -5166,6 +5208,7 @@
|
|||||||
"ADE_AdjustWeightIndivAttnAdd",
|
"ADE_AdjustWeightIndivAttnAdd",
|
||||||
"ADE_AdjustWeightIndivAttnMult",
|
"ADE_AdjustWeightIndivAttnMult",
|
||||||
"ADE_AdjustWeightIndivMult",
|
"ADE_AdjustWeightIndivMult",
|
||||||
|
"ADE_AncestralOptions",
|
||||||
"ADE_AnimateDiffCombine",
|
"ADE_AnimateDiffCombine",
|
||||||
"ADE_AnimateDiffKeyframe",
|
"ADE_AnimateDiffKeyframe",
|
||||||
"ADE_AnimateDiffLoRALoader",
|
"ADE_AnimateDiffLoRALoader",
|
||||||
@@ -5960,7 +6003,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/Mattabyte/ComfyUI-SecureApiCall": [
|
"https://github.com/Mattabyte/ComfyUI-SecureApiCall": [
|
||||||
[
|
[
|
||||||
"SecureAPI-SecureAPI"
|
"SecureAPI-SecureAPI",
|
||||||
|
"SecureAPI-SecureAPI-AWS"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI Secure API Call"
|
"title_aux": "ComfyUI Secure API Call"
|
||||||
@@ -6292,6 +6336,7 @@
|
|||||||
"DJZDatamoshV2",
|
"DJZDatamoshV2",
|
||||||
"DatasetWordcloud",
|
"DatasetWordcloud",
|
||||||
"DeadPixelEffect",
|
"DeadPixelEffect",
|
||||||
|
"DepthBasedPixelization",
|
||||||
"DinskyPlus",
|
"DinskyPlus",
|
||||||
"DinskyPlusV2",
|
"DinskyPlusV2",
|
||||||
"DjzDatabendingV1",
|
"DjzDatabendingV1",
|
||||||
@@ -6340,11 +6385,13 @@
|
|||||||
"RetroVideoText",
|
"RetroVideoText",
|
||||||
"ScreensaverGenerator",
|
"ScreensaverGenerator",
|
||||||
"ScreensaverGeneratorV2",
|
"ScreensaverGeneratorV2",
|
||||||
|
"ScreensaverGeneratorV3",
|
||||||
"SequentialNumberGenerator",
|
"SequentialNumberGenerator",
|
||||||
"StringChaos",
|
"StringChaos",
|
||||||
"StringWeights",
|
"StringWeights",
|
||||||
"Technicolor3Strip_v1",
|
"Technicolor3Strip_v1",
|
||||||
"Technicolor3Strip_v2",
|
"Technicolor3Strip_v2",
|
||||||
|
"ThinkSeeker",
|
||||||
"ThreeToneStyler",
|
"ThreeToneStyler",
|
||||||
"TrianglesPlus",
|
"TrianglesPlus",
|
||||||
"TrianglesPlusV2",
|
"TrianglesPlusV2",
|
||||||
@@ -6365,6 +6412,7 @@
|
|||||||
"VideoMazeV1",
|
"VideoMazeV1",
|
||||||
"VideoMazeV2",
|
"VideoMazeV2",
|
||||||
"VideoNoiseFactory",
|
"VideoNoiseFactory",
|
||||||
|
"VideoPyramidV1",
|
||||||
"VideoRingPainter",
|
"VideoRingPainter",
|
||||||
"VideoTemperatureV1",
|
"VideoTemperatureV1",
|
||||||
"VideoTimecode",
|
"VideoTimecode",
|
||||||
@@ -6399,10 +6447,13 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/MzMaXaM/ComfyUi-MzMaXaM": [
|
"https://github.com/MzMaXaM/ComfyUi-MzMaXaM": [
|
||||||
[
|
[
|
||||||
|
"ImageToText",
|
||||||
"KSamplerWithVAE",
|
"KSamplerWithVAE",
|
||||||
"SelectLatentSize1MP",
|
"SelectLatentSize1MP",
|
||||||
"SelectLatentSize2MP",
|
"SelectLatentSize2MP",
|
||||||
"TextEncode3in1",
|
"TextEncode3in1",
|
||||||
|
"TextToText",
|
||||||
|
"UpscaleImageBy1_5x",
|
||||||
"UpscaleLatentBy1_5x"
|
"UpscaleLatentBy1_5x"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -7026,6 +7077,14 @@
|
|||||||
"title_aux": "ComfyUI-StringsAndThings"
|
"title_aux": "ComfyUI-StringsAndThings"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ProGamerGov/ComfyUI_preview360panorama": [
|
||||||
|
[
|
||||||
|
"PanoramaViewerNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Preview 360 Panorama for ComfyUI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert": [
|
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert": [
|
||||||
[
|
[
|
||||||
"Crop Image with Coords",
|
"Crop Image with Coords",
|
||||||
@@ -7316,6 +7375,7 @@
|
|||||||
"AspectRatioAdvanced",
|
"AspectRatioAdvanced",
|
||||||
"DisplayEverything",
|
"DisplayEverything",
|
||||||
"ImageComparer",
|
"ImageComparer",
|
||||||
|
"LensFlare",
|
||||||
"MultiFloat",
|
"MultiFloat",
|
||||||
"MultiTextNode",
|
"MultiTextNode",
|
||||||
"SKB_AnySwitch",
|
"SKB_AnySwitch",
|
||||||
@@ -7906,7 +7966,8 @@
|
|||||||
"FreeMemoryCLIP",
|
"FreeMemoryCLIP",
|
||||||
"FreeMemoryImage",
|
"FreeMemoryImage",
|
||||||
"FreeMemoryLatent",
|
"FreeMemoryLatent",
|
||||||
"FreeMemoryModel"
|
"FreeMemoryModel",
|
||||||
|
"FreeMemoryString"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-FreeMemory"
|
"title_aux": "ComfyUI-FreeMemory"
|
||||||
@@ -7948,6 +8009,15 @@
|
|||||||
"title_aux": "ComfyUI-ImageMotionGuider"
|
"title_aux": "ComfyUI-ImageMotionGuider"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ShmuelRonen/ComfyUI-Janus_pro_vision": [
|
||||||
|
[
|
||||||
|
"UnifiedVisionAnalyzer",
|
||||||
|
"VisionModelLoader"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Janus Pro Vision"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper": [
|
"https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper": [
|
||||||
[
|
[
|
||||||
"D_LatentSyncNode",
|
"D_LatentSyncNode",
|
||||||
@@ -8405,9 +8475,11 @@
|
|||||||
"SD35StartSettings",
|
"SD35StartSettings",
|
||||||
"SDXLStartSettings",
|
"SDXLStartSettings",
|
||||||
"SDstarsampler",
|
"SDstarsampler",
|
||||||
|
"Star Face Loader",
|
||||||
"StarFiveWildcards",
|
"StarFiveWildcards",
|
||||||
"StarImageSwitch",
|
"StarImageSwitch",
|
||||||
"StarTextFilter",
|
"StarTextFilter",
|
||||||
|
"StarTextInput",
|
||||||
"Starupscale"
|
"Starupscale"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -8949,6 +9021,7 @@
|
|||||||
"tri3d-skin-feathered-padded-mask",
|
"tri3d-skin-feathered-padded-mask",
|
||||||
"tri3d-swap-pixels",
|
"tri3d-swap-pixels",
|
||||||
"tri3d_H_Stack_Images",
|
"tri3d_H_Stack_Images",
|
||||||
|
"tri3d_Image_extend",
|
||||||
"tri3d_NSFWFilter",
|
"tri3d_NSFWFilter",
|
||||||
"tri3d_SaveImage_absolute",
|
"tri3d_SaveImage_absolute",
|
||||||
"tri3d_SaveText_absolute",
|
"tri3d_SaveText_absolute",
|
||||||
@@ -9462,6 +9535,7 @@
|
|||||||
"VrchAudioGenresNode",
|
"VrchAudioGenresNode",
|
||||||
"VrchAudioRecorderNode",
|
"VrchAudioRecorderNode",
|
||||||
"VrchAudioSaverNode",
|
"VrchAudioSaverNode",
|
||||||
|
"VrchAudioWebViewerNode",
|
||||||
"VrchBooleanKeyControlNode",
|
"VrchBooleanKeyControlNode",
|
||||||
"VrchChannelOSCControlNode",
|
"VrchChannelOSCControlNode",
|
||||||
"VrchChannelX4OSCControlNode",
|
"VrchChannelX4OSCControlNode",
|
||||||
@@ -10177,6 +10251,16 @@
|
|||||||
"title_aux": "ComfyUI-BRIA_AI-RMBG"
|
"title_aux": "ComfyUI-BRIA_AI-RMBG"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DeepSeek-JanusPro": [
|
||||||
|
[
|
||||||
|
"Janus_ImageGeneration",
|
||||||
|
"Janus_ModelLoader",
|
||||||
|
"Janus_MultimodalUnderstanding"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DeepSeek-JanusPro"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM": [
|
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM": [
|
||||||
[
|
[
|
||||||
"DepthFM_Literative_Zho",
|
"DepthFM_Literative_Zho",
|
||||||
@@ -10588,6 +10672,18 @@
|
|||||||
"title_aux": "ComfyUI-styles-all"
|
"title_aux": "ComfyUI-styles-all"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/agilly1989/ComfyUI_agilly1989_motorway": [
|
||||||
|
[
|
||||||
|
"MotorwayFloat",
|
||||||
|
"MotorwayInt",
|
||||||
|
"MotorwaySeed",
|
||||||
|
"MotorwayStr",
|
||||||
|
"MotorwayStrMulti"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_agilly1989_motorway"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ahernandezmiro/ComfyUI-GCP_Storage_tools": [
|
"https://github.com/ahernandezmiro/ComfyUI-GCP_Storage_tools": [
|
||||||
[
|
[
|
||||||
"GCPReadImageNode",
|
"GCPReadImageNode",
|
||||||
@@ -10663,8 +10759,17 @@
|
|||||||
"title_aux": "Comfy UI FatLabels"
|
"title_aux": "Comfy UI FatLabels"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/aiartvn/A2V_Multi_Image_Composite": [
|
||||||
|
[
|
||||||
|
"A2V_Multi_Image_Composite"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "A2V Multi Image Composite"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
||||||
[
|
[
|
||||||
|
"ImageQueueProcessor",
|
||||||
"TextBatch",
|
"TextBatch",
|
||||||
"TextQueueProcessor",
|
"TextQueueProcessor",
|
||||||
"TextSplitCounter"
|
"TextSplitCounter"
|
||||||
@@ -11301,8 +11406,10 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/asagi4/comfyui-utility-nodes": [
|
"https://github.com/asagi4/comfyui-utility-nodes": [
|
||||||
[
|
[
|
||||||
|
"MUConditioningCutoff",
|
||||||
"MUForceCacheClear",
|
"MUForceCacheClear",
|
||||||
"MUJinjaRender",
|
"MUJinjaRender",
|
||||||
|
"MURemoveControlNet",
|
||||||
"MUReplaceModelWeights",
|
"MUReplaceModelWeights",
|
||||||
"MUSimpleWildcard"
|
"MUSimpleWildcard"
|
||||||
],
|
],
|
||||||
@@ -11314,6 +11421,7 @@
|
|||||||
[
|
[
|
||||||
"TryOffFluxFillModelNode",
|
"TryOffFluxFillModelNode",
|
||||||
"TryOffModelNode",
|
"TryOffModelNode",
|
||||||
|
"TryOffQuantizerNode",
|
||||||
"TryOffRunNode"
|
"TryOffRunNode"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -11631,6 +11739,7 @@
|
|||||||
"Range Float",
|
"Range Float",
|
||||||
"Range Integer",
|
"Range Integer",
|
||||||
"Ratio Advanced",
|
"Ratio Advanced",
|
||||||
|
"RemoveTextBetween",
|
||||||
"Resize Image for SDXL",
|
"Resize Image for SDXL",
|
||||||
"SD3TextConditioningWithOptionsOnePrompt",
|
"SD3TextConditioningWithOptionsOnePrompt",
|
||||||
"SRFloatPromptInput",
|
"SRFloatPromptInput",
|
||||||
@@ -11818,18 +11927,22 @@
|
|||||||
"SamplerSonarEuler",
|
"SamplerSonarEuler",
|
||||||
"SamplerSonarEulerA",
|
"SamplerSonarEulerA",
|
||||||
"SonarAdvanced1fNoise",
|
"SonarAdvanced1fNoise",
|
||||||
|
"SonarAdvancedDistroNoise",
|
||||||
"SonarAdvancedPowerLawNoise",
|
"SonarAdvancedPowerLawNoise",
|
||||||
"SonarAdvancedPyramidNoise",
|
"SonarAdvancedPyramidNoise",
|
||||||
"SonarBlendedNoise",
|
"SonarBlendedNoise",
|
||||||
"SonarChannelNoise",
|
"SonarChannelNoise",
|
||||||
"SonarCompositeNoise",
|
"SonarCompositeNoise",
|
||||||
"SonarCustomNoise",
|
"SonarCustomNoise",
|
||||||
|
"SonarCustomNoiseAdv",
|
||||||
"SonarGuidanceConfig",
|
"SonarGuidanceConfig",
|
||||||
"SonarGuidedNoise",
|
"SonarGuidedNoise",
|
||||||
"SonarModulatedNoise",
|
"SonarModulatedNoise",
|
||||||
"SonarRandomNoise",
|
"SonarRandomNoise",
|
||||||
"SonarRepeatedNoise",
|
"SonarRepeatedNoise",
|
||||||
"SonarScheduledNoise"
|
"SonarResizedNoise",
|
||||||
|
"SonarScheduledNoise",
|
||||||
|
"SonarWaveletFilteredNoise"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-sonar"
|
"title_aux": "ComfyUI-sonar"
|
||||||
@@ -12150,9 +12263,13 @@
|
|||||||
"Input: Integer (lab)",
|
"Input: Integer (lab)",
|
||||||
"Input: Multiline (lab)",
|
"Input: Multiline (lab)",
|
||||||
"Input: String (lab)",
|
"Input: String (lab)",
|
||||||
|
"List: Checkpoints (lab)",
|
||||||
"List: Limit (lab)",
|
"List: Limit (lab)",
|
||||||
|
"List: LoRAs (lab)",
|
||||||
"List: Merge (lab)",
|
"List: Merge (lab)",
|
||||||
"List: Random Seeds (lab)",
|
"List: Random Seeds (lab)",
|
||||||
|
"List: Samplers (lab)",
|
||||||
|
"List: Schedulers (lab)",
|
||||||
"List: from Elements (lab)",
|
"List: from Elements (lab)",
|
||||||
"List: from File (backend) (lab)",
|
"List: from File (backend) (lab)",
|
||||||
"List: from Multiline (lab)",
|
"List: from Multiline (lab)",
|
||||||
@@ -12876,6 +12993,7 @@
|
|||||||
"chaosaiart_controlnet_weidgth",
|
"chaosaiart_controlnet_weidgth",
|
||||||
"chaosaiart_convert",
|
"chaosaiart_convert",
|
||||||
"chaosaiart_convert_Prompt",
|
"chaosaiart_convert_Prompt",
|
||||||
|
"chaosaiart_deepseek_fix",
|
||||||
"chaosaiart_forPreview",
|
"chaosaiart_forPreview",
|
||||||
"chaosaiart_image_loop",
|
"chaosaiart_image_loop",
|
||||||
"chaosaiart_img2gif",
|
"chaosaiart_img2gif",
|
||||||
@@ -12899,6 +13017,19 @@
|
|||||||
"title_aux": "Chaosaiart-Nodes"
|
"title_aux": "Chaosaiart-Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/checkbins/checkbin-comfy": [
|
||||||
|
[
|
||||||
|
"Checkbin Get Image Bin",
|
||||||
|
"Checkbin Get String Bin",
|
||||||
|
"Checkbin Save Image Bin",
|
||||||
|
"Checkbin Save String Bin",
|
||||||
|
"Checkbin Start Run",
|
||||||
|
"Checkbin Submit Bin"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "checkbin-comfy"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/chenbaiyujason/ComfyUI_StepFun": [
|
"https://github.com/chenbaiyujason/ComfyUI_StepFun": [
|
||||||
[
|
[
|
||||||
"CombineStrings",
|
"CombineStrings",
|
||||||
@@ -13816,6 +13947,7 @@
|
|||||||
"PolyexponentialScheduler",
|
"PolyexponentialScheduler",
|
||||||
"PorterDuffImageComposite",
|
"PorterDuffImageComposite",
|
||||||
"Preview3D",
|
"Preview3D",
|
||||||
|
"Preview3DAnimation",
|
||||||
"PreviewAudio",
|
"PreviewAudio",
|
||||||
"PreviewImage",
|
"PreviewImage",
|
||||||
"RandomNoise",
|
"RandomNoise",
|
||||||
@@ -15358,16 +15490,21 @@
|
|||||||
"RecoursePolar",
|
"RecoursePolar",
|
||||||
"RecourseStrings",
|
"RecourseStrings",
|
||||||
"SelInClip",
|
"SelInClip",
|
||||||
|
"SelInFloat",
|
||||||
"SelInGuider",
|
"SelInGuider",
|
||||||
|
"SelInInt",
|
||||||
"SelInLatent",
|
"SelInLatent",
|
||||||
"SelInModel",
|
"SelInModel",
|
||||||
"SelInPolar",
|
"SelInPolar",
|
||||||
|
"SelInSampler",
|
||||||
|
"SelInSigmas",
|
||||||
"SelInVae",
|
"SelInVae",
|
||||||
"SelOutCLIP",
|
"SelOutCLIP",
|
||||||
"SelOutModel",
|
"SelOutModel",
|
||||||
"SelOutPolar",
|
"SelOutPolar",
|
||||||
"Selector",
|
"Selector",
|
||||||
"Selector Advanced"
|
"Selector Advanced",
|
||||||
|
"Selector Hub"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"author": "\"\u02f6\ud835\udfa2\u292c\u2ad2\u2d56s\u143c\u02f6\"",
|
"author": "\"\u02f6\ud835\udfa2\u292c\u2ad2\u2d56s\u143c\u02f6\"",
|
||||||
@@ -15625,6 +15762,7 @@
|
|||||||
[
|
[
|
||||||
"FL_API_Base64_ImageLoader",
|
"FL_API_Base64_ImageLoader",
|
||||||
"FL_API_ImageSaver",
|
"FL_API_ImageSaver",
|
||||||
|
"FL_AnimeLineExtractor",
|
||||||
"FL_ApplyMask",
|
"FL_ApplyMask",
|
||||||
"FL_Ascii",
|
"FL_Ascii",
|
||||||
"FL_BatchAlign",
|
"FL_BatchAlign",
|
||||||
@@ -15641,6 +15779,7 @@
|
|||||||
"FL_GPT_Vision",
|
"FL_GPT_Vision",
|
||||||
"FL_Glitch",
|
"FL_Glitch",
|
||||||
"FL_GoogleDriveDownloader",
|
"FL_GoogleDriveDownloader",
|
||||||
|
"FL_GoogleDriveImageDownloader",
|
||||||
"FL_GradGenerator",
|
"FL_GradGenerator",
|
||||||
"FL_HFHubModelUploader",
|
"FL_HFHubModelUploader",
|
||||||
"FL_HF_Character",
|
"FL_HF_Character",
|
||||||
@@ -16259,6 +16398,14 @@
|
|||||||
"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"
|
||||||
@@ -16543,8 +16690,10 @@
|
|||||||
"Griptape Replace: Rulesets on Agent",
|
"Griptape Replace: Rulesets on Agent",
|
||||||
"Griptape Replace: Tools on Agent",
|
"Griptape Replace: Tools on Agent",
|
||||||
"Griptape Rerank Driver: Cohere",
|
"Griptape Rerank Driver: Cohere",
|
||||||
|
"Griptape Retrieve: Cloud Ruleset",
|
||||||
"Griptape Run: Agent",
|
"Griptape Run: Agent",
|
||||||
"Griptape Run: Audio Transcription",
|
"Griptape Run: Audio Transcription",
|
||||||
|
"Griptape Run: Cloud Assistant",
|
||||||
"Griptape Run: Image Description",
|
"Griptape Run: Image Description",
|
||||||
"Griptape Run: Parallel Image Description",
|
"Griptape Run: Parallel Image Description",
|
||||||
"Griptape Run: Prompt Task",
|
"Griptape Run: Prompt Task",
|
||||||
@@ -19211,6 +19360,7 @@
|
|||||||
"GetImageRangeFromBatch",
|
"GetImageRangeFromBatch",
|
||||||
"GetImageSizeAndCount",
|
"GetImageSizeAndCount",
|
||||||
"GetImagesFromBatchIndexed",
|
"GetImagesFromBatchIndexed",
|
||||||
|
"GetLatentRangeFromBatch",
|
||||||
"GetLatentsFromBatchIndexed",
|
"GetLatentsFromBatchIndexed",
|
||||||
"GetMaskSizeAndCount",
|
"GetMaskSizeAndCount",
|
||||||
"GradientToFloat",
|
"GradientToFloat",
|
||||||
@@ -19229,6 +19379,7 @@
|
|||||||
"ImageGridComposite2x2",
|
"ImageGridComposite2x2",
|
||||||
"ImageGridComposite3x3",
|
"ImageGridComposite3x3",
|
||||||
"ImageGridtoBatch",
|
"ImageGridtoBatch",
|
||||||
|
"ImageNoiseAugmentation",
|
||||||
"ImageNormalize_Neg1_To_1",
|
"ImageNormalize_Neg1_To_1",
|
||||||
"ImagePadForOutpaintMasked",
|
"ImagePadForOutpaintMasked",
|
||||||
"ImagePadForOutpaintTargetSize",
|
"ImagePadForOutpaintTargetSize",
|
||||||
@@ -19244,6 +19395,7 @@
|
|||||||
"Intrinsic_lora_sampling",
|
"Intrinsic_lora_sampling",
|
||||||
"JoinStringMulti",
|
"JoinStringMulti",
|
||||||
"JoinStrings",
|
"JoinStrings",
|
||||||
|
"LeapfusionHunyuanI2VPatcher",
|
||||||
"LoadAndResizeImage",
|
"LoadAndResizeImage",
|
||||||
"LoadImagesFromFolderKJ",
|
"LoadImagesFromFolderKJ",
|
||||||
"LoadResAdapterNormalization",
|
"LoadResAdapterNormalization",
|
||||||
@@ -19470,6 +19622,16 @@
|
|||||||
"title_aux": "ComfyUI-SUPIR"
|
"title_aux": "ComfyUI-SUPIR"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/kijai/ComfyUI-StableXWrapper": [
|
||||||
|
[
|
||||||
|
"DifferenceExtractorNode",
|
||||||
|
"DownloadAndLoadStableXModel",
|
||||||
|
"StableXProcessImage"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-StableXWrapper"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/kijai/ComfyUI-depth-fm": [
|
"https://github.com/kijai/ComfyUI-depth-fm": [
|
||||||
[
|
[
|
||||||
"Depth_fm"
|
"Depth_fm"
|
||||||
@@ -21709,7 +21871,6 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
||||||
[
|
[
|
||||||
"Add zSNR Sigma max",
|
|
||||||
"ConcatSigmas",
|
"ConcatSigmas",
|
||||||
"CosineScheduler",
|
"CosineScheduler",
|
||||||
"GaussianScheduler",
|
"GaussianScheduler",
|
||||||
@@ -21717,7 +21878,8 @@
|
|||||||
"LogNormal Scheduler",
|
"LogNormal Scheduler",
|
||||||
"OffsetSigmas",
|
"OffsetSigmas",
|
||||||
"PerpNegScheduledCFGGuider",
|
"PerpNegScheduledCFGGuider",
|
||||||
"ScheduledCFGGuider"
|
"ScheduledCFGGuider",
|
||||||
|
"SplitSigmasByValue"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
||||||
@@ -22411,6 +22573,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/nilor-corp/nilor-nodes": [
|
"https://github.com/nilor-corp/nilor-nodes": [
|
||||||
[
|
[
|
||||||
|
"Nilor Categorize String",
|
||||||
"Nilor Count Images In Directory",
|
"Nilor Count Images In Directory",
|
||||||
"Nilor Int To List Of Bools",
|
"Nilor Int To List Of Bools",
|
||||||
"Nilor Interpolated Float List",
|
"Nilor Interpolated Float List",
|
||||||
@@ -22468,6 +22631,15 @@
|
|||||||
"title_aux": "ComfyUI OpenAI Prompter"
|
"title_aux": "ComfyUI OpenAI Prompter"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/nkchocoai/ComfyUI-DanbooruPromptQuiz": [
|
||||||
|
[
|
||||||
|
"DanbooruPromptComparison",
|
||||||
|
"DanbooruPromptQuiz"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DanbooruPromptQuiz"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/nkchocoai/ComfyUI-Dart": [
|
"https://github.com/nkchocoai/ComfyUI-Dart": [
|
||||||
[
|
[
|
||||||
"DanbooruTagsTransformerBanTagsFromRegex",
|
"DanbooruTagsTransformerBanTagsFromRegex",
|
||||||
@@ -22573,6 +22745,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/nofunstudio/Node_Fun_ComfyUI": [
|
"https://github.com/nofunstudio/Node_Fun_ComfyUI": [
|
||||||
[
|
[
|
||||||
|
"IframeView",
|
||||||
"LayeredInfiniteZoom",
|
"LayeredInfiniteZoom",
|
||||||
"Replicate flux 1.1 pro ultra",
|
"Replicate flux 1.1 pro ultra",
|
||||||
"ReplicateAPI_flux_1_1_pro_ultra",
|
"ReplicateAPI_flux_1_1_pro_ultra",
|
||||||
@@ -23149,7 +23322,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/pollockjj/ComfyUI-MultiGPU": [
|
"https://github.com/pollockjj/ComfyUI-MultiGPU": [
|
||||||
[
|
[
|
||||||
"DeviceSelectorMultiGPU"
|
"DeviceSelectorMultiGPU",
|
||||||
|
"HunyuanVideoEmbeddingsAdapter"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-MultiGPU"
|
"title_aux": "ComfyUI-MultiGPU"
|
||||||
@@ -23681,6 +23855,15 @@
|
|||||||
"title_aux": "ComfyUI-Similarity-Score"
|
"title_aux": "ComfyUI-Similarity-Score"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/risunobushi/ComfyUI_DisplacementMapTools": [
|
||||||
|
[
|
||||||
|
"DisplaceLogo",
|
||||||
|
"ExtractDisplacementMap"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_DisplacementMapTools"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": [
|
"https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": [
|
||||||
[
|
[
|
||||||
"FrequencyCombination",
|
"FrequencyCombination",
|
||||||
@@ -23941,7 +24124,7 @@
|
|||||||
"title_aux": "ComfyUI_ProfilerX"
|
"title_aux": "ComfyUI_ProfilerX"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/ryanontheinside/ComfyUI_RealTimeNodes": [
|
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes": [
|
||||||
[
|
[
|
||||||
"DTypeConverter",
|
"DTypeConverter",
|
||||||
"DeltaControl",
|
"DeltaControl",
|
||||||
@@ -23953,13 +24136,17 @@
|
|||||||
"IntSequence",
|
"IntSequence",
|
||||||
"IntegerMotionController",
|
"IntegerMotionController",
|
||||||
"IntervalControl",
|
"IntervalControl",
|
||||||
|
"LazyCondition",
|
||||||
|
"LoadImageFromPath_",
|
||||||
"MotionController",
|
"MotionController",
|
||||||
|
"MultilineText",
|
||||||
"QuickShapeMask",
|
"QuickShapeMask",
|
||||||
"ROINode",
|
"ROINode",
|
||||||
|
"SimilarityFilter",
|
||||||
"StringControl",
|
"StringControl",
|
||||||
"StringSequence",
|
"StringSequence",
|
||||||
"TAESDVaeDecode",
|
"TextRenderer",
|
||||||
"TAESDVaeEncode"
|
"YOLOSimilarityCompare"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Nodes for use with real-time applications of ComfyUI"
|
"title_aux": "Nodes for use with real-time applications of ComfyUI"
|
||||||
@@ -24158,12 +24345,27 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/sakura1bgx/ComfyUI_FlipStreamViewer": [
|
"https://github.com/sakura1bgx/ComfyUI_FlipStreamViewer": [
|
||||||
[
|
[
|
||||||
"FlipStreamLoader",
|
"FlipStreamBatchPrompt",
|
||||||
"FlipStreamOption",
|
"FlipStreamFileSelect_AnimateDiffModel",
|
||||||
"FlipStreamPrompt",
|
"FlipStreamFileSelect_Checkpoints",
|
||||||
"FlipStreamSource",
|
"FlipStreamFileSelect_TensorRT",
|
||||||
"FlipStreamSwitchVFI",
|
"FlipStreamFileSelect_VAE",
|
||||||
"FlipStreamUpdate",
|
"FlipStreamFileSelect_VideoSrc",
|
||||||
|
"FlipStreamFilmVfi",
|
||||||
|
"FlipStreamGetParam",
|
||||||
|
"FlipStreamImageSize",
|
||||||
|
"FlipStreamInputBox",
|
||||||
|
"FlipStreamPreviewBox",
|
||||||
|
"FlipStreamSegMask",
|
||||||
|
"FlipStreamSelectBox_Samplers",
|
||||||
|
"FlipStreamSelectBox_Scheduler",
|
||||||
|
"FlipStreamSetParam",
|
||||||
|
"FlipStreamSlider",
|
||||||
|
"FlipStreamSwitchImage",
|
||||||
|
"FlipStreamSwitchLatent",
|
||||||
|
"FlipStreamTextBox",
|
||||||
|
"FlipStreamTextReplace",
|
||||||
|
"FlipStreamVideoInput",
|
||||||
"FlipStreamViewer"
|
"FlipStreamViewer"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -25231,9 +25433,12 @@
|
|||||||
[
|
[
|
||||||
"LoadEXR",
|
"LoadEXR",
|
||||||
"LoadEXRFrames",
|
"LoadEXRFrames",
|
||||||
|
"LoadImageAndPrompt",
|
||||||
"LoadLatentEXR",
|
"LoadLatentEXR",
|
||||||
"SaveEXR",
|
"SaveEXR",
|
||||||
"SaveEXRFrames",
|
"SaveEXRFrames",
|
||||||
|
"SaveImageAndPromptExact",
|
||||||
|
"SaveImageAndPromptIncremental",
|
||||||
"SaveLatentEXR",
|
"SaveLatentEXR",
|
||||||
"SaveTiff"
|
"SaveTiff"
|
||||||
],
|
],
|
||||||
@@ -26024,6 +26229,7 @@
|
|||||||
"quadmoonChangeBackground",
|
"quadmoonChangeBackground",
|
||||||
"quadmoonConvertBoolToString",
|
"quadmoonConvertBoolToString",
|
||||||
"quadmoonConvertFloatToString",
|
"quadmoonConvertFloatToString",
|
||||||
|
"quadmoonConvertImageToPrompt",
|
||||||
"quadmoonConvertIntToString",
|
"quadmoonConvertIntToString",
|
||||||
"quadmoonConvertNormalizeHW",
|
"quadmoonConvertNormalizeHW",
|
||||||
"quadmoonConvertNumberToString",
|
"quadmoonConvertNumberToString",
|
||||||
@@ -26667,7 +26873,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/willmiao/ComfyUI-Lora-Manager": [
|
"https://github.com/willmiao/ComfyUI-Lora-Manager": [
|
||||||
[
|
[
|
||||||
"LorasEndpoint"
|
"LoRAGateway"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-Lora-Manager"
|
"title_aux": "ComfyUI-Lora-Manager"
|
||||||
@@ -27000,6 +27206,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm": [
|
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm": [
|
||||||
[
|
[
|
||||||
|
"Auto-LLM-Chat",
|
||||||
"Auto-LLM-Text",
|
"Auto-LLM-Text",
|
||||||
"Auto-LLM-Text-Vision",
|
"Auto-LLM-Text-Vision",
|
||||||
"Auto-LLM-Vision"
|
"Auto-LLM-Vision"
|
||||||
@@ -27210,6 +27417,7 @@
|
|||||||
[
|
[
|
||||||
"ImageAnalyzer",
|
"ImageAnalyzer",
|
||||||
"JanusChatAnalyzer",
|
"JanusChatAnalyzer",
|
||||||
|
"JanusImageGenerator",
|
||||||
"JanusProLoader"
|
"JanusProLoader"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
|
|||||||
4891
github-stats.json
4891
github-stats.json
File diff suppressed because it is too large
Load Diff
@@ -41,7 +41,7 @@ import manager_downloader
|
|||||||
from node_package import InstalledNodePackage
|
from node_package import InstalledNodePackage
|
||||||
|
|
||||||
|
|
||||||
version_code = [3, 11]
|
version_code = [3, 14]
|
||||||
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 '')
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -13,12 +13,13 @@ import shutil
|
|||||||
import git
|
import git
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
from folder_paths import get_filename_list
|
|
||||||
from server import PromptServer
|
from server import PromptServer
|
||||||
import manager_core as core
|
import manager_core as core
|
||||||
import manager_util
|
import manager_util
|
||||||
import cm_global
|
import cm_global
|
||||||
import logging
|
import logging
|
||||||
|
import asyncio
|
||||||
|
import queue
|
||||||
|
|
||||||
|
|
||||||
logging.info(f"### Loading: ComfyUI-Manager ({core.version_str})")
|
logging.info(f"### Loading: ComfyUI-Manager ({core.version_str})")
|
||||||
@@ -32,7 +33,6 @@ SECURITY_MESSAGE_GENERAL = "ERROR: This installation is not allowed in this secu
|
|||||||
|
|
||||||
routes = PromptServer.instance.routes
|
routes = PromptServer.instance.routes
|
||||||
|
|
||||||
|
|
||||||
def handle_stream(stream, prefix):
|
def handle_stream(stream, prefix):
|
||||||
stream.reconfigure(encoding=locale.getpreferredencoding(), errors='replace')
|
stream.reconfigure(encoding=locale.getpreferredencoding(), errors='replace')
|
||||||
for msg in stream:
|
for msg in stream:
|
||||||
@@ -369,6 +369,204 @@ def nickname_filter(json_obj):
|
|||||||
return json_obj
|
return json_obj
|
||||||
|
|
||||||
|
|
||||||
|
task_queue = queue.Queue()
|
||||||
|
nodepack_result = {}
|
||||||
|
model_result = {}
|
||||||
|
tasks_in_progress = set()
|
||||||
|
task_worker_lock = threading.Lock()
|
||||||
|
|
||||||
|
async def task_worker():
|
||||||
|
global task_queue
|
||||||
|
global nodepack_result
|
||||||
|
global model_result
|
||||||
|
global tasks_in_progress
|
||||||
|
|
||||||
|
async def do_install(item) -> str:
|
||||||
|
ui_id, node_spec_str, channel, mode, skip_post_install = item
|
||||||
|
|
||||||
|
try:
|
||||||
|
node_spec = core.unified_manager.resolve_node_spec(node_spec_str)
|
||||||
|
|
||||||
|
if node_spec is None:
|
||||||
|
logging.error(f"Cannot resolve install target: '{node_spec_str}'")
|
||||||
|
return f"Cannot resolve install target: '{node_spec_str}'"
|
||||||
|
|
||||||
|
node_name, version_spec, is_specified = node_spec
|
||||||
|
res = await core.unified_manager.install_by_id(node_name, version_spec, channel, mode, return_postinstall=skip_post_install)
|
||||||
|
# discard post install if skip_post_install mode
|
||||||
|
|
||||||
|
if res.action not in ['skip', 'enable', 'install-git', 'install-cnr', 'switch-cnr']:
|
||||||
|
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
||||||
|
return res.msg
|
||||||
|
|
||||||
|
elif not res.result:
|
||||||
|
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
||||||
|
return res.msg
|
||||||
|
|
||||||
|
return 'success'
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
return f"Installation failed:\n{node_spec_str}"
|
||||||
|
|
||||||
|
async def do_update(item) -> str:
|
||||||
|
ui_id, node_name, node_ver = item
|
||||||
|
|
||||||
|
try:
|
||||||
|
res = core.unified_manager.unified_update(node_name, node_ver)
|
||||||
|
|
||||||
|
manager_util.clear_pip_cache()
|
||||||
|
|
||||||
|
if res.result:
|
||||||
|
return 'success'
|
||||||
|
|
||||||
|
logging.error(f"\nERROR: An error occurred while updating '{node_name}'.")
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
return f"An error occurred while updating '{node_name}'."
|
||||||
|
|
||||||
|
async def do_fix(item) -> str:
|
||||||
|
ui_id, node_name, node_ver = item
|
||||||
|
|
||||||
|
try:
|
||||||
|
res = core.unified_manager.unified_fix(node_name, node_ver)
|
||||||
|
|
||||||
|
if res.result:
|
||||||
|
return 'success'
|
||||||
|
else:
|
||||||
|
logging.error(res.msg)
|
||||||
|
|
||||||
|
logging.error(f"\nERROR: An error occurred while fixing '{node_name}@{node_ver}'.")
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
return f"An error occurred while fixing '{node_name}@{node_ver}'."
|
||||||
|
|
||||||
|
async def do_uninstall(item) -> str:
|
||||||
|
ui_id, node_name, is_unknown = item
|
||||||
|
|
||||||
|
try:
|
||||||
|
res = core.unified_manager.unified_uninstall(node_name, is_unknown)
|
||||||
|
|
||||||
|
if res.result:
|
||||||
|
return 'success'
|
||||||
|
|
||||||
|
logging.error(f"\nERROR: An error occurred while uninstalling '{node_name}'.")
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
return f"An error occurred while uninstalling '{node_name}'."
|
||||||
|
|
||||||
|
async def do_disable(item) -> str:
|
||||||
|
ui_id, node_name, is_unknown = item
|
||||||
|
|
||||||
|
try:
|
||||||
|
res = core.unified_manager.unified_disable(node_name, is_unknown)
|
||||||
|
|
||||||
|
if res:
|
||||||
|
return 'success'
|
||||||
|
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
|
||||||
|
return f"Failed to disable: '{node_name}'"
|
||||||
|
|
||||||
|
async def do_install_model(item) -> str:
|
||||||
|
ui_id, json_data = item
|
||||||
|
|
||||||
|
model_path = get_model_path(json_data)
|
||||||
|
model_url = json_data['url']
|
||||||
|
|
||||||
|
res = False
|
||||||
|
|
||||||
|
try:
|
||||||
|
if model_path is not None:
|
||||||
|
logging.info(f"Install model '{json_data['name']}' from '{model_url}' into '{model_path}'")
|
||||||
|
if not core.get_config()['model_download_by_agent'] and (
|
||||||
|
model_url.startswith('https://github.com') or model_url.startswith('https://huggingface.co') or model_url.startswith('https://heibox.uni-heidelberg.de')):
|
||||||
|
model_dir = get_model_dir(json_data, True)
|
||||||
|
download_url(model_url, model_dir, filename=json_data['filename'])
|
||||||
|
if model_path.endswith('.zip'):
|
||||||
|
res = core.unzip(model_path)
|
||||||
|
else:
|
||||||
|
res = True
|
||||||
|
|
||||||
|
if res:
|
||||||
|
return 'success'
|
||||||
|
else:
|
||||||
|
res = download_url_with_agent(model_url, model_path)
|
||||||
|
if res and model_path.endswith('.zip'):
|
||||||
|
res = core.unzip(model_path)
|
||||||
|
else:
|
||||||
|
logging.error(f"Model installation error: invalid model type - {json_data['type']}")
|
||||||
|
|
||||||
|
if res:
|
||||||
|
return 'success'
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
logging.error(f"[ERROR] {e}", file=sys.stderr)
|
||||||
|
|
||||||
|
return f"Model installation error: {model_url}"
|
||||||
|
|
||||||
|
stats = {}
|
||||||
|
|
||||||
|
while True:
|
||||||
|
done_count = len(nodepack_result) + len(model_result)
|
||||||
|
total_count = done_count + task_queue.qsize()
|
||||||
|
|
||||||
|
if task_queue.empty():
|
||||||
|
logging.info(f"\n[ComfyUI-Manager] Queued works are completed.\n{stats}")
|
||||||
|
|
||||||
|
logging.info("\nAfter restarting ComfyUI, please refresh the browser.")
|
||||||
|
PromptServer.instance.send_sync("cm-queue-status",
|
||||||
|
{'status': 'done',
|
||||||
|
'nodepack_result': nodepack_result, 'model_result': model_result,
|
||||||
|
'total_count': total_count, 'done_count': done_count})
|
||||||
|
nodepack_result = {}
|
||||||
|
task_queue = queue.Queue()
|
||||||
|
return # terminate worker thread
|
||||||
|
|
||||||
|
with task_worker_lock:
|
||||||
|
kind, item = task_queue.get()
|
||||||
|
tasks_in_progress.add((kind, item[0]))
|
||||||
|
|
||||||
|
try:
|
||||||
|
if kind == 'install':
|
||||||
|
msg = await do_install(item)
|
||||||
|
elif kind == 'install-model':
|
||||||
|
msg = await do_install_model(item)
|
||||||
|
elif kind == 'update':
|
||||||
|
msg = await do_update(item)
|
||||||
|
elif kind == 'fix':
|
||||||
|
msg = await do_fix(item)
|
||||||
|
elif kind == 'uninstall':
|
||||||
|
msg = await do_uninstall(item)
|
||||||
|
elif kind == 'disable':
|
||||||
|
msg = await do_disable(item)
|
||||||
|
else:
|
||||||
|
msg = "Unexpected kind: " + kind
|
||||||
|
except Exception:
|
||||||
|
traceback.print_exc()
|
||||||
|
msg = f"Exception: {(kind, item)}"
|
||||||
|
|
||||||
|
with task_worker_lock:
|
||||||
|
tasks_in_progress.remove((kind, item[0]))
|
||||||
|
|
||||||
|
ui_id = item[0]
|
||||||
|
if kind == 'install-model':
|
||||||
|
model_result[ui_id] = msg
|
||||||
|
ui_target = "model_manager"
|
||||||
|
else:
|
||||||
|
nodepack_result[ui_id] = msg
|
||||||
|
ui_target = "nodepack_manager"
|
||||||
|
|
||||||
|
stats[kind] = stats.get(kind, 0) + 1
|
||||||
|
|
||||||
|
PromptServer.instance.send_sync("cm-queue-status",
|
||||||
|
{'status': 'in_progress', 'target': item[0], 'ui_target': ui_target,
|
||||||
|
'total_count': total_count, 'done_count': done_count})
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/customnode/getmappings")
|
@routes.get("/customnode/getmappings")
|
||||||
async def fetch_customnode_mappings(request):
|
async def fetch_customnode_mappings(request):
|
||||||
"""
|
"""
|
||||||
@@ -865,13 +1063,35 @@ async def import_fail_info(request):
|
|||||||
return web.Response(status=400)
|
return web.Response(status=400)
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/reinstall")
|
@routes.post("/manager/queue/reinstall")
|
||||||
async def reinstall_custom_node(request):
|
async def reinstall_custom_node(request):
|
||||||
await uninstall_custom_node(request)
|
await uninstall_custom_node(request)
|
||||||
await install_custom_node(request)
|
await install_custom_node(request)
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/install")
|
@routes.get("/manager/queue/reset")
|
||||||
|
async def reset_queue(request):
|
||||||
|
global task_queue
|
||||||
|
task_queue = queue.Queue()
|
||||||
|
return web.Response(status=200)
|
||||||
|
|
||||||
|
|
||||||
|
@routes.get("/manager/queue/status")
|
||||||
|
async def queue_count(request):
|
||||||
|
global task_queue
|
||||||
|
|
||||||
|
with task_worker_lock:
|
||||||
|
done_count = len(nodepack_result) + len(model_result)
|
||||||
|
in_progress_count = len(tasks_in_progress)
|
||||||
|
total_count = done_count + in_progress_count + task_queue.qsize()
|
||||||
|
is_processing = task_worker_thread is not None and task_worker_thread.is_alive()
|
||||||
|
|
||||||
|
return web.json_response({
|
||||||
|
'total_count': total_count, 'done_count': done_count, 'in_progress_count': in_progress_count,
|
||||||
|
'is_processing': is_processing})
|
||||||
|
|
||||||
|
|
||||||
|
@routes.post("/manager/queue/install")
|
||||||
async def install_custom_node(request):
|
async def install_custom_node(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)
|
||||||
@@ -914,26 +1134,33 @@ async def install_custom_node(request):
|
|||||||
logging.error(SECURITY_MESSAGE_GENERAL)
|
logging.error(SECURITY_MESSAGE_GENERAL)
|
||||||
return web.Response(status=404, text="A security error has occurred. Please check the terminal logs")
|
return web.Response(status=404, text="A security error has occurred. Please check the terminal logs")
|
||||||
|
|
||||||
node_spec = core.unified_manager.resolve_node_spec(node_spec_str)
|
install_item = json_data.get('ui_id'), node_spec_str, json_data['channel'], json_data['mode'], skip_post_install
|
||||||
|
task_queue.put(("install", install_item))
|
||||||
|
|
||||||
if node_spec is None:
|
return web.Response(status=200)
|
||||||
return web.Response(status=400, text=f"Cannot resolve install target: '{node_spec_str}'")
|
|
||||||
|
|
||||||
node_name, version_spec, is_specified = node_spec
|
|
||||||
res = await core.unified_manager.install_by_id(node_name, version_spec, json_data['channel'], json_data['mode'], return_postinstall=skip_post_install)
|
|
||||||
# discard post install if skip_post_install mode
|
|
||||||
|
|
||||||
if res.action not in ['skip', 'enable', 'install-git', 'install-cnr', 'switch-cnr']:
|
|
||||||
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
|
||||||
return web.Response(status=400, text=res.msg)
|
|
||||||
elif not res.result:
|
|
||||||
logging.error(f"[ComfyUI-Manager] Installation failed:\n{res.msg}")
|
|
||||||
return web.Response(status=400, text=res.msg)
|
|
||||||
|
|
||||||
return web.Response(status=200, text="Installation success.")
|
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/fix")
|
task_worker_thread:threading.Thread = None
|
||||||
|
|
||||||
|
@routes.get("/manager/queue/start")
|
||||||
|
async def queue_start(request):
|
||||||
|
global nodepack_result
|
||||||
|
global model_result
|
||||||
|
global task_worker_thread
|
||||||
|
|
||||||
|
if task_worker_thread is not None and task_worker_thread.is_alive():
|
||||||
|
return web.Response(status=201) # already in-progress
|
||||||
|
|
||||||
|
nodepack_result = {}
|
||||||
|
model_result = {}
|
||||||
|
|
||||||
|
task_worker_thread = threading.Thread(target=lambda: asyncio.run(task_worker()))
|
||||||
|
task_worker_thread.start()
|
||||||
|
|
||||||
|
return web.Response(status=200)
|
||||||
|
|
||||||
|
|
||||||
|
@routes.post("/manager/queue/fix")
|
||||||
async def fix_custom_node(request):
|
async def fix_custom_node(request):
|
||||||
if not is_allowed_security_level('middle'):
|
if not is_allowed_security_level('middle'):
|
||||||
logging.error(SECURITY_MESSAGE_GENERAL)
|
logging.error(SECURITY_MESSAGE_GENERAL)
|
||||||
@@ -949,16 +1176,10 @@ async def fix_custom_node(request):
|
|||||||
# unknown
|
# unknown
|
||||||
node_name = os.path.basename(json_data['files'][0])
|
node_name = os.path.basename(json_data['files'][0])
|
||||||
|
|
||||||
res = core.unified_manager.unified_fix(node_name, node_ver)
|
update_item = json_data.get('ui_id'), node_name, json_data['version']
|
||||||
|
task_queue.put(("fix", update_item))
|
||||||
|
|
||||||
if res.result:
|
return web.Response(status=200)
|
||||||
logging.info("\nAfter restarting ComfyUI, please refresh the browser.")
|
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
else:
|
|
||||||
logging.error(res.msg)
|
|
||||||
|
|
||||||
logging.error(f"\nERROR: An error occurred while fixing '{node_name}@{node_ver}'.")
|
|
||||||
return web.Response(status=400, text=f"An error occurred while fixing '{node_name}@{node_ver}'.")
|
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/install/git_url")
|
@routes.post("/customnode/install/git_url")
|
||||||
@@ -993,7 +1214,7 @@ async def install_custom_node_pip(request):
|
|||||||
return web.Response(status=200)
|
return web.Response(status=200)
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/uninstall")
|
@routes.post("/manager/queue/uninstall")
|
||||||
async def uninstall_custom_node(request):
|
async def uninstall_custom_node(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)
|
||||||
@@ -1010,17 +1231,13 @@ async def uninstall_custom_node(request):
|
|||||||
is_unknown = True
|
is_unknown = True
|
||||||
node_name = os.path.basename(json_data['files'][0])
|
node_name = os.path.basename(json_data['files'][0])
|
||||||
|
|
||||||
res = core.unified_manager.unified_uninstall(node_name, is_unknown)
|
uninstall_item = json_data.get('ui_id'), node_name, is_unknown
|
||||||
|
task_queue.put(("uninstall", uninstall_item))
|
||||||
|
|
||||||
if res.result:
|
return web.Response(status=200)
|
||||||
logging.info("\nAfter restarting ComfyUI, please refresh the browser.")
|
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
|
|
||||||
logging.error(f"\nERROR: An error occurred while uninstalling '{node_name}'.")
|
|
||||||
return web.Response(status=400, text=f"An error occurred while uninstalling '{node_name}'.")
|
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/update")
|
@routes.post("/manager/queue/update")
|
||||||
async def update_custom_node(request):
|
async def update_custom_node(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)
|
||||||
@@ -1035,16 +1252,10 @@ async def update_custom_node(request):
|
|||||||
# unknown
|
# unknown
|
||||||
node_name = os.path.basename(json_data['files'][0])
|
node_name = os.path.basename(json_data['files'][0])
|
||||||
|
|
||||||
res = core.unified_manager.unified_update(node_name, json_data['version'])
|
update_item = json_data.get('ui_id'), node_name, json_data['version']
|
||||||
|
task_queue.put(("update", update_item))
|
||||||
|
|
||||||
manager_util.clear_pip_cache()
|
return web.Response(status=200)
|
||||||
|
|
||||||
if res.result:
|
|
||||||
logging.info("\nAfter restarting ComfyUI, please refresh the browser.")
|
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
|
|
||||||
logging.error(f"\nERROR: An error occurred while updating '{node_name}'.")
|
|
||||||
return web.Response(status=400, text=f"An error occurred while updating '{node_name}'.")
|
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/comfyui_manager/update_comfyui")
|
@routes.get("/comfyui_manager/update_comfyui")
|
||||||
@@ -1058,8 +1269,10 @@ async def update_comfyui(request):
|
|||||||
logging.error("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
logging.error("ComfyUI update fail: The installed ComfyUI does not have a Git repository.")
|
||||||
return web.Response(status=400)
|
return web.Response(status=400)
|
||||||
elif res == "updated":
|
elif res == "updated":
|
||||||
|
logging.info("ComfyUI is updated.")
|
||||||
return web.Response(status=201)
|
return web.Response(status=201)
|
||||||
else: # skipped
|
else: # skipped
|
||||||
|
logging.info("ComfyUI is up-to-date.")
|
||||||
return web.Response(status=200)
|
return web.Response(status=200)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logging.error(f"ComfyUI update fail: {e}", file=sys.stderr)
|
logging.error(f"ComfyUI update fail: {e}", file=sys.stderr)
|
||||||
@@ -1091,7 +1304,7 @@ async def comfyui_switch_version(request):
|
|||||||
return web.Response(status=400)
|
return web.Response(status=400)
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/customnode/disable")
|
@routes.post("/manager/queue/disable")
|
||||||
async def disable_node(request):
|
async def disable_node(request):
|
||||||
json_data = await request.json()
|
json_data = await request.json()
|
||||||
|
|
||||||
@@ -1104,12 +1317,10 @@ async def disable_node(request):
|
|||||||
is_unknown = True
|
is_unknown = True
|
||||||
node_name = os.path.basename(json_data['files'][0])
|
node_name = os.path.basename(json_data['files'][0])
|
||||||
|
|
||||||
res = core.unified_manager.unified_disable(node_name, is_unknown)
|
update_item = json_data.get('ui_id'), node_name, is_unknown
|
||||||
|
task_queue.put(("disable", update_item))
|
||||||
|
|
||||||
if res:
|
return web.Response(status=200)
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
|
|
||||||
return web.Response(status=400, text="Failed to disable")
|
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/manager/migrate_unmanaged_nodes")
|
@routes.get("/manager/migrate_unmanaged_nodes")
|
||||||
@@ -1125,12 +1336,10 @@ async def need_to_migrate(request):
|
|||||||
return web.Response(text=str(core.need_to_migrate), status=200)
|
return web.Response(text=str(core.need_to_migrate), status=200)
|
||||||
|
|
||||||
|
|
||||||
@routes.post("/model/install")
|
@routes.post("/manager/queue/install_model")
|
||||||
async def install_model(request):
|
async def install_model(request):
|
||||||
json_data = await request.json()
|
json_data = await request.json()
|
||||||
|
|
||||||
model_path = get_model_path(json_data)
|
|
||||||
|
|
||||||
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)
|
||||||
@@ -1148,37 +1357,10 @@ async def install_model(request):
|
|||||||
logging.error(SECURITY_MESSAGE_NORMAL_MINUS)
|
logging.error(SECURITY_MESSAGE_NORMAL_MINUS)
|
||||||
return web.Response(status=403)
|
return web.Response(status=403)
|
||||||
|
|
||||||
res = False
|
install_item = json_data.get('ui_id'), json_data
|
||||||
|
task_queue.put(("install-model", install_item))
|
||||||
|
|
||||||
try:
|
return web.Response(status=200)
|
||||||
if model_path is not None:
|
|
||||||
|
|
||||||
model_url = json_data['url']
|
|
||||||
logging.info(f"Install model '{json_data['name']}' from '{model_url}' into '{model_path}'")
|
|
||||||
if not core.get_config()['model_download_by_agent'] and (
|
|
||||||
model_url.startswith('https://github.com') or model_url.startswith('https://huggingface.co') or model_url.startswith('https://heibox.uni-heidelberg.de')):
|
|
||||||
model_dir = get_model_dir(json_data, True)
|
|
||||||
download_url(model_url, model_dir, filename=json_data['filename'])
|
|
||||||
if model_path.endswith('.zip'):
|
|
||||||
res = core.unzip(model_path)
|
|
||||||
else:
|
|
||||||
res = True
|
|
||||||
|
|
||||||
if res:
|
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
else:
|
|
||||||
res = download_url_with_agent(model_url, model_path)
|
|
||||||
if res and model_path.endswith('.zip'):
|
|
||||||
res = core.unzip(model_path)
|
|
||||||
else:
|
|
||||||
logging.error(f"Model installation error: invalid model type - {json_data['type']}")
|
|
||||||
|
|
||||||
if res:
|
|
||||||
return web.json_response({}, content_type='application/json')
|
|
||||||
except Exception as e:
|
|
||||||
logging.error(f"[ERROR] {e}", file=sys.stderr)
|
|
||||||
|
|
||||||
return web.Response(status=400)
|
|
||||||
|
|
||||||
|
|
||||||
@routes.get("/manager/preview_method")
|
@routes.get("/manager/preview_method")
|
||||||
@@ -1407,8 +1589,6 @@ def confirm_try_install(sender, custom_node_url, msg):
|
|||||||
|
|
||||||
cm_global.register_api('cm.try-install-custom-node', confirm_try_install)
|
cm_global.register_api('cm.try-install-custom-node', confirm_try_install)
|
||||||
|
|
||||||
import asyncio
|
|
||||||
|
|
||||||
|
|
||||||
async def default_cache_update():
|
async def default_cache_update():
|
||||||
async def get_cache(filename):
|
async def get_cache(filename):
|
||||||
@@ -1435,6 +1615,8 @@ async def default_cache_update():
|
|||||||
await core.unified_manager.reload('remote', dont_wait=False)
|
await core.unified_manager.reload('remote', dont_wait=False)
|
||||||
await core.unified_manager.get_custom_nodes('default', 'remote')
|
await core.unified_manager.get_custom_nodes('default', 'remote')
|
||||||
|
|
||||||
|
logging.info("[ComfyUI-Manager] All startup tasks have been completed.")
|
||||||
|
|
||||||
# NOTE: hide migration button temporarily.
|
# NOTE: hide migration button temporarily.
|
||||||
# if not core.get_config()['skip_migration_check']:
|
# if not core.get_config()['skip_migration_check']:
|
||||||
# await core.check_need_to_migrate()
|
# await core.check_need_to_migrate()
|
||||||
|
|||||||
@@ -232,21 +232,22 @@ def clear_pip_cache():
|
|||||||
pip_map = None
|
pip_map = None
|
||||||
|
|
||||||
|
|
||||||
torch_torchvision_version_map = {
|
torch_torchvision_torchaudio_version_map = {
|
||||||
'2.5.1': '0.20.1',
|
'2.6.0': ('0.21.0', '2.6.0'),
|
||||||
'2.5.0': '0.20.0',
|
'2.5.1': ('0.20.0', '2.5.0'),
|
||||||
'2.4.1': '0.19.1',
|
'2.5.0': ('0.20.0', '2.5.0'),
|
||||||
'2.4.0': '0.19.0',
|
'2.4.1': ('0.19.1', '2.4.1'),
|
||||||
'2.3.1': '0.18.1',
|
'2.4.0': ('0.19.0', '2.4.0'),
|
||||||
'2.3.0': '0.18.0',
|
'2.3.1': ('0.18.1', '2.3.1'),
|
||||||
'2.2.2': '0.17.2',
|
'2.3.0': ('0.18.0', '2.3.0'),
|
||||||
'2.2.1': '0.17.1',
|
'2.2.2': ('0.17.2', '2.2.2'),
|
||||||
'2.2.0': '0.17.0',
|
'2.2.1': ('0.17.1', '2.2.1'),
|
||||||
'2.1.2': '0.16.2',
|
'2.2.0': ('0.17.0', '2.2.0'),
|
||||||
'2.1.1': '0.16.1',
|
'2.1.2': ('0.16.2', '2.1.2'),
|
||||||
'2.1.0': '0.16.0',
|
'2.1.1': ('0.16.1', '2.1.1'),
|
||||||
'2.0.1': '0.15.2',
|
'2.1.0': ('0.16.0', '2.1.0'),
|
||||||
'2.0.0': '0.15.1',
|
'2.0.1': ('0.15.2', '2.0.1'),
|
||||||
|
'2.0.0': ('0.15.1', '2.0.0'),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -266,16 +267,17 @@ class PIPFixer:
|
|||||||
|
|
||||||
torch_ver = StrictVersion(spec[0])
|
torch_ver = StrictVersion(spec[0])
|
||||||
torch_ver = f"{torch_ver.major}.{torch_ver.minor}.{torch_ver.patch}"
|
torch_ver = f"{torch_ver.major}.{torch_ver.minor}.{torch_ver.patch}"
|
||||||
torchvision_ver = torch_torchvision_version_map.get(torch_ver)
|
torch_torchvision_torchaudio_ver = torch_torchvision_torchaudio_version_map.get(torch_ver)
|
||||||
|
|
||||||
if torchvision_ver is None:
|
if torch_torchvision_torchaudio_ver is None:
|
||||||
cmd = [sys.executable, '-m', 'pip', 'install', '--pre',
|
cmd = [sys.executable, '-m', 'pip', 'install', '--pre',
|
||||||
'torch', 'torchvision', 'torchaudio',
|
'torch', 'torchvision', 'torchaudio',
|
||||||
'--index-url', f"https://download.pytorch.org/whl/nightly/{platform}"]
|
'--index-url', f"https://download.pytorch.org/whl/nightly/{platform}"]
|
||||||
logging.info("[ComfyUI-Manager] restore PyTorch to nightly version")
|
logging.info("[ComfyUI-Manager] restore PyTorch to nightly version")
|
||||||
else:
|
else:
|
||||||
|
torchvision_ver, torchaudio_ver = torch_torchvision_torchaudio_ver
|
||||||
cmd = [sys.executable, '-m', 'pip', 'install',
|
cmd = [sys.executable, '-m', 'pip', 'install',
|
||||||
f'torch=={torch_ver}', f'torchvision=={torchvision_ver}', f"torchaudio=={torch_ver}",
|
f'torch=={torch_ver}', f'torchvision=={torchvision_ver}', f"torchaudio=={torchaudio_ver}",
|
||||||
'--index-url', f"https://download.pytorch.org/whl/{platform}"]
|
'--index-url', f"https://download.pytorch.org/whl/{platform}"]
|
||||||
logging.info(f"[ComfyUI-Manager] restore PyTorch to {torch_ver}+{platform}")
|
logging.info(f"[ComfyUI-Manager] restore PyTorch to {torch_ver}+{platform}")
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,6 @@ import {
|
|||||||
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";
|
||||||
import { set_double_click_policy } from "./node_fixer.js";
|
|
||||||
import { SnapshotManager } from "./snapshot.js";
|
import { SnapshotManager } from "./snapshot.js";
|
||||||
|
|
||||||
var docStyle = document.createElement('style');
|
var docStyle = document.createElement('style');
|
||||||
@@ -812,11 +811,15 @@ const isOutputNode = (node) => {
|
|||||||
class ManagerMenuDialog extends ComfyDialog {
|
class ManagerMenuDialog extends ComfyDialog {
|
||||||
createControlsMid() {
|
createControlsMid() {
|
||||||
let self = this;
|
let self = this;
|
||||||
|
const isElectron = 'electronAPI' in window;
|
||||||
|
|
||||||
update_comfyui_button =
|
update_comfyui_button =
|
||||||
$el("button.cm-button", {
|
$el("button.cm-button", {
|
||||||
type: "button",
|
type: "button",
|
||||||
textContent: "Update ComfyUI",
|
textContent: "Update ComfyUI",
|
||||||
|
style: {
|
||||||
|
display: isElectron ? 'none' : 'block'
|
||||||
|
},
|
||||||
onclick:
|
onclick:
|
||||||
() => updateComfyUI()
|
() => updateComfyUI()
|
||||||
});
|
});
|
||||||
@@ -825,6 +828,9 @@ class ManagerMenuDialog extends ComfyDialog {
|
|||||||
$el("button.cm-button", {
|
$el("button.cm-button", {
|
||||||
type: "button",
|
type: "button",
|
||||||
textContent: "Switch ComfyUI",
|
textContent: "Switch ComfyUI",
|
||||||
|
style: {
|
||||||
|
display: isElectron ? 'none' : 'block'
|
||||||
|
},
|
||||||
onclick:
|
onclick:
|
||||||
() => switchComfyUI()
|
() => switchComfyUI()
|
||||||
});
|
});
|
||||||
@@ -1269,10 +1275,22 @@ class ManagerMenuDialog extends ComfyDialog {
|
|||||||
this.element = $el("div.comfy-modal", { id:'cm-manager-dialog', parent: document.body }, [ content ]);
|
this.element = $el("div.comfy-modal", { id:'cm-manager-dialog', parent: document.body }, [ content ]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get isVisible() {
|
||||||
|
return this.element?.style?.display !== "none";
|
||||||
|
}
|
||||||
|
|
||||||
show() {
|
show() {
|
||||||
this.element.style.display = "block";
|
this.element.style.display = "block";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
toggleVisibility() {
|
||||||
|
if (this.isVisible) {
|
||||||
|
this.close();
|
||||||
|
} else {
|
||||||
|
this.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
handleWorkflowGalleryButtonClick(e) {
|
handleWorkflowGalleryButtonClick(e) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
@@ -1390,6 +1408,41 @@ app.registerExtension({
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|
||||||
|
commands: [
|
||||||
|
{
|
||||||
|
id: "Comfy.Manager.Menu.ToggleVisibility",
|
||||||
|
label: "Toggle Manager Menu Visibility",
|
||||||
|
icon: "mdi mdi-puzzle",
|
||||||
|
function: () => {
|
||||||
|
if (!manager_instance) {
|
||||||
|
setManagerInstance(new ManagerMenuDialog());
|
||||||
|
manager_instance.show();
|
||||||
|
} else {
|
||||||
|
manager_instance.toggleVisibility();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "Comfy.Manager.CustomNodesManager.ToggleVisibility",
|
||||||
|
label: "Toggle Custom Nodes Manager Visibility",
|
||||||
|
icon: "pi pi-server",
|
||||||
|
function: () => {
|
||||||
|
if (CustomNodesManager.instance?.isVisible) {
|
||||||
|
CustomNodesManager.instance.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!manager_instance) {
|
||||||
|
setManagerInstance(new ManagerMenuDialog());
|
||||||
|
}
|
||||||
|
if (!CustomNodesManager.instance) {
|
||||||
|
CustomNodesManager.instance = new CustomNodesManager(app, self);
|
||||||
|
}
|
||||||
|
CustomNodesManager.instance.show(CustomNodesManager.ShowMode.NORMAL);
|
||||||
|
},
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
$el("style", {
|
$el("style", {
|
||||||
textContent: style,
|
textContent: style,
|
||||||
|
|||||||
14
js/common.js
14
js/common.js
@@ -130,6 +130,20 @@ export function customAlert(message) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function infoToast(summary, message) {
|
||||||
|
try {
|
||||||
|
app.extensionManager.toast.add({
|
||||||
|
severity: 'info',
|
||||||
|
summary: summary,
|
||||||
|
detail: message,
|
||||||
|
life: 3000
|
||||||
|
})
|
||||||
|
}
|
||||||
|
catch {
|
||||||
|
// do nothing
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
export async function customPrompt(title, message) {
|
export async function customPrompt(title, message) {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ 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, sanitizeHTML
|
fetchData, md5, icons, show_message, customConfirm, customAlert, customPrompt, sanitizeHTML, infoToast
|
||||||
} from "./common.js";
|
} from "./common.js";
|
||||||
|
|
||||||
// https://cenfun.github.io/turbogrid/api.html
|
// https://cenfun.github.io/turbogrid/api.html
|
||||||
@@ -55,6 +55,12 @@ const pageCss = `
|
|||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cn-manager .cn-manager-stop {
|
||||||
|
display: none;
|
||||||
|
background-color: #500000;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
.cn-manager .cn-manager-back {
|
.cn-manager .cn-manager-back {
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: center;
|
justify-content: center;
|
||||||
@@ -344,13 +350,14 @@ const pageHtml = `
|
|||||||
<div class="cn-manager-selection"></div>
|
<div class="cn-manager-selection"></div>
|
||||||
<div class="cn-manager-message"></div>
|
<div class="cn-manager-message"></div>
|
||||||
<div class="cn-manager-footer">
|
<div class="cn-manager-footer">
|
||||||
<button class="cn-manager-back">
|
<button class="cn-manager-back">
|
||||||
<svg class="arrow-icon" width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
<svg class="arrow-icon" width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
<path d="M2 8H18M2 8L8 2M2 8L8 14" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
<path d="M2 8H18M2 8L8 2M2 8L8 14" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
</svg>
|
</svg>
|
||||||
Back
|
Back
|
||||||
</button>
|
</button>
|
||||||
<button class="cn-manager-restart">Restart</button>
|
<button class="cn-manager-restart">Restart</button>
|
||||||
|
<button class="cn-manager-stop">Stop</button>
|
||||||
<div class="cn-flex-auto"></div>
|
<div class="cn-flex-auto"></div>
|
||||||
<button class="cn-manager-check-update">Check Update</button>
|
<button class="cn-manager-check-update">Check Update</button>
|
||||||
<button class="cn-manager-check-missing">Check Missing</button>
|
<button class="cn-manager-check-missing">Check Missing</button>
|
||||||
@@ -391,6 +398,8 @@ export class CustomNodesManager {
|
|||||||
this.restartMap = {};
|
this.restartMap = {};
|
||||||
|
|
||||||
this.init();
|
this.init();
|
||||||
|
|
||||||
|
api.addEventListener("cm-queue-status", this.onQueueStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
@@ -760,6 +769,13 @@ export class CustomNodesManager {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
".cn-manager-stop": {
|
||||||
|
click: () => {
|
||||||
|
api.fetchApi('/manager/queue/reset');
|
||||||
|
infoToast('Cancel', 'Remaining tasks will stop after completing the current task.');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
".cn-manager-check-update": {
|
".cn-manager-check-update": {
|
||||||
click: (e) => {
|
click: (e) => {
|
||||||
e.target.classList.add("cn-btn-loading");
|
e.target.classList.add("cn-btn-loading");
|
||||||
@@ -1204,7 +1220,7 @@ export class CustomNodesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
focusInstall(item, mode) {
|
focusInstall(item, mode) {
|
||||||
const cellNode = this.grid.getCellNode(item, "installed");
|
const cellNode = this.grid.getCellNode(item, "action");
|
||||||
if (cellNode) {
|
if (cellNode) {
|
||||||
const cellBtn = cellNode.querySelector(`button[mode="${mode}"]`);
|
const cellBtn = cellNode.querySelector(`button[mode="${mode}"]`);
|
||||||
if (cellBtn) {
|
if (cellBtn) {
|
||||||
@@ -1269,6 +1285,13 @@ export class CustomNodesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async installNodes(list, btn, title, selected_version) {
|
async installNodes(list, btn, title, selected_version) {
|
||||||
|
let stats = await api.fetchApi('/manager/queue/status');
|
||||||
|
stats = await stats.json();
|
||||||
|
if(stats.is_processing) {
|
||||||
|
customAlert(`[ComfyUI-Manager] There are already tasks in progress. Please try again after it is completed. (${stats.done_count}/${stats.total_count})`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
const { target, label, mode} = btn;
|
const { target, label, mode} = btn;
|
||||||
|
|
||||||
if(mode === "uninstall") {
|
if(mode === "uninstall") {
|
||||||
@@ -1294,8 +1317,15 @@ export class CustomNodesManager {
|
|||||||
|
|
||||||
let needRestart = false;
|
let needRestart = false;
|
||||||
let errorMsg = "";
|
let errorMsg = "";
|
||||||
|
|
||||||
|
await api.fetchApi('/manager/queue/reset');
|
||||||
|
|
||||||
|
let target_items = [];
|
||||||
|
|
||||||
for (const hash of list) {
|
for (const hash of list) {
|
||||||
const item = this.grid.getRowItemBy("hash", hash);
|
const item = this.grid.getRowItemBy("hash", hash);
|
||||||
|
target_items.push(item);
|
||||||
|
|
||||||
if (!item) {
|
if (!item) {
|
||||||
errorMsg = `Not found custom node: ${hash}`;
|
errorMsg = `Not found custom node: ${hash}`;
|
||||||
break;
|
break;
|
||||||
@@ -1315,6 +1345,7 @@ export class CustomNodesManager {
|
|||||||
data.selected_version = selected_version;
|
data.selected_version = selected_version;
|
||||||
data.channel = this.channel;
|
data.channel = this.channel;
|
||||||
data.mode = this.mode;
|
data.mode = this.mode;
|
||||||
|
data.ui_id = hash;
|
||||||
|
|
||||||
let install_mode = mode;
|
let install_mode = mode;
|
||||||
if(mode == 'switch') {
|
if(mode == 'switch') {
|
||||||
@@ -1332,14 +1363,14 @@ export class CustomNodesManager {
|
|||||||
api_mode = 'reinstall';
|
api_mode = 'reinstall';
|
||||||
}
|
}
|
||||||
|
|
||||||
const res = await api.fetchApi(`/customnode/${api_mode}`, {
|
const res = await api.fetchApi(`/manager/queue/${api_mode}`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
body: JSON.stringify(data)
|
body: JSON.stringify(data)
|
||||||
});
|
});
|
||||||
|
|
||||||
if (res.status != 200) {
|
if (res.status != 200) {
|
||||||
|
|
||||||
errorMsg = `${item.title} ${mode} failed: `;
|
errorMsg = `${item.title} ${mode} failed: `;
|
||||||
|
|
||||||
if(res.status == 403) {
|
if(res.status == 403) {
|
||||||
errorMsg += `This action is not allowed with this security level configuration.`;
|
errorMsg += `This action is not allowed with this security level configuration.`;
|
||||||
} else if(res.status == 404) {
|
} else if(res.status == 404) {
|
||||||
@@ -1350,32 +1381,91 @@ export class CustomNodesManager {
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
needRestart = true;
|
|
||||||
|
|
||||||
this.grid.setRowSelected(item, false);
|
|
||||||
item.restart = true;
|
|
||||||
this.restartMap[item.hash] = true;
|
|
||||||
this.grid.updateCell(item, "action");
|
|
||||||
|
|
||||||
//console.log(res.data);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
target.classList.remove("cn-btn-loading");
|
this.install_context = {btn: btn, targets: target_items};
|
||||||
|
|
||||||
if (errorMsg) {
|
for(let k in target_items) {
|
||||||
|
let item = this.install_context.targets[k];
|
||||||
|
this.grid.updateCell(item, "action");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(errorMsg) {
|
||||||
this.showError(errorMsg);
|
this.showError(errorMsg);
|
||||||
show_message("Installation Error:\n"+errorMsg);
|
show_message("Installation Error:\n"+errorMsg);
|
||||||
|
|
||||||
|
// reset
|
||||||
|
for (const hash of list) {
|
||||||
|
const item = this.grid.getRowItemBy("hash", hash);
|
||||||
|
self.grid.updateCell(item, "action");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await api.fetchApi('/manager/queue/start');
|
||||||
|
this.showStop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async onQueueStatus(event) {
|
||||||
|
let self = CustomNodesManager.instance;
|
||||||
|
if(event.detail.status == 'in_progress' && event.detail.ui_target == 'nodepack_manager') {
|
||||||
|
const hash = event.detail.target;
|
||||||
|
|
||||||
|
const item = self.grid.getRowItemBy("hash", hash);
|
||||||
|
|
||||||
|
item.restart = true;
|
||||||
|
self.restartMap[item.hash] = true;
|
||||||
|
self.grid.updateCell(item, "action");
|
||||||
|
self.grid.setRowSelected(item, false);
|
||||||
|
}
|
||||||
|
else if(event.detail.status == 'done') {
|
||||||
|
self.hideStop();
|
||||||
|
self.onQueueCompleted(event.detail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async onQueueCompleted(info) {
|
||||||
|
let result = info.nodepack_result;
|
||||||
|
|
||||||
|
if(result.length == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let self = CustomNodesManager.instance;
|
||||||
|
|
||||||
|
if(!self.install_context) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { target, label, mode } = self.install_context.btn;
|
||||||
|
target.classList.remove("cn-btn-loading");
|
||||||
|
|
||||||
|
let errorMsg = "";
|
||||||
|
|
||||||
|
for(let hash in result){
|
||||||
|
let v = result[hash];
|
||||||
|
|
||||||
|
if(v != 'success')
|
||||||
|
errorMsg += v;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(let k in self.install_context.targets) {
|
||||||
|
let item = self.install_context.targets[k];
|
||||||
|
self.grid.updateCell(item, "action");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errorMsg) {
|
||||||
|
self.showError(errorMsg);
|
||||||
|
show_message("Installation Error:\n"+errorMsg);
|
||||||
} else {
|
} else {
|
||||||
this.showStatus(`${label} ${list.length} custom node(s) successfully`);
|
self.showStatus(`${label} ${result.length} custom node(s) successfully`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needRestart) {
|
self.showRestart();
|
||||||
this.showRestart();
|
self.showMessage(`To apply the installed/updated/disabled/enabled custom node, please restart ComfyUI. And refresh browser.`, "red");
|
||||||
this.showMessage(`To apply the installed/updated/disabled/enabled custom node, please restart ComfyUI. And refresh browser.`, "red")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
infoToast(`[ComfyUI-Manager] All node pack tasks in the queue have been completed.\n${info.done_count}/${info.total_count}`);
|
||||||
|
self.install_context = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ===========================================================================================
|
// ===========================================================================================
|
||||||
@@ -1756,9 +1846,9 @@ export class CustomNodesManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setDisabled(disabled) {
|
setDisabled(disabled) {
|
||||||
|
|
||||||
const $close = this.element.querySelector(".cn-manager-close");
|
const $close = this.element.querySelector(".cn-manager-close");
|
||||||
const $restart = this.element.querySelector(".cn-manager-restart");
|
const $restart = this.element.querySelector(".cn-manager-restart");
|
||||||
|
const $stop = this.element.querySelector(".cn-manager-stop");
|
||||||
|
|
||||||
const list = [
|
const list = [
|
||||||
".cn-manager-header input",
|
".cn-manager-header input",
|
||||||
@@ -1770,7 +1860,7 @@ export class CustomNodesManager {
|
|||||||
})
|
})
|
||||||
.flat()
|
.flat()
|
||||||
.filter(it => {
|
.filter(it => {
|
||||||
return it !== $close && it !== $restart;
|
return it !== $close && it !== $restart && it !== $stop;
|
||||||
});
|
});
|
||||||
|
|
||||||
list.forEach($elem => {
|
list.forEach($elem => {
|
||||||
@@ -1791,6 +1881,14 @@ export class CustomNodesManager {
|
|||||||
this.element.querySelector(".cn-manager-restart").style.display = "block";
|
this.element.querySelector(".cn-manager-restart").style.display = "block";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showStop() {
|
||||||
|
this.element.querySelector(".cn-manager-stop").style.display = "block";
|
||||||
|
}
|
||||||
|
|
||||||
|
hideStop() {
|
||||||
|
this.element.querySelector(".cn-manager-stop").style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
setFilter(filterValue) {
|
setFilter(filterValue) {
|
||||||
let filter = "";
|
let filter = "";
|
||||||
const filterItem = this.getFilterItem(filterValue);
|
const filterItem = this.getFilterItem(filterValue);
|
||||||
@@ -1818,4 +1916,8 @@ export class CustomNodesManager {
|
|||||||
close() {
|
close() {
|
||||||
this.element.style.display = "none";
|
this.element.style.display = "none";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get isVisible() {
|
||||||
|
return this.element?.style?.display !== "none";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -1,8 +1,10 @@
|
|||||||
|
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
|
fetchData, md5, icons, show_message, customAlert, infoToast
|
||||||
} from "./common.js";
|
} from "./common.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";
|
||||||
@@ -46,6 +48,18 @@ const pageCss = `
|
|||||||
background-color: var(--comfy-input-bg);
|
background-color: var(--comfy-input-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cmm-manager .cmm-manager-refresh {
|
||||||
|
display: none;
|
||||||
|
background-color: #000080;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cmm-manager .cmm-manager-stop {
|
||||||
|
display: none;
|
||||||
|
background-color: #500000;
|
||||||
|
color: white;
|
||||||
|
}
|
||||||
|
|
||||||
.cmm-manager-header {
|
.cmm-manager-header {
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-wrap: wrap;
|
flex-wrap: wrap;
|
||||||
@@ -235,7 +249,14 @@ const pageHtml = `
|
|||||||
<div class="cmm-manager-selection"></div>
|
<div class="cmm-manager-selection"></div>
|
||||||
<div class="cmm-manager-message"></div>
|
<div class="cmm-manager-message"></div>
|
||||||
<div class="cmm-manager-footer">
|
<div class="cmm-manager-footer">
|
||||||
<button class="cmm-manager-back">Back</button>
|
<button class="cmm-manager-back">
|
||||||
|
<svg class="arrow-icon" width="14" height="14" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M2 8H18M2 8L8 2M2 8L8 14" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||||
|
</svg>
|
||||||
|
Back
|
||||||
|
</button>
|
||||||
|
<button class="cmm-manager-refresh">Refresh</button>
|
||||||
|
<button class="cmm-manager-stop">Stop</button>
|
||||||
<div class="cmm-flex-auto"></div>
|
<div class="cmm-flex-auto"></div>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
@@ -254,6 +275,8 @@ export class ModelManager {
|
|||||||
this.keywords = '';
|
this.keywords = '';
|
||||||
|
|
||||||
this.init();
|
this.init();
|
||||||
|
|
||||||
|
api.addEventListener("cm-queue-status", this.onQueueStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
init() {
|
init() {
|
||||||
@@ -365,12 +388,25 @@ export class ModelManager {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
".cmm-manager-refresh": {
|
||||||
|
click: () => {
|
||||||
|
app.refreshComboInNodes();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
".cmm-manager-stop": {
|
||||||
|
click: () => {
|
||||||
|
api.fetchApi('/manager/queue/reset');
|
||||||
|
infoToast('Cancel', 'Remaining tasks will stop after completing the current task.');
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
".cmm-manager-back": {
|
".cmm-manager-back": {
|
||||||
click: (e) => {
|
click: (e) => {
|
||||||
this.close()
|
this.close()
|
||||||
manager_instance.show();
|
manager_instance.show();
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
};
|
};
|
||||||
Object.keys(eventsMap).forEach(selector => {
|
Object.keys(eventsMap).forEach(selector => {
|
||||||
const target = this.element.querySelector(selector);
|
const target = this.element.querySelector(selector);
|
||||||
@@ -595,17 +631,28 @@ export class ModelManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async installModels(list, btn) {
|
async installModels(list, btn) {
|
||||||
|
let stats = await api.fetchApi('/manager/queue/status');
|
||||||
|
|
||||||
|
stats = await stats.json();
|
||||||
|
if(stats.is_processing) {
|
||||||
|
customAlert(`[ComfyUI-Manager] There are already tasks in progress. Please try again after it is completed. (${stats.done_count}/${stats.total_count})`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
btn.classList.add("cmm-btn-loading");
|
btn.classList.add("cmm-btn-loading");
|
||||||
this.showLoading();
|
this.showLoading();
|
||||||
this.showError("");
|
this.showError("");
|
||||||
|
|
||||||
let needRestart = false;
|
let needRefresh = false;
|
||||||
let errorMsg = "";
|
let errorMsg = "";
|
||||||
|
|
||||||
for (const item of list) {
|
await api.fetchApi('/manager/queue/reset');
|
||||||
|
|
||||||
|
let target_items = [];
|
||||||
|
|
||||||
|
for (const item of list) {
|
||||||
this.grid.scrollRowIntoView(item);
|
this.grid.scrollRowIntoView(item);
|
||||||
|
target_items.push(item);
|
||||||
|
|
||||||
if (!this.focusInstall(item)) {
|
if (!this.focusInstall(item)) {
|
||||||
this.grid.onNextUpdated(() => {
|
this.grid.onNextUpdated(() => {
|
||||||
@@ -616,48 +663,104 @@ export class ModelManager {
|
|||||||
this.showStatus(`Install ${item.name} ...`);
|
this.showStatus(`Install ${item.name} ...`);
|
||||||
|
|
||||||
const data = item.originalData;
|
const data = item.originalData;
|
||||||
const res = await fetchData('/model/install', {
|
data.ui_id = item.hash;
|
||||||
|
|
||||||
|
const res = await api.fetchApi(`/manager/queue/install_model`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: { 'Content-Type': 'application/json' },
|
|
||||||
body: JSON.stringify(data)
|
body: JSON.stringify(data)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (res.status != 200) {
|
||||||
if (res.error) {
|
|
||||||
errorMsg = `Install failed: ${item.name} ${res.error.message}`;
|
errorMsg = `Install failed: ${item.name} ${res.error.message}`;
|
||||||
break;;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
needRestart = true;
|
this.install_context = {btn: btn, targets: target_items};
|
||||||
|
|
||||||
this.grid.setRowSelected(item, false);
|
if(errorMsg) {
|
||||||
|
this.showError(errorMsg);
|
||||||
|
show_message("Installation Error:\n"+errorMsg);
|
||||||
|
|
||||||
|
// reset
|
||||||
|
for (const hash of list) {
|
||||||
|
const item = this.grid.getRowItemBy("hash", hash);
|
||||||
|
this.grid.updateCell(item, "installed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
await api.fetchApi('/manager/queue/start');
|
||||||
|
this.showStop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async onQueueStatus(event) {
|
||||||
|
let self = ModelManager.instance;
|
||||||
|
|
||||||
|
if(event.detail.status == 'in_progress' && event.detail.ui_target == 'model_manager') {
|
||||||
|
const hash = event.detail.target;
|
||||||
|
|
||||||
|
const item = self.grid.getRowItemBy("hash", hash);
|
||||||
|
|
||||||
item.refresh = true;
|
item.refresh = true;
|
||||||
|
self.grid.setRowSelected(item, false);
|
||||||
item.selectable = false;
|
item.selectable = false;
|
||||||
this.grid.updateCell(item, "installed");
|
// self.grid.updateCell(item, "tg-column-select");
|
||||||
this.grid.updateCell(item, "tg-column-select");
|
self.grid.updateRow(item);
|
||||||
|
}
|
||||||
|
else if(event.detail.status == 'done') {
|
||||||
|
self.hideStop();
|
||||||
|
self.onQueueCompleted(event.detail);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this.showStatus(`Install ${item.name} successfully`);
|
async onQueueCompleted(info) {
|
||||||
|
let result = info.model_result;
|
||||||
|
|
||||||
|
if(result.length == 0) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.hideLoading();
|
let self = ModelManager.instance;
|
||||||
|
|
||||||
|
if(!self.install_context) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
let btn = self.install_context.btn;
|
||||||
|
|
||||||
|
self.hideLoading();
|
||||||
btn.classList.remove("cmm-btn-loading");
|
btn.classList.remove("cmm-btn-loading");
|
||||||
|
|
||||||
|
let errorMsg = "";
|
||||||
|
|
||||||
|
for(let hash in result){
|
||||||
|
let v = result[hash];
|
||||||
|
|
||||||
|
if(v != 'success')
|
||||||
|
errorMsg += v;
|
||||||
|
}
|
||||||
|
|
||||||
|
for(let k in self.install_context.targets) {
|
||||||
|
let item = self.install_context.targets[k];
|
||||||
|
self.grid.updateCell(item, "installed");
|
||||||
|
}
|
||||||
|
|
||||||
if (errorMsg) {
|
if (errorMsg) {
|
||||||
this.showError(errorMsg);
|
self.showError(errorMsg);
|
||||||
|
show_message("Installation Error:\n"+errorMsg);
|
||||||
} else {
|
} else {
|
||||||
this.showStatus(`Install ${list.length} models successfully`);
|
self.showStatus(`Install ${result.length} models successfully`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (needRestart) {
|
self.showRefresh();
|
||||||
this.showMessage(`To apply the installed model, please click the 'Refresh' button on the main menu.`, "red")
|
self.showMessage(`To apply the installed model, please click the 'Refresh' button.`, "red")
|
||||||
}
|
|
||||||
|
|
||||||
|
infoToast('Tasks done', `[ComfyUI-Manager] All model downloading tasks in the queue have been completed.\n${info.done_count}/${info.total_count}`);
|
||||||
|
self.install_context = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
getModelList(models) {
|
getModelList(models) {
|
||||||
|
|
||||||
const typeMap = new Map();
|
const typeMap = new Map();
|
||||||
const baseMap = new Map();
|
const baseMap = new Map();
|
||||||
|
|
||||||
@@ -826,7 +929,7 @@ export class ModelManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
showLoading() {
|
showLoading() {
|
||||||
this.setDisabled(true);
|
// this.setDisabled(true);
|
||||||
if (this.grid) {
|
if (this.grid) {
|
||||||
this.grid.showLoading();
|
this.grid.showLoading();
|
||||||
this.grid.showMask({
|
this.grid.showMask({
|
||||||
@@ -836,7 +939,7 @@ export class ModelManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
hideLoading() {
|
hideLoading() {
|
||||||
this.setDisabled(false);
|
// this.setDisabled(false);
|
||||||
if (this.grid) {
|
if (this.grid) {
|
||||||
this.grid.hideLoading();
|
this.grid.hideLoading();
|
||||||
this.grid.hideMask();
|
this.grid.hideMask();
|
||||||
@@ -844,8 +947,9 @@ export class ModelManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
setDisabled(disabled) {
|
setDisabled(disabled) {
|
||||||
|
|
||||||
const $close = this.element.querySelector(".cmm-manager-close");
|
const $close = this.element.querySelector(".cmm-manager-close");
|
||||||
|
const $refresh = this.element.querySelector(".cmm-manager-refresh");
|
||||||
|
const $stop = this.element.querySelector(".cmm-manager-stop");
|
||||||
|
|
||||||
const list = [
|
const list = [
|
||||||
".cmm-manager-header input",
|
".cmm-manager-header input",
|
||||||
@@ -857,7 +961,7 @@ export class ModelManager {
|
|||||||
})
|
})
|
||||||
.flat()
|
.flat()
|
||||||
.filter(it => {
|
.filter(it => {
|
||||||
return it !== $close;
|
return it !== $close && it !== $refresh && it !== $stop;
|
||||||
});
|
});
|
||||||
|
|
||||||
list.forEach($elem => {
|
list.forEach($elem => {
|
||||||
@@ -874,6 +978,18 @@ export class ModelManager {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
showRefresh() {
|
||||||
|
this.element.querySelector(".cmm-manager-refresh").style.display = "block";
|
||||||
|
}
|
||||||
|
|
||||||
|
showStop() {
|
||||||
|
this.element.querySelector(".cmm-manager-stop").style.display = "block";
|
||||||
|
}
|
||||||
|
|
||||||
|
hideStop() {
|
||||||
|
this.element.querySelector(".cmm-manager-stop").style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
setKeywords(keywords = "") {
|
setKeywords(keywords = "") {
|
||||||
this.keywords = keywords;
|
this.keywords = keywords;
|
||||||
this.element.querySelector(".cmm-manager-keywords").value = keywords;
|
this.element.querySelector(".cmm-manager-keywords").value = keywords;
|
||||||
|
|||||||
@@ -1,16 +1,6 @@
|
|||||||
import { app } from "../../scripts/app.js";
|
import { app } from "../../scripts/app.js";
|
||||||
import { api } from "../../scripts/api.js";
|
import { api } from "../../scripts/api.js";
|
||||||
|
|
||||||
let double_click_policy = "copy-all";
|
|
||||||
|
|
||||||
api.fetchApi('/manager/dbl_click/policy')
|
|
||||||
.then(response => response.text())
|
|
||||||
.then(data => set_double_click_policy(data));
|
|
||||||
|
|
||||||
export function set_double_click_policy(mode) {
|
|
||||||
double_click_policy = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
function addMenuHandler(nodeType, cb) {
|
function addMenuHandler(nodeType, cb) {
|
||||||
const getOpts = nodeType.prototype.getExtraMenuOptions;
|
const getOpts = nodeType.prototype.getExtraMenuOptions;
|
||||||
nodeType.prototype.getExtraMenuOptions = function () {
|
nodeType.prototype.getExtraMenuOptions = function () {
|
||||||
@@ -153,62 +143,6 @@ function node_info_copy(src, dest, connect_both, copy_shape) {
|
|||||||
|
|
||||||
app.registerExtension({
|
app.registerExtension({
|
||||||
name: "Comfy.Manager.NodeFixer",
|
name: "Comfy.Manager.NodeFixer",
|
||||||
|
|
||||||
async nodeCreated(node, app) {
|
|
||||||
let orig_dblClick = node.onDblClick;
|
|
||||||
node.onDblClick = function (e, pos, self) {
|
|
||||||
orig_dblClick?.apply?.(this, arguments);
|
|
||||||
|
|
||||||
if((!node.inputs && !node.outputs) || pos[1] > 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch(double_click_policy) {
|
|
||||||
case "copy-all":
|
|
||||||
case "copy-full":
|
|
||||||
case "copy-input":
|
|
||||||
{
|
|
||||||
if(node.inputs?.some(x => x.link != null) || node.outputs?.some(x => x.links != null && x.links.length > 0) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
let src_node = lookup_nearest_nodes(node);
|
|
||||||
if(src_node)
|
|
||||||
{
|
|
||||||
let both_connection = double_click_policy != "copy-input";
|
|
||||||
let copy_shape = double_click_policy == "copy-full";
|
|
||||||
node_info_copy(src_node, node, both_connection, copy_shape);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "possible-input":
|
|
||||||
{
|
|
||||||
let nearest_inputs = lookup_nearest_inputs(node);
|
|
||||||
if(nearest_inputs)
|
|
||||||
connect_inputs(nearest_inputs, node);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case "dual":
|
|
||||||
{
|
|
||||||
if(pos[0] < node.size[0]/2) {
|
|
||||||
// left: possible-input
|
|
||||||
let nearest_inputs = lookup_nearest_inputs(node);
|
|
||||||
if(nearest_inputs)
|
|
||||||
connect_inputs(nearest_inputs, node);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// right: copy-all
|
|
||||||
if(node.inputs?.some(x => x.link != null) || node.outputs?.some(x => x.links != null && x.links.length > 0) )
|
|
||||||
return;
|
|
||||||
|
|
||||||
let src_node = lookup_nearest_nodes(node);
|
|
||||||
if(src_node)
|
|
||||||
node_info_copy(src_node, node, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
beforeRegisterNodeDef(nodeType, nodeData, app) {
|
beforeRegisterNodeDef(nodeType, nodeData, app) {
|
||||||
addMenuHandler(nodeType, function (_, options) {
|
addMenuHandler(nodeType, function (_, options) {
|
||||||
options.push({
|
options.push({
|
||||||
|
|||||||
@@ -11,6 +11,66 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "molbal",
|
||||||
|
"title": "comfy-url-fetcher [WIP]",
|
||||||
|
"reference": "https://github.com/molbal/comfy-url-fetcher",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/molbal/comfy-url-fetcher"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Fetches URLs"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "myAiLemon",
|
||||||
|
"title": "MagicAutomaticPicture [WIP]",
|
||||||
|
"reference": "https://github.com/myAiLemon/MagicAutomaticPicture",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/myAiLemon/MagicAutomaticPicture"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A comfyui node package that can generate pictures and automatically save positive prompts and eliminate unwanted prompts"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "neverbiasu",
|
||||||
|
"title": "ComfyUI_Output_as_Input",
|
||||||
|
"reference": "https://github.com/a-und-b/ComfyUI_Output_as_Input",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/a-und-b/ComfyUI_Output_as_Input"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "This is a simple custom ComfyUI node that allows you to easily use recent output images as input in your workflows. It does not allow image uploads on purpose and does not require any additional dependencies.\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "neverbiasu",
|
||||||
|
"title": "ComfyUI-DeepSeek",
|
||||||
|
"reference": "https://github.com/neverbiasu/ComfyUI-DeepSeek",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/neverbiasu/ComfyUI-DeepSeek"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: DeepSeek Caller"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "Krish-701",
|
||||||
|
"title": "RK_Comfyui",
|
||||||
|
"reference": "https://github.com/Krish-701/RK_Comfyui",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/Krish-701/RK_Comfyui"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: RK Excel File State Looper, RK Accumulate Text, RK Advanced Script Finder, RK CSV File State Looper, RK Read Excel Row, RK Sequential Image Viewer, RK Concatenate Text, RK Write Text, RK Save Image, RK Seed Loop"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "mikebilly",
|
||||||
|
"title": "transparent-background-comfyui",
|
||||||
|
"reference": "https://github.com/mikebilly/Transparent-background-comfyUI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/mikebilly/Transparent-background-comfyUI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Transparentbackground RemBg"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "UD1sto",
|
"author": "UD1sto",
|
||||||
"title": "plugin-utils-nodes",
|
"title": "plugin-utils-nodes",
|
||||||
@@ -19,17 +79,7 @@
|
|||||||
"https://github.com/UD1sto/plugin-utils-nodes"
|
"https://github.com/UD1sto/plugin-utils-nodes"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "NODES:Compare Images (SimHash), Image Selector, Temporal Consistency, Update Image Reference, Frame Blend."
|
"description": "NODES: Compare Images (SimHash), Image Selector, Temporal Consistency, Update Image Reference, Frame Blend."
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "ryanontheinside",
|
|
||||||
"title": "ComfyUI_ScavengerHunt",
|
|
||||||
"reference": "https://github.com/ryanontheinside/ComfyUI_ScavengerHunt",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/ryanontheinside/ComfyUI_ScavengerHunt"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "NODES:Compare Image Similarity (ResNet), Compare Image Similarity (CLIP), Compare Image Types\nNOTE: The files in the repo are not organized."
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "Kayarte",
|
"author": "Kayarte",
|
||||||
|
|||||||
@@ -923,7 +923,9 @@
|
|||||||
[
|
[
|
||||||
"DeepSeekImageGeneration",
|
"DeepSeekImageGeneration",
|
||||||
"DeepSeekImageUnderstanding",
|
"DeepSeekImageUnderstanding",
|
||||||
"DeepSeekModelLoader"
|
"DeepSeekModelLoader",
|
||||||
|
"LLM_Loader",
|
||||||
|
"OpenAICompatibleLoader"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-DeepSeek_Toolkit [WIP]"
|
"title_aux": "ComfyUI-DeepSeek_Toolkit [WIP]"
|
||||||
@@ -1091,6 +1093,26 @@
|
|||||||
"title_aux": "ComfyUI Production Nodes Pack [WIP]"
|
"title_aux": "ComfyUI Production Nodes Pack [WIP]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Krish-701/RK_Comfyui": [
|
||||||
|
[
|
||||||
|
"RK_Accumulate_Text_Multiline",
|
||||||
|
"RK_Accumulate_Text_Multiline_Numbered",
|
||||||
|
"RK_Advanced_Script_Finder",
|
||||||
|
"RK_CSV_File_State_Looper_v01",
|
||||||
|
"RK_Calc",
|
||||||
|
"RK_Concatenate_Text",
|
||||||
|
"RK_Excel_File_State_Looper",
|
||||||
|
"RK_ImageViewer",
|
||||||
|
"RK_Read_Excel_Row",
|
||||||
|
"RK_Write_Text",
|
||||||
|
"RK_seed",
|
||||||
|
"rk_save_image",
|
||||||
|
"rk_save_image_v01"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "RK_Comfyui"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/LZpenguin/ComfyUI-Text": [
|
"https://github.com/LZpenguin/ComfyUI-Text": [
|
||||||
[
|
[
|
||||||
"Add_text_by_mask"
|
"Add_text_by_mask"
|
||||||
@@ -1476,7 +1498,8 @@
|
|||||||
"FreeMemoryCLIP",
|
"FreeMemoryCLIP",
|
||||||
"FreeMemoryImage",
|
"FreeMemoryImage",
|
||||||
"FreeMemoryLatent",
|
"FreeMemoryLatent",
|
||||||
"FreeMemoryModel"
|
"FreeMemoryModel",
|
||||||
|
"FreeMemoryString"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-FreeMemory"
|
"title_aux": "ComfyUI-FreeMemory"
|
||||||
@@ -1606,6 +1629,10 @@
|
|||||||
"FrameBlend",
|
"FrameBlend",
|
||||||
"ImageReferenceUpdate",
|
"ImageReferenceUpdate",
|
||||||
"ImageSelector",
|
"ImageSelector",
|
||||||
|
"KeypointsInput",
|
||||||
|
"KeypointsInputNode",
|
||||||
|
"KeypointsToPose",
|
||||||
|
"KeypointsToPoseNode",
|
||||||
"SimHashCompare",
|
"SimHashCompare",
|
||||||
"TemporalConsistency"
|
"TemporalConsistency"
|
||||||
],
|
],
|
||||||
@@ -1737,6 +1764,14 @@
|
|||||||
"title_aux": "ComfyUI-Blenderesque-Nodes [WIP]"
|
"title_aux": "ComfyUI-Blenderesque-Nodes [WIP]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/a-und-b/ComfyUI_Output_as_Input": [
|
||||||
|
[
|
||||||
|
"OutputAsInput"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_Output_as_Input"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/aiden1020/ComfyUI_Artcoder": [
|
"https://github.com/aiden1020/ComfyUI_Artcoder": [
|
||||||
[
|
[
|
||||||
"ArtCoder"
|
"ArtCoder"
|
||||||
@@ -2416,6 +2451,7 @@
|
|||||||
"PolyexponentialScheduler",
|
"PolyexponentialScheduler",
|
||||||
"PorterDuffImageComposite",
|
"PorterDuffImageComposite",
|
||||||
"Preview3D",
|
"Preview3D",
|
||||||
|
"Preview3DAnimation",
|
||||||
"PreviewAudio",
|
"PreviewAudio",
|
||||||
"PreviewImage",
|
"PreviewImage",
|
||||||
"RandomNoise",
|
"RandomNoise",
|
||||||
@@ -3295,12 +3331,15 @@
|
|||||||
[
|
[
|
||||||
"ForceMinimumBatchSize",
|
"ForceMinimumBatchSize",
|
||||||
"ImageCompositeChained",
|
"ImageCompositeChained",
|
||||||
|
"LineDetection",
|
||||||
|
"MangaPanelSegmentationNode",
|
||||||
|
"Mask_Fill_Region",
|
||||||
"MatchImageCountToMaskCount",
|
"MatchImageCountToMaskCount",
|
||||||
"ParallaxGPUTest",
|
|
||||||
"ParallaxTest",
|
"ParallaxTest",
|
||||||
"RandomCharacterPrompts",
|
"RandomCharacterPrompts",
|
||||||
"TargetLocationCrop",
|
"TargetLocationCrop",
|
||||||
"TargetLocationPaste",
|
"TargetLocationPaste",
|
||||||
|
"Yolov8Detection",
|
||||||
"easy_parallax",
|
"easy_parallax",
|
||||||
"string_list_to_prompt_schedule"
|
"string_list_to_prompt_schedule"
|
||||||
],
|
],
|
||||||
@@ -3458,6 +3497,7 @@
|
|||||||
"Hy3DDelightImage",
|
"Hy3DDelightImage",
|
||||||
"Hy3DDiffusersSchedulerConfig",
|
"Hy3DDiffusersSchedulerConfig",
|
||||||
"Hy3DExportMesh",
|
"Hy3DExportMesh",
|
||||||
|
"Hy3DFastSimplifyMesh",
|
||||||
"Hy3DGenerateMesh",
|
"Hy3DGenerateMesh",
|
||||||
"Hy3DGetMeshPBRTextures",
|
"Hy3DGetMeshPBRTextures",
|
||||||
"Hy3DIMRemesh",
|
"Hy3DIMRemesh",
|
||||||
@@ -3466,6 +3506,7 @@
|
|||||||
"Hy3DMeshUVWrap",
|
"Hy3DMeshUVWrap",
|
||||||
"Hy3DMeshVerticeInpaintTexture",
|
"Hy3DMeshVerticeInpaintTexture",
|
||||||
"Hy3DModelLoader",
|
"Hy3DModelLoader",
|
||||||
|
"Hy3DNvdiffrastRenderer",
|
||||||
"Hy3DPostprocessMesh",
|
"Hy3DPostprocessMesh",
|
||||||
"Hy3DRenderMultiView",
|
"Hy3DRenderMultiView",
|
||||||
"Hy3DRenderMultiViewDepth",
|
"Hy3DRenderMultiViewDepth",
|
||||||
@@ -3957,7 +3998,6 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
||||||
[
|
[
|
||||||
"Add zSNR Sigma max",
|
|
||||||
"ConcatSigmas",
|
"ConcatSigmas",
|
||||||
"CosineScheduler",
|
"CosineScheduler",
|
||||||
"GaussianScheduler",
|
"GaussianScheduler",
|
||||||
@@ -3965,12 +4005,21 @@
|
|||||||
"LogNormal Scheduler",
|
"LogNormal Scheduler",
|
||||||
"OffsetSigmas",
|
"OffsetSigmas",
|
||||||
"PerpNegScheduledCFGGuider",
|
"PerpNegScheduledCFGGuider",
|
||||||
"ScheduledCFGGuider"
|
"ScheduledCFGGuider",
|
||||||
|
"SplitSigmasByValue"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/mikebilly/Transparent-background-comfyUI": [
|
||||||
|
[
|
||||||
|
"Transparentbackground RemBg"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "transparent-background-comfyui"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/mikeymcfish/FishTools": [
|
"https://github.com/mikeymcfish/FishTools": [
|
||||||
[
|
[
|
||||||
"AnaglyphCreator",
|
"AnaglyphCreator",
|
||||||
@@ -4042,6 +4091,14 @@
|
|||||||
"title_aux": "ComfyUI-FramerComfy [WIP]"
|
"title_aux": "ComfyUI-FramerComfy [WIP]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/molbal/comfy-url-fetcher": [
|
||||||
|
[
|
||||||
|
"URL Fetcher"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "comfy-url-fetcher [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/monate0615/ComfyUI-Affine-Transform": [
|
"https://github.com/monate0615/ComfyUI-Affine-Transform": [
|
||||||
[
|
[
|
||||||
"AffineTransform"
|
"AffineTransform"
|
||||||
@@ -4075,6 +4132,17 @@
|
|||||||
"title_aux": "ComfyUI-Claude-I2T"
|
"title_aux": "ComfyUI-Claude-I2T"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/myAiLemon/MagicAutomaticPicture": [
|
||||||
|
[
|
||||||
|
"EditableStringNode",
|
||||||
|
"IntegratedCLIPTextEncodeWithExtract",
|
||||||
|
"ProcessAndSave",
|
||||||
|
"StringConcat"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "MagicAutomaticPicture [WIP]"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/naderzare/comfyui-inodes": [
|
"https://github.com/naderzare/comfyui-inodes": [
|
||||||
[
|
[
|
||||||
"IAzureAiApi",
|
"IAzureAiApi",
|
||||||
@@ -4137,6 +4205,14 @@
|
|||||||
"title_aux": "ComfyUI-ControlNeXt [WIP]"
|
"title_aux": "ComfyUI-ControlNeXt [WIP]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/neverbiasu/ComfyUI-DeepSeek": [
|
||||||
|
[
|
||||||
|
"DeepSeekCaller"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DeepSeek"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/neverbiasu/ComfyUI-StereoCrafter": [
|
"https://github.com/neverbiasu/ComfyUI-StereoCrafter": [
|
||||||
[
|
[
|
||||||
"DepthSplattingModelLoader",
|
"DepthSplattingModelLoader",
|
||||||
@@ -4205,7 +4281,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/nomcycle/ComfyUI_Cluster": [
|
"https://github.com/nomcycle/ComfyUI_Cluster": [
|
||||||
[
|
[
|
||||||
"FenceClusteredWorkflow"
|
"ClusterFanInTensorsToBatch",
|
||||||
|
"ClusterInstanceIndex"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI_Cluster [WIP]"
|
"title_aux": "ComfyUI_Cluster [WIP]"
|
||||||
@@ -4440,16 +4517,6 @@
|
|||||||
"title_aux": "ComfyUI RukaLib [WIP]"
|
"title_aux": "ComfyUI RukaLib [WIP]"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/ryanontheinside/ComfyUI_ScavengerHunt": [
|
|
||||||
[
|
|
||||||
"CLIPSimilarityCompare",
|
|
||||||
"ImageSimilarityCompare",
|
|
||||||
"SemanticSimilarityCompare"
|
|
||||||
],
|
|
||||||
{
|
|
||||||
"title_aux": "ComfyUI_ScavengerHunt"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"https://github.com/ryanontheinside/ComfyUI_YoloNasObjectDetection_Tensorrt": [
|
"https://github.com/ryanontheinside/ComfyUI_YoloNasObjectDetection_Tensorrt": [
|
||||||
[
|
[
|
||||||
"YoloNasDetectionTensorrt"
|
"YoloNasDetectionTensorrt"
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -1,5 +1,15 @@
|
|||||||
{
|
{
|
||||||
"custom_nodes": [
|
"custom_nodes": [
|
||||||
|
{
|
||||||
|
"author": "PramaLLC",
|
||||||
|
"title": "ComfyUI BEN - Background Erase Network",
|
||||||
|
"reference": "https://github.com/PramaLLC/BEN2_ComfyUI",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/PramaLLC/BEN2_ComfyUI"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "Remove backgrounds from images with [a/BEN2](https://huggingface.co/PramaLLC/BEN2) in ComfyUI\nOriginal repo: [a/https://github.com/DoctorDiffusion/ComfyUI-BEN](https://github.com/DoctorDiffusion/ComfyUI-BEN)"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "BlenderNeko",
|
"author": "BlenderNeko",
|
||||||
"title": "ltdrdata/ComfyUI_TiledKSampler",
|
"title": "ltdrdata/ComfyUI_TiledKSampler",
|
||||||
|
|||||||
@@ -11,6 +11,26 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"author": "myAiLemon",
|
||||||
|
"title": "MagicGetPromptAutomatically",
|
||||||
|
"reference": "https://github.com/myAiLemon/MagicGetPromptAutomatically",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/myAiLemon/MagicGetPromptAutomatically"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "A plug-in that can automatically generate pictures and save txt files in comfyui"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "ryanontheinside",
|
||||||
|
"title": "ComfyUI_ScavengerHunt [REMOVED]",
|
||||||
|
"reference": "https://github.com/ryanontheinside/ComfyUI_ScavengerHunt",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ryanontheinside/ComfyUI_ScavengerHunt"
|
||||||
|
],
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"description": "NODES: Compare Image Similarity (ResNet), Compare Image Similarity (CLIP), Compare Image Types\nNOTE: The files in the repo are not organized."
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"author": "vpakarinen",
|
"author": "vpakarinen",
|
||||||
"title": "ComfyUI-GenerationTimer [REMOVED]",
|
"title": "ComfyUI-GenerationTimer [REMOVED]",
|
||||||
|
|||||||
@@ -10,6 +10,151 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{
|
||||||
|
"title": "A2V Multi Image Composite",
|
||||||
|
"author": "AiartvnTeam",
|
||||||
|
"id": "Aiartvn",
|
||||||
|
"description": "Node for compositing multiple images with interactive preview and layer management",
|
||||||
|
"repository": "https://github.com/aiartvn/A2V_Multi_Image_Composite",
|
||||||
|
"install_type": "git-clone",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/aiartvn/A2V_Multi_Image_Composite"
|
||||||
|
],
|
||||||
|
"tags": ["image", "composite", "layer", "blend", "transform"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"author": "ProGamerGov",
|
||||||
|
"title": "Preview 360 Panorama for ComfyUI",
|
||||||
|
"id": "comfyui-preview360panorama",
|
||||||
|
"reference": "https://github.com/ProGamerGov/ComfyUI_preview360panorama",
|
||||||
|
"files": [
|
||||||
|
"https://github.com/ProGamerGov/ComfyUI_preview360panorama"
|
||||||
|
],
|
||||||
|
"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."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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",
|
"author": "Dr.Lt.Data",
|
||||||
"title": "ComfyUI Connection Helper",
|
"title": "ComfyUI Connection Helper",
|
||||||
@@ -148,13 +293,13 @@
|
|||||||
{
|
{
|
||||||
"author": "ProGamerGov",
|
"author": "ProGamerGov",
|
||||||
"title": "PyTorch 360° Image Conversion Toolkit for ComfyUI",
|
"title": "PyTorch 360° Image Conversion Toolkit for ComfyUI",
|
||||||
"id": "pytorch360convert",
|
"id": "comfyui-pytorch360convert",
|
||||||
"reference": "https://github.com/ProGamerGov/ComfyUI_pytorch360convert",
|
"reference": "https://github.com/ProGamerGov/ComfyUI_pytorch360convert",
|
||||||
"files": [
|
"files": [
|
||||||
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert"
|
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert"
|
||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A collection of custom nodes for working and converting between 360 degree equirectangular images, cubemap, and perspective images. Panoramic 360 images are also sometimes known as 'VR photography', 'image sphere', and 360 pano."
|
"description": "A collection of custom nodes for working with and converting between 360 degree equirectangular images, cubemap, and perspective images. Panoramic 360 images are also sometimes known as VR photography (virtual reality), HDRI environments (ex: skyboxes), image spheres, spherical images, 360 pano."
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"author": "Conor-Collins",
|
"author": "Conor-Collins",
|
||||||
@@ -587,109 +732,6 @@
|
|||||||
],
|
],
|
||||||
"install_type": "git-clone",
|
"install_type": "git-clone",
|
||||||
"description": "A Text To Speech node using Kokoro TTS in ComfyUI."
|
"description": "A Text To Speech node using Kokoro TTS in ComfyUI."
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "WangPengxing",
|
|
||||||
"title": "ComfyUI WPX Nodes",
|
|
||||||
"reference": "https://github.com/WangPengxing/ComfyUI_WPX_Node",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/WangPengxing/ComfyUI_WPX_Node"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A custom node collection for ComfyUI, offering enhanced image processing features."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "PixelFunAI",
|
|
||||||
"title": "Hunyuan LoRA Loader Nodes",
|
|
||||||
"reference": "https://github.com/PixelFunAI/ComfyUI_PixelFun",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/PixelFunAI/ComfyUI_PixelFun"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This collection provides four additional nodes for loading and managing Hunyuan Video LoRAs in ComfyUI"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "Kidev",
|
|
||||||
"title": "ComfyUI Fisheye Effects Nodes",
|
|
||||||
"reference": "https://github.com/Kidev/ComfyUI-Fisheye-effects",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/Kidev/ComfyUI-Fisheye-effects"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Provides tools for applying and removing fisheye lens effects from images."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "feixuetuba",
|
|
||||||
"title": "Spleeter",
|
|
||||||
"reference": "https://github.com/feixuetuba/Spleeter",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/feixuetuba/Spleeter"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "This is a ComfyUI plugin based on [a/Spleeter](https://github.com/deezer/spleete). The model files are available on BaiduNetDisk. After downloading the model, place it in the checkpoints directory."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "aidec",
|
|
||||||
"title": "Comfyui_TextBatch_aidec",
|
|
||||||
"reference": "https://github.com/aidec/Comfyui_TextBatch_aidec",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/aidec/Comfyui_TextBatch_aidec"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "The Text Queue Processor can split text into groups line by line for batch processing (unfinished, with noticeable bugs still being fixed). Currently, on the first run, it may only process one item. Once that is completed, running it again usually works fine. After each run, the `start_index` needs to be manually reset. Occasionally, strange issues occur, such as multiple queues being added at once, while other times it works perfectly fine. The potential causes are still under investigation."
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
"author": "hellercommaa",
|
|
||||||
"title": "Hunyuan Video Resolutions",
|
|
||||||
"id": "hunyuanvideoresolutions",
|
|
||||||
"reference": "https://github.com/HellerCommaA/ComfyUI-VideoResolutions",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/HellerCommaA/ComfyUI-VideoResolutions"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A super simple node that outputs common video resolutions as 2 integers for Hunyuan and others!"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "Gourieff",
|
|
||||||
"title": "comfyui-reactor-node",
|
|
||||||
"reference": "https://github.com/Gourieff/ComfyUI-ReActor",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/Gourieff/ComfyUI-ReActor"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "The Fast and Simple Face Swap Extension Node for ComfyUI, based on ReActor SD-WebUI Face Swap Extension"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author" : "strand1",
|
|
||||||
"title": "ComfyUI-Autogen",
|
|
||||||
"reference": "https://github.com/strand1/ComfyUI-Autogen",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/strand1/ComfyUI-Autogen"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "A collection of nodes for using Autogen with ComfyUI\n[a/AutoGen](https://github.com/microsoft/AutoGen): assistant agents, group chats, code executor, etc."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "BoyuanJiang",
|
|
||||||
"title": "FitDiT[official] - High-fidelity Virtual Try-on",
|
|
||||||
"id": "fitdit",
|
|
||||||
"reference": "https://github.com/BoyuanJiang/FitDiT/tree/FitDiT-ComfyUI",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/BoyuanJiang/FitDiT-ComfyUI"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "FitDiT is designed for high-fidelity virtual try-on using Diffusion Transformers (DiT)."
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"author": "ryanontheinside",
|
|
||||||
"title": "ComfyUI_ProfilerX",
|
|
||||||
"reference": "https://github.com/ryanontheinside/ComfyUI_ProfilerX",
|
|
||||||
"files": [
|
|
||||||
"https://github.com/ryanontheinside/ComfyUI_ProfilerX"
|
|
||||||
],
|
|
||||||
"install_type": "git-clone",
|
|
||||||
"description": "Node and workflow profiling. Find bottlenecks in your workflows. See trends over time."
|
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -493,6 +493,7 @@
|
|||||||
"https://github.com/852wa/ComfyUI-ColorshiftColor": [
|
"https://github.com/852wa/ComfyUI-ColorshiftColor": [
|
||||||
[
|
[
|
||||||
"ColorshiftColor",
|
"ColorshiftColor",
|
||||||
|
"CsCFill",
|
||||||
"CsCPaletteEditor"
|
"CsCPaletteEditor"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -1427,6 +1428,18 @@
|
|||||||
"title_aux": "Jovi_GLSL"
|
"title_aux": "Jovi_GLSL"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Amorano/Jovi_MIDI": [
|
||||||
|
[
|
||||||
|
"MIDI FILTER (JOV_MIDI)",
|
||||||
|
"MIDI FILTER EZ (JOV_MIDI)",
|
||||||
|
"MIDI LOADER (JOV_MIDI)",
|
||||||
|
"MIDI MESSAGE (JOV_MIDI)",
|
||||||
|
"MIDI READER (JOV_MIDI)"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Jovi_MIDI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Amorano/Jovi_Measure": [
|
"https://github.com/Amorano/Jovi_Measure": [
|
||||||
[
|
[
|
||||||
"BLUR EFFECT (JOV_MEASURE)",
|
"BLUR EFFECT (JOV_MEASURE)",
|
||||||
@@ -2164,7 +2177,11 @@
|
|||||||
"BriaEraser",
|
"BriaEraser",
|
||||||
"BriaGenFill",
|
"BriaGenFill",
|
||||||
"BriaTailoredGen",
|
"BriaTailoredGen",
|
||||||
|
"ImageExpansionNode",
|
||||||
"ReimagineNode",
|
"ReimagineNode",
|
||||||
|
"RemoveForegroundNode",
|
||||||
|
"ReplaceBgNode",
|
||||||
|
"RmbgNode",
|
||||||
"ShotByImageNode",
|
"ShotByImageNode",
|
||||||
"ShotByTextNode",
|
"ShotByTextNode",
|
||||||
"TailoredModelInfoNode",
|
"TailoredModelInfoNode",
|
||||||
@@ -2375,7 +2392,9 @@
|
|||||||
"ClownsharKSamplerAutomation",
|
"ClownsharKSamplerAutomation",
|
||||||
"ClownsharKSamplerAutomation_Beta",
|
"ClownsharKSamplerAutomation_Beta",
|
||||||
"ClownsharKSamplerGuide",
|
"ClownsharKSamplerGuide",
|
||||||
|
"ClownsharKSamplerGuide_Beta",
|
||||||
"ClownsharKSamplerGuides",
|
"ClownsharKSamplerGuides",
|
||||||
|
"ClownsharKSamplerGuides_Beta",
|
||||||
"ClownsharKSamplerOptions",
|
"ClownsharKSamplerOptions",
|
||||||
"ClownsharKSamplerOptions_SDE_Noise",
|
"ClownsharKSamplerOptions_SDE_Noise",
|
||||||
"ClownsharkSamplerOptions_FrameWeights",
|
"ClownsharkSamplerOptions_FrameWeights",
|
||||||
@@ -2812,11 +2831,17 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/DesertPixelAi/ComfyUI-Desert-Pixel-Nodes": [
|
"https://github.com/DesertPixelAi/ComfyUI-Desert-Pixel-Nodes": [
|
||||||
[
|
[
|
||||||
"DP 10 String Switch",
|
"DP 10 Images Switch Or Batch",
|
||||||
|
"DP 10 String Switch Or Connect",
|
||||||
"DP 2 String Switch",
|
"DP 2 String Switch",
|
||||||
|
"DP 3 Images Switch Or Batch",
|
||||||
|
"DP 3 String Switch Or Connect",
|
||||||
"DP 5 Find And Replace",
|
"DP 5 Find And Replace",
|
||||||
"DP 5 String Switch",
|
"DP 5 Images Switch Or Batch",
|
||||||
|
"DP 5 String Switch Or Connect",
|
||||||
|
"DP Add Background To Png",
|
||||||
"DP Add Weight To String Sdxl",
|
"DP Add Weight To String Sdxl",
|
||||||
|
"DP Advanced Sampler",
|
||||||
"DP Advanced Weight String Sdxl",
|
"DP Advanced Weight String Sdxl",
|
||||||
"DP Animation Calculator 10 Inputs",
|
"DP Animation Calculator 10 Inputs",
|
||||||
"DP Animation Calculator 5 Inputs",
|
"DP Animation Calculator 5 Inputs",
|
||||||
@@ -2826,8 +2851,7 @@
|
|||||||
"DP Broken Token",
|
"DP Broken Token",
|
||||||
"DP Clean Prompt",
|
"DP Clean Prompt",
|
||||||
"DP Clean Prompt Travel",
|
"DP Clean Prompt Travel",
|
||||||
"DP Combo Controller",
|
"DP Condition Switch",
|
||||||
"DP Condition Mixer",
|
|
||||||
"DP ControlNet Apply Advanced",
|
"DP ControlNet Apply Advanced",
|
||||||
"DP Crazy Prompt Mixer",
|
"DP Crazy Prompt Mixer",
|
||||||
"DP Create Json File",
|
"DP Create Json File",
|
||||||
@@ -2839,6 +2863,7 @@
|
|||||||
"DP Fast Slow Motion",
|
"DP Fast Slow Motion",
|
||||||
"DP Five Lora",
|
"DP Five Lora",
|
||||||
"DP Five Lora Random",
|
"DP Five Lora Random",
|
||||||
|
"DP Float Stepper",
|
||||||
"DP Image And String Pairs Switch",
|
"DP Image And String Pairs Switch",
|
||||||
"DP Image Color Analyzer",
|
"DP Image Color Analyzer",
|
||||||
"DP Image Color Analyzer Small",
|
"DP Image Color Analyzer Small",
|
||||||
@@ -2849,12 +2874,10 @@
|
|||||||
"DP Image Empty Latent Switch SDXL",
|
"DP Image Empty Latent Switch SDXL",
|
||||||
"DP Image Slide Show",
|
"DP Image Slide Show",
|
||||||
"DP Image Strip",
|
"DP Image Strip",
|
||||||
"DP Image Switch 10",
|
|
||||||
"DP Image Switch 3",
|
|
||||||
"DP Image Switch 5",
|
|
||||||
"DP Int 0-1000",
|
"DP Int 0-1000",
|
||||||
"DP Int 0-1000 4 Step",
|
"DP Int 0-1000 4 Step",
|
||||||
"DP Int 0-1000 8 Step",
|
"DP Int 0-1000 8 Step",
|
||||||
|
"DP Latent Split",
|
||||||
"DP Line Cycler",
|
"DP Line Cycler",
|
||||||
"DP Load Checkpoint With Info",
|
"DP Load Checkpoint With Info",
|
||||||
"DP Load Controlnet Model With Name",
|
"DP Load Controlnet Model With Name",
|
||||||
@@ -2864,13 +2887,10 @@
|
|||||||
"DP Load Image Minimal",
|
"DP Load Image Minimal",
|
||||||
"DP Load UNET With Info",
|
"DP Load UNET With Info",
|
||||||
"DP Logo Animator",
|
"DP Logo Animator",
|
||||||
"DP Logo Animator Advanced",
|
|
||||||
"DP Lora Random Strength Controller",
|
"DP Lora Random Strength Controller",
|
||||||
"DP Lora Strength Controller",
|
"DP Lora Strength Controller",
|
||||||
"DP Lora Strength Stepper",
|
|
||||||
"DP Mask Settings",
|
"DP Mask Settings",
|
||||||
"DP Prompt Inverter",
|
"DP Prompt Inverter",
|
||||||
"DP Prompt Manager",
|
|
||||||
"DP Prompt Manager Small",
|
"DP Prompt Manager Small",
|
||||||
"DP Prompt Mode Controller",
|
"DP Prompt Mode Controller",
|
||||||
"DP Prompt Styler",
|
"DP Prompt Styler",
|
||||||
@@ -2888,9 +2908,7 @@
|
|||||||
"DP Save Preview Image",
|
"DP Save Preview Image",
|
||||||
"DP Set New Model Folder Link",
|
"DP Set New Model Folder Link",
|
||||||
"DP String Text",
|
"DP String Text",
|
||||||
"DP String Text With Weight",
|
"DP String Text With Sdxl Weight",
|
||||||
"DP String With Switch",
|
|
||||||
"DP Strings Connector",
|
|
||||||
"DP Strip Edge Masks",
|
"DP Strip Edge Masks",
|
||||||
"DP Switch Controller",
|
"DP Switch Controller",
|
||||||
"DP Text Preview",
|
"DP Text Preview",
|
||||||
@@ -2901,10 +2919,8 @@
|
|||||||
"DP Video Looper",
|
"DP Video Looper",
|
||||||
"DP Video Transition",
|
"DP Video Transition",
|
||||||
"DP_Crazy_Prompt_Mixer",
|
"DP_Crazy_Prompt_Mixer",
|
||||||
"DP_Logo_Animator_Advanced",
|
"DP_Float_Stepper",
|
||||||
"DP_Lora_Strength_Stepper",
|
"DP_Prompt_Inverter"
|
||||||
"DP_Prompt_Inverter",
|
|
||||||
"DP_Strings_Connector"
|
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-Desert-Pixel-Nodes"
|
"title_aux": "ComfyUI-Desert-Pixel-Nodes"
|
||||||
@@ -2986,6 +3002,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
"https://github.com/DraconicDragon/ComfyUI-Venice-API": [
|
||||||
[
|
[
|
||||||
|
"CharCountTextBox",
|
||||||
"FluxPro11_TOGETHER",
|
"FluxPro11_TOGETHER",
|
||||||
"FluxPro_TOGETHER",
|
"FluxPro_TOGETHER",
|
||||||
"GenerateImage_VENICE",
|
"GenerateImage_VENICE",
|
||||||
@@ -3854,6 +3871,19 @@
|
|||||||
"title_aux": "ComfyUI-SD3-Powerlab"
|
"title_aux": "ComfyUI-SD3-Powerlab"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/GHOSTLXH/ComfyUI-Counternodes": [
|
||||||
|
[
|
||||||
|
"AlternatingOutput",
|
||||||
|
"AlternatingOutputB",
|
||||||
|
"ImageCounter",
|
||||||
|
"IntervalCounter",
|
||||||
|
"IntervalCounterB",
|
||||||
|
"LoadPromptFromTXT"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-Counternodes"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
|
"https://github.com/GMapeSplat/ComfyUI_ezXY": [
|
||||||
[
|
[
|
||||||
"ConcatenateString",
|
"ConcatenateString",
|
||||||
@@ -4694,8 +4724,11 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/JTriggerFish/ComfyLatentTools": [
|
"https://github.com/JTriggerFish/ComfyLatentTools": [
|
||||||
[
|
[
|
||||||
|
"DownsampledAttentionGuidance",
|
||||||
|
"DownsampledLatentGuidance",
|
||||||
"LatentNormalizedLanczosResize",
|
"LatentNormalizedLanczosResize",
|
||||||
"RescaledPAG"
|
"RescaledPAG",
|
||||||
|
"RescaledSEG"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Comfy Latent Tools"
|
"title_aux": "Comfy Latent Tools"
|
||||||
@@ -4997,6 +5030,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 Line From Text File",
|
"Simple Load Line From Text File",
|
||||||
"Simple Lora Loader"
|
"Simple Lora Loader"
|
||||||
],
|
],
|
||||||
@@ -5024,6 +5058,14 @@
|
|||||||
"title_aux": "AudioDriven-Latent-Space-Tools-for-ComfyUI"
|
"title_aux": "AudioDriven-Latent-Space-Tools-for-ComfyUI"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/Kayarte/GeoNodes/raw/refs/heads/main/GISDetectionNode.py": [
|
||||||
|
[
|
||||||
|
"GISDetectionNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "GeoNodes"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/Kesin11/ComfyUI-list-filter": [
|
"https://github.com/Kesin11/ComfyUI-list-filter": [
|
||||||
[
|
[
|
||||||
"list_filter_FilterImageListByIndexList",
|
"list_filter_FilterImageListByIndexList",
|
||||||
@@ -5166,6 +5208,7 @@
|
|||||||
"ADE_AdjustWeightIndivAttnAdd",
|
"ADE_AdjustWeightIndivAttnAdd",
|
||||||
"ADE_AdjustWeightIndivAttnMult",
|
"ADE_AdjustWeightIndivAttnMult",
|
||||||
"ADE_AdjustWeightIndivMult",
|
"ADE_AdjustWeightIndivMult",
|
||||||
|
"ADE_AncestralOptions",
|
||||||
"ADE_AnimateDiffCombine",
|
"ADE_AnimateDiffCombine",
|
||||||
"ADE_AnimateDiffKeyframe",
|
"ADE_AnimateDiffKeyframe",
|
||||||
"ADE_AnimateDiffLoRALoader",
|
"ADE_AnimateDiffLoRALoader",
|
||||||
@@ -5960,7 +6003,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/Mattabyte/ComfyUI-SecureApiCall": [
|
"https://github.com/Mattabyte/ComfyUI-SecureApiCall": [
|
||||||
[
|
[
|
||||||
"SecureAPI-SecureAPI"
|
"SecureAPI-SecureAPI",
|
||||||
|
"SecureAPI-SecureAPI-AWS"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI Secure API Call"
|
"title_aux": "ComfyUI Secure API Call"
|
||||||
@@ -6292,6 +6336,7 @@
|
|||||||
"DJZDatamoshV2",
|
"DJZDatamoshV2",
|
||||||
"DatasetWordcloud",
|
"DatasetWordcloud",
|
||||||
"DeadPixelEffect",
|
"DeadPixelEffect",
|
||||||
|
"DepthBasedPixelization",
|
||||||
"DinskyPlus",
|
"DinskyPlus",
|
||||||
"DinskyPlusV2",
|
"DinskyPlusV2",
|
||||||
"DjzDatabendingV1",
|
"DjzDatabendingV1",
|
||||||
@@ -6340,11 +6385,13 @@
|
|||||||
"RetroVideoText",
|
"RetroVideoText",
|
||||||
"ScreensaverGenerator",
|
"ScreensaverGenerator",
|
||||||
"ScreensaverGeneratorV2",
|
"ScreensaverGeneratorV2",
|
||||||
|
"ScreensaverGeneratorV3",
|
||||||
"SequentialNumberGenerator",
|
"SequentialNumberGenerator",
|
||||||
"StringChaos",
|
"StringChaos",
|
||||||
"StringWeights",
|
"StringWeights",
|
||||||
"Technicolor3Strip_v1",
|
"Technicolor3Strip_v1",
|
||||||
"Technicolor3Strip_v2",
|
"Technicolor3Strip_v2",
|
||||||
|
"ThinkSeeker",
|
||||||
"ThreeToneStyler",
|
"ThreeToneStyler",
|
||||||
"TrianglesPlus",
|
"TrianglesPlus",
|
||||||
"TrianglesPlusV2",
|
"TrianglesPlusV2",
|
||||||
@@ -6365,6 +6412,7 @@
|
|||||||
"VideoMazeV1",
|
"VideoMazeV1",
|
||||||
"VideoMazeV2",
|
"VideoMazeV2",
|
||||||
"VideoNoiseFactory",
|
"VideoNoiseFactory",
|
||||||
|
"VideoPyramidV1",
|
||||||
"VideoRingPainter",
|
"VideoRingPainter",
|
||||||
"VideoTemperatureV1",
|
"VideoTemperatureV1",
|
||||||
"VideoTimecode",
|
"VideoTimecode",
|
||||||
@@ -6399,10 +6447,13 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/MzMaXaM/ComfyUi-MzMaXaM": [
|
"https://github.com/MzMaXaM/ComfyUi-MzMaXaM": [
|
||||||
[
|
[
|
||||||
|
"ImageToText",
|
||||||
"KSamplerWithVAE",
|
"KSamplerWithVAE",
|
||||||
"SelectLatentSize1MP",
|
"SelectLatentSize1MP",
|
||||||
"SelectLatentSize2MP",
|
"SelectLatentSize2MP",
|
||||||
"TextEncode3in1",
|
"TextEncode3in1",
|
||||||
|
"TextToText",
|
||||||
|
"UpscaleImageBy1_5x",
|
||||||
"UpscaleLatentBy1_5x"
|
"UpscaleLatentBy1_5x"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -7026,6 +7077,14 @@
|
|||||||
"title_aux": "ComfyUI-StringsAndThings"
|
"title_aux": "ComfyUI-StringsAndThings"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ProGamerGov/ComfyUI_preview360panorama": [
|
||||||
|
[
|
||||||
|
"PanoramaViewerNode"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "Preview 360 Panorama for ComfyUI"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert": [
|
"https://github.com/ProGamerGov/ComfyUI_pytorch360convert": [
|
||||||
[
|
[
|
||||||
"Crop Image with Coords",
|
"Crop Image with Coords",
|
||||||
@@ -7316,6 +7375,7 @@
|
|||||||
"AspectRatioAdvanced",
|
"AspectRatioAdvanced",
|
||||||
"DisplayEverything",
|
"DisplayEverything",
|
||||||
"ImageComparer",
|
"ImageComparer",
|
||||||
|
"LensFlare",
|
||||||
"MultiFloat",
|
"MultiFloat",
|
||||||
"MultiTextNode",
|
"MultiTextNode",
|
||||||
"SKB_AnySwitch",
|
"SKB_AnySwitch",
|
||||||
@@ -7906,7 +7966,8 @@
|
|||||||
"FreeMemoryCLIP",
|
"FreeMemoryCLIP",
|
||||||
"FreeMemoryImage",
|
"FreeMemoryImage",
|
||||||
"FreeMemoryLatent",
|
"FreeMemoryLatent",
|
||||||
"FreeMemoryModel"
|
"FreeMemoryModel",
|
||||||
|
"FreeMemoryString"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-FreeMemory"
|
"title_aux": "ComfyUI-FreeMemory"
|
||||||
@@ -7948,6 +8009,15 @@
|
|||||||
"title_aux": "ComfyUI-ImageMotionGuider"
|
"title_aux": "ComfyUI-ImageMotionGuider"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ShmuelRonen/ComfyUI-Janus_pro_vision": [
|
||||||
|
[
|
||||||
|
"UnifiedVisionAnalyzer",
|
||||||
|
"VisionModelLoader"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI Janus Pro Vision"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper": [
|
"https://github.com/ShmuelRonen/ComfyUI-LatentSyncWrapper": [
|
||||||
[
|
[
|
||||||
"D_LatentSyncNode",
|
"D_LatentSyncNode",
|
||||||
@@ -8405,9 +8475,11 @@
|
|||||||
"SD35StartSettings",
|
"SD35StartSettings",
|
||||||
"SDXLStartSettings",
|
"SDXLStartSettings",
|
||||||
"SDstarsampler",
|
"SDstarsampler",
|
||||||
|
"Star Face Loader",
|
||||||
"StarFiveWildcards",
|
"StarFiveWildcards",
|
||||||
"StarImageSwitch",
|
"StarImageSwitch",
|
||||||
"StarTextFilter",
|
"StarTextFilter",
|
||||||
|
"StarTextInput",
|
||||||
"Starupscale"
|
"Starupscale"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -8949,6 +9021,7 @@
|
|||||||
"tri3d-skin-feathered-padded-mask",
|
"tri3d-skin-feathered-padded-mask",
|
||||||
"tri3d-swap-pixels",
|
"tri3d-swap-pixels",
|
||||||
"tri3d_H_Stack_Images",
|
"tri3d_H_Stack_Images",
|
||||||
|
"tri3d_Image_extend",
|
||||||
"tri3d_NSFWFilter",
|
"tri3d_NSFWFilter",
|
||||||
"tri3d_SaveImage_absolute",
|
"tri3d_SaveImage_absolute",
|
||||||
"tri3d_SaveText_absolute",
|
"tri3d_SaveText_absolute",
|
||||||
@@ -9462,6 +9535,7 @@
|
|||||||
"VrchAudioGenresNode",
|
"VrchAudioGenresNode",
|
||||||
"VrchAudioRecorderNode",
|
"VrchAudioRecorderNode",
|
||||||
"VrchAudioSaverNode",
|
"VrchAudioSaverNode",
|
||||||
|
"VrchAudioWebViewerNode",
|
||||||
"VrchBooleanKeyControlNode",
|
"VrchBooleanKeyControlNode",
|
||||||
"VrchChannelOSCControlNode",
|
"VrchChannelOSCControlNode",
|
||||||
"VrchChannelX4OSCControlNode",
|
"VrchChannelX4OSCControlNode",
|
||||||
@@ -10177,6 +10251,16 @@
|
|||||||
"title_aux": "ComfyUI-BRIA_AI-RMBG"
|
"title_aux": "ComfyUI-BRIA_AI-RMBG"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DeepSeek-JanusPro": [
|
||||||
|
[
|
||||||
|
"Janus_ImageGeneration",
|
||||||
|
"Janus_ModelLoader",
|
||||||
|
"Janus_MultimodalUnderstanding"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DeepSeek-JanusPro"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM": [
|
"https://github.com/ZHO-ZHO-ZHO/ComfyUI-DepthFM": [
|
||||||
[
|
[
|
||||||
"DepthFM_Literative_Zho",
|
"DepthFM_Literative_Zho",
|
||||||
@@ -10588,6 +10672,18 @@
|
|||||||
"title_aux": "ComfyUI-styles-all"
|
"title_aux": "ComfyUI-styles-all"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/agilly1989/ComfyUI_agilly1989_motorway": [
|
||||||
|
[
|
||||||
|
"MotorwayFloat",
|
||||||
|
"MotorwayInt",
|
||||||
|
"MotorwaySeed",
|
||||||
|
"MotorwayStr",
|
||||||
|
"MotorwayStrMulti"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_agilly1989_motorway"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/ahernandezmiro/ComfyUI-GCP_Storage_tools": [
|
"https://github.com/ahernandezmiro/ComfyUI-GCP_Storage_tools": [
|
||||||
[
|
[
|
||||||
"GCPReadImageNode",
|
"GCPReadImageNode",
|
||||||
@@ -10663,8 +10759,17 @@
|
|||||||
"title_aux": "Comfy UI FatLabels"
|
"title_aux": "Comfy UI FatLabels"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/aiartvn/A2V_Multi_Image_Composite": [
|
||||||
|
[
|
||||||
|
"A2V_Multi_Image_Composite"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "A2V Multi Image Composite"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
"https://github.com/aidec/Comfyui_TextBatch_aidec": [
|
||||||
[
|
[
|
||||||
|
"ImageQueueProcessor",
|
||||||
"TextBatch",
|
"TextBatch",
|
||||||
"TextQueueProcessor",
|
"TextQueueProcessor",
|
||||||
"TextSplitCounter"
|
"TextSplitCounter"
|
||||||
@@ -11301,8 +11406,10 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/asagi4/comfyui-utility-nodes": [
|
"https://github.com/asagi4/comfyui-utility-nodes": [
|
||||||
[
|
[
|
||||||
|
"MUConditioningCutoff",
|
||||||
"MUForceCacheClear",
|
"MUForceCacheClear",
|
||||||
"MUJinjaRender",
|
"MUJinjaRender",
|
||||||
|
"MURemoveControlNet",
|
||||||
"MUReplaceModelWeights",
|
"MUReplaceModelWeights",
|
||||||
"MUSimpleWildcard"
|
"MUSimpleWildcard"
|
||||||
],
|
],
|
||||||
@@ -11314,6 +11421,7 @@
|
|||||||
[
|
[
|
||||||
"TryOffFluxFillModelNode",
|
"TryOffFluxFillModelNode",
|
||||||
"TryOffModelNode",
|
"TryOffModelNode",
|
||||||
|
"TryOffQuantizerNode",
|
||||||
"TryOffRunNode"
|
"TryOffRunNode"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -11631,6 +11739,7 @@
|
|||||||
"Range Float",
|
"Range Float",
|
||||||
"Range Integer",
|
"Range Integer",
|
||||||
"Ratio Advanced",
|
"Ratio Advanced",
|
||||||
|
"RemoveTextBetween",
|
||||||
"Resize Image for SDXL",
|
"Resize Image for SDXL",
|
||||||
"SD3TextConditioningWithOptionsOnePrompt",
|
"SD3TextConditioningWithOptionsOnePrompt",
|
||||||
"SRFloatPromptInput",
|
"SRFloatPromptInput",
|
||||||
@@ -11818,18 +11927,22 @@
|
|||||||
"SamplerSonarEuler",
|
"SamplerSonarEuler",
|
||||||
"SamplerSonarEulerA",
|
"SamplerSonarEulerA",
|
||||||
"SonarAdvanced1fNoise",
|
"SonarAdvanced1fNoise",
|
||||||
|
"SonarAdvancedDistroNoise",
|
||||||
"SonarAdvancedPowerLawNoise",
|
"SonarAdvancedPowerLawNoise",
|
||||||
"SonarAdvancedPyramidNoise",
|
"SonarAdvancedPyramidNoise",
|
||||||
"SonarBlendedNoise",
|
"SonarBlendedNoise",
|
||||||
"SonarChannelNoise",
|
"SonarChannelNoise",
|
||||||
"SonarCompositeNoise",
|
"SonarCompositeNoise",
|
||||||
"SonarCustomNoise",
|
"SonarCustomNoise",
|
||||||
|
"SonarCustomNoiseAdv",
|
||||||
"SonarGuidanceConfig",
|
"SonarGuidanceConfig",
|
||||||
"SonarGuidedNoise",
|
"SonarGuidedNoise",
|
||||||
"SonarModulatedNoise",
|
"SonarModulatedNoise",
|
||||||
"SonarRandomNoise",
|
"SonarRandomNoise",
|
||||||
"SonarRepeatedNoise",
|
"SonarRepeatedNoise",
|
||||||
"SonarScheduledNoise"
|
"SonarResizedNoise",
|
||||||
|
"SonarScheduledNoise",
|
||||||
|
"SonarWaveletFilteredNoise"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-sonar"
|
"title_aux": "ComfyUI-sonar"
|
||||||
@@ -12150,9 +12263,13 @@
|
|||||||
"Input: Integer (lab)",
|
"Input: Integer (lab)",
|
||||||
"Input: Multiline (lab)",
|
"Input: Multiline (lab)",
|
||||||
"Input: String (lab)",
|
"Input: String (lab)",
|
||||||
|
"List: Checkpoints (lab)",
|
||||||
"List: Limit (lab)",
|
"List: Limit (lab)",
|
||||||
|
"List: LoRAs (lab)",
|
||||||
"List: Merge (lab)",
|
"List: Merge (lab)",
|
||||||
"List: Random Seeds (lab)",
|
"List: Random Seeds (lab)",
|
||||||
|
"List: Samplers (lab)",
|
||||||
|
"List: Schedulers (lab)",
|
||||||
"List: from Elements (lab)",
|
"List: from Elements (lab)",
|
||||||
"List: from File (backend) (lab)",
|
"List: from File (backend) (lab)",
|
||||||
"List: from Multiline (lab)",
|
"List: from Multiline (lab)",
|
||||||
@@ -12876,6 +12993,7 @@
|
|||||||
"chaosaiart_controlnet_weidgth",
|
"chaosaiart_controlnet_weidgth",
|
||||||
"chaosaiart_convert",
|
"chaosaiart_convert",
|
||||||
"chaosaiart_convert_Prompt",
|
"chaosaiart_convert_Prompt",
|
||||||
|
"chaosaiart_deepseek_fix",
|
||||||
"chaosaiart_forPreview",
|
"chaosaiart_forPreview",
|
||||||
"chaosaiart_image_loop",
|
"chaosaiart_image_loop",
|
||||||
"chaosaiart_img2gif",
|
"chaosaiart_img2gif",
|
||||||
@@ -12899,6 +13017,19 @@
|
|||||||
"title_aux": "Chaosaiart-Nodes"
|
"title_aux": "Chaosaiart-Nodes"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/checkbins/checkbin-comfy": [
|
||||||
|
[
|
||||||
|
"Checkbin Get Image Bin",
|
||||||
|
"Checkbin Get String Bin",
|
||||||
|
"Checkbin Save Image Bin",
|
||||||
|
"Checkbin Save String Bin",
|
||||||
|
"Checkbin Start Run",
|
||||||
|
"Checkbin Submit Bin"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "checkbin-comfy"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/chenbaiyujason/ComfyUI_StepFun": [
|
"https://github.com/chenbaiyujason/ComfyUI_StepFun": [
|
||||||
[
|
[
|
||||||
"CombineStrings",
|
"CombineStrings",
|
||||||
@@ -13816,6 +13947,7 @@
|
|||||||
"PolyexponentialScheduler",
|
"PolyexponentialScheduler",
|
||||||
"PorterDuffImageComposite",
|
"PorterDuffImageComposite",
|
||||||
"Preview3D",
|
"Preview3D",
|
||||||
|
"Preview3DAnimation",
|
||||||
"PreviewAudio",
|
"PreviewAudio",
|
||||||
"PreviewImage",
|
"PreviewImage",
|
||||||
"RandomNoise",
|
"RandomNoise",
|
||||||
@@ -15358,16 +15490,21 @@
|
|||||||
"RecoursePolar",
|
"RecoursePolar",
|
||||||
"RecourseStrings",
|
"RecourseStrings",
|
||||||
"SelInClip",
|
"SelInClip",
|
||||||
|
"SelInFloat",
|
||||||
"SelInGuider",
|
"SelInGuider",
|
||||||
|
"SelInInt",
|
||||||
"SelInLatent",
|
"SelInLatent",
|
||||||
"SelInModel",
|
"SelInModel",
|
||||||
"SelInPolar",
|
"SelInPolar",
|
||||||
|
"SelInSampler",
|
||||||
|
"SelInSigmas",
|
||||||
"SelInVae",
|
"SelInVae",
|
||||||
"SelOutCLIP",
|
"SelOutCLIP",
|
||||||
"SelOutModel",
|
"SelOutModel",
|
||||||
"SelOutPolar",
|
"SelOutPolar",
|
||||||
"Selector",
|
"Selector",
|
||||||
"Selector Advanced"
|
"Selector Advanced",
|
||||||
|
"Selector Hub"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"author": "\"\u02f6\ud835\udfa2\u292c\u2ad2\u2d56s\u143c\u02f6\"",
|
"author": "\"\u02f6\ud835\udfa2\u292c\u2ad2\u2d56s\u143c\u02f6\"",
|
||||||
@@ -15625,6 +15762,7 @@
|
|||||||
[
|
[
|
||||||
"FL_API_Base64_ImageLoader",
|
"FL_API_Base64_ImageLoader",
|
||||||
"FL_API_ImageSaver",
|
"FL_API_ImageSaver",
|
||||||
|
"FL_AnimeLineExtractor",
|
||||||
"FL_ApplyMask",
|
"FL_ApplyMask",
|
||||||
"FL_Ascii",
|
"FL_Ascii",
|
||||||
"FL_BatchAlign",
|
"FL_BatchAlign",
|
||||||
@@ -15641,6 +15779,7 @@
|
|||||||
"FL_GPT_Vision",
|
"FL_GPT_Vision",
|
||||||
"FL_Glitch",
|
"FL_Glitch",
|
||||||
"FL_GoogleDriveDownloader",
|
"FL_GoogleDriveDownloader",
|
||||||
|
"FL_GoogleDriveImageDownloader",
|
||||||
"FL_GradGenerator",
|
"FL_GradGenerator",
|
||||||
"FL_HFHubModelUploader",
|
"FL_HFHubModelUploader",
|
||||||
"FL_HF_Character",
|
"FL_HF_Character",
|
||||||
@@ -16259,6 +16398,14 @@
|
|||||||
"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"
|
||||||
@@ -16543,8 +16690,10 @@
|
|||||||
"Griptape Replace: Rulesets on Agent",
|
"Griptape Replace: Rulesets on Agent",
|
||||||
"Griptape Replace: Tools on Agent",
|
"Griptape Replace: Tools on Agent",
|
||||||
"Griptape Rerank Driver: Cohere",
|
"Griptape Rerank Driver: Cohere",
|
||||||
|
"Griptape Retrieve: Cloud Ruleset",
|
||||||
"Griptape Run: Agent",
|
"Griptape Run: Agent",
|
||||||
"Griptape Run: Audio Transcription",
|
"Griptape Run: Audio Transcription",
|
||||||
|
"Griptape Run: Cloud Assistant",
|
||||||
"Griptape Run: Image Description",
|
"Griptape Run: Image Description",
|
||||||
"Griptape Run: Parallel Image Description",
|
"Griptape Run: Parallel Image Description",
|
||||||
"Griptape Run: Prompt Task",
|
"Griptape Run: Prompt Task",
|
||||||
@@ -19211,6 +19360,7 @@
|
|||||||
"GetImageRangeFromBatch",
|
"GetImageRangeFromBatch",
|
||||||
"GetImageSizeAndCount",
|
"GetImageSizeAndCount",
|
||||||
"GetImagesFromBatchIndexed",
|
"GetImagesFromBatchIndexed",
|
||||||
|
"GetLatentRangeFromBatch",
|
||||||
"GetLatentsFromBatchIndexed",
|
"GetLatentsFromBatchIndexed",
|
||||||
"GetMaskSizeAndCount",
|
"GetMaskSizeAndCount",
|
||||||
"GradientToFloat",
|
"GradientToFloat",
|
||||||
@@ -19229,6 +19379,7 @@
|
|||||||
"ImageGridComposite2x2",
|
"ImageGridComposite2x2",
|
||||||
"ImageGridComposite3x3",
|
"ImageGridComposite3x3",
|
||||||
"ImageGridtoBatch",
|
"ImageGridtoBatch",
|
||||||
|
"ImageNoiseAugmentation",
|
||||||
"ImageNormalize_Neg1_To_1",
|
"ImageNormalize_Neg1_To_1",
|
||||||
"ImagePadForOutpaintMasked",
|
"ImagePadForOutpaintMasked",
|
||||||
"ImagePadForOutpaintTargetSize",
|
"ImagePadForOutpaintTargetSize",
|
||||||
@@ -19244,6 +19395,7 @@
|
|||||||
"Intrinsic_lora_sampling",
|
"Intrinsic_lora_sampling",
|
||||||
"JoinStringMulti",
|
"JoinStringMulti",
|
||||||
"JoinStrings",
|
"JoinStrings",
|
||||||
|
"LeapfusionHunyuanI2VPatcher",
|
||||||
"LoadAndResizeImage",
|
"LoadAndResizeImage",
|
||||||
"LoadImagesFromFolderKJ",
|
"LoadImagesFromFolderKJ",
|
||||||
"LoadResAdapterNormalization",
|
"LoadResAdapterNormalization",
|
||||||
@@ -19470,6 +19622,16 @@
|
|||||||
"title_aux": "ComfyUI-SUPIR"
|
"title_aux": "ComfyUI-SUPIR"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/kijai/ComfyUI-StableXWrapper": [
|
||||||
|
[
|
||||||
|
"DifferenceExtractorNode",
|
||||||
|
"DownloadAndLoadStableXModel",
|
||||||
|
"StableXProcessImage"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-StableXWrapper"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/kijai/ComfyUI-depth-fm": [
|
"https://github.com/kijai/ComfyUI-depth-fm": [
|
||||||
[
|
[
|
||||||
"Depth_fm"
|
"Depth_fm"
|
||||||
@@ -21709,7 +21871,6 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
"https://github.com/mfg637/ComfyUI-ScheduledGuider-Ext": [
|
||||||
[
|
[
|
||||||
"Add zSNR Sigma max",
|
|
||||||
"ConcatSigmas",
|
"ConcatSigmas",
|
||||||
"CosineScheduler",
|
"CosineScheduler",
|
||||||
"GaussianScheduler",
|
"GaussianScheduler",
|
||||||
@@ -21717,7 +21878,8 @@
|
|||||||
"LogNormal Scheduler",
|
"LogNormal Scheduler",
|
||||||
"OffsetSigmas",
|
"OffsetSigmas",
|
||||||
"PerpNegScheduledCFGGuider",
|
"PerpNegScheduledCFGGuider",
|
||||||
"ScheduledCFGGuider"
|
"ScheduledCFGGuider",
|
||||||
|
"SplitSigmasByValue"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
"title_aux": "ComfyUI-ScheduledGuider-Ext"
|
||||||
@@ -22411,6 +22573,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/nilor-corp/nilor-nodes": [
|
"https://github.com/nilor-corp/nilor-nodes": [
|
||||||
[
|
[
|
||||||
|
"Nilor Categorize String",
|
||||||
"Nilor Count Images In Directory",
|
"Nilor Count Images In Directory",
|
||||||
"Nilor Int To List Of Bools",
|
"Nilor Int To List Of Bools",
|
||||||
"Nilor Interpolated Float List",
|
"Nilor Interpolated Float List",
|
||||||
@@ -22468,6 +22631,15 @@
|
|||||||
"title_aux": "ComfyUI OpenAI Prompter"
|
"title_aux": "ComfyUI OpenAI Prompter"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/nkchocoai/ComfyUI-DanbooruPromptQuiz": [
|
||||||
|
[
|
||||||
|
"DanbooruPromptComparison",
|
||||||
|
"DanbooruPromptQuiz"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI-DanbooruPromptQuiz"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/nkchocoai/ComfyUI-Dart": [
|
"https://github.com/nkchocoai/ComfyUI-Dart": [
|
||||||
[
|
[
|
||||||
"DanbooruTagsTransformerBanTagsFromRegex",
|
"DanbooruTagsTransformerBanTagsFromRegex",
|
||||||
@@ -22573,6 +22745,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/nofunstudio/Node_Fun_ComfyUI": [
|
"https://github.com/nofunstudio/Node_Fun_ComfyUI": [
|
||||||
[
|
[
|
||||||
|
"IframeView",
|
||||||
"LayeredInfiniteZoom",
|
"LayeredInfiniteZoom",
|
||||||
"Replicate flux 1.1 pro ultra",
|
"Replicate flux 1.1 pro ultra",
|
||||||
"ReplicateAPI_flux_1_1_pro_ultra",
|
"ReplicateAPI_flux_1_1_pro_ultra",
|
||||||
@@ -23149,7 +23322,8 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/pollockjj/ComfyUI-MultiGPU": [
|
"https://github.com/pollockjj/ComfyUI-MultiGPU": [
|
||||||
[
|
[
|
||||||
"DeviceSelectorMultiGPU"
|
"DeviceSelectorMultiGPU",
|
||||||
|
"HunyuanVideoEmbeddingsAdapter"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-MultiGPU"
|
"title_aux": "ComfyUI-MultiGPU"
|
||||||
@@ -23681,6 +23855,15 @@
|
|||||||
"title_aux": "ComfyUI-Similarity-Score"
|
"title_aux": "ComfyUI-Similarity-Score"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
"https://github.com/risunobushi/ComfyUI_DisplacementMapTools": [
|
||||||
|
[
|
||||||
|
"DisplaceLogo",
|
||||||
|
"ExtractDisplacementMap"
|
||||||
|
],
|
||||||
|
{
|
||||||
|
"title_aux": "ComfyUI_DisplacementMapTools"
|
||||||
|
}
|
||||||
|
],
|
||||||
"https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": [
|
"https://github.com/risunobushi/comfyUI_FrequencySeparation_RGB-HSV": [
|
||||||
[
|
[
|
||||||
"FrequencyCombination",
|
"FrequencyCombination",
|
||||||
@@ -23941,7 +24124,7 @@
|
|||||||
"title_aux": "ComfyUI_ProfilerX"
|
"title_aux": "ComfyUI_ProfilerX"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"https://github.com/ryanontheinside/ComfyUI_RealTimeNodes": [
|
"https://github.com/ryanontheinside/ComfyUI_RealtimeNodes": [
|
||||||
[
|
[
|
||||||
"DTypeConverter",
|
"DTypeConverter",
|
||||||
"DeltaControl",
|
"DeltaControl",
|
||||||
@@ -23953,13 +24136,17 @@
|
|||||||
"IntSequence",
|
"IntSequence",
|
||||||
"IntegerMotionController",
|
"IntegerMotionController",
|
||||||
"IntervalControl",
|
"IntervalControl",
|
||||||
|
"LazyCondition",
|
||||||
|
"LoadImageFromPath_",
|
||||||
"MotionController",
|
"MotionController",
|
||||||
|
"MultilineText",
|
||||||
"QuickShapeMask",
|
"QuickShapeMask",
|
||||||
"ROINode",
|
"ROINode",
|
||||||
|
"SimilarityFilter",
|
||||||
"StringControl",
|
"StringControl",
|
||||||
"StringSequence",
|
"StringSequence",
|
||||||
"TAESDVaeDecode",
|
"TextRenderer",
|
||||||
"TAESDVaeEncode"
|
"YOLOSimilarityCompare"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "Nodes for use with real-time applications of ComfyUI"
|
"title_aux": "Nodes for use with real-time applications of ComfyUI"
|
||||||
@@ -24158,12 +24345,27 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/sakura1bgx/ComfyUI_FlipStreamViewer": [
|
"https://github.com/sakura1bgx/ComfyUI_FlipStreamViewer": [
|
||||||
[
|
[
|
||||||
"FlipStreamLoader",
|
"FlipStreamBatchPrompt",
|
||||||
"FlipStreamOption",
|
"FlipStreamFileSelect_AnimateDiffModel",
|
||||||
"FlipStreamPrompt",
|
"FlipStreamFileSelect_Checkpoints",
|
||||||
"FlipStreamSource",
|
"FlipStreamFileSelect_TensorRT",
|
||||||
"FlipStreamSwitchVFI",
|
"FlipStreamFileSelect_VAE",
|
||||||
"FlipStreamUpdate",
|
"FlipStreamFileSelect_VideoSrc",
|
||||||
|
"FlipStreamFilmVfi",
|
||||||
|
"FlipStreamGetParam",
|
||||||
|
"FlipStreamImageSize",
|
||||||
|
"FlipStreamInputBox",
|
||||||
|
"FlipStreamPreviewBox",
|
||||||
|
"FlipStreamSegMask",
|
||||||
|
"FlipStreamSelectBox_Samplers",
|
||||||
|
"FlipStreamSelectBox_Scheduler",
|
||||||
|
"FlipStreamSetParam",
|
||||||
|
"FlipStreamSlider",
|
||||||
|
"FlipStreamSwitchImage",
|
||||||
|
"FlipStreamSwitchLatent",
|
||||||
|
"FlipStreamTextBox",
|
||||||
|
"FlipStreamTextReplace",
|
||||||
|
"FlipStreamVideoInput",
|
||||||
"FlipStreamViewer"
|
"FlipStreamViewer"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
@@ -25231,9 +25433,12 @@
|
|||||||
[
|
[
|
||||||
"LoadEXR",
|
"LoadEXR",
|
||||||
"LoadEXRFrames",
|
"LoadEXRFrames",
|
||||||
|
"LoadImageAndPrompt",
|
||||||
"LoadLatentEXR",
|
"LoadLatentEXR",
|
||||||
"SaveEXR",
|
"SaveEXR",
|
||||||
"SaveEXRFrames",
|
"SaveEXRFrames",
|
||||||
|
"SaveImageAndPromptExact",
|
||||||
|
"SaveImageAndPromptIncremental",
|
||||||
"SaveLatentEXR",
|
"SaveLatentEXR",
|
||||||
"SaveTiff"
|
"SaveTiff"
|
||||||
],
|
],
|
||||||
@@ -26024,6 +26229,7 @@
|
|||||||
"quadmoonChangeBackground",
|
"quadmoonChangeBackground",
|
||||||
"quadmoonConvertBoolToString",
|
"quadmoonConvertBoolToString",
|
||||||
"quadmoonConvertFloatToString",
|
"quadmoonConvertFloatToString",
|
||||||
|
"quadmoonConvertImageToPrompt",
|
||||||
"quadmoonConvertIntToString",
|
"quadmoonConvertIntToString",
|
||||||
"quadmoonConvertNormalizeHW",
|
"quadmoonConvertNormalizeHW",
|
||||||
"quadmoonConvertNumberToString",
|
"quadmoonConvertNumberToString",
|
||||||
@@ -26667,7 +26873,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/willmiao/ComfyUI-Lora-Manager": [
|
"https://github.com/willmiao/ComfyUI-Lora-Manager": [
|
||||||
[
|
[
|
||||||
"LorasEndpoint"
|
"LoRAGateway"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
"title_aux": "ComfyUI-Lora-Manager"
|
"title_aux": "ComfyUI-Lora-Manager"
|
||||||
@@ -27000,6 +27206,7 @@
|
|||||||
],
|
],
|
||||||
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm": [
|
"https://github.com/xlinx/ComfyUI-decadetw-auto-prompt-llm": [
|
||||||
[
|
[
|
||||||
|
"Auto-LLM-Chat",
|
||||||
"Auto-LLM-Text",
|
"Auto-LLM-Text",
|
||||||
"Auto-LLM-Text-Vision",
|
"Auto-LLM-Text-Vision",
|
||||||
"Auto-LLM-Vision"
|
"Auto-LLM-Vision"
|
||||||
@@ -27210,6 +27417,7 @@
|
|||||||
[
|
[
|
||||||
"ImageAnalyzer",
|
"ImageAnalyzer",
|
||||||
"JanusChatAnalyzer",
|
"JanusChatAnalyzer",
|
||||||
|
"JanusImageGenerator",
|
||||||
"JanusProLoader"
|
"JanusProLoader"
|
||||||
],
|
],
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,13 +20,13 @@ import cm_global
|
|||||||
import manager_downloader
|
import manager_downloader
|
||||||
import folder_paths
|
import folder_paths
|
||||||
|
|
||||||
try:
|
import datetime
|
||||||
from datetime import datetime
|
if hasattr(datetime, 'datetime'):
|
||||||
def current_timestamp():
|
def current_timestamp():
|
||||||
return datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
|
return datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
|
||||||
except:
|
else:
|
||||||
|
# NOTE: Occurs in some Mac environments.
|
||||||
import time
|
import time
|
||||||
import datetime
|
|
||||||
logging.error(f"[ComfyUI-Manager] fallback timestamp mode\n datetime module is invalid: '{datetime.__file__}'")
|
logging.error(f"[ComfyUI-Manager] fallback timestamp mode\n datetime module is invalid: '{datetime.__file__}'")
|
||||||
def current_timestamp():
|
def current_timestamp():
|
||||||
return str(time.time()).split('.')[0]
|
return str(time.time()).split('.')[0]
|
||||||
|
|||||||
@@ -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.11"
|
version = "3.14"
|
||||||
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"]
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user